
Приветствую, Хабр! Все началось с того, что у меня на автомобиле (Kia Sportage 2) не работает ABS. Как-то давным-давно я приобрел Wi-Fi сканер, который умеет читать ошибки по CAN. Как оказалось, для диагностики ABS/ESP необходима работа с K-Line. И это еще не все…
Самое простое, естественно — это поехать в сервис автодиагностики. Но это не для меня. Я хочу иметь диагностический кабель
Почитав в интернете ворох информации о способах чтения ошибок по OBDII, пришел к выводу, что мне нужен кабель под названием VAG-KKL или какой-то его аналог. Цена за него варьируется от 300 рублей до пары тысяч. В чем, интересно, разница? Погуглив еще немного, я убедился, что отличия все-таки есть и касаются они схемотехники.

Рис.1. Отличия схемотехники диагностических кабелей.
И это еще не весь зоопарк устройств (я не беру в расчет профессиональные сканеры). Основное отличие — это использование микросхемы преобразования USB-UART. Могут использоваться, например, FT232 либо CH340 (наверное, всем известные преобразователи интерфейсов). Некоторые производители ставят кварц на FTDI и пишут, что это основное отличие и без него работать не будет. Дальше следует физика K-Line. Тут, думаю, менее существенно, но все же есть варианты. Например, компаратор LM339/LM393 либо полноценный драйвер MC33199 (или другой).
Как из этого всего выбрать то, что мне нужно? Пошел от обратного. Пока рыскал в поисках информации о шнурке, наткнулся на различные программы для диагностики. Разные программы работают, внимание (!), с разными переходниками. А всего-то хотел ошибки ABS почитать.
Нашел связку: программа CASCADE + шнурок на FT232 + любая физика. Если данное приложение использовать с преобразователем CH340 (или другим), оно работать откажется. Тут мне пришло в голову, что идея с сервисом была здравой, ну да ладно. Нравится мне все усложнять.
Вспомнил, что в одном из проектов я уже использовал микросхемы K-Line и L-Line. Эти интерфейсы используются для обмена данными с блоками автомобиля на основе протокола ISO9141. Отыскал плату давно забытого проекта и нашел на ней впаянный драйвер E-L9637D. Ну и завертелось…

Все для того же проекта много лет назад были приобретены диагностические разъемы OBDII. Напомню, что данный коннектор используется в автомобиле для диагностических (и других) целей. Он имеет 16 контактов и содержит в себе такие выводы, как CAN, J1850, K-Line, L-Line и питание (но бывают варианты).

Рис.2. Разъем OBDII.
Вот такой набор «сделай сам». Выбираем необходимый нам интерфейс обмена данными, земля, питание. Устанавливаем штыри в разъем (их в комплекте 10, видимо все 16 класть очень дорого). Конструкция, на самом деле, довольно удобная. На фото ниже я указал выводы OBDII, которые мне нужно задействовать.

Рис.3. Сборка разъема OBDII.
«Оденьте крышку», ну да ладно. Так как я остановился на программе CASCADE, то в разработке буду использовать преобразователь уровней FT232 и ранее найденный драйвер. В результате некоторых изысканий получилась следующая схема.

Рис.4. Схема диагностического кабеля OBDII.
Тут я совместил различные вариации схем, найденных на просторах интернета. На всякий случай установил кварцевый резонатор для FT232 (который пока паять не буду) и использовал один и тот же преобразователь в разных корпусах (QFN32 и SSOP-28) — какой быстрее найду, тот и запаяю. Добавил несколько светодиодов для отслеживания данных и наличия входного питания. Для диагностики ABS мне нужен только K-Line, но я решил оставить и L-Line, так как он есть в E-L9637D.

Рис.5. Печатная плата в Altium.
Печатная плата довольно простая (микросхема в корпусе SSOP-28 установлена с обратной стороны платы), так что тут заострять внимание не буду. После сборки платы последовала незамедлительная диагностика.

Рис.6. Установленный диагностический кабель.
И ничего… Светодиод питания горит, при опросе автомобиля программой моргают еще два светодиода. Данные с линии не читаются.
Что же, открываю документацию по распиновке диагностического разъема для моего автомобиля.

Рис.7. Распиновка разъема OBDII (нумерация зеркальна, видимо со стороны проводов).
Очень интересно. Корейцы (а может и не только они так делают) разделили диагностику некоторых блоков по разным K-Line. Пока искал информацию по шнуркам, совершенно не подумал о распиновке разъема на авто. Вывод под номером 8 как раз тот, что мне нужен (1 вывод на рис.7). Оказывается, в спецификации OBDII некоторые выводы обозначены как незадействованные и могут использоваться производителем на свое усмотрение.
Плату перезаказывать уже не хочется, поэтому термоклей в помощь. На схеме (рис.4) видно, что все выводы диагностического разъема я подключил через резисторы 0R (как чувствовал). Почитал информацию на форумах: оказывается, покупая шнурок, многие сразу его разбирают и замыкают линии 7, 8, 12 и 15.

Рис.8. Добавление переключателя на L-LINE.
Замыкаю линии 7, 8, 12. Выпаиваю резистор с вывода 15 и ставлю переключатель, чтобы реализовать возможность подключения L-Line (у меня его нет) к K-Line. Кстати, 8 контакт OBDII даже не выведен в штыревую линейку на плате-переходнике от производителя разъема.

Рис.9. Схема подключения переключателя.

Рис.10. Переключатель на плате.
Отлично, теперь у меня есть универсальное решение. Жаль до разработки схемы не обратил внимание на незадействованные выводы и их возможное применение.
Снова подключаем к автомобилю и проверяем. Соединение происходит не с первого раза — нужно ловить момент, когда включать зажигание (нужно еще поиграться со схемой). Вот и долгожданный результат.

Рис.11. Ошибка C1200 ABS.
Полную расшифровку ошибки я нашел в интернете, но и так уже было понятно по описанию, что проблема с датчиком переднего левого колеса (обрыв или короткое замыкание).
Во время всех этих манипуляций пожалел, что по привычке установил разъем microUSB. Думаю, что Type-C был бы удобнее.
Спасибо за внимание и успехов!
Комментарии (15)
nolirpaf
03.02.2025 11:33А вы случайно не знаете, как в Cascade победить ошибку "communication error"? Уже и так и сяк настраивал и дрова менял, а толку нет. Причём такая же история случилась даже на раннее прекрасно работавшем комплекте ноут-эмулятор-кабель. Кабеля точно исправные, с другим ПО прекрасно работают.
the_bat Автор
03.02.2025 11:33Разве что в настройках COM порта попробовать уменьшить задержку порта с 16 на 10 или еще меньше.
Kopcheniy
03.02.2025 11:33мне пришло в голову, что идея с сервисом была здравой
.)
Интересно хоть было заниматься, стоило того?
the_bat Автор
03.02.2025 11:33Да, купить всегда проще, но это слишком не интересно)
Kopcheniy
03.02.2025 11:33Порой за сэкономленное время можно сделать что-то очень интересное, на что постоянно не хватает времени. А вот это уже интересно.)
Хотя иногда действительно лучше сделать, а не покупать.)
tooler
03.02.2025 11:33Спаял и написал прошивку для кейлоггера в PS/2, т.к. было очень надо, а купить такой особенно негде, да и сделать самому интересно. И в итоге узнал, что целю исследования была строка "12345", которую можно было бы и угадать.
sansar
03.02.2025 11:33злая сборка. ft нужно использовать т.к. используется кривой драйвер под нестандартную для uart скорость. С физикой на корейцах проблема не только с распиновкой OBD, но и с уровнями K линии. Самый рабочий вариант был не со стандартными драйверами из стопки elm (патамучта дизельный ёнг очень плохо читается), а на lm с подстроечными резисторами....ловить в каких уровнях хотя бы детект пройдет. Но до иммо и круиза так и не добрался ((
Oangai
Кстати, просто для информации: когда указываете CASCADE, имейте в виду что точно также называется у BMW их внутренний диагностический программный комплекс энтерпрайзного уровня, разумеется куда более обширный чем эта левая OBDII- читалка. Я просто к тому, что где-то в специализированной прессе может втретится, не удивляйтесь.
Разрабатывалось в начале 2000х, полностью на java, в качестве сетевого протокола используется soap, но в общем это и всё что про неё известно, внутреннюю архитектуру похоже под большим секретом держат. Хотя, если кто работал с BMW то наверняка про неё слышал, похоже она там у них везде используется.
the_bat Автор
Хм, странно, а можно какую-то ссылку для информации? Не смог найти по этому поводу ничего.
Oangai
наиболее подробное описание можно найти вот в этой диссертации от 2008-го года, на немецком: https://d-nb.info/990709965/
В общем, в других публикациях того времени по промышленной автоматике она тоже не раз упоминалась как пример успешного внедрения, но без подробностей.
То, что она там и сейчас применяется очень широко, известно из достоверного но закрытого источника по одному из недавних проектов (хотя сам он был тоже не в курсе деталей). Поэтому, если у кого вдруг есть больше информации из реально открытых источников, было бы тоже очень интересно.