Мир автомобильной диагностики в жутком состоянии. Куча протоколов (половина из которых - это самодеятельность производителей), море диагностических программ, совершенно разные диагностические адаптеры, если речь идет об использовании 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). Про адаптер напишу отдельно.