Extensión del protocolo ELM327 que proporciona compatibilidad con BMW HSFZ (High Speed Fahrzeug Zugang — acceso de alta velocidad al vehículo). El protocolo E permite realizar diagnóstico UDS por Ethernet/TCP utilizando la interfaz AT estándar de ELM327.
Tester (ScanDoc) Vehículo (BMW) ┌──────────┐ TCP/IP ┌─────────────┐ CAN/LIN ┌─────┐ │ SA=F4 │───────────────│ BMW ZGW │───────────────│ ECU │ │ (tester) │ Ethernet │ (gateway) │ bus interno │(TA) │ └──────────┘ port 6801 └─────────────┘ └─────┘
HSFZ — protocolo propietario de BMW para el diagnóstico por Ethernet. A diferencia del DoIP estándar (ISO 13400), utiliza su propio formato de tramas con una cabecera de 6 bytes (4 bytes de longitud + 2 bytes de código de control) y un direccionamiento de 1 byte (en lugar de 2 bytes en DoIP).
Para funcionar es necesario configurar tres parámetros:
| Parámetro | Comando | Qué establece | Cómo averiguarlo |
|---|---|---|---|
| IP ECU/Gateway | AT HI |
Destino de la conexión TCP | AT HD (discovery) o establecer manualmente |
| Source Address | AT HS |
Dirección del tester (1 byte) | Por defecto F4, normalmente no es necesario cambiarla |
| Target Address | AT HT |
Dirección del ECU de destino (1 byte) | De la documentación del vehículo |
Si HI no está definido (IP = 00000000), AT SP E ejecuta automáticamente el discovery (UDP broadcast al puerto 6811), encuentra el primer ECU y rellena los parámetros a partir de su respuesta:
HI ← dirección IP del ECU/gateway (p. ej. A9FE0114 = 169.254.1.20)HT ← dirección lógica del ECU (p. ej. 10 — por lo general, el ZGW)HS ← se mantiene F4 (valor por defecto)A continuación se establece la conexión TCP al puerto 6801 → listo para UDS (Routing Activation no es necesario, a diferencia de DoIP).
| HSFZ (protocolo 'E') | DoIP (protocolo 'D') | |
|---|---|---|
| Estándar | Propietario de BMW | ISO 13400 |
| Direccionamiento | 1 byte (00–FF) | 2 bytes (0000–FFFF) |
| Puerto TCP | 6801 | 13400 |
| Puerto UDP (discovery) | 6811 | 13400 |
| Routing Activation | No necesario | Obligatorio |
| Cabecera de trama | 6 bytes (len[4] + ctrl[2]) | 8 bytes (ver[1] + inv[1] + type[2] + len[4]) |
| Dirección del tester | F4 (1 byte) |
0E80 (2 bytes) |
AT SP E encuentra el ECU y se conecta por sí mismo:
>ATZ ELM327 v2.3 >ATE0 OK >AT SP E # discovery → HI=A9FE0114, HT=10, HS=F4 OK # conexión TCP establecida >22 F1 90 # UDS Read VIN — la consulta irá al gateway (HT=10) 62 F1 90 57 42 41 50 48 35 43 35 35 42 41 31 32 33 34 35 36
Por ejemplo, la centralita del motor:
>ATZ ELM327 v2.3 >ATE0 OK >AT SP E # discovery + conexión con el gateway OK >22 F1 90 # consulta VIN al gateway (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 # cambiar Target Address a la centralita del motor OK >22 F1 90 # la misma consulta — ahora irá al ECU 12 a través del gateway 62 F1 90 ...
Establece la dirección IPv4 del ECU (gateway) en formato hex (4 bytes, big-endian).
>AT HI A9FE0114 OK
Ejemplo: A9FE0114 = 169.254.1.20
Valor por defecto: 00000000 (no definido). Si la IP no está definida al ejecutar AT SP E, se realiza un Vehicle Discovery automático (UDP broadcast al puerto 6811).
Establece la dirección del tester (Source Address, SA) en formato hex (1 byte).
>AT HS F4 OK
Valor por defecto: F4. Normalmente no es necesario cambiarla.
Establece la dirección del ECU (Target Address, TA) en formato hex (1 byte).
>AT HT 10 OK
Valor por defecto: 00.
Establece el puerto TCP del ECU en formato hex. Se define antes de AT SP E. Por defecto 1A91 (6801 decimal) — puerto estándar de BMW HSFZ. Solo es necesario cambiarlo si el ECU usa un puerto no estándar.
>AT HC 1A91 OK
Ejecuta un UDP broadcast Vehicle Discovery al puerto 6811. Muestra la lista de ECU encontrados junto con su VIN, dirección lógica, IP y dirección MAC.
Rellena automáticamente HI (IP) y HT (Target Address) a partir del primer ECU encontrado.
AT SP E con HI=0 realiza el discovery por sí mismo — un AT HD aparte no es necesario. AT HD es útil cuando se necesita ver qué ECU hay en la red antes de conectar.
>AT HD VIN:WBAPH5C55BA123456 ADDR:10 IP:A9FE0114 MAC:001A37B44210 OK
Varios ECU en la red:
>AT HD VIN:WBAPH5C55BA123456 ADDR:10 IP:A9FE0114 MAC:001A37B44210 VIN:WBAKF0C58CE123456 ADDR:20 IP:A9FE0115 MAC:001A37B44211 OK
Si no se encuentra ningún ECU:
>AT HD NO DATA
| Escenario | Secuencia |
|---|---|
| Automático (gateway) | ATZ → AT SP E |
| ECU detrás del gateway (IP por discovery) | ATZ → AT HD → AT HT xx → AT SP E |
| ECU detrás del gateway (IP conocida) | ATZ → AT HI hhhhhhhh → AT HT xx → AT SP E |
Routing Activation no es necesario (a diferencia de DoIP).
Si se produce un error en cualquiera de los pasos, se devuelve UNABLE TO CONNECT.
Los datos hex se envían como UDS payload. ELM327 los encapsula automáticamente en un HSFZ Diagnostic Message con cabecera SA+TA (direccionamiento de 1 byte).
>22F190 62 F1 90 57 42 41 50 48 35 43 35 35 42 41 31 32 33 34 35 36
Solo UDS payload, sin cabecera SA/TA:
62 F1 90 57 42 41 ...
SA + TA (4 bytes en formato J2534) + UDS payload:
10 00 F4 00 62 F1 90 57 42 41 ...
Formato de la cabecera: [TA_hi=0] [TA_lo] [SA_hi=0] [SA_lo] — dirección del emisor de la respuesta (ECU → Tester). Los bytes superiores son siempre 00, ya que HSFZ usa direccionamiento de 1 byte.
HSFZ está incluido en el orden de búsqueda automática de protocolos (AT SP 0). Al intentar HSFZ:
Los comandos AT D (defaults) y AT Z (reset) restablecen todos los parámetros HSFZ:
HI → 00000000HS → F4HT → 00HC → 1A91 (6801)