Реверс-инжиниринг протокола диагностики Daewoo Nexia
В предыдущей статье Бортовой компьютер для ВАЗ с цветным дисплеем и тачскрином я рассказывал о том как своими руками можно сделать бортовой компьютер для автомобилей семейства ВАЗ. В этой статье речь пойдет об автомобиле Daewoo Nexia 2006 года выпуска с двигателем объемом 1,5 литра. Комбинация приборов тут выполнена очень не информативной. Узнать даже примерную температуру двигателя нельзя, потому что огромный стрелочный указатель не имеет промежуточной градуировки. Тахометр попросту отсутствует.
Поэтому приблизительное техническое задание звучало так:
— отобразить обороты двигателя;
— температуру охлаждающей жидкости;
— напряжение в бортовой сети.
Идея измерять все эти параметры напрямую отпала сразу. Зачем, если у нас есть «мозг» который управляет двигателем и сам измеряет все эти параметры. Надо у него их лишь попросить. Google не дает никакой вразумительной информации о протоколе диагностики Daewoo. Поэтому начинаем активно думать.
Разъем диагностики находится возле правой ноги переднего пассажира.
Типоразмер один из стандартных. Напряжение на К-линии при включенном зажигании 5 вольт. Значит нужен K-Line адаптер с подтяжкой линии к 5 вольтам (на ВАЗ к 12 В).
Теперь открываем любую программу для диагностики автомобилей данной марки. Запускаем сниффер СОМ порта через который подключен наш адаптер. И видим обмен информацией между ЭБУ и программой. Вот самое интересное:
F4 56 01 B5
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 написал программу которая имитирует работу ЭБУ:
Установил программу com0com, создал в системе 2 виртуальных COM порта и соединил их между собой. Программа диагностики отправляет данные в COM2, а моя программа принимает их на COM1 и отправляет ответ обратно. Сделано это потому что COM порт при работе может быть занят только одной программой. Затем, меняя значения каждого байта в ответе ЭБУ, следил за изменением показаний в программе диагностики. Как только показания какого то параметра начинали меняться – значит за этот параметр отвечает именно этот байт (или 2 байта). Затем подбирал формулу перевода к нормальным значениям. Вот что удалось раскопать:
F4 92 … № байта данных … КС
Идентификатор (1-й байт)
Идентификатор (2-й байт)
Температура охлаждающей жидкости ( о С)
Напряжение на ДПДЗ (В)
Положение дроссельной заслонки (%)
Обороты двигателя (об/мин)
Напряжение на датчике кислорода (В)
Желаемые обороты на ХХ
Атмосферное давление (кПа)
Давление на впуске (кПа)
Температура на впуске ( о С)
Угол опережения зажигания
не смог подобрать
Длительность впрыска (1-й байт)
Длительность впрыска (2-й байт)
Время с момента пуска двигателя (1-й байт)
Время с момента пуска двигателя (2-й байт)
Дальше дело за малым: ATMega16A + дисплей от Nokia 1202. Этот дисплей был выбран по причине его доступности и низкой цены (33 рубля). Что хорошо не надо городить преобразователь уровней для K- Линии.
Питание частично смонтировано навесным монтажом прямо на проводе. Дроссель взят из компьютерного блока питания. Подсветка дисплея запитана через резистор 20 Ом. На печатной плате он обозначен как «яркость». Изменяя его номинал, можно подобрать комфортный уровень яркости в ночное время. Как показала практика лучше поставить резистор чуть большего номинала 30-50 Ом. На K-линию поставил стабилитрон на 5,1В если вдруг на линии появится 12 вольт. А с импульсными помехами пусть борются диоды на входе портов микроконтроллера. Желающие могут допаять на вход пару 1N4148, резистор 100-200 Ом последовательно, конденсатор на пару нанофарад на землю. Поскольку провод K-линии от колодки ЭБУ до бортового компьютера получается достаточно длинным, то его желательно в этом случае взять экранированным. Чтобы было меньше наводок. Экран подключить на минус только с одной стороны (со стороны колодки диагностики). Что я и сделал. Питание на бортовой компьютер подается при включении зажигания (плюс подключен прямо к замку зажигания). Минус и K-линия подключены к колодке диагностики.
Фильтр по питанию:
Ну и сам бортовой компьютер:
Устройство представляет собой индикатор 3-х основных параметров: обороты двигателя, температура охлаждающей жидкости, напряжение бортовой сети. Другого не требовалось.
Как всегда встал вопрос о корпусе. И тут мой коллега по работе (которому и предназначался этот бортовой компьютер) предложил просто гениальный по своей простоте вариант: корпус от пульта дистанционного управления стареньким видеомагнитофоном. От него была отпилена нижняя часть и в ней прорезано окошко под дисплей.
После того как вклеили дисплей в корпус – нас ждало разочарование:
По какой то не известной причине дисплей перестал показывать часть информации. Возможно клей оказался слишком агрессивным и нарушил целостность «стекла» дисплея. Пришлось ехать за новым. Было куплено 2 штуки, с запасом.
Но тут нас ждало второе разочарование. Мало того что дисплеи судя по всему оказались из другой партии и обладали низким контрастом по сравнению с первым, так ещё и не реагировали на некоторые команды управления. Не работала команда зеркального отражения относительно оси Y. Пришлось делать это программно. Объяснить это я могу лишь низким качеством изготовления самого дисплея и тем что видимо нам попался самый неоригинальный из неоригинальных дисплеев. Поэтому в архиве 2 версии прошивки: изначальная и исправленная под кривой неоригинал. Исправленная должна работать с любым дисплеем, но скорость вывода на экран там немного ниже. Отличаются они лишь исправлениями в файле LCD.c (прошивка написана в CodeVisionAVR). Если дисплей «нормальный», то лучше использовать первый вариант.
После преодоления всех трудностей дисплей всё таки был успешно вклеен в корпус, а сам корпус приклеен к кожуху рулевой колонки на 2-х сторонний автомобильный скотч.
Решили разместить не по центру для лучшей видимости спидометра:
Источник
Диагностика и ошибки ЭБУ Дэу Нексия
Почти каждый владелец Дэу Нексия сталкивался с тем, что бортовой компьютер периодически выдает ошибки. Они указывают на неисправности в работе системы двигателя и других немаловажных узлов. Первым признаком того, что возникли неисправности — это появление на приборной панели индикатора «Check Engine». Но, не все автомобилисты знают, что это значит. Поэтому, необходимо подключиться к ЭБУ и установить, какая ошибка и неисправность в работе системы.
Коды ошибок
Лампа Check Engine начинает мигать. Вспышки разделяются паузами, малая пауза — около секунды, длинная — около двух. Малая пауза используется для разделения цифр в коде, длинная — для разделения кодов. Например, серия импульсов: две вспышки, короткая пауза, вспышка, длинная пауза — код 21. Каждый код повторяется три раза, например 12,12,12,33,33,33…. 12-начало и конец выдачи кодов, 33 — код неисправности, если неисправностей нет, всегда выдается код 12.
1 ДПДЗ низкое напряжение
2 ДПДЗ высокое напряжение
3 Вентилятор системы охлаждения 2 — низкое напряжение
4 Вентилятор системы охлаждения 2 — высокое напряжение
5 Вентилятор системы охлаждения 1 — низкое напряжение
6 Вентилятор системы охлаждения 1 — высокое напряжение
7 Электромагнитный клапан системы рециркуляции — низкое напряжение
8 Электромагнитный клапан системы рециркуляции — высокое напряжение
12 Нет неисправности
13 Датчик Кислорода
14 ДТОЖ — высокий уровень
15 ДТОЖ — низкий уровень
16 Датчика Детонации
17 Форсунка — замыкание на землю
18 Датчик Детонации
19 Датчик частоты вращения коленчатого вала (ДПКВ) — неверный сигнал
21 ДПДЗ — высокое напряжение
22 ДПДЗ — низкое напряжение
23 Датчик температуры воздуха на впуске (ДТВ) — высокая температура
24 Датчик скорости автомобиля (ДСА)
25 Датчик Температуры Воздуха на впуске (ДТВ) — низкая температура
27 Датчик давления в системе кондиционирования — высокий уровень сигнала
29 Реле топливного насоса — низкое напряжение
32 Система рециркуляции отработавших газов ( Nexia/Espero)
32 Реле топливного насоса (кроме Nexia/Espero)
33 Датчик абсолютного давления во впускном коллекторе (ДАД)- высокое напряжение
34 Датчик абсолютного давления во впускном коллекторе (ДАД)- низкое напряжение
35 Клапан управления холостым ходом
36 Система рециркуляции выхлопных газов
41 Блок управления зажиганием «В» — высокое напряжение
42 Блок управления зажиганием «А» — высокое напряжение
44 Кислородный датчик — бедная смесь
45 Кислородный датчик — богатая смесь
49 Высокое напряжение питания
51 ЭБУ двигателем — ошибка памяти (PROM)
53 Иммобилайзер
54 Резистор регулировки состава смеси
55 ЭБУ двигателем
61 Клапан аккумулятора паров топлива — низкое напряжение
62 Клапан аккумулятора паров топлива — высокое напряжение
63 Блок управления зажиганием «В» — низкое напряжение
64 Блок управления зажиганием «А» — низкое напряжение
87 Реле компрессора кондиционера — низкое напряжение
88 Реле компрессора кондиционера — высокое напряжение
93 ЭБУ двигателем — неверное управление
UzDaewoo OBD-II p-коды:
P0533 A/C Pressure High (Сигнал датчика давления хладагента имеет высокий уровень)
P0532 A/C Pressure Low (Сигнал датчика давления хладагента имеет низкий уровень)
P0342 CAM No Signal (Сигнал датчика имеет низкий уровень или замкнут на массу )
P0341 CAM Rationality (Сигнал датчика выходит за допустимые пределы)
P0420 CatalystBank1 (Эффективность системы катализаторов «В1» ниже порога)
P0118 CTS Circuit High Voltage (Высокий уровень выходного сигнала)
P0117 CTS Circuit Low or Open (Низкий уровень выходного сигнала)
P0125 Time to CL (Низкая температуры охлаждающей жид. для упр.по замкн.контуру )
P0336 CKP Sensor Noisy (Сигнал датчика «А» выходит за допустимые пределы)
P0337 CKP No Signal (Сигнал датчика «А» имеет низкий уровень или замкнут на массу )
P0401 EGR Insufficient Flow (Система рециркуляции отработанных газов неэффективна)
P0402 EGR Excessive Flow during Crank (Система рециркуляции отработанных газов избыточна)
P0404 EGR Valve Open pintle Position Error (Сигнал датчика выходит за допустимые пределы)
P0406 EGR Pintle Position High voltage (Сигнал датчика «А» имеет высокий уровень)
P0405 EGR Pintle Position sensor Circuit Low (Сигнал датчика «А» имеет низкий уровень)
P0351 EST_Cylinder_1_Fault (Первичная/вторичная цепи катушки зажигания «А» неисправны)
P0352 EST_Cylinder_2_Fault (Первичная/вторичная цепи катушки зажигания «B» неисправны)
P0461 FuelLevelConsumption (Сигнал датчика уровня топлива выходит за допустимые пределы)
P0463 Fuel Level Sensor Low (Сигнал датчика уровня топлива имеет низкий уровень)
P0462 Fuel Level Sensor High (Сигнал датчика уровня топлива имеет высокий уровень)
P0171 BANK 1 SYSTEM TOO LEAN (Блок цилиндров № 1 беднит (возможно подсос воздуха)
P0172 BANK 1 SYSTEM TOO RICH (Блок цилиндров № 1 богатит (возможно неполное закрытие форсунки)
P0507 Idle Speed Control High RPM (Обороты двигателя под управлением системы слишком высокие)
P0506 Idle Speed Control Low RPM (Обороты двигателя под управлением системы слишком низкие)
P0113 IAT_ShortHigh (Высокий уровень выходного сигнала)
P0112 IAT_ShortLow (Низкий уровень выходного сигнала)
P0201 Injector 1 (Цепь управления форсункой цилиндра № 1 неисправна)
P0202 Injector 2 (Цепь управления форсункой цилиндра № 2 неисправна)
P0203 Injector 3 (Цепь управления форсункой цилиндра № 3 неисправна)
P0204 Injector 4 (Цепь управления форсункой цилиндра № 4 неисправна)
P0325 Knock System Internal Malf (Цепь датчика детонации № 1 неисправна)
P0327 Knock System Circuit Fault (Сигнал датчика детонации № 1 имеет низкий уровень )
P0108 MAP Circuit High (Высокий уровень выходного сигнала)
P0107 MAP Circuit Low or Open (Низкий уровень выходного сигнала)
P0106 MAP/TPS Rationality (Выход сигнала из допустимого диапазона)
P0300 Misfire (Обнаружены случайные/множественные пропуски зажигания)
P0134 Front O2 sensor No Activity or Open (Цепь датчика О2 В1 S1 пассивна)
P0133 Front O2 sensor Transition Ratio (Датчик О2 В1 S1 имеет медленный отклик на обогащение)
P0132 O2_11_ShortHigh (Датчик О2 В1 S1 имеет высокий уровень сигнала)
P0131 O2_11_ShortLow (Датчик О2 В1 S1 имеет низкий уровень сигнала)
P0141 Post O2 sensor Heater (Нагреватель датчика О2 В1 S2 несправен)
P0140 Post O2 sensor No Activity or Open (Цепь датчика О2 В1 S2 пассивна)
P0138 Rear O2 High Voltage (Датчик О2 В1 S2 имеет высокий уровень сигнала)
P0137 Rear O2 Low Voltage (Датчик О2 В1 S2 имеет низкий уровень сигнала)
P1391 G Sensor Rough Road Rationality (Пропадание сигнала датчика вращения коленчатого вала)
P0563 System Voltage High (Бортовое напряжение имеет высокий уровень)
P0562 System Voltage Low (Бортовое напряжение имеет низкий уровень)
P0123 TPS High Volts (Высокий уровень выходного сигнала)
P0122 TPS Low Volts (Низкий уровень выходного сигнала)
P0502 VSS No Signal (Сигнал датчика скорости автомобиля имеет низкий уровень)
P1396 WSS Variation (Датчик положения коленчатого вала)
P0443 EVAP Purge Solenoid Control Circuit (Управление клапаном продувки системы «EVAP» неисправен)
P0602 Control Module Programming Error (Программная ошибка контрольного модуля)
Как прочитать ошибки
Для того чтобы считать ошибки необходимо подключиться к портативному или планшетному ПК, а другим концом кабеля к автомобилю через специальный кабель K-line. Рассмотрим, какие инструменты будут необходимы для подключения автомобиля к компьютеру и определения кодов ошибок:
Подключение к ЭБУ.
- Кабель K-line.
- Ноутбук или планшет.
- Специальное программное обеспечение.
Для того чтобы подключиться необходимо найти разъем под кабель. Он находится под рулевой колонкой. Теперь необходимо подключить непосредственно сам кабель и потом ЮСБ-разъем. Оптимальным для использования считаются программы: Open Diag Free, Tyranus Daewoo Scanner, Диагностика ЭСУД (KWP_D) и Chevrolet Explorer v1.7.
Разъём подключения OBD II.
Устранение ошибок и сброс
Устранить ошибки ЭБУ достаточно просто. В программе для считок необходимо найти нужную неисправность и расшифровать ее. Затем, рекомендуется устранить проблему, по которой возникла ошибка. Последним этапом становится сброс. Его можно найти в инструментах программы или действиях.
Многие автолюбители делают ошибку при работе с программным обеспечением, поскольку они «обнуляют» не сами ошибки, а все программное обеспечение, таким образом, остается только оболочка ПО автомобиля. После таких действий, обычно, автомобиль может не запуститься и требуется программная настройка оборудования или замена всего программного обеспечения в целом. Поэтому, рекомендуется в данном случае обращаться на автосервис, где сделают все правильно.
Вывод
Ошибки электронного блока управления на Дэу Нексия возникают достаточно часто. Обычно, они сопровождаются индикатором «Check Engine» или неработоспособностью одной из систем. Так, устранение ошибок своими руками не всегда заканчивается хорошо, поэтому при совершении операции стоит быть достаточно аккуратным. При не уверенности, что все пройдет гладко рекомендуется обратиться в автосервис, во избежание поломок.
Источник