Расширение протокола ELM327 для поддержки BMW HSFZ (High Speed Fahrzeug Zugang — высокоскоростной доступ к автомобилю). Протокол E позволяет выполнять UDS-диагностику через Ethernet/TCP с использованием стандартного ELM327 AT-интерфейса.
Тестер (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-байтовую адресацию (вместо 2-байтовой у DoIP).
Для работы необходимо настроить три параметра:
| Параметр | Команда | Что задаёт | Как узнать |
|---|---|---|---|
| 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 (UDP broadcast на порт 6811), находит первый ECU и заполняет параметры из его ответа:
HI ← IP-адрес ECU/gateway (например A9FE0114 = 169.254.1.20)HT ← логический адрес ECU (например 10 — как правило, ZGW)HS ← остаётся F4 (дефолт)После этого выполняется TCP-подключение на порт 6801 → готов к UDS (Routing Activation не требуется, в отличие от DoIP).
| 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 # запрос VIN к 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 # переключить Target Address на блок двигателя OK >22 F1 90 # тот же запрос — теперь пойдёт к ECU 12 через gateway 62 F1 90 ...
Устанавливает IPv4-адрес ECU (gateway) в hex-формате (4 байта, big-endian).
>AT HI A9FE0114 OK
Пример: A9FE0114 = 169.254.1.20
Значение по умолчанию: 00000000 (не задан). Если IP не задан при AT SP E, выполняется автоматический Vehicle Discovery (UDP broadcast на порт 6811).
Устанавливает адрес тестера (Source Address, SA) в hex-формате (1 байт).
>AT HS F4 OK
Значение по умолчанию: F4. Обычно менять не требуется.
Устанавливает адрес ECU (Target Address, TA) в hex-формате (1 байт).
>AT HT 10 OK
Значение по умолчанию: 00.
Устанавливает TCP-порт ECU в hex-формате. Задаётся до AT SP E. По умолчанию 1A91 (6801 decimal) — стандартный порт BMW HSFZ. Менять нужно только если ECU использует нестандартный порт.
>AT HC 1A91 OK
Выполняет UDP broadcast Vehicle Discovery на порт 6811. Выводит список найденных ECU с их VIN, логическим адресом, IP и MAC-адресом.
Автоматически заполняет HI (IP) и HT (Target Address) из первого найденного ECU.
AT SP E при HI=0 сам выполняет discovery — отдельный AT HD не обязателен. AT HD полезен когда нужно увидеть какие ECU есть в сети до подключения.
>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 |
| ECU за gateway (IP через discovery) | ATZ → AT HD → AT HT xx → AT SP E |
| ECU за gateway (IP известен) | ATZ → AT HI hhhhhhhh → AT HT xx → AT SP E |
Routing Activation не требуется (в отличие от DoIP).
При ошибке на любом шаге возвращается UNABLE TO CONNECT.
Hex-данные отправляются как UDS payload. ELM327 автоматически оборачивает их в HSFZ Diagnostic Message с заголовком SA+TA (1-байтовая адресация).
>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 (4 байта в J2534-формате) + 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)