用于支持 BMW HSFZ(High Speed Fahrzeug Zugang — 高速车辆访问)的 ELM327 协议扩展。协议 E 可使用标准 ELM327 AT 接口,通过 Ethernet/TCP 执行 UDS 诊断。
测试仪 (ScanDoc) 车辆 (BMW) ┌──────────┐ TCP/IP ┌─────────────┐ CAN/LIN ┌─────┐ │ SA=F4 │───────────────│ BMW ZGW │───────────────│ ECU │ │ (测试仪) │ Ethernet │ (gateway) │ 内部总线 │(TA) │ └──────────┘ port 6801 └─────────────┘ └─────┘
HSFZ — BMW 用于通过 Ethernet 进行诊断的专有协议。与标准 DoIP(ISO 13400)不同,它使用自有的帧格式,含 6 字节帧头(4 字节长度 + 2 字节控制码)以及 1 字节寻址(而非 DoIP 的 2 字节寻址)。
使用前需配置三个参数:
| 参数 | 命令 | 作用 | 如何获取 |
|---|---|---|---|
| IP ECU/Gateway | AT HI |
TCP 连接目标地址 | AT HD(discovery)或手动设置 |
| Source Address | AT HS |
测试仪地址(1 字节) | 默认 F4,通常无需修改 |
| Target Address | AT HT |
目标 ECU 地址(1 字节) | 来自车辆文档 |
若未设置 HI(IP = 00000000),AT SP E 会自动执行 discovery(向端口 6811 发送 UDP broadcast),找到第一个 ECU 并根据其应答填充参数:
HI ← ECU/gateway 的 IP 地址(例如 A9FE0114 = 169.254.1.20)HT ← ECU 逻辑地址(例如 10 — 通常为 ZGW)HS ← 保持 F4(默认值)之后在端口 6801 上建立 TCP 连接 → 即可进行 UDS(与 DoIP 不同,无需 Routing Activation)。
| HSFZ(协议 'E') | DoIP(协议 'D') | |
|---|---|---|
| 标准 | BMW 专有 | ISO 13400 |
| 寻址 | 1 字节(00–FF) | 2 字节(0000–FFFF) |
| TCP 端口 | 6801 | 13400 |
| UDP 端口(discovery) | 6811 | 13400 |
| Routing Activation | 不需要 | 必需 |
| 帧头 | 6 字节(len[4] + ctrl[2]) | 8 字节(ver[1] + inv[1] + type[2] + len[4]) |
| 测试仪地址 | F4(1 字节) |
0E80(2 字节) |
AT SP E 会自动找到 ECU 并连接:
>ATZ ELM327 v2.3 >ATE0 OK >AT SP E # discovery → HI=A9FE0114, HT=10, HS=F4 OK # TCP 连接已建立 >22 F1 90 # UDS Read VIN — 请求发往 gateway (HT=10) 62 F1 90 57 42 41 50 48 35 43 35 35 42 41 31 32 33 34 35 36
例如发动机控制单元:
>ATZ ELM327 v2.3 >ATE0 OK >AT SP E # discovery + 连接到 gateway OK >22 F1 90 # 向 gateway 请求 VIN (HT=10) 62 F1 90 57 42 41 50 48 35 43 35 35 42 41 31 32 33 34 35 36 >AT HT 12 # 将 Target Address 切换到发动机控制单元 OK >22 F1 90 # 同一请求 — 此时将通过 gateway 发往 ECU 12 62 F1 90 ...
以 hex 格式(4 字节,big-endian)设置 ECU(gateway)的 IPv4 地址。
>AT HI A9FE0114 OK
示例:A9FE0114 = 169.254.1.20
默认值:00000000(未设置)。若在执行 AT SP E 时未设置 IP,将自动执行 Vehicle Discovery(向端口 6811 发送 UDP broadcast)。
以 hex 格式(1 字节)设置测试仪地址(Source Address,SA)。
>AT HS F4 OK
默认值:F4。通常无需修改。
以 hex 格式(1 字节)设置 ECU 地址(Target Address,TA)。
>AT HT 10 OK
默认值:00。
以 hex 格式设置 ECU 的 TCP 端口。须在 AT SP E 之前设置。默认 1A91(十进制 6801)— BMW HSFZ 的标准端口。仅当 ECU 使用非标准端口时才需修改。
>AT HC 1A91 OK
向端口 6811 执行 UDP broadcast Vehicle Discovery。输出所发现 ECU 的列表,含其 VIN、逻辑地址、IP 和 MAC 地址。
自动根据第一个找到的 ECU 填充 HI(IP)和 HT(Target Address)。
当 HI=0 时,AT SP E 会自行执行 discovery — 无需单独使用 AT HD。当需要在连接前查看网络中有哪些 ECU 时,AT HD 很有用。
>AT HD VIN:WBAPH5C55BA123456 ADDR:10 IP:A9FE0114 MAC:001A37B44210 OK
网络中存在多个 ECU:
>AT HD VIN:WBAPH5C55BA123456 ADDR:10 IP:A9FE0114 MAC:001A37B44210 VIN:WBAKF0C58CE123456 ADDR:20 IP:A9FE0115 MAC:001A37B44211 OK
若未找到 ECU:
>AT HD NO DATA
| 场景 | 序列 |
|---|---|
| 自动(gateway) | ATZ → AT SP E |
| gateway 后方的 ECU(IP 通过 discovery 获取) | ATZ → AT HD → AT HT xx → AT SP E |
| gateway 后方的 ECU(IP 已知) | ATZ → AT HI hhhhhhhh → AT HT xx → AT SP E |
无需 Routing Activation(与 DoIP 不同)。
若任一步骤出错,将返回 UNABLE TO CONNECT。
hex 数据作为 UDS payload 发送。ELM327 会自动将其封装进带 SA+TA 帧头(1 字节寻址)的 HSFZ Diagnostic Message 中。
>22F190 62 F1 90 57 42 41 50 48 35 43 35 35 42 41 31 32 33 34 35 36
仅 UDS payload,不含 SA/TA 帧头:
62 F1 90 57 42 41 ...
SA + TA(J2534 格式 4 字节)+ UDS payload:
10 00 F4 00 62 F1 90 57 42 41 ...
帧头格式:[TA_hi=0] [TA_lo] [SA_hi=0] [SA_lo] — 应答发送方地址(ECU → Tester)。高字节始终为 00,因为 HSFZ 使用 1 字节寻址。
HSFZ 已纳入协议自动搜索顺序(AT SP 0)。尝试 HSFZ 时:
AT D(defaults)和 AT Z(reset)命令会复位所有 HSFZ 参数:
HI → 00000000HS → F4HT → 00HC → 1A91(6801)