В блоге:

2014-03-30

О диагностических адаптерах J2534 (Pass-Thru)

Мир автомобильной диагностики в жутком состоянии. Куча протоколов (половина из которых - это самодеятельность производителей), море диагностических программ, совершенно разные диагностические адаптеры, если речь идет об использовании PC для диагностики. C первым бороться бесполезно, нужно воспринимать как данность. Второе хоть и раздражает, но создает конкуренцию. А вот с адаптерами тоскливо. Приходится подбирать конкретный адаптер для той или иной комбинации "программа + автомобиль".

Хорошо бы, конечно, существовали универсальные доступные адаптеры. Купил и используешь с самой разной техникой. Но сложилась такая ситуация, что таким адаптером де-факто стал только ELM327, клоны которого встречаются в гигантских количествах. И какая-то универсальность присутствует (хотя бы для сузуковского SDL-KWP можно использовать), и способы подключения разные (COM/USB, Bluetooth, Wi-Fi), и купить можно легко. Но в остальном с ELM327 все очень плохо.

А ведь была весьма неплохая попытка создания универсальных адаптеров. Речь о стандартах SAE J2534 (известных как Pass-Thru):

J2534/1 - Recommended Practice for Pass-Thru Vehicle Programming.
J2534/2 - Optional Pass-Thru Features.
J2534/3 - Conformance Test Cases.
J2534/4 - Guidelines for Implementing OEM Diagnostic Applications using J2534 API.

Концептуально очень красиво: зачем специфицировать адаптер, если можно специфицировать программный интерфейс к адаптеру? Производитель диагностического адаптера сам выбирает способ его реализации и подключения к PC: хоть через Bluetooth, хоть через Ethernet, хоть через какой-нить несуществующий USB++. Но он должен предоставить динамически связываемую библиотеку с набором стандартных функций. Программы будут взаимодействовать с диагностируемым оборудованием только через эту библиотеку, не пытаясь лезть к "железу" напрямую.

Как это выглядит на практике: в реестре Windows создается раздел с предопределенным стандартом именем. А внутри создаются подразделы. Один подраздел - это один диагностический адаптер:




В примере выше показано определение трех Pass-Thru адаптеров в реестре.

Для каждого адаптера определяются различные данные: название, поддерживаемые протоколы и т.п. Но, самое главное, определяется путь (FunctionLibrary) до DLL, которая должна предоставить стандартизированный API для данного адаптера. Эту DLL и использует диагностическая программа.

Само API описано в стандарте J2534/1 (несколько измененное техническое описание можно посмотреть здесь: PassThru_API-1.pdf)

API довольно хорошо продумано (гораздо более продумано, что протокол взаимодействия с ELM327). Поддерживаются разные протоколы на достаточно низком уровне:

J1850VPW: GM / DaimlerChrysler CLASS2
J1850PWM: Ford SCP (Standard Corporate Protocol)
ISO9141: ISO9141 and ISO9141-2
ISO14230: ISO14230-4 (Keyword Protocol 2000)
CAN: Raw CAN (custom flow control implemented in software)
ISO15765: ISO15765-2 (CAN physical and data link layers with Network layer flow control)
SCI_A_ENGINE: J2610 (DaimlerChrysler Serial Communications Interface) Configuration A for engine
SCI_A_TRANS: J2610 (DaimlerChrysler Serial Communications Interface) Configuration A for transmission
SCI_B_ENGINE: J2610 (DaimlerChrysler Serial Communications Interface) Configuration B for engine
SCI_B_TRANS: J2610 (DaimlerChrysler Serial Communications Interface) Configuration B for transmission

Для Сузуки нужны ISO14230 и/или ISO15765 (или хотя бы "сырой" CAN), что здесь есть.

Кроме того, есть интерфейс прямой работы с сигналом на отдельных контактах, а так же возможность переключения "протокольных" контактов на нестандартные (Pin Selection). Конечно, сам адаптер должен поддерживать соответствующие протоколы и функции.

Сама концепция работы с командами намного более правильная, чем у ELM327. Там тупиковая идеология "запрос-ответ". Здесь есть две несвязанные функции: отправка сообщений и прием сообщений, что дает гораздо большую гибкость.

В природе есть несколько разных адаптеров, которые соответствуют J2534 (т.н. Pass-Thru адаптеры). Они хорошо знакомы тойотоводам, поскольку фирменная диагностическая программа Techstream как раз работает через J2534-адаптеры. Теоретически можно написать библиотеку для поддержки J2534 для самых разных адаптеров. Есть даже попытка сделать ее для простого K-Line адаптера и адаптера VAG K-Line+CAN Commander 1.4.

Но не все так хорошо, как могло бы быть.

1. Изначально J2534 разрабатывался только для Windows. Без комментариев.

2. Производители Pass-Thru адаптеров захотели "снять сливки", предлагая несложные, в общем-то, решения по диким ценам. Сейчас цены упали, но все равно довольно высоки для обычного пользователя, которым движет только любопытство. В результате ожидаемо подключились китайцы, что привело к появлению клонов и клонов клонов. С учетом невысокого качества реализации программной части (как прошивки адаптера, таки и J2534 библиотеки) это создает море проблем. Кроме того, за бортом остаются различные возможности, присущие полноценным Pass-Thru адаптерам.

3. J2534 разрабатывался для 32-битного Windows старых версий. С развитием 64-битного Windows это создает очень много проблем. Это касается и 64-битных драйверов, и "шизофрении" реестра, и виртуализации реестрового доступа, и 64-битной версии DLL для соответствующих программ. После мучений все сводится к рекомендации использования 32-битного Windows XP двенадцатилетней давности, "основная" поддержка которого уже не проводится, а "расширенная" заканчивается через несколько дней - 8 апреля 2014 года. Передовые технологии!

4. Низкий уровень программной реализации. Особенно это касается драйверов и J2534-библиотеки. Один из дешевых адаптеров предлагает установщик, который просто кидает DLL в корень диска C:, прописывая "гвоздями забитый" путь в реестр.



Кошмар.

5. Большая часть доступных адаптеров представляют собой USB-версии с чипом FTDI. С одной стороны, это хорошо в плане драйверов. А с другой стороны, а где развитие? Где беспроводные способы подключения?


Увы, из-за всего этого Pass-Thru адаптеры так и остались узкоспециализированной вещью, с которой приходится мириться для использования с конкретными программами.

Естественно, что это я пишу не просто так. У меня теперь есть Pass-Thru-адаптер (дешевая китайская версия), которую использую для реализации поддержки J2534 в программе SZ Viewer (для Windows). Про адаптер напишу отдельно.

8 комментариев:

  1. День добрый! Будет ли данный девайс работать с твоей программой - http://www.aliexpress.com/snapshot/6895550373.html?orderId=69183775447860? пишут что для а/м Тоёта..

    ОтветитьУдалить
    Ответы
    1. Теоретически должен, тем более, что похож на тот, который я использую при написании программы: http://malykh.blogspot.com/2014/04/mini-vci.html

      Удалить
    2. Спасибо огромное за твои изыскания! с данным адаптером прочитал данные с двигателя j20a! Где можно пожертвовать на развитие программы?!

      Удалить
    3. Для меня отзывы об использовании программы - это достаточное "пожертвование". :-)

      Удалить
    4. malykh привет. уменя есть пара впросов в личку вот мой гмаил ik.guledani@gmail.com прошу связатся сомнои

      Удалить
  2. Чем мог!) https://www.drive2.ru/l/9597020/ . не нашел показания MAF в вольтах, или нет такого?

    ОтветитьУдалить
    Ответы
    1. Спасибо, интересно. С адаптерами J2534 толком программу не тестировал, поскольку даже были сомнения, что кому-то это нужно. :-)
      Для MAF есть расшифровка только в г/с (воздух-расход воздуха).

      Удалить
    2. Да, 2534 случайно можно сказать попал мне в руки, заказал 1.5 ELM для сравнения

      Удалить

Архив блога