Quantex GmbH
您的地区:欧洲

ELM327 BMW HSFZ

概述

用于支持 BMW HSFZ(High Speed Fahrzeug Zugang — 高速车辆访问)的 ELM327 协议扩展。协议 E 可使用标准 ELM327 AT 接口,通过 Ethernet/TCP 执行 UDS 诊断。

HSFZ 工作原理

测试仪 (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 并根据其应答填充参数:

之后在端口 6801 上建立 TCP 连接 → 即可进行 UDS(与 DoIP 不同,无需 Routing Activation)。

与 DoIP(协议 'D')的区别

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 字节)

示例

向 gateway 发送请求

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

向 gateway 后方某个具体 ECU 发送请求

例如发动机控制单元:

>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 ...

HSFZ 的 AT 命令

HI hhhhhhhh — ECU 的 IP 地址

以 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)。

HS hh — 源地址(Source Address)

以 hex 格式(1 字节)设置测试仪地址(Source Address,SA)。

>AT HS F4
OK

默认值:F4。通常无需修改。

HT hh — 目标地址(Target Address)

以 hex 格式(1 字节)设置 ECU 地址(Target Address,TA)。

>AT HT 10
OK

默认值:00

HC hhhh — HSFZ 的 TCP 端口

以 hex 格式设置 ECU 的 TCP 端口。须在 AT SP E 之前设置。默认 1A91(十进制 6801)— BMW HSFZ 的标准端口。仅当 ECU 使用非标准端口时才需修改。

>AT HC 1A91
OK

HD — 发现 ECU(Vehicle Discovery)

向端口 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) ATZAT SP E
gateway 后方的 ECU(IP 通过 discovery 获取) ATZAT HDAT HT xxAT SP E
gateway 后方的 ECU(IP 已知) ATZAT HI hhhhhhhhAT HT xxAT SP E

执行 AT SP E 时发生的过程

  1. Disconnect — 断开当前协议
  2. Connect — 创建 HSFZ J2534 通道(HSFZ_PS = 0x8FFC)
  3. Discovery(若未设置 IP)— 向端口 6811 发送 UDP broadcast 以查找 ECU
  4. Set Config — 设置 IP、SA、TA、TCP 端口
  5. TCP Connect — 在端口 6801 上与 ECU 建立 TCP 连接

无需 Routing Activation(与 DoIP 不同)。

若任一步骤出错,将返回 UNABLE TO CONNECT


OBD 数据格式

发送

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

应答(H0 — headers off,默认)

仅 UDS payload,不含 SA/TA 帧头:

62 F1 90 57 42 41 ...

应答(H1 — headers on)

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 时:

  1. 创建临时 HSFZ 通道
  2. 执行 Vehicle Discovery(向端口 6811 发送 UDP broadcast,超时 2 秒)
  3. 若找到 ECU — 通过 TCP 连接
  4. 若连接成功 — 发送试探性 OBD 请求
  5. 若未找到 ECU 或无应答 — 转至下一个协议

参数复位

AT D(defaults)和 AT Z(reset)命令会复位所有 HSFZ 参数:


限制