BMW DS2 протокол

Помимо стандартного протокола OBD-II, которому соответствуют  все бензиновые автомобили BMW с 1998 года,  в компании существует  последовательный  протокол DS2, применяемый  только в BMW c 1995 по 2005 год.  Данный протокол используется сервисными сканерами BMW, а также программами входящими в  состав пакета EDIABAS/ INPA. В сети отсутствует официальная информация по протоколу.
Путем применения сниффера последовательного порта во время проведении диагностики средствами INPA, и дальнейшего анализа полученных логов, был полностью расшифрован принцип обмена.

Протокол DS2 предельно прост  и состоит из 4-ех основных блоков:
1. Адрес блока управления, которому посылается команда
2. Длина посылаемого сообщения в байтах
3. Непосредственно сами данные для отправки
4. XOR контрольная сумма всех байт сообщения, т.е. начиная с «адреса» и заканчивая «данныеN»

[Адрес] [Длина] [данные1] [данные2] … [данныеN] [Контрольная сумма]
Вот некоторые адреса блоков управления:
00 — Контроллер электрики кузова (стеклоподъёмники, замки, дворинки и т.п.)
12 — ЭБУ двигателя
32 — Автоматическая коробка передач
44 — Иммобилайзер (EWS, CAS)
56 — ABS
5B — Климат-контроль
60 — Блок управления датчиками парковки
80 — Приборная панель
A4 — Подушки безопасности
BF — Иммобилайзер (EWS, CAS)
D0 — Блок управления освещением

В качестве физической линии обмена используется последовательный интерфейс(k-line) со следующими настройками:
baudRate = 9600
dataBits = 8
parity = Even
stopBits = 1

Обмен организован по принципу «запрос-ответ». ЭБУ выступает в качестве ведомого.
Хост приложение формирует сообщение в вышеописанном формате и высылает его ЭБУ по k-line.
В ответной посылке ЭБУ дублирует посылку запроса + добавляет свой адрес, запрошенные данные и контрольную сумму.
[Полученная команда][Адрес][Длина ответа] [данные1] [данные2] … [данныеN] [Контрольная сумма]
[Длина ответа]-количество байт начиная с байта данных и заканчивая XOR контрольной суммой включительно. Т.е. от [данные1] до [Контрольная сумма].

К примеру, ниже приведен сеанс обмена. Хост приложение запрашивает от ЭБУ основные параметры мотора (rpm, УОЗ, температура и т.п.), посылая «12 05 0B 03 1F».
«12» — адрес ЭБУ двигателя
«05» — длина посылки -5 байт
«OB 03» -Байты данных. Непосредственно сама команда, на которую отвечает ЭБУ. В данном случае это запрос основных параметров.
«1F»- XOR

Запрос:
12 05 0B 03 1F
Ответ:
12 05 0B 03 1F 12 2D A0 02 EB 00 00 00 00 00 00
31 6F 9A 82 74 BE 01 EC FE 66 54 F4 8A 78 88 78
90 78 1E FE FE 34 34 10 CB 0E C6 05 05 0D 2E D1
87 BD

Обсуждение статьи на форуме
Статья дополняется и обновляется