Сейчас посетителей в клубе: 1, из них зарегистрированных: 1

Как самостоятельно продиагностировать машину на ошибки

23.09.10

Общие моменты


Среди производителей автомобилей, пожалуй, только ниссан тщательно скрывает принципы работы и протоколы обмена своей диагностической системы. Более того, всё, что связано с этой диагностической системой, запатентовано и, как следствие, практически никто не выпускает диагностического оборудования для ниссана.

В некоторых ниссанах есть разъем OBD и некоторые функции этого протокола поддерживаются. В более новых ниссанах линия OBD-II выведена прямо на диагостический разъем.


Soft разный-полезный


Patent - Патент полностью и некоторые картинки к нему.
Dasmx130.Zip - дизассемблер для 6303
RealTerm - отличный Serial Terminal, рекомендую для исследований протокола.
HD6303 - описание процессоров 6303 (скан в pdf формате)
64F7055F40 - описание процессора ECU Nissan Maxima A33

Интерфейс для соединения PC & ECU


      В какой-то момент мне стало интересно, что-же там такого сложного и секретного в этой системе? И начался поиск. Сначала я нашел японские патенты, которые в общем смысле рассказывали про систему диагностики и раскрывали принципы работы. Но там не было ни строчки про физический протокол обмена. Потом попалась ссылка на австралийских кудесников, которые сделали-таки интерфейс к PC для подключения к ECU (ConZult), но категорически отказались давать какую-либо информацию о тонкостях работы интерфейса и нагло продают эту штуку за 300 баксов всем желающим. Однако внешний вид этой коробочки размером 3х5 см. натолкнул меня на мысль, что там не может быть ничего супер-сложного. Так, собственно, и оказалось.

      Под рукой оказалось несколько стареньких ECU от ниссана примеры (спасибо AndrAB), с ними я и начал свои эксперименты. Но чтобы понять принцип работы, пришлось брать в руки осциллограф и смотреть на сигналы, которые бродят в проводах между консалтом и реальным ECU, установленном на моей Максиме. Сигнальных проводов оказалось 3 штуки: CLK, RX и TX. CLK - тактовый сигнал для процессора ECU, который формируется в диагностическом приборе, RX и TX - передача/прием данных. Чтобы разобраться, для чего что нужно икак работает этот протокол, пришлось найти PDF на процессор, который используется в ECU. Хитрые японские инженеры выбрали самый неудобный, на мой взгляд, протокол обмена: Clocked Sinchronous Mode. По сути, это обычный 8-и битовый (1 старт, 1 стоп) протокол с синхронизацией по отдельной линии. Протокол однополярный, 0-5V, в отличие от RS232. В ECU и диагностическом приборе стоят преобразователи уровня, которые превращают 0-5v сигнал в 0-12V, видимо, для однообразности и защиты от наводок. Первое время я не особо мучался с этим и запаялся прямо на ножки процессора, чтобы не городить преобразователи и работал по 0-5V.

      В реальном интерфейсе рекомендую подтянуть все сигналы к 12-и вольтам, хотя некоторые утверждают, что всё работает и при подтяжке к +5. У меня не получилось на ECU от P10. Сигнал TX от ECU - открытый коллектор.

      Скорость обмена в ECU фиксирована на 9600, частота синхроимпульсов по мануалу равна baud rate*16, т.е. 153600 Hz. Эксперименты показали, что привязывать фронты синхроимпульсов к фронтам сигналов нет необходимости, посему генератор работает в режиме FreeRun.

      Сейчас это всё выглядит просто, но для того, чтобы разобраться, в каком режиме работает порт, мне пришлось дизассемблировать биос ECU, найти в нем ту часть, где сидят обработчики прерываний, найти все обрабатываемые команды и прочее-прочее-прочее.

      Изготовление интерфейса между компом и ECU выливается в тривиальную задачку по преобразованию уровней RS232 в однополярные (MAX232 + level shifter) и подключение генератора синхроимпульсов. Cинхрогенератор собран отдельно на микроконтроллере PIC ( PIC12F629 ) и кварце и генерит прямо в ECU. Питание берем от любого удобного места в машине (можно прямо с диагностического разъема), в качестве стабилизатора - 7805 с радиатором.

      Если кому будет нужно, дам микрокод для PIC. Блок-схема интерфейса - ниже, попозже дам полную схему конвертера.


 


Распиновка разъема для подключения Consult:



Распиновка разъема для подключения Consult II:



Протокол обмена


Анализ исходного кода моего ECU показал, что обрабатываются следующие коды-префиксы:

      0xFF (INIT
) - 3-х байтовая команда, инициализация
      0x0A (PS) - 3-х байтовая команда, акивные тесты
      0x10 - 2-х байтовая, управление некоторым устройствами
      0x30 (STP) - 1-байтовая команда, остановка потока данных
      0x51 - пока неизвестно
      0x5A (MI) - 2-х байтовая команда, получение датчиков
      0xC1
- 1-байтовая, сброс ошибок диагностики
      0xC9 - 3-х байтовая, чтение памяти
      0xD1 - 1- байтовая, ошибки диагностики
      0xD0 - 1-байтовая, номер ECU

      Остальные коды отбрасываются с ошибкой 0xFE.

      Из вторичных кодов известен код 0xF0 - выполнить (EX).

      На любой введенный байт ECU отвечает инверсным байтом. Если команда верна, то возвращается инверсный байт команды, если не верна - байт 0xFE.

1. Инициализация

      Чтобы подключиться к ECU, надо послать команду INIT: 2 байта 0xFF подряд. После этой команды все умные блоки в машине переходят в режим ожидания команды выбора устройства CS. Для основного блока это команда 0xEF. Получив эту команду, ECU ответит инверсным байтом 0x10 и перейдет в режим ожидания запроса. Остальные блоки отключаться до следующей команды INIT. Повторная посылка INIT сбросит любую операцию и снова переведет все устройства в режим ожидания.

2. Запросы на получение данных от ECU (команда MI)

В терминологии консалта - Data Monitoring.

      Команда запроса обзывается MI (Monitor Item), код команды - 0x5A. Следующий за командой байт - код необходимого для мониторинга устройства. Одновременно для мониторинга можно заслать несколько параметров, т.е. последовательность типа 5A NN 5A NN 5A NN 5A NN... Для завершения ввода нужно послать команду EX (Execute) - 0xF0.

После этого ECU начинает выдавать данные в следующем формате:

FF NN D1 D2 D3 ... DN, где:
FF - байт-разделитель;
NN - количество ожидаемых байтов в ответе;
D1-DN - собственно данные.

      Если в запросе были 2-х байтовые параметры, то возвращаемое значение тоже будет 2-х байтовое, это надо учитывать в программе-обработчике.

      Поток ответных данных идет непрерывно, остановить его можно (и нужно) командой STP (0x30). После получения STP ECU ответит инверсным сигналом (0xCF) и снова будет готов к приему запроса.

      Некоторые возвращаемые значения могут использоваться напрямую, для некоторых нужны некоторые формулы пересчета в читабельные значения, а некоторые свернуты в битовый формат (в одном байте передаются on/off значения датчиков).

3. Передача параметров (PS)

В терминологии консалта - Active Test.

      Некоторые динамические параметры можно изменять. Формат команды такой: PS XX YY, где XX - номер устройства, YY - новое значение. Код PS - 0x0A.

4. Управление устройствами (0x10)

      Обнаруженная, но еще не изученная команда.

5. Чтение ошибок диагностики (DIAG).

      Команда 0xD1 - чтение ошибок диагностики. Запускается на выполнение командой EX.

6. Сброс ошибок диагностики.

      Команда 0xC1 - сброс ошибок диагностики. Запускается на выполнение командой EX.

7. Чтение содержимого памяти ECU

      Команда 0хС9. Можно считать содержимое RAM и ROM ECU.

8. Получение номера ECU

      Команда 0хD0. Возвращает строку данных с номером ECU.

7. Непойманные сигналы

      0x51 - непонятно.

Comment: похоже, сигнал, описаный ниже, не существует. Врет патент.

      Есть еще один интересный сигнал, пока не пойманный, SIN. Блокирует соединение с ECU, но не переводит этот ECU в исходный режим (ECU не реагирует на сигнал INIT) и не сбрасывает ранее переданный запрос. В это время можно подключиться к другому ECU. Восстановление из режима происходит по команде CRR, после чего с ECU снова начинает передавать ранее запрошенные данные. Удобно использовать в тех случаях, когда нужно мониторить 2 разных ECU, например, ECCS и ECU коробки. Предполагаю, что сигнал SIN, как и сигнал CRR, передается с параметром NN - номер ECU. Таким образом можно одновременно мониторить и управлять несколькими устройствами сразу.

Что внутри ECU

      На первый взгляд ECU ниссана кажутся достаточно сложным устройством, с кучей микросхем и прочих странных деталек, найти информацию по которым практически невозможно. На мои запросы производители деталей всегда отвечали одно и то же: "Это заказная деталь, информацию дать не можем".

      Обидно, да... опять пришлось брать в руки осциллограф и немного поизучать железку.

      И что же там внутри: первое и основное - это микроконтроллер, обрабатывающий входные сигналы с датчиков и формирующий необходимые сигналы для исполнительных устройств. Это специализированная микросхема, высокоскоростной A/D конвертер, способный в режиме реального времени обрабатывать большое количество разномастных сигналов и на их основе выдавать управляющие сигналы на форсунки и свечи зажигания.

      Почти все входящие сигналы с датчиков (за исключением сложных аналоговых типа MAF, O2, датчик детонации) проходят через специализированные микросхемы-конверторы уровней. Логические сигналы 0...12V тупо преобразуются в 0...5V (это сигналы с датчиков положений, датчика скорости, сигналы с кнопок и прочее). В этом виде они поступают на входы AD конвертера.

      Общей обработкой всего этого, а также связью со внешним миром занимается центральный микропроцессор, опять-таки специализированный, на базе микропроцессора Hitachi 6303. В старых моделях ECU используется абсолютно нормальный процессор, правда, в undocumented корпусе и не описанный в datasheet. Для хранения управляющей программы используется либо внешнее ПЗУ, либо программа зашивается прямо в процессор (на последних моделях).

Основные чипы в ECU

CPU HD63B03YCP (Motorola 6803 Clone in PGA package)
Hitachi HD63140CP (Hitachi Universal Pulse Processor)
NEC 65022L (A) 901 Matches to NEC 65022L or D65022L (RAM chip?)
28 PIN 27C256 EPROM chip (Program code and maps)

Чип HD63140CP - про него мало что известно, вообще это " universal pulse processor", содержащий порты ввода-вывода, watchdog таймер, регистры данных A/D, регистр I/O, регистр прерываний и 1024 байта SRAM.

Mitsubishi M59203P - Mitsubishi chip for knock sensing
HD14053BP chip - ?

В старых ECU на отдельной плате размещался блок обработки сигнала датчика детонации.

17.12.10

СТО забудьте, спецов минимум стоящих, короче как повезет, учите МАТ-часть!!!!

04.01.11

Мужики, не тратьте столько времени и сил, эту работу уже сделали. Цена вопроса 7500руб. http://vconsult.narod.ru/index.htm Внешний вид конечно подкачал, но начинка видимо работает. Александр.

04.01.11

А вот еще проще, дешевле и цивильней:


http://www.multitronics.ru/about_consult1/


Тут уже цена вопроса от 2500руб и хороший внешний вид.


С уважением, Александр.

05.01.11
Очень хорошая и нужная вещь. Сам хочу купить себе в скором времени.
07.01.11

доброго времени суток. про диагностику НИССАН с ОБД-1 ( консалт-1) вопрос такой, на тарых колодках которые 14 пиновые такие разъему:
1.тх- rx вход-выход данных
2 +12 - питание
3. гроунд - земля
4. ABS DIAG - зачем он нужен ? для диганостики АБС ?
5.chk - идет только на лампочку ? через него ошибки не читаются ?
6- clk - что за проводок такой ? для чего он ?

просто я ппоставил на альмеру n16 двигатель от японской примеры в 2 литра, и там старый разъем диагностики и немогу теперь прочитать ошибки
надеюсь на вашу помощь
07.01.11

сорри за есчо один пост но не нашел кнопочку РЕДАКТИРОВАТЬ, либо её нет совсем, либо я под утро ослеп...

2Alex474 на НИССАНАХ с 98 года диагностический разъем OBD-2, данный компутер просто втыкается в этот разъем и все, никаких манипуляций с проводочками проводить не надобно, ну кроме как подключить датчик уровня топлива, вывести провода на габариты и зажигание, но это на любителя.

по нему скажу сразу, вещь очень хорошая, даже если исходить из экономической обоснованности покупки, при цене в 2500 она окупит вам поездку на диагностику ЭБУ за пару-тройку раз.

17.01.11

Rain Заинтерисовала Ваша статейка. Как насчет Фордов там тоже в принципе так или другой формат команд. Можно больше информации и можно хотя бы ввиде ссылок.

17.01.11


to Vovan_mail: Доброго времени суток. О принципе рассказано тут, на примере Fiesta.

18.01.11


to Rain: Это не то. Я про железный доступ)))). Это все может и так делать моя прога Скачать. Чтобы через OBD разьем, покопать мозги. Вот в тесте на фокусах не все ошибки выбрасывает. Хочу замутить к примеру устройство, с ЖК дисплеем, которое тупо будет выводить ошибки из памяти ECU с дальнейшим их сбросом.

18.01.11

ELM-327 вбейте в любой поисковик...!) Удачи!)

18.01.11


to Vovan_mail: понял. значит, имеет смысл поискать другую прогу, раз эта выдает не все ошибки или стирает не все. А не проще купить хороший БК и через него это делать?

18.01.11

Парни Вы про что. Во первых прога выше, это я написал, тупо база по ошибкам))))), она не чего не сбрасывает, там можно посмотреть, описание ошибки. Пока не полная, но скоро будет практически полная. Далее я знаком не только с ЕЛМ 327 и 328 и всякими перефирийными устройствами для диагностики. Заводской БК, зачем. Часы с кучей не нужных параметров, у нас что Боинг 747. Когда можно самому смастерить Допустим на PIC 18F2550 и на четырех строчном ЖК индикаторе простое устройство, для считывания ошибок с авто. 600 рублей и интересная работа + знания или 2000 рублей без остального.

18.01.11


NikolAs: ELM-327 вбейте в любой поисковик...!) Удачи!) #
Как раз такое устройство я сейчас сам собираю. OBDII AllPro adater. Если покупать, то только точто сам не можешь сделать или кода руки кривые))))))

20.01.11


to Vovan_mail: Полностью согласен. Но я заказал через ebay

вот здесь

http://electronics.shop.ebay.com/i.html?_nkw=elm+327&_sacat=3270&_odkw=&_osacat=3270&_trksid=p3286.c0.m270.l1313 (за 20 баксов если одну покупать)


себе и друзьям несколько штук ..сделали мне китаеси скидку в цене ,получилось по 11 баксов!))) И очень доволен.И потом с прошивкой можно напортачить, если самому собирать...Были у знакомых претенденты....Увы и не все параметры читались....А так у меня есть готовый рабочий девайс за смешную цену,позволяющий мне корректно снимать результаты и работать с ноутбуком ......Уже его окупил ,скидывая ошибки системы двигателя на разных других марках и диагностировать основные параметры.Набор программ достаточен!Удачи!)

20.01.11


to Vovan_mail: Да и еще ...ребяты после этого еще и тут выбрали по смешным ценам 2DIN магнитолы с камерами заднего вида ...болдеюТь!)))) Удачи!)

08.04.11

кто-нибудь подскажите пожалуйста код P0031 ,U1001, U1000( НАК)

11.04.11


to alexx_09:


Р0031 - Цепь подогревателя переднего кислородного датчика (A/F) - низкий уровень входного сигнала.

U1001 - цепь шины CAN

U1000 - тоже кан-шина.

27.08.11

подскажите пож-ста у меня ниссан альмера двигатель1.5dci (k9k) заглохла и не заводится, сделали диагностику были ошибки (р0202. р0100. р0409. р0089. р0225. р0235. р0231), их сбросили, но появились другие и не сбрасываются (р0608. р1641. р1642)

27.08.11


to vbn161:

P0608 Неисправность датчика VSS "A" блока управления

P1641 Контрольная цепь индикаторной лампы неисправностей (MIL)

P1642 Высокий уровень сигнала показаний цепи топливного насоса


Проверяйте подачу топлива.

27.08.11

to Messir:как проверять?

я снял форсунку подсоединил её но снеё не чего , на неё давит а с неё не выходит


Написать комментарий
Участники клуба оставили сообщений: 45351
Последний зарегистрированный участник клуба: 5030367