[Разработка под iOS, Гаджеты, DIY или Сделай сам, Автомобильные гаджеты, Инженерные системы] Хакаем CAN шину авто. Мобильное приложения вместо панели приборов

Автор Сообщение
news_bot ®

Стаж: 6 лет 2 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
28-Фев-2021 06:31


Мобильное приложение VAG Virtual CockpitЯ продолжаю изучать CAN шину авто. В предыдущих статьях я голосом открывал окна в машине и собирал виртуальную панель приборов на RPi. Теперь я разрабатываю мобильное приложение VAG Virtual Cockpit, которое должно полностью заменить приборную панель любой модели VW/Audi/Skoda/Seat. Работает оно так: телефон подключается к ELM327 адаптеру по Wi-Fi или Bluetooth и отправляет диагностические запросы в CAN шину, в ответ получает информацию о датчиках. По ходу разработки мобильного приложения пришлось узнать, что разные электронные блоки управления (двигателя, трансмиссии, приборной панели и др.) подключенные к CAN шине могут использовать разные протоколы для диагностики, а именно UDS и KWP2000 в обертке из VW Transport Protocol 2.0.Программный сниффер VCDS
Программный сниффер VCDS: CAN-SnifferЧтобы узнать по какому протоколу общаются электронные блоки я использовал специальную версию VCDS с программным сниффером в комплекте. В этот раз никаких железных снифферов на Arduino или RPi не пришлось изобретать. С помощью CAN-Sniffer можно подсмотреть общение между VCDS и автомобилем, чтобы затем телефон мог прикинуться диагностической утилитой и отправлять те же самые запросы. Я собрал некоторую статистику по использованию диагностических протоколов на разных моделях автомобилей:
  • VW/Skoda/Seat (2006-2012) - приборная панель UDS. Двигатель и трансмиссия VW TP 2.0
  • Audi (2006-2012) - приборная панель VW TP 2.0. Двигатель UDS. Трансмиссия VW TP 2.0
  • VW/Skoda/Seat/Audi (2012-2021) - везде UDS
Протокол UDSUnified Diagnostic Services (UDS) - это диагностический протокол, используемый в электронных блоках управления (ЭБУ) автомобильной электроники. Протокол описан в стандарте ISO 14229-1 и является производным от стандарта ISO 14230-3 (KWP2000) и ныне устаревшего стандарта ISO 15765-3 (Diagnostic Communication over Controller Area Network (DoCAN)). Более подробно в википедии.
Диагностические данные от двигателя по протоколу UDS (Skoda Octavia A7)В моей машине (Skoda Octavia A5) приборка использует UDS протокол, это дало мне легкий старт разработки, т.к. данные были в простом формате Single Frame SF (фрейм, вся информация которого умещается в один CAN пакет) и большинство значений легко поддавались расшифровке. Volkswagen не дает документацию на формат значений, поэтому формулу расшифровки для каждого датчика приходилось подбирать методом логического мышления. Про UDS протокол очень хорошо и с подробным разбором фреймов написано на canhacker.ru.
Разбор UDS пакета в формате Single FrameПример запроса и ответа температуры моторного масла:
7E0 0x03 0x22 0x11 0xBD 0x55 0x55 0x55 0x55
7E8 0x05 0x62 0x11 0xBD 0x0B 0x74 0x55 0x55
Запрос температуры моторного масла:
  • 7E0 - Адрес назначения (ЭБУ двигателя)
  • Байт 0 (0x03) - Размер данных (3 байта)
  • Байт 1 (0x22) - SID идентификатор сервиса (запрос текущих параметров)
  • Байт 2, 3 (0x11 0xBD) - PID идентификатор параметра (температура моторного масла)
  • Байт 4, 5, 6, 7 (0x55) - Заполнитель до 8 байт
Ответ температуры моторного масла:
  • 7E8 - Адрес источника (Диагностический прибор)
  • Байт 0 (0x05) - Размер данных (5 байт)
  • Байт 1 (0x62) - Положительный ответ, такой SID существует. 0x22 + 0x40 = 0x62. (0x7F) - отрицательный ответ
  • Байт 2, 3 (0x11 0xBD) - PID идентификатор параметра (температура моторного масла)
  • Байт 4, 5 (0x0B 0x74) - значение температуры моторного масла (20.1 °C формулу пока что не смог подобрать)
  • Байт 6, 7 (0x55) - Заполнитель до 8 байт
Первая версия мобильного приложения VAG Virtual Cockpit умела подключаться только к приборной панели по UDS.
VAG Virtual Cockpit - экран с данными от приборной панели по протоколу UDSVW Transport Protocol 2.0Volkswagen Transport Protocol 2.0 используется в качестве транспортного уровня, а данные передаются в формате KWP2000. Keyword Protocol 2000 - это протокол для бортовой диагностики автомобиля стандартизированный как ISO 14230. Прикладной уровень описан в стандарте ISO 14230-3. Более подробно в википедии.Т.к. KWP2000 использует сообщения переменной длины, а CAN шина позволяет передавать сообщения не больше 8 байт, то VW TP 2.0 разбивает длинное сообщение KWP2000 на части при отправке по CAN шине и собирает заново при получении.
Диагностические данные от двигателя по протоколу KWP2000 (Skoda Octavia A5)ЭБУ двигателя моей машины использует протокол VW TP 2.0, поэтому мне пришлось изучить его. Видимо Volkswagen разрабатывала транспортный протокол не только для работы по надежной CAN шине, но и для менее надежных линий связи, иначе нет объяснения для чего требуется такая избыточная проверка целостности данных. Главным источником информации по VW TP 2.0 является сайт https://jazdw.net/tp20.Разбор протокола VW TP 2.0 на примере подключения к первой группе двигателя:200 01 C0 00 10 00 03 01Настраиваем канал с двигателем. Байт 0: 0x01 - двигатель, 0x02 - трансмиссия. Байт 5,4: 0x300 - адрес источника201 00 D0 00 03 40 07 01Получили положительный ответ. Байт 5,4: 0x740 - к двигателю обращаемся по этому адресу 740 A0 0F 8A FF 32 FF Настраиваем ЭБУ на отправку сразу 16 пакетов и выставляем временные параметры 300 A1 0F 8A FF 4A FFПолучили положительный ответ740 10 00 02 10 89Отправляем команду KWP2000 startDiagnosticSession. Байт 0: 0x10 = 0b0001 - последняя строка данных + 0x0 счетчик отправляемых пакетов 0 (0x0 - 0xF)300 B1Получили первый ACK300 10 00 02 50 89Получили положительный ответ. Байт 0: 0x10 - cчетчик принимаемых пакетов 0740 B1Мы отправили первый ACK, что получили ответ740 11 00 02 21 01Делаем запрос. Байт 0: 0x11 - счетчик отправляемых пакетов 1. Байт 3: 0x21 - запрос параметров. Байт 4: 0x01 - из группы 1300 B2Получили второй ACK300 22 00 1A 61 01 01 C8 13Байт 0: 0x22 - 0b0010 (не последняя строка данных) + 0x02 (cчетчик принимаемых пакетов 2). Байт 1,2: 0x00 0x1A длина 26 байт. Байт 3,4: 0x61 0x01 - положительный ответ на команду запроса параметров 0x21+0x40=0x61 из 0x1 группы. Байт 5: 0х01 - Запрос RPM (соответсвует протоколу KW1281). Байт 6,7: (0xC8 * 0x13)/5 = 760 RPM (формула соответствует протоколу KW1281)300 23 05 0A 99 14 32 86 10Байт 1: 0x05 - запрос ОЖ. Байт 2,3: (0x0A * 0x99)/26 = 57.0 C. Байт 4: 0x14 = запрос лямбда контроль %. Байт 5,6: 0x32*0x86; Байт 7: 0х10 - двоичная настройка300 24 FF BE 25 00 00 25 000x25 0x00 x00 - Заполнитель, до 8 параметров300 15 00 25 00 00 25 00 00Байт 0: 0x15 - 0b0001 (последняя строка данных) + 0x5 (счетчик принимаемых пакетов 5)740 B5Отправляем ACK. Прибывляем к нашему предыдущему ACK количество полученных пакетов 0xB1 + 0x4 = 0xB5300 A3Запрос KeepAlive, что мы еще на связи740 A1 0F 8A FF 4A FFОтвет KeepAlive740 A8Мы разрываем связь300 A8ЭБУ в ответ тоже разрывает связьВо второй версии мобильного приложения VAG Virtual Cockpit появилась возможность диагностировать двигатель и трансмиссию по протоколу VW TP 2.0.
VAG Virtual Cockpit - экран с данными от двигателя по протоколу VW TP 2.0Диагностический адаптер ELM327Для меня некоторое время было вопросом, как получить данные из CAN шины и передать на телефон. Можно было бы разработать собственный шлюз с Wi-Fi или Bluetooth, как это делают производители сигнализаций, например Starline. Но изучив документацию на популярный автомобильный сканер ELM327 понял, что его можно настроить с помощью AT команд на доступ к CAN шине.
Копия диагностического сканера ELM327Не все ELM327 одинаково полезныОригинальный ELM327 от компании elmelectronics стоит порядка 50$, в России я таких не встречал в продаже. У нас продаются только китайские копии/подделки, разного качества и цены 10-30$. Бывают полноценные копии, которые поддерживают все протоколы, а бывают и те которые умеют отвечать только на несколько команд, остальные игнорируют, такие адаптеры не имеют доступ к CAN шине. Я например пользуюсь копией Viecar BLE 4.0, который поддерживает 100% всех функций оригинала.Для работы с протоколом UDS через ELM327 нужно указать адреса назначения, источника и разрешить длинные 8 байтные сообщения, по умолчанию пропускается максимум 7 байт.Последовательность ELM327 AT команд для работы с UDS по CAN шине:
ATZ // сброс настроек
AT E0 // отключаем эхо
AT L0 // отключаем перенос строки
AT SP 6 // Задаем протокол ISO 15765-4 CAN (11 bit ID, 500 kbaud)
AT ST 10 // Таймаут 10 * 4 мс, иначе EBU шлет повторные ответы каждые 100 мс, а мы не отвечаем, потому что ожидаем конца, а нам нужен только первый ответ
AT CA F0
AT AL // Allow Long (>7 byte) messages
AT SH 7E0 // задаем ID, к кому обращаемся (двигатель)
AT CRA 7E8 // CAN Receive Address. Можно задать несколько 7Xe
AT FC SH 7E0
AT FC SD 30 00 00
AT FC SM 1 // Режим Flow Control 1 должен быть определен после FC SH и FC SD, иначе в ответ придет "?"
03 22 F4 0С 55 55 55 55 // UDS запрос оборотов двигателя
Для работы с протоколом KWP2000 через ELM327 нужно только указать адреса назначения и источника.Последовательность ELM327 AT команд для работы с VW TP 2.0 по CAN шине:
ATZ // сброс настроек
AT E0 // отключаем эхо
AT L0 // отключаем перенос строки
AT SP 6 // Задаем протокол ISO 15765-4 CAN (11 bit ID, 500 kbaud)
AT PB C0 01
AT SP B // Задаем протокол USER1 CAN (11* bit ID, 125* kbaud)
AT ST 10 // Таймаут 10 * 4 мс, иначе EBU шлет повторные ответы каждые 100 мс, а мы не отвечаем, потому что ожидаем конца, а нам нужен только первый ответ
AT SH 200 // Обращаемся к 200 ID
AT CRA 201 // Ждем ответа от 201 Блок управления двигателем, 202 - Transmission, 203 - ABS, 207 -  Приборная панель
01 C0 00 10 00 03 01 // Initiate channel setup with ECU module - 01, request it use CAN ID 0x300; Transmission 02; ABS 03
AT SH 740 // адрес блока 740 получен в ответе на предыдущую команду
AT CRA 300 // Ждем ответа от 300 ID
A0 0F 8A FF 32 FF // Tell ECU module to send 16 packets at a time, and set timing parameters
10 00 02 10 89 // Send KWP2000 startDiagnosticSession request 0x10 with 0x89 as a parameter.
B1 // ACK
11 00 02 1A 9B // Запрос названия блока KWP2000
Мобильное приложение VAG Virtual CockpitДля разработки мобильного приложения подключаемого к автомобилю требовалось:
  • Сниффером собрать трафик от диагностической утилиты VCDS
  • Изучить работу протоколов UDS, VW TP 2.0, KWP2000
  • Настроить диагностический сканер ELM327 на работу с UDS и VW TP 2.0
  • Изучить новый для меня язык программирования Swift

Мобильное приложение VAG Virtual Cockpit для iOSВ итоге получилось приложение, которое сочетает в себе функции отображения точных данных панели приборов и диагностика основных параметров двигателя и трансмиссии. Пару слов про точность данных. Штатная панель приборов не точно показывает скорость - завышает показания на 5-10 км/ч, стрелка охлаждающей жидкости всегда на 90 °C, хотя реальная температура может быть 80 - 110 °C, стрелка уровня топлива до середины идет медленно, хотя топлива уже меньше половины и при нуле на самом деле топливо еще есть в баке. Производитель это делает для удобства и безопасности водителя.На данный момент приложение показывает следующие параметры:Приборная панельДвигательТрансмиссия (температура)1) Какая дверь открыта
2) Скорость
3) Обороты
4) Температура масла
5) Температура ОЖ
6) Топливо в баке в л.
7) Запас хода в км.
8) Средний расход
9) Время в машине
10) Пробег
11) Температура за бортом1) Обороты
2) Массовый расход воздуха
3) Температура забора воздуха
4) Температура выхлопа (рассчитанная)
5) Критический уровень масла
6) Уровень масла
7) Наддув турбины (реальный)
8) Наддув турбины (ожидаемый)
9) Пропуски зажигания в цилиндрах
10) Углы откатов зажигания в цилиндрах1) ATF AISIN (G93)
2) DSG6 (G93)
3) Блок управления DSG6 (G510)
4) Масло диска сцепления DSG6 (G509)
5) Мехатроник DSG7 (G510)
6) Процессор DSG7
7) Диск сцепления DSG7Я стремлюсь чтобы приложение поддерживало как можно больше моделей автомобилей. Пока что поддерживаются производители: Volkswagen, Skoda, Seat, Audi. На разных комплектациях могут отображаться не все параметры, но это поправимо.Сейчас я провожу тестирование версии 3.0. Приложение доступно только на iOS, после релиза 3.0 перейду к разработке версии для Android.Если интересно потестировать и есть желание принять участие в проекте, то установить приложение можно по ссылке https://testflight.apple.com/join/Yx9vcPxQ. Также я веду бортжурнал на drive2.ru, где делюсь полезной информацией и новостями о VAG Virtual Cockpit.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_razrabotka_pod_ios (Разработка под iOS), #_gadzhety (Гаджеты), #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_avtomobilnye_gadzhety (Автомобильные гаджеты), #_inzhenernye_sistemy (Инженерные системы), #_kwp2000, #_uds, #_kw1281, #_canbus, #_panel_priborov (панель приборов), #_virtual_cockpit, #_volkswagen, #_audi, #_skoda, #_seat, #_razrabotka_pod_ios (
Разработка под iOS
)
, #_gadzhety (
Гаджеты
)
, #_diy_ili_sdelaj_sam (
DIY или Сделай сам
)
, #_avtomobilnye_gadzhety (
Автомобильные гаджеты
)
, #_inzhenernye_sistemy (
Инженерные системы
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 03-Май 10:48
Часовой пояс: UTC + 5