Приветствую, Хабр! Все началось с того, что у меня на автомобиле (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)


  1. Oangai
    03.02.2025 11:33

    Кстати, просто для информации: когда указываете CASCADE, имейте в виду что точно также называется у BMW их внутренний диагностический программный комплекс энтерпрайзного уровня, разумеется куда более обширный чем эта левая OBDII- читалка. Я просто к тому, что где-то в специализированной прессе может втретится, не удивляйтесь.

    Разрабатывалось в начале 2000х, полностью на java, в качестве сетевого протокола используется soap, но в общем это и всё что про неё известно, внутреннюю архитектуру похоже под большим секретом держат. Хотя, если кто работал с BMW то наверняка про неё слышал, похоже она там у них везде используется.


    1. the_bat Автор
      03.02.2025 11:33

      Хм, странно, а можно какую-то ссылку для информации? Не смог найти по этому поводу ничего.


      1. Oangai
        03.02.2025 11:33

        наиболее подробное описание можно найти вот в этой диссертации от 2008-го года, на немецком: https://d-nb.info/990709965/

        В общем, в других публикациях того времени по промышленной автоматике она тоже не раз упоминалась как пример успешного внедрения, но без подробностей.

        То, что она там и сейчас применяется очень широко, известно из достоверного но закрытого источника по одному из недавних проектов (хотя сам он был тоже не в курсе деталей). Поэтому, если у кого вдруг есть больше информации из реально открытых источников, было бы тоже очень интересно.


  1. nolirpaf
    03.02.2025 11:33

    А вы случайно не знаете, как в Cascade победить ошибку "communication error"? Уже и так и сяк настраивал и дрова менял, а толку нет. Причём такая же история случилась даже на раннее прекрасно работавшем комплекте ноут-эмулятор-кабель. Кабеля точно исправные, с другим ПО прекрасно работают.


    1. the_bat Автор
      03.02.2025 11:33

      Разве что в настройках COM порта попробовать уменьшить задержку порта с 16 на 10 или еще меньше.


  1. Kopcheniy
    03.02.2025 11:33

    мне пришло в голову, что идея с сервисом была здравой

    .)

    Интересно хоть было заниматься, стоило того?


    1. the_bat Автор
      03.02.2025 11:33

      Да, купить всегда проще, но это слишком не интересно)


      1. Kopcheniy
        03.02.2025 11:33

        Порой за сэкономленное время можно сделать что-то очень интересное, на что постоянно не хватает времени. А вот это уже интересно.)

        Хотя иногда действительно лучше сделать, а не покупать.)


      1. tooler
        03.02.2025 11:33

        Спаял и написал прошивку для кейлоггера в PS/2, т.к. было очень надо, а купить такой особенно негде, да и сделать самому интересно. И в итоге узнал, что целю исследования была строка "12345", которую можно было бы и угадать.


  1. sansar
    03.02.2025 11:33

    злая сборка. ft нужно использовать т.к. используется кривой драйвер под нестандартную для uart скорость. С физикой на корейцах проблема не только с распиновкой OBD, но и с уровнями K линии. Самый рабочий вариант был не со стандартными драйверами из стопки elm (патамучта дизельный ёнг очень плохо читается), а на lm с подстроечными резисторами....ловить в каких уровнях хотя бы детект пройдет. Но до иммо и круиза так и не добрался ((


    1. the_bat Автор
      03.02.2025 11:33

      Да для чего вообще придумали скорость 10400?))


  1. Kroligoff
    03.02.2025 11:33

    Непонятно зачем, если есть куча j2534 адаптеров с нормальным стеком, а не через FTDI


    1. the_bat Автор
      03.02.2025 11:33

      Спасибо за информацию. Почитал о считывателях J2534. Когда искал информацию о чтении ошибках ABS на корейцах, мне такие не попадались.  


  1. anonymous
    03.02.2025 11:33


    1. the_bat Автор
      03.02.2025 11:33

      Не могу сказать, почему их обычно используют (не профессионалы). Возможно из-за низкой стоимости и совместимости. В названии статьи VAG, так как используется его схемотехника.