Реверс-інжиніринг протоколу діагностики daewoo nexia

Тому приблизне технічне завдання звучало так:
- відобразити обороти двигуна;
- температуру охолоджуючої рідини;
- напруга в бортовій мережі.

Ідея вимірювати всі ці параметри безпосередньо відпала відразу. Навіщо, якщо у нас є «мозок» який управляє двигуном і сам вимірює всі ці параметри. Треба у нього їх лише попросити. Google не дає ніякої зрозумілої інформації про протокол діагностики Daewoo. Тому починаємо активно думати.

Роз'єм діагностики знаходиться біля правої ноги переднього пасажира.

Реверс-інжиніринг протоколу діагностики daewoo nexia

Типорозмір один зі стандартних. Напруга на К-лінії при включеному запалюванні 5 вольт. Значить потрібен K-Line адаптер з підтяжкою лінії до 5 вольт (на ВАЗ до 12 В).

Тепер відкриваємо будь-яку програму для діагностики автомобілів даної марки. Запускаємо сниффер СОМ порту через який підключений наш адаптер. І бачимо обмін інформацією між ЕБУ і програмою. Ось найцікавіше:

F4 92 01 00 6D 00 00 61 54 1E 00 00 FF 00 00 00 66 00 00 80 80 00 00 4B 4B AF 00 F5

F5 FF FF 4A 85 78 00 FF F9 06 F4 51 6F 00 00 C6 7B 7E 83 00 00 32 00 00 00 08 01 01

00 78 20 2F A0 00 F5 D4

Зрозуміти що є що у відповіді відразу не вийде. Але тут на допомогу приходить старий добрий АвтоВАЗ. А саме зв'язка GM-АвтоВАЗ. Документ «Послідовний високошвидкісний порт головного процесора». Дивлюся туди і просто не вірю своїм очам. Там описаний точнісінько такий же протокол обміну як я тільки що зняв з K-лінії! Отже по порядку:

Ніякої початкової ініціалізації немає. Відразу надсилається запит даних.

Формат повідомлення:
- Байт ідентифікації пристрою (ID);
- Байт довжини повідомлення (85 + N). Вказує загальна кількість слів даних в решти повідомлення N плюс 85 (десяткове);
- Байт запитуваної режиму (mode) (M);
- Контрольна сума. Двійкове доповнення суми всіх інших слів повідомлення, включаючи ідентифікатор повідомлення і слово довжини повідомлення (КС).

Розберемося із запитом:

F4 - ідентифікатор повідомлення;

56 - довжина повідомлення в hex вигляді. У нашому випадку довжина всього 1 байт: 85 + 1 = 86 (dec) = 56 (hex)

01 - номер режиму / таблиці даних яку ми запитуємо у ЕБУ.

В5 - контрольна сума. F4 + 56 + 01 = 14B. Інвертуємо число 14В і отримуємо число B4. Додаємо до нього 1 і отримуємо В5.

Із запитом все досить просто. Але мене найбільше цікавила відповідь ЕБУ. дивимося:

F4 92 01 00 6D 00 00 61 54 1E 00 00 FF 00 00 00 66 00 00 80 80 00 00 4B 4B AF 00 F5

F5 FF FF 4A 85 78 00 FF F9 06 F4 51 6F 00 00 C6 7B 7E 83 00 00 32 00 00 00 08 01 01

00 78 20 2F A0 00 F5 D4

F4 - ідентифікатор повідомлення;

92 - довжина повідомлення. 85 + 61 = 146 (dec) = 92 (hex). Тобто після цього байта у нас ще 61 байт даних;

01 - дані за запитом 1-го режиму / таблиці (1-й байт з 61);

2 байт даних
.
61 байт даних

D4 - Контрольна сума.

З форматом відповіді тепер теж все ясно. Найскладніше визначити який байт у відповіді що означає. Тут ми повертаємося до назви даної статті і визначенню реверс-інжиніринг ( «зворотна розробка»). Розкриваю основну суть. На Delphi написав програму яка імітує роботу ЕБУ:

Реверс-інжиніринг протоколу діагностики daewoo nexia

Встановив програму com0com, створив в системі 2 віртуальних COM порту і з'єднав їх між собою. Програма діагностики відправляє дані в COM2, а моя програма приймає їх на COM1 і відправляє відповідь назад. Зроблено це тому що COM порт при роботі може бути зайнятий тільки однією програмою. Потім, змінюючи значення кожного байта у відповіді ЕБУ, стежив за зміною показань в програмі діагностики. Як тільки свідчення будь то параметра починали змінюватися - значить за цей параметр відповідає саме цей байт (або 2 байта). Потім підбирав формулу перекладу до нормальних значень. Ось що вдалося розкопати:

Далі справа за малим: ATMega16A + дисплей від Nokia 1202. Цей дисплей був обраний через його доступності та низької ціни (33 рубля). Що добре не треба городити перетворювач рівнів для K- Лінії.

Реверс-інжиніринг протоколу діагностики daewoo nexia

Харчування частково змонтовано навісним монтажем прямо на дроті. Дросель узятий з комп'ютерного блоку живлення. Підсвічування дисплея запитана через резистор 20 Ом. На друкованій платі він позначений як «яскравість». Змінюючи його номінал, можна підібрати комфортний рівень яскравості в нічний час. Як показала практика краще поставити резистор трохи більшого номіналу 30-50 Ом. На K-лінію поставив стабілітрон на 5,1В якщо раптом на лінії з'явиться 12 вольт. А з імпульсними перешкодами нехай борються діоди на вході портів мікроконтролера. Бажаючі можуть допаять на вхід пару 1N4148, резистор 100-200 Ом послідовно, конденсатор на пару нанофарадах на землю. Оскільки провід K-лінії від колодки ЕБУ до бортового комп'ютера виходить досить довгим, то його бажано в цьому випадку взяти екранованим. Щоб було менше наведень. Екран підключити на мінус тільки з одного боку (з боку колодки діагностики). Що я і зробив. Харчування на бортовий комп'ютер подається при включенні запалювання (плюс підключений прямо до замку запалювання). Мінус і K-лінія підключені до колодки діагностики.

Фільтр живлення:

Реверс-інжиніринг протоколу діагностики daewoo nexia

Реверс-інжиніринг протоколу діагностики daewoo nexia

Ну і сам бортовий комп'ютер:

Реверс-інжиніринг протоколу діагностики daewoo nexia

Пристрій являє собою індикатор 3-х основних параметрів: обороти двигуна, температура охолоджуючої рідини, напруга бортової мережі. Іншого не було потрібно.

Реверс-інжиніринг протоколу діагностики daewoo nexia

Після того як вклеїли дисплей в корпус - нас чекало розчарування:

Реверс-інжиніринг протоколу діагностики daewoo nexia

По якійсь невідомої причини дисплей перестав показувати частину інформації. Можливо клей виявився занадто агресивним і порушив цілісність «скла» дисплея. Довелося їхати за новим. Було куплено 2 штуки, з запасом.

Але тут нас чекало друге розчарування. Мало того що дисплеї судячи з усього виявилися з іншої партії і володіли низьким контрастом у порівнянні з першим, так ще й не реагували на деякі команди управління. Чи не працювала команда дзеркального відображення щодо осі Y. Довелося робити це програмно. Пояснити це я можу лише низькою якістю виготовлення самого дисплея і тим що мабуть нам попався самий неоригінальний з неоригінальних дисплеїв. Тому в архіві 2 версії прошивки: початкова і виправлена ​​під кривою неоригінал. Виправлена ​​повинна працювати з будь-яким дисплеєм, але швидкість виведення на екран там трохи нижче. Відрізняються вони лише виправленнями в файлі LCD.c (прошивка написана в CodeVisionAVR). Якщо дисплей «нормальний», то краще використовувати перший варіант.

Після подолання всіх труднощів дисплей все таки був успішно вклеєна в корпус, а сам корпус приклеєний до кожуха рульової колонки на 2-х сторонній автомобільний скотч.

Реверс-інжиніринг протоколу діагностики daewoo nexia

Реверс-інжиніринг протоколу діагностики daewoo nexia

Вирішили розмістити не по центру для кращої видимості спідометра:

Реверс-інжиніринг протоколу діагностики daewoo nexia

Реверс-інжиніринг протоколу діагностики daewoo nexia