Сейчас посетителей в клубе: 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 на отдельной плате размещался блок обработки сигнала датчика детонации.

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

поменяй форсунки местами, разница если будет то очевидна, делов то...

28.08.11

вообще на всех форсунках тишина

08.10.11

подскажите прогу для диагностики nissan almera 2005г, у меня есть адаптер который я использовал в приоре и программ было достаточно а вот тут засада или плохо ищу?

10.10.11


to sanet: Добрый день. Можно использовать программу Renault - Nissan DDT2000 .

10.10.11

спасибо попробую эту прогу но вот с английским тяжело, а русика нету к ней?

10.10.11


to sanet: Нету ( идет только в английской версии.

10.10.11
sanet: спасибо попробую эту прогу но вот с английским тяжело, а русика нету к ней? #

Оригинальные программы обычно на английском.

24.10.11

Райн, копи-паст первого поста не подойдет для альмер n16 выпуска с мая 2001 года, т.е. когда они перестали выпускаться в японии и начали выпускатся в англии, и все это актуально для праворуких братьев,для N16 она бесполезна по сути дела и в ФАКах по Н16 её явно не место, предлагаю убрать её от туда, дабы не сбивать народ столку, как эта тема сбила меня.

Фишка в том что К-line не будет читатся контроллерами которые предложены в первом сообщении , надо CAN !!! к тому же consul 1 шел до 2001 года, а consul 2 не применялся уже на N16 рестаил

Всяко разно пробовал подключится через OBD 2 - K-line, от субарика взял , кучу софтины перелопатил , потом покурив Google и кучу форумов понял что это бесполезно, так что из раздела ФАКов Н16 можно смело удалять, лучше реально нужные темы туда добавить

буду покупать CANовский

25.10.11

можите закидать меня помидорами, тут я ошибался :


Dimon-811: consul 2 не применялся уже на N16 рестаил #

И все же я победил его и подключился к с помощью этого кабеля, надо было только найти программу с протоколом поддерживающим consul2 через K-line OBD2,прога которая пошла это эта http://www.pccar.ru/showthread.php?t=15767

прога по сути дела простая если почитать инструкцию, чертит графики, делает логи, вывод параметров



кстати как я только не мучал Renault - Nissan DDT2000 так и не удалось подключится

06.04.14

ребята подскажите на алмере тино загорелся значок авс и есп самодиагностику как то можно сделать???

08.11.14

Добрый день!

А не нашел ли кто варианта диагностической программы для работы под Андроидом через блютузный ELM327 с Almera N16?

У меня заработал ELM327 проводной из под W7 64-битной.

Наиболее функциональной показалась TECU 2 - ошибки читает-сбрасывает, параметров читает много, графики рисует. У кого-нибудь получилось найти что-то более функциональное для работы из-под win7 ? ScanMaster-ELM с Альмеркой работает хуже, как мне показалось.

Что еще порекомендуете? Какие программы на ваш взгляд хорошо работают в таком варианте - ELM-Almera N16

11.03.17
Rain: Если кому будет нужно, дам микрокод для PIC #

если актуально, то очень буду благодарен!


Rain: попозже дам полную схему конвертера #

Насколько позже? как бы хотелось бы уже увидеть...)


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