Главная » Электроника для авто
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Реверс-инжиниринг протокола диагностики 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

01

-

2

Идентификатор (1-й байт)

нет

3

Идентификатор (2-й байт)

нет

4

Ошибки (1-й байт)

нет

5

Ошибки (2-й байт)

нет

6

Температура охлаждающей жидкости (оС)

(Е*0,75) - 40

7

-

-

8

Напряжение на ДПДЗ (В)

Е*0.02

9

Положение дроссельной заслонки (%)

(Е*100)/255

10

Обороты двигателя (об/мин)

Е*25

11

-

-

12

-

-

13

Скорость (км/ч)

E*1,61

14

-

-

15

Напряжение на датчике кислорода (В)

1.13*(Е/255)

24

Желаемые обороты

Е*25/4

25

Желаемые обороты на ХХ

Е*25/4

26

Атмосферное давление (кПа)

(N+28.06)/2.71

27

Давление на впуске (кПа)

10.4 + (Е*0.3685)

28

-

-

29

-

-

30

Температура на впуске (оС)

(Е*0,75) - 40

31

-

-

32

Напряжение (В)

Е/10

33

-

-

34

-

-

35

Угол опережения зажигания

не смог подобрать

36

Длительность впрыска (1-й байт)

Е*62.5/4096

37

Длительность впрыска (2-й байт)

38

Соотношение воздух-топливо

Е/10

39

-

-

40

Время с момента пуска двигателя (1-й байт)

Е, сек

41

Время с момента пуска двигателя (2-й байт)

61

-

-

Дальше дело за малым: 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-х сторонний автомобильный скотч.

 

 

 

Решили разместить не по центру для лучшей видимости спидометра:

 

 

 

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
ATMega16 МК AVR 8-бит
ATmega16A
1 Поиск в FivelВ блокнот
VR1 Линейный регулятор
LM7805CT
1 Поиск в FivelВ блокнот
VR2 Линейный регулятор
REG1117-33
1 Поиск в FivelВ блокнот
D1 Стабилитрон5.1 В1 Поиск в FivelВ блокнот
D2, D3 Выпрямительный диод
1N4148
2 По желаниюПоиск в FivelВ блокнот
D4 Диод Шоттки
1N5818
1 Поиск в FivelВ блокнот
D5 Защитный диод
1.5KE22C
1 Поиск в FivelВ блокнот
C1, C2 Конденсатор22 пФ2 Поиск в FivelВ блокнот
C3, C4 Конденсатор470 мкФ2 Поиск в FivelВ блокнот
C5 Конденсатор0.33 мкФ1 Поиск в FivelВ блокнот
C6, C8 Конденсатор0.1 мкФ2 Поиск в FivelВ блокнот
C7 Конденсатор0.01 мкФ1 Поиск в FivelВ блокнот
R1 Резистор510 Ом1 Поиск в FivelВ блокнот
R2 Резистор10 кОм1 Поиск в FivelВ блокнот
R3-R6 Резистор2 кОм4 Поиск в FivelВ блокнот
R7, R8, R9, R10 Резистор3.6 кОм4 Поиск в FivelВ блокнот
R11 Резистор20 Ом1 Поиск в FivelВ блокнот
F1 Предохранитель1 Поиск в FivelВ блокнот
Cr1 Кварцевый резонатор16 МГц1 Поиск в FivelВ блокнот
Nokia 1202 Дисплейот Nokia 12021 Поиск в FivelВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 7
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 3.8 Проголосовало: 7 чел.

Комментарии (22) | Я собрал (0) | Подписаться

+1
ut1wpr #
Хороший кусок работы проделан, молодец!
Я бы ограничил частоту вывода на дисплей до 1 - 2 Гц. "Сливание" символов приводит к потере информативности. Ну, и если сделать символ тахометра с динамической стрелкой - получились бы красивые "рюшечки"
Ответить
0

[Автор]
mr_smit #
Вывод на дисплей 2 раза в секунду. Видео снято на не прогретой машине. Кристаллы дисплея холодные. Зима на дворе... Когда салон прогревается, то всё нормально.
Ответить
0
Zlodey #
Хорошая статья, обожаю реверс инжиниринг... Ну а обновлять дисплей можно и пореже - 1 Гц думаю достаточно.
Ответить
0
BOCEM #
Слишком мелкий дисплей, не удобно пользоваться на ходу, а как демо прототип не плохо. Вот только диод и предохранитель последовательно вещи взаимно исключающие.
Ответить
0

[Автор]
mr_smit #
Чего это вдруг взаимно исключающие? Диод - это защита от переплюсовки при подключении. Предохранитель - это защита от КЗ. А по поводу дисплея тут дело вкуса.
Ответить
0
BOCEM #
Что же тогда от часов наручных дисплей не применить? А избыточность элементов в схеме ведет сами знаете куда! Диод 1 ампер и предохранитель 1 ампер, если уж защищать от "дурака", то диодным мостом и деталь одна и маркировать провода не нужно, как и в инструкции предупреждать про переполюсовку. А плавкую вставку ставить да, надо, чтобы потом не тушить машину СОГЛАСЕН!
Ответить
0

[Автор]
mr_smit #
Схемотехнику можно обсуждать бесконечно... Тип используемого дисплея тоже. На момент разработки схемы я принял такое решение.
Ответить
0
sanyasanya #
А можете дописать, чтобы показывало расход и считывало ошибки?
Ответить
0

[Автор]
mr_smit #
Нет
Ответить
0
Mrshilov #
Проверьте формулы. Здесь документация по протоколу "Россия-83" и "Евро-II" - немного отличаются.
http://team-rs.ru/tarticleinj.php?id=5
См. страницы 24 и 27.
Ответить
0

[Автор]
mr_smit #
"Россия-83" и "Евро-II" тут абсолютно ни при чем.
Ответить
0
Vladimir #
А почему #define BUFFER_SIZE 200 ?
Просто с запасом или где то есть зацепка на принимаемый объем?
Ответить
0

[Автор]
mr_smit #
Просто с запасом.
Ответить
0
Valera174 #
Не могли бы вы выложить исходный код вашей программки? Заранее благодарен
Ответить
0

[Автор]
mr_smit #
Вообще то код выложен в самом конце статьи.
Ответить
0
Дмитрий #
Уважаемый автор можно у вас попросить программу которую вы написали для моделирования работы ЭБУ?
Ответить
0

[Автор]
mr_smit #
Можно.
Отредактирован 21.04.2016 10:00
Ответить
0
Сергей #
Уважаемый автор могу и я у вас попросить программу для моделирования работы эбу?
Ответить
0

[Автор]
mr_smit #
Pobedyst, подсказал формулу для расчета УОЗ:
(45*x)/127-20 - где Х значение из блока управления.
Ответить
0
Сергей #
Добрый день, А остаток уровня топлива можно реализовать?
Ответить
0

[Автор]
mr_smit #
Можно измерять значение напрямую с датчика уровня, но надо изменять схему и править прошивку. По отображению уровня топлива в интернете полно вариантов.
Ответить
0
Сергей #
Спасибо за ответ. Жалко что так, думал есть возможность напрямую с мозгов считывать данную инфу, а то шатный индикатор не настолько информативен, как хотелось бы. Особенно при приближении 10 литров.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

ELM327 OBD II — адаптер с поддержкой CAN
ELM327 OBD II — адаптер с поддержкой CAN
Arduino UNO Набор 4WD Kit Bluetooth
вверх