Серия «ELM327»

7

Серия статей «Пишем ELM327-совместимый адаптер на PIC18F25K80»

Серия ELM327

Дисклеймер. ELM327 — зарегистрированный продукт компании ELM Electronics. Эта серия описывает самостоятельную реализацию совместимого командного интерфейса в учебных целях и не является оригинальной микросхемой ELM Electronics. Проект не предназначен для коммерческого использования под именем «ELM327».


Вводная статья: зачем читать эту серию и что мы будем строить


OBD-II: главный диагностический разъём современных легковых автомобилей

Если вы когда-нибудь приезжали на техосмотр или к механику, вы, скорее всего, видели, как он достаёт небольшое устройство, вставляет его под торпедо и смотрит в ноутбук. Этот разъём — OBD-II (On-Board Diagnostics, версия II). С 1996 года он обязателен для всех легковых автомобилей, продаваемых в США, с 2001 — для бензиновых, а с 2004 — для дизельных легковых в Европе (стандарт EOBD). Сегодня OBD-II / EOBD присутствует в подавляющем большинстве легковых автомобилей на ключевых рынках. Грузовики, автобусы и спецтехника — отдельная история: у них другие разъёмы (9-pin Deutsch), другие протоколы (J1939), другое напряжение борт-сети (24 В) и другие требования к защите.

Через этот разъём можно прочитать коды ошибок (те самые «check engine»), посмотреть живые данные с датчиков — обороты двигателя, температуру охлаждающей жидкости, давление турбины, лямбда-зонды, скорость — и даже сбросить ошибки после ремонта.

Звучит просто. Но внутри — несколько несовместимых друг с другом протоколов, которые появлялись в разное время у разных производителей. CAN, K-line, J1850, ISO 9141 — каждый требует своего физического уровня, своей процедуры инициализации, своего формата кадров.

Именно поэтому появился ELM327.


Что такое ELM327

ELM327 — это микросхема канадской компании ELM Electronics, выпущенная в начале 2000-х. Внутри — маленький микроконтроллер с прошивкой, которая:

  1. Принимает простые текстовые команды через UART — так называемые AT-команды (по аналогии с модемами Hayes)

  2. Транслирует их в нужный протокол шины автомобиля

  3. Возвращает ответ тоже в виде читаемых ASCII-строк

Диагностическая программа на телефоне или ноутбуке не знает ничего про CAN или K-line. Она просто отправляет строку 0100\r (запрос PID 00, поддерживаемые параметры) и получает обратно что-то вроде 41 00 BE 3E B8 10\r\n>. ELM327 берёт на себя всю грязную работу с шиной.

Команды ELM327 — это отдельный небольшой язык. Несколько примеров:

Команда Смысл ATZ Сброс адаптера ATI Версия прошивки ATSP6 Установить протокол ISO 15765-4 CAN 11-бит 500 кбит/с ATH1 Включить заголовки фреймов 0100 Отправить OBD запрос: поддерживаемые PID 01-20

Всего спецификация ELM327 v2.3 определяет более 100 AT-команд и 13 протоколов шин. Наша реализация охватывает набор команд, достаточный для прохождения ELM Scan Adapter Validator и работы целевых диагностических приложений.


Проблема: значительная часть дешёвых «ELM327» на рынке — клоны с неполной реализацией

Поищите «ELM327 Bluetooth» на любом маркетплейсе. Дешёвые Bluetooth-адаптеры стоят на порядок дешевле профессиональных устройств (OBDLink, Kiwi), но значительная часть из них — клоны на дешёвых микроконтроллерах с частичной реализацией протокола. Это не оригинальная микросхема ELM Electronics.

Типичные проблемы клонов:

  • Поддерживают только CAN, на K-line машинах не работают вообще

  • Сообщают версию ELM327 v1.5 или v2.1, хотя реализация неполная

  • AT-команды возвращают мусор или не работают вовсе

  • Теряют соединение по Bluetooth под нагрузкой

  • Не сохраняют настройки между сессиями

Профессиональные адаптеры (Kiwi 3, OBDLink MX+) существенно дороже, но содержат нормальную прошивку. Их недостаток: прошивку нельзя изменить под свои нужды.


Зачем писать своё

Причина 1: Понять, как это работает

Диагностика — это не магия. Это конкретные протоколы с конкретными тайм-аутами и процедурами. Написав адаптер с нуля, вы будете точно знать, почему машина не отвечает, почему инициализация занимает 3 секунды, что значит «BUS INIT: ERROR».

Причина 2: Полный контроль

Хотите поддержку нестандартных PID? Особый формат вывода? Логирование на SD-карту? Всё это невозможно в закрытых устройствах, но тривиально, когда прошивка ваша.

Причина 3: Bluetooth-адаптер со своей идентификацией

Если вы разрабатываете диагностическое приложение, вам нужен адаптер с предсказуемым поведением. Свой адаптер = отсутствие сюрпризов от обновлений стороннего firmware.

Причина 4: Учебная задача мирового класса

Реализация ELM327 затрагивает практически все аспекты embedded-разработки: прерывания, UART, CAN, bit-banging, EEPROM, конечные автоматы, тайминги на уровне микросекунд, совместимость протоколов. Лучшей учебной задачи для начинающего embedded-разработчика трудно придумать.


Что мы будем строить

В этой серии мы разберём готовую рабочую ELM327 v2.3-совместимую прошивку, написанную на C для микроконтроллера PIC18F25K80 в среде MPLAB X / XC8.

Прошивка реализует:

  • ELM327 v2.3-совместимый набор AT-команд, достаточный для прохождения ELM Scan Adapter Validator и работы целевых приложений

  • ISO 15765-4 (CAN OBD) — 11/29-бит, 500/250 кбит/с, включая ISO-TP многофреймовый обмен

  • ISO 9141-2 — 5-baud slow init, K-line

  • ISO 14230-4 (KWP2000) — fast init и 5-baud init

  • SAE J1850 PWM и VPW — логика протокола реализована в коде; требует отдельного физического уровня (MC33390 и аналоги), не входит в базовый BOM

  • SAE J1939 — программная поддержка CAN 29-бит кадров; для грузовиков нужна аппаратная версия под 24 В и 9-pin Deutsch разъём

  • Bluetooth через модуль HC-05 с автонастройкой (Android/Windows; для iOS нужен BLE или Wi-Fi модуль)

  • Полное сохранение настроек в EEPROM

  • Диагностические счётчики и отладочные команды

Прошивка проходит тест совместимости ELM Scan Adapter Validator (ELM 2.3). В последней главе подробно разберём результаты тестирования, что именно проверялось и какие незначительные расхождения с оригинальным поведением остаются (они не мешают работе целевых приложений).


Требуемые знания

Серия рассчитана на начинающих embedded-разработчиков. Мы предполагаем, что вы:

  • Знаете основы C (указатели, структуры, битовые операции)

  • Слышали про микроконтроллеры и регистры периферии

  • Имеете общее представление о том, что такое UART и SPI

Знания CAN, K-line, J1850, ISO-TP не требуются — мы объясним каждый протокол с нуля, начиная с физического уровня.


Что вам понадобится для практики

Готовый dev-kit (собранная плата с PIC18F25K80, TJA1050, K-line драйвером и HC-05) доступен для приобретения — подробности в комментариях к статье.

Компонент Примечание PIC18F25K80 Основной МК. Доступен в DIP-28 PIC18F26K80 Альтернатива с большей Flash TJA1050 CAN трансивер Драйвер K-line (LIN) Например, L9637D или TJA1020 HC-05 Bluetooth модуль PICkit 3/4 Программатор MPLAB X + XC8 Бесплатный компилятор OBD-II J1962 male connector или пиг-тейл Для подключения к машине


Структура серии

# Статья Тема 0 Эта статья Обзор серии 1 Глава 1 Выбор железа и конфигурация МК 2 Глава 2 Архитектура прошивки: главный цикл, ISR, структуры 3 Глава 3 UART и Bluetooth: буферизация и автонастройка HC-05 4 Глава 4 Таймеры, EEPROM и системные утилиты 5 Глава 5 CAN шина: инициализация, отправка, приём, фильтры 6 Глава 6 ISO-TP: многофреймовый обмен поверх CAN 7 Глава 7 K-line: ISO 9141 и KWP2000 от физики до протокола 8 Глава 8 J1850 PWM и VPW 9 Глава 9 Диспетчер протоколов и OBD-запросы 10 Глава 10 Парсер AT-команд 11 Глава 11 Тестирование совместимости с ELM327

Полный исходный код со схемами и проектом MPLAB X будет опубликован в последней статье серии.

Показать полностью 3
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества