2007—2022. Сетевое издание «Автопипл». Возрастные ограничения: 16+
Почта редакции hkdkest@mail.ru
Телефон +7(499)490-76-06
Общие моменты
Среди производителей автомобилей, пожалуй, только ниссан тщательно скрывает принципы работы и протоколы обмена своей диагностической системы. Более того, всё, что связано с этой диагностической системой, запатентовано и, как следствие, практически никто не выпускает диагностического оборудования для ниссана.
В некоторых ниссанах есть разъем 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 на отдельной плате размещался блок обработки сигнала датчика детонации.
ПОДЕЛИТЬСЯ СТРАНИЦЕЙ
ПОИСК ПО САЙТУ
2007—2022. Сетевое издание «Автопипл». Возрастные ограничения: 16+
Почта редакции hkdkest@mail.ru
Телефон +7(499)490-76-06