148

Расшифровка данных в CAN шине VW Polo sedan

Всем привет.

Когда то я загружал видео на пикабу с разбором значений can шины автомобиля. Но тогда пост не стрельнул. После этого статья была переписана в виде статьи с большим количеством поясняющих изображений. Эта статья изначально была опубликована на Хабре (где получила хорошие отзывы), а сегодня я решил еще раз попробовать рассказать по этом на пикабу. Тематика тут явно не пикабушная, потому посмотрим, стоит ли продолжать тут эту тему.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

Сегодня мы поговорим о методах расшифровки данных CAN шины на примере автомобиля VW Polo Sedan 2019 года выпуска. В интернете такие статьи часто называют Хаками CAN шины, но мне такое название не по душе.

В статье описаны методики поиска нужных данных в CAN шине автомобиля, примеры применения этих методик на VW Polo Sedan. В качестве оборудования для подключения к CAN шине используется Vega MTX. Еще чуть-чуть поговорим о телематике.


Подключение к CAN шине произведено в двух местах: за приборной панелью (шина 500 Kbit/s) и за магнитолой (100 Kbit/s). Так же есть одно дублирующее подключение — подключение к разъему OBDII непосредственно на самом разъеме (500 Kbit/s).

Из использованных инструментов: блок мониторинга транспорта Vega MTX, оснащенный CAN сканером. Для его настройки на ПК программа Конфигуратор 1.27.14.

Больше информации о подключении к автомобилю и о MTX можно получить из видео, которое будет в конце статьи.

При подключении ко всем CAN шинам мы увидим такую картину:

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

В этом потоке данных надо найти те биты и байты, которые отвечают за нужные нам параметры.

На скриншоте ниже показано сколько датчиков в данный момент прописано в блоке телематики, и это еще не полный список. Можно уходить еще глубже и искать еще большее количество датчиков. Часть из этих датчиков в режиме реального времени отсылает показания на сервера, что позволяет в любой момент видеть состояние своего автомобиля.

Телематика — тема для отдельной статьи, поэтому не будем тут подробно на этом останавливаться.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

Сразу появляется вопрос — зачем нужно искать данные в потоке, если можно их увидеть через ELM327 или другие диагностические приборы?

Здесь уже вопрос в том, для чего нам нужны эти данные. В нашем случае данные нам нужны для телематики, и, чтобы не вмешиваться в работу CAN шины, и не слать в нее ни каких данных, мы ищем их в потоке. В Vega MTX есть специальный режим работы с CAN шиной — режим «прослушивания». Режим говорит сам за себя, оборудование только слушает кан шину и ничего в нее не отправляет, тем самым минимизируя какие либо воздействия на штатную систему автомобиля.

К примеру датчик на открытие двери. Если мы будет его спрашивать запросом, то мы сможем это делать только на включенном зажигании. После выключения зажигания и засыпания CAN шины этот датчик будет нам недоступен. Если же мы найдем этот датчик в CAN потоке, то мы будем его видеть все время, когда работает CAN шина. А, при открытии двери, CAN будет просыпаться автоматически.

Также следует понимать, что все приведенные ниже примеры актуальны только для Polo Sedan в комплектации connect. В других комплектация может не быть каких-то из приведенных датчиков, а для других марок и моделей автомобилей данные будут находится совершенно в других ID.

Обращаю внимание, что по умолчанию в Конфигураторе стоит отображение значений в HEX формате. В дальнейшем нам не раз придется переводить данные из HEX формата в десятичные значения. Легче всего это сделать с помощью встроенного в Windows 10 приложения Калькулятор. Переводим его в режим “программист” и у нас появляется выбор, в какой системе счисления вводить данные, и они дублируются в других системах счисления.

По методу поиска все датчики в автомобиле я разделяю на несколько типов:

1. Бинарные датчики.

2. Быстро меняющиеся датчики.

3. Температурные датчики.

4. Пробег автомобиля.

5. Датчики уровня.

6. Датчики индикации.

7. Датчики с запросами.

Теперь перейдем к методам, с помощью которых можно найти каждый тип датчиков.


1. Бинарные датчики


Начнем с самых простых датчиков, бинарных.

К этим датчикам относятся датчики дверей, ремни безопасности, тормоз (горят ли стоп сигналы), ручной тормоз, нажаты ли кнопки и т.д. Их значение помещается в 1 бит, то есть может быть 0 (дверь закрыта) или 1 (дверь открыта).

Поиск их прост, но требует внимательности. Для поиска двери водителя надо открывать/закрывать дверь и смотреть, что меняется в CAN шине.

Конфигуратор подсвечивает красным те данные, в которых были изменения в течении нескольких последних секунд.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

В нашем случае за дверь водителя отвечает нулевой бит первого байта сообщения с ID 470.

В том же байте лежат датчики все остальных дверей + датчик багажника.


2. Быстро меняющиеся датчики


Быстро меняющиеся датчики похожи на бинарные датчики, только их значение больше, чем 1 бит. На эти датчики мы можем воздействовать и сразу же видеть изменения в CAN — шине.

К таким датчика относятся большинство датчиков положения: положения педали газа, положение стекол, положение АКПП, положение ключа зажигания. Помимо них это датчики скорости, оборотов, датчики ускорения руля, ускорения педали газа и т.д.

Для начала разберемся с датчиками положения на примере датчика положения педали газа.

Для этого глушим автомобиль, включением зажигание и, не заводя двигателя, нажимаем на педаль газа и следим за изменением в CAN шине.

Как правило, при отпущенной педали газа значение этого датчика 0, и, по мере нажатия на педаль газа, увеличивается до какого либо значения. Такой параметр мы видим в первом CAN в ID 280. Пятый байт изменяется от 0 (педаль отпущена) до FA (педаль нажата “в пол”).

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

Если перевести FA из HEX в DEC, то получим число 250. Следовательно, чтобы получить нажатие на педаль газа в процентах (от 0 до 100) надо умножить наше значение на 0.4.

Теперь перейдем к датчикам, которые не влезают в один байт, например, к оборотам двигателя. Плавно повышаем и понижаем обороты двигателя, при этом смотрим, что меняется в CAN шине. Обороты двигателя находятся в том же ID, что и педаль газа.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

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

Дальше надо перевести данные из HEX в DEC.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

Дальше надо оценить реальные обороты по тахометру, или по диагностическим приборам. В моем случае стрелка была, примерно на 1600 об/мин по тахометру.

Дальше делим данные из CAN в десятичном формате (6508) на обороты двигателя с тахометра (1600) получаем 4.0675. Учитывая погрешность определения оборотов на глаз, округляем делитель до 4. После этого надо проверить показания по нескольким точкам. Для этого педалью газа выставляем разные обороты двигателя и сверяем их с данными из CAN шины.

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

Таким образом ищется большое число датчиков: усилия на тормозе, положение руля, ускорение руля, скорость автомобиля и т.д.


3. Температурные датчики


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

Подключаем диагностику, выбираем температуру двигателя, и сравниваем показания CAN шины и данных из диагностики. Строим таблицу соответствия и подбираем коэффициенты.

В результате подбора коэффициентов появилась формула для расчета температуры.

XX* 0.75 — 48

где XX — значение 1 байта из ID 288 в DEC.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

по формуле можно подсчитать, что на скриншоте была температура

179 * 0.75 — 48 = 86.25 °C.

где 179 это переведенное в десятичную систему число B3 из первого байта ID 288.

Но это тяжелый случай, на многих авто температура ищется намного легче.

Так как в шине сложно передать отрицательное число, то производители в качестве 0 измерений принимают значение -40°C, -48°C или -58°C. Поэтому подключаем диагностику и смотрим, какое сейчас значение температуры. Прибавляем к этому значения 40 (48 или 58), и переводим в HEX. Ищем полученное число в потоке. Ждем когда температура машины изменится на один градус и сверяем с найденным значением. Если его значение тоже увеличилось на 1, значит это нужный нам датчик.

Важно не путать значения из CAN шины со значениями диагностических запросов. Если одновременно будете искать показания в шине и будет подключен диагностический прибор, то в шине появятся еще и ответы на диагностические запросы. Их можно определить по ID. Обычно все, что идет свыше 700 ID — диагностические запросы и ответы.

Так же температуру охлаждающей жидкости всегда можно сделать запросом, о данном методе будет описано ниже в разделе о датчиках с запросами.

Можно для поиска температуры воспользоваться и другим методом: находим физически датчик температуры охлаждающей жидкости (ДТОЖ) на двигателе, отключаем его и подключаем к проводке автомобиля переменный резистор. Далее вращая резистор и следя за CAN шиной по методике поиска быстро меняющихся данных, можно найти показания температуры двигателя.

На практике таким методом не пользовался, так как ТОЖ всегда находилась или в потоке, или спрашивали машину запросом.


4. Пробег автомобиля


Один из самых важных параметров для телематики.

Для начала надо оценить, каких размеров мы ищем число. Если взять 2 байта (16 бит) данных, то в них максимум влезет число FF FF = 65 535. Автомобиль явно может проехать свыше 65 тысяч, значит пробег автомобиля должен быть минимум 24 бит длинной. Туда уже влезет 16 млн. км., что явно достаточно для пробега.

Но опять же, в разных автомобилях по разному. В Polo Sedan пробег пишется в км, в некоторых французах он передается с точностью до 100 метров. тогда число может занимать и 32 и больше бит.

Дальше для поиска следует взять пробег с приборной панели автомобиля и перевести его в HEX.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

В нашем случае это 5732 км. Переводим его в HEX и получаем 16 64. Дальше поиском надо найти строку, где будет встречаться эта комбинация. Искать надо по одному байту, то есть сначала искать 16, потом в найденых вариантах смотреть, есть ли рядом с числом 16 еще и число 64. Число 64 может быть как слева, так и справа от числа 16. Так как пробег в этом автомобиле не большой, то, вероятнее всего, рядом с числом 64 так же будет 00. В Конфигураторе есть удобный поиск (CTRL + F), если пользуетесь другим инструментом, то придется искать вручную эти данные.

В нашем случае пробег найден в 520 ID

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

00 16 64 = 5732 км.

Для проверки желательно проехать еще несколько километров и проверить значение найденного датчика.

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


6. Датчики уровня


Второй наиболее важный датчик для телематики — датчик уровня топлива. Можно его найти или в потоке, что предпочтительно, или запросом (менее предпочтительно, но в некоторых авто по другому не получится).

Для начала надо найти показания уровня топлива в диагностическом приборе. У меня уровень топлива нашелся в комбинации приборов (17 блок). В комбинации приборов показания с датчика уровня идут в литрах.

Сейчас в автомобиле 21 литр топлива.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

Переводим 21 из DEC в HEX и получаем число 15. Поиском пробуем найти его. В потоке находится данное число в ID 320. Если число не находится, то нужно попробовать искать значения на единицу больше или меньше. В некоторых авто топливо идет с точностью в пол литра, потому надо поискать значение в 2 раза больше.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

После того, как найден уровень топлива надо залить в автомобиль несколько литров топлива и посмотреть за результатом.

Так же можно разобрать бензобак, вытащить ДУТ из бака и перемещать его, следя за показания CAN шины. Или же снять разъем с ДУТ и подключить туда переменный резистор. Вращая его и следя за изменениями можно найти датчик уровня топлива. Если решили разбирать, тогда уровень топлива следует искать по методике поиска быстро меняющихся датчиков.

Так же при поиске не следует брать во внимание данные с ID свыше 700. Это диагностические запросы. После отключения диагностического оборудования эти данные пропадут. Более подробно с запросами мы разберемся ниже.

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

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

Также уровень топлива (в процентах) можно найти в стандартных OBDII запросах, но на VAG группе они не всегда показывают верные данные. На Skoda Rapid и Skoda Oktavia при полном баке диагностика показывает уровень топлива 85 %.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

6. Датчики индикации


Датчики индикации сильно похожи на бинарные датчики, и искать их следует по той же методике. К этим датчикам относятся разнообразные иконки на приборной панели. К примеру состояние значка Check Engine находится в первом байте ID 480. При включении зажигания в этом датчике 2С.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

После запуска, когда погаснет значок Check Engine (CE) в этом датчике будут 00.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

Теперь остается вопрос, какой именно бит отвечает за значок CE. Переводим 2C в BIN и получаем число 0010 1100.

Дальше копируем весь 480 ID, изменяем первый байт на 2C (0010 1100) и пробуем посылать этот пакет в автомобиль.

Внимание!, слать данные в автомобиль не всегда безопасно, можно что нибудь сломать, или накрутить пробег. Прибегать к этому методу стоит только в случае, если датчик не смогли найти методом поиска бинарных датчиков.

В моем случае я слал в заведенный авто (что делать не рекомендуется) и у меня на приборке моргает значок CE и EPC.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

Дальше посылаем вместо 2C (0010 1100) 08 (0000 1000). На приборке начинает моргать CE. Следовательно 3 бит отвечает именно за эту иконку.

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

Если слать 04 (0000 0100), то моргает значок EPC.


7. Датчики с запросами


Не все данные можно найти в потоке. К примеру в дизельном VW Transporter T4 в потоке нет температуры двигателя. Ее нет и на приборке. Поэтому приходится автомобиль спрашивать об этих параметрах. То же самое относится к уровню топлива на Rio\Solaris.

В этом примере попробуем спросить уровень топлива Polo Sedan. Заходим в 17 блок, как это мы делали в пункте про поиск уровня топлива, и спрашиваем приборную панель. Проанализировав запросы мы видим, что диагностика спрашивает уровень топлива следующей командой:

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

А в ответ приходит ей:

Расшифровка данных в CAN шине VW Polo sedan Volkswagen Polo, Телематика, Гифка, Видео, Длиннопост

Дальше копируем ID 714, отключаем диагностический прибор и пробуем послать в автомобиль запрос. Если в ID 77E приходит такой же ответ, какой был при подключенной диагностике, то мы получили пакет с уровнем топлива (4 байт. HEX 15 = DEC 21 ) 21 литр.

В Vega MTX есть встроенные средства работы с датчиками с запросами. Там можно настроить, что бы запросы слались после включения зажигания с определенным интервалом или при соблюдение каких то условий.

На этом заканчиваю с методикой поиска данных в CAN шине. Если кто знает еще какие методики поиска нужных данных в CAN шине или поделится своим опытом, то с удовольствием выслушаю их.

До написания данной статьи делал видео по этой теме. В видео есть больше информации по подключению к CAN шине автомобиля, работе с Конфигуратором и файловым сервером

Ссылка на Конфигуратор


На сервере есть настройки для некоторых легковых автомобилей, грузовиков и сельскохозяйственной техники. Все файлы лежат в зашифрованном виде, можно увидеть какие датчики видны в CAN автомобиля. При подключении будут видны значения датчиков, но посмотреть адреса не получится.


Продолжение следует.


Уже на подходе статья о управлении внешней нагрузкой с руля, впрочем мои подписчики в инстаграмм и вк уже в курсе.


Я ВКонтакте https://vk.com/fokin_alexey

Я в инстаграмм https://www.instagram.com/fokin91_smart/

Я на драйв 2 https://www.drive2.ru/users/as91/#blog

0
Автор поста оценил этот комментарий

Видно, что старался, видно, что очень шаришь в этом. Объясни простым языком - зачем всё это?

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

раскрыть ветку (1)
6
Автор поста оценил этот комментарий

к примеру ты хочешь сделать железку, которая будет закрывать двери при наборе определенной скорости. Сделать что б аварийка включалась сама при включении задней передачи. Или сделать управление с руля каким либо устройством (лебедка, камера, откидные рамки и т.д.). А так эту инфу ищут производители сигнализаций и прочей автомобильной электроники. Раньше что б установить сигнализацию надо было по всей машине раскидать провода, что б видеть какие двери открыты, заведен ли двигатель и т.д. А сейчас достаточно к кан шине подцепиться и видеть все эти вещи. Вот сегодня на хабре сделал пост про то, как сделать кнопку спасибо - при зажатии кнопки ок на руле машина 3 раза моргает аварийкой. https://habr.com/ru/post/505026/ . А так да, тема очень узкая и информации в российском интернете почти нет. Да и в иностранных источниках тоже мало про методологию рассказывают.

показать ответы
0
Автор поста оценил этот комментарий
Ссылкой на вк не поделишься?
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

в конце статьи все ссылки есть https://vk.com/fokin_alexey

0
Автор поста оценил этот комментарий

Зачем это на пикабу ? Для Хабра, может быть и подошло бы.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

на хабре это и зашло. Некоторые части про кан шину заходили и на пикабу. Вообще проверял, вопрос был в подаче материала или в самом материале. Походу материал, а сюда заходят готовые решения а не методики решения.

0
Автор поста оценил этот комментарий

А мне интересно, спасибо. С CANом не часто дело имею и в основном со стандартным FMS на грузовиках, может пригодится на будущее.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

подписывайся вк, хабр, инста. Тут врятли буду делать посты с технической тематикой.

показать ответы
1
Автор поста оценил этот комментарий
Интересно. Для меня познавательно и полезно. Спасибо, продолжайте )
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

подписывайся на вконтакт или хабр. Тут эта тематика не заходит.

показать ответы
0
Автор поста оценил этот комментарий
Тема на самом деле огонь! Очень хорошо разжёвано!
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спс

0
Автор поста оценил этот комментарий
А вот мне чисто академически интересно, как вы решаете вопрос с CRC? Не могут данные по шине гулять просто так, обязательно должна быть контроль. И как вычисляете алгоритм?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Контрольки мало где считать приходится, и считать их приходится при передаче, а передавать приходится редко

0
Автор поста оценил этот комментарий

Очень интересно, спасибо! С хабра после разъединения и объединения с гиктаймс как-то ушел.

Подскажите, а не имели дело с т5 мультиваном 2005гв? По слухам из-за старой версии шины у него не будет работать мультируль с китайскими андроид магнитолами. Я пока только собираюсь магнитолу покупать, но параллельно исследую, можно ли будет какой-то сниффер шины сделать и транслировать в магнитолу сигналы кнопок.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Привет. С более свежим дело имел. Про мультируль ничего сказать не могу. Если много упорства приложить то можно сделать почти все. Ставил на ниву руль от Мерседеса и приделывал ее к Андроиде. Правда из руля всю электронику выкидывал и заменял на самодельную

0
Автор поста оценил этот комментарий
Мужик ты очень крут! Восхищаюсь тобой и твоей работай. Пост очень полезный. Спасибо огромное!!!
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо. Если интересно - подписывайся вк, инстаграмм, хабр. Кстати на хабре только что новая статья вышла https://habr.com/ru/post/505026/ .  Тут, скорее всего, больше технической информации не будет, так как мало это кому интересно. Тут будут обзоры готовых устройств без подробного рассказа о том, как это работает.

1
Автор поста оценил этот комментарий

вот теперь понятно, спасибо.

Кстати, можно много полезных вещей сделать на этой теме а не только "спасибо".

Например, на моем x-trail т32 в штате не было датчиков давления шин, а китайцы сделали фишку для обд2 - вставил и функция появилась (по датчикам АБС) + к этому появилась функция блокировки дверей при скорости и моргания аварийкой при резком торможении. (они кстати отключаются переключением фишек). А еще есть блок управления зеркалами и стеклами, подключается в ЦЗ в двери и управляется со штатного брелка. И назрел еще один вопрос - если ты знаешь умеешь управлять каншиной, нужны ли тогда эти блоки от китайцев?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

мне и не нужны китайцы. Vega - это наша контора, Новосибирск. Сделал на ее базе, так как она у меня в машине уж стояла (телематика, отслеживание местоположения, все дела). Так то я и на своей самодельной электронике это сделать могу. По тому, что управляя каншиной можно много чего интересного сделать - это правда. В статье, что я выше приводил я про это и говорил. Из самого легкого - включение аварийки при включении задней передачи. А дальше только фантазия останавливает.

0
Автор поста оценил этот комментарий

Отличный способ проб и ошибок, а неужели этого нет нигде в документации?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

нет, производители легковых авто это не документируют. В гузовых авто есть часть, которая стандартная для всех и протокол описан подробно. С легковыми авто только так.