Софт для can шины

Видео:MCP2515, контроллер CAN шины с интерфейсом SPIСкачать

MCP2515, контроллер CAN шины с интерфейсом SPI

Дружим программу CANHacker и модуль 2CAN от Starline

Прочитал замечательную статью на Хабре, habrahabr.ru/post/256493/:

Софт для can шины

и решил на её основе, использовать уже готовый имеющийся модуль 2CAN (описанный мной в предыдущей статье) совместно с написанной и довольно распространенной уже программой CANHacker. Удивительным образом, в статье автора, и имеющимся у меня модулем 2CAN совпадают по назначению все выводы микроконтроллера, разница только в частоте кварцевого генератора. Получается, вносить изменения в плату модуля мне не придётся. Установил программный продукт STM32Cube MX с необходимыми компонентами, и немного изменил настройки и код в проекте, любезно предоставленные автором статьи:

Софт для can шины

1. Меняем параметры системы тактирования:

Софт для can шины

2. Добавляем дополнительный вывод для контроля системы тактирования RCC_MCO -> PA8:

Софт для can шины

3. Далее генерируем код и затем автоматически запускаем компиляцию в KEIL, при этом возникает ошибка компиляции, имеющийся у меня KEIL не понимает две строчки на ассемблере, но так как мы не собираемся спать во время работы, закоментируем их:

Софт для can шины

4. Далее добавим команду, которая задает режим микросхемы трансивера CAN (PB7 -> «1»):

Софт для can шины

5. Припаиваем к модулю 2CAN выводы для подключения к шине CAN, и выводы для программирования по SWD, питание же платы осуществляется через разъем USB:

Софт для can шины

6. Припаиваем резистор ( 560 Ом, но не критично ) для правильной работы USB:

Софт для can шины

7. Программируем:

Софт для can шины

Соответствие выводов платы и модуля такое:

Софт для can шины

8. Проверяем как наш модуль определяется компьютером, и зададим более удобный для работы номер COM порта для модуля:

Софт для can шины

9. Запускаем программу, настраиваем на заданный COM порт, и подключаемся к работающей CAN шине какого либо устройства (драйвера от STM были уже установлены), результат есть:

Софт для can шины

Подключаться к шине автомобиля решил с помощью имеющегося диагностического адаптера ELM327 (удобный корпус, легко устанавливать и вынимать), просто припаяв провода к его разъему от 2CAN модуля:

Софт для can шины

Три провода, CANH (pin 6), CANL (pin 14) и «земля» (pin 4 & 5):

Софт для can шины

Вот к примеру показания с «Дастера» 1.6, там CAN шиной объединены только блок управления двигателем, блок ABS и блок 4WD, подключаемся:

Софт для can шины

И видим такие данные:

Софт для can шины

Записываем их в лог-файл. Импортируем в excel, проводим переупорядочивание и фильтрацию. И в результате можно увидеть следующие данные с can шины автомобиля: обороты двигателя, положение педалей газа, тормоза и сцепления, скорость каждого колеса в отдельности, работу кондиционера и т.д (некоторые значения пока для меня тайна). Полученные данные свел в таблицу, если что то надо исправить или дополнить, подсказывайте.

Софт для can шины

Некоторые данные нуждаются в простой обработке, где-то поделить, где-то рассчитать по формуле. Но все просто и без заморочек.
Или к примеру, Outlander III, подключаемся к CAN шине салона автомобиля, за приборным щитком.

Смотрим данные на экране компьютера, и что меняется при нажатии на кнопку открыть и закрыть автомобиль. И пары нажатий на соответствующие кнопки, хватает узнать какие команды надо подать, чтобы открыть или закрыть автомобиль. Эти коды кратковременно появляются в строчке, обведенные красным овалом. Повторяем эти команды в окне для передачи и:

Софт для can шины

Открыть автомобиль:

Софт для can шины

Закрыть автомобиль:

Что было добавлено в исходный код (в файле usb_cdc_if.c), выбор скорости:

и несколько подобных процедур для задания скорости (в файле main.c, для примера укажу пару):

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

Как то так, суеты на пол дня :). Конечно есть некоторые шероховатости в работе программы, но это уже не ко мне (я надеюсь). Если есть вопросы, советы, и если кому надо помочь запрограммировать такой модуль — спрашивайте тут. Извиняюсь за огромные фотки ?

Надеюсь, что никого не обидел написанием этой статьи…

С уважением, Астанин Сергей. ICQ 164487932.

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

P.S. Немного еще исправил код в проекте, можно менять скорость обмена, и обмениваться используя стандартные заголовки. Разобрался с программой CANHacker, можно улучшать и модернизировать проект по необходимости, все просто.

Связь вполне устойчивая с другими блоками автомобиля, можно использовать (проверено на Volvo, Renault и Mitsubishi).

Видео:Can адаптер Simple Soft XP для ToyotaСкачать

Can адаптер Simple Soft XP для Toyota

ПО и инструмент для тестирования CAN-шины

Добро пожаловать на ChipTuner Forum.

Опции темы

В частности, CAN-шлюз . Ставится в разрыв любого канала. Как ещё можно использовать?
Сейчас можно:
1. Определить поканально, от какого блока какие сообщения идут.
2. Осуществлять подмену данных на лету с целью диагностики.
3. Подменить данные от полностью неисправного блока на эталонные — известные заранее.
4. Реверс-инженеринг
5.

Читайте также: Давление шин зимой аутлендер

Для Demonoid:
«хоть чуть-чуть» понимаю — камень, он, думаю, даже у вас в африке камень А уж какая у него обвязка периферией, не особо-то и важно. Хотя не удивлюсь, если под свои цели та же ардуинка и сами камни «подпиливает» в плане изменения инструкций работы с процем (однако, сильно сомневаюсь). Кроме периферии отладочных плат другой разницы я не знаю — но это никак не касается функциональности самого контроллера. У вас там по-другому?.
В этом плане, чтобы не быть голословными, предлагаю здесь выставить свои проекты я — свои, ты — свои. Можно в виде видео (здесь-ссылку), или хотя бы фото, только на листке подписать, чтобы понятно было, что не стырено с нета. (А то знаю я таких брехливых — а как поймают у теплой кучи — так — в кусты и подвякивать из подворотни) Прикинь, покажешь всем, как ты круто диодами моргаешь К тому же, у тебя и на шарпе проекты есть..

Alexo

Polikarpov

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

#include «can.h»
#include «Attrdata.h»
#include «Ocbdata.h»
#include «can_srr.h»
#include «sja1000.h»
#include «rm_main.h»
#include
.
.

void Received(struct Attrdata * attrdata) irq_buf;
ibuf = attrdata->ibuf;
to = irq_buf->to;
from = irq_buf->from;
size = irq_buf->size;
while (from != to) to % ibuf->size;
ibuf->buf [buf_to] = irq_buf->buf [from];
ibuf->to++;
if (from != size — 1)
atomic_add (&irq_buf->from, 1);
else
atomic_clr (&irq_buf->from, 0xFFFFFFFF);
from = irq_buf->from;
>
item = STAILQ_FIRST (&attrdata->iq);
while (item != NULL) rcvid;
msgs_to_read = item->total;
ibuf_from = item->ocbdata->from;

msgs_unread = ibuf->to — ibuf_from;
msgs_from_buf = min (msgs_to_read, msgs_unread);
Ibuf_WhereToReadFrom (ibuf, iov, msgs_from_buf, ibuf_from);
MsgReplyv (rcvid, msgs_from_buf, iov, 2);
item->ocbdata->from += msgs_from_buf;
next = STAILQ_NEXT (item, entries);
STAILQ_REMOVE (&attrdata->iq, item, entry, entries);
free (item);
item = next;
>
channel = attrdata->channel;
if (IOFUNC_NOTIFY_INPUT_CHECK (all_the_attrs [channel]->notify, 1, 0)) notify, 1,
IOFUNC_NOTIFY_INPUT);
>
>
void Sent(struct Attrdata * attrdata) obuf;
obuf->from++;
if (!STAILQ_EMPTY(&attrdata->oq)) oq);
rest = item->total — item->already;
free_space = Obuf_FreeSpace (obuf);
if (rest == free_space || free_space == obuf->size) already;
Obuf_WhereToWriteTo (obuf, iov, msgs_to_buf);
MsgReadv (item->rcvid, iov, 2, shift);
obuf->to += msgs_to_buf;
item->already += msgs_to_buf;
if (item->already == item->total) ocbdata->num_of_last = obuf->to;
MsgReply (item->rcvid, item->total, NULL, 0);
STAILQ_REMOVE_HEAD(&attrdata->oq, entries);
free (item);
>
>
>
item = STAILQ_FIRST (&attrdata->dq);
while (item != NULL) ocbdata->num_of_last from) rcvid, EOK, NULL, 0);
STAILQ_REMOVE (&attrdata->dq, item, entry, entries);
free (item);
break;
> else
item = STAILQ_NEXT (item, entries);
>
free_space = Obuf_FreeSpace (obuf);
if (free_space > 0) channel;
if (IOFUNC_NOTIFY_OUTPUT_CHECK (all_the_attrs [channel]->notify, 1))
iofunc_notify_trigger (all_the_attrs [channel]->notify, 1,
IOFUNC_NOTIFY_OUTPUT);
>
if (obuf->to > obuf->from)
SJA_WriteCanMsg (attrdata->base, Obuf_MsgToLine (obuf));
>

Видео:Arduino CAN Monitor (простейший монитор шины CAN)Скачать

Arduino CAN Monitor (простейший монитор шины CAN)

Хакаем CAN шину авто. Мобильное приложение вместо панели приборов

Я продолжаю изучать CAN шину авто. В предыдущих статьях я голосом открывал окна в машине и собирал виртуальную панель приборов на RPi. Теперь я разрабатываю мобильное приложение VAG Virtual Cockpit, которое должно полностью заменить приборную панель любой модели VW/Audi/Skoda/Seat. Работает оно так: телефон подключается к ELM327 адаптеру по Wi-Fi или Bluetooth и отправляет диагностические запросы в CAN шину, в ответ получает информацию о датчиках.

По ходу разработки мобильного приложения пришлось узнать, что разные электронные блоки управления (двигателя, трансмиссии, приборной панели и др.) подключенные к CAN шине могут использовать разные протоколы для диагностики, а именно UDS и KWP2000 в обертке из VW Transport Protocol 2.0.

Программный сниффер VCDS

Чтобы узнать по какому протоколу общаются электронные блоки я использовал специальную версию VCDS с программным сниффером в комплекте. В этот раз никаких железных снифферов на Arduino или RPi не пришлось изобретать. С помощью CAN-Sniffer можно подсмотреть общение между VCDS и автомобилем, чтобы затем телефон мог прикинуться диагностической утилитой и отправлять те же самые запросы.

Я собрал некоторую статистику по использованию диагностических протоколов на разных моделях автомобилей:

Читайте также: Параметры шин бмв е90

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

Видео:CAN шина👏 Как это работаетСкачать

CAN шина👏 Как это работает

Протокол UDS

Unified 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 — Адрес назначения (ЭБУ двигателя)

Байт 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 — экран с данными от приборной панели по протоколу UDS

Видео:Как управлять автомобилем через CAN-шину?Скачать

Как управлять автомобилем через CAN-шину?

VW Transport Protocol 2.0

Volkswagen 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 на примере подключения к первой группе двигателя:

Настраиваем канал с двигателем. Байт 0: 0x01 — двигатель, 0x02 — трансмиссия. Байт 5,4: 0x300 — адрес источника

Получили положительный ответ. Байт 5,4: 0x740 — к двигателю обращаемся по этому адресу

Настраиваем ЭБУ на отправку сразу 16 пакетов и выставляем временные параметры

Получили положительный ответ

Отправляем команду KWP2000 startDiagnosticSession. Байт 0: 0x10 = 0b0001 — последняя строка данных + 0x0 счетчик отправляемых пакетов 0 (0x0 — 0xF)

Получили положительный ответ. Байт 0: 0x10 — cчетчик принимаемых пакетов 0

Мы отправили первый ACK, что получили ответ

Делаем запрос. Байт 0: 0x11 — счетчик отправляемых пакетов 1. Байт 3: 0x21 — запрос параметров. Байт 4: 0x01 — из группы 1

300 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 00

0x25 0x00 x00 — Заполнитель, до 8 параметров

300 15 00 25 00 00 25 00 00

Байт 0: 0x15 — 0b0001 (последняя строка данных) + 0x5 (счетчик принимаемых пакетов 5)

Отправляем ACK. Прибывляем к нашему предыдущему ACK количество полученных пакетов 0xB1 + 0x4 = 0xB5

Запрос KeepAlive, что мы еще на связи

ЭБУ в ответ тоже разрывает связь

Во второй версии мобильного приложения VAG Virtual Cockpit появилась возможность диагностировать двигатель и трансмиссию по протоколу VW TP 2.0.

VAG Virtual Cockpit — экран с данными от двигателя по протоколу VW TP 2.0

Видео:Универсальная плата CAN шиныСкачать

Универсальная плата CAN шины

Диагностический адаптер ELM327

Для меня некоторое время было вопросом, как получить данные из CAN шины и передать на телефон. Можно было бы разработать собственный шлюз с Wi-Fi или Bluetooth, как это делают производители сигнализаций, например Starline. Но изучив документацию на популярный автомобильный сканер ELM327 понял, что его можно настроить с помощью AT команд на доступ к CAN шине.

Софт для can шины

Копия диагностического сканера ELM327 Не все ELM327 одинаково полезны

Оригинальный ELM327 от компании elmelectronics стоит порядка 50$, в России я таких не встречал в продаже. У нас продаются только китайские копии/подделки, разного качества и цены 10-30$. Бывают полноценные копии, которые поддерживают все протоколы, а бывают и те которые умеют отвечать только на несколько команд, остальные игнорируют, такие адаптеры не имеют доступ к CAN шине. Я например пользуюсь копией Viecar BLE 4.0, который поддерживает 100% всех функций оригинала.

Для работы с протоколом UDS через ELM327 нужно указать адреса назначения, источника и разрешить длинные 8 байтные сообщения, по умолчанию пропускается максимум 7 байт.

Последовательность ELM327 AT команд для работы с UDS по CAN шине:

Для работы с протоколом KWP2000 через ELM327 нужно только указать адреса назначения и источника.

Последовательность ELM327 AT команд для работы с VW TP 2.0 по CAN шине:

Видео:CAN Tracer - программа для трассировки кан шиныСкачать

CAN Tracer - программа для трассировки кан шины

Мобильное приложение 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.

Если интересно потестировать и есть желание принять участие в проекте, то установить приложение можно по ссылке. Также я веду бортжурнал на drive2.ru, где делюсь полезной информацией и новостями о VAG Virtual Cockpit.

  • Свежие записи
    • Нужно ли менять пружины при замене амортизаторов
    • Скрипят амортизаторы на машине что делать
    • Из чего состоит стойка амортизатора передняя
    • Чем стянуть пружину амортизатора без стяжек
    • Для чего нужны амортизаторы в автомобиле


    🌟 Видео

    Видеоинструкция по настройке CAN шины сигнализации с помощью приложение StarLine Master с телефона.Скачать

    Видеоинструкция по настройке CAN шины сигнализации с помощью приложение StarLine Master с  телефона.

    ESP32 CAN Monitor Сборка (простейший монитор шины CAN на ESP32)Скачать

    ESP32 CAN Monitor Сборка (простейший монитор шины CAN на ESP32)

    CAN-Hacker Как искать пакеты в CAN шине на примере Toyota Prius-C AquaСкачать

    CAN-Hacker Как искать пакеты в CAN шине на примере Toyota Prius-C Aqua

    LIN шина - пример работы. LIN bus exampleСкачать

    LIN шина - пример работы. LIN bus example

    Can Bus - что это такое ? Зачем нужен ? Как настроить ?Скачать

    Can Bus - что это такое ? Зачем нужен ? Как настроить ?

    Простая проверка CAN шины. Сканер не видит автомобиль через OBD2. Как правильно выбрать изоленту.Скачать

    Простая проверка CAN шины. Сканер не видит автомобиль через OBD2. Как правильно выбрать изоленту.

    Вебинар: Как найти любые данные из CAN-шины любого автомобиля?Скачать

    Вебинар: Как найти любые данные из CAN-шины любого автомобиля?

    Canbus - зачем он нужен? И как его настроить.Скачать

    Canbus - зачем он нужен? И как его настроить.

    Выбор CANBUS в Магнитоле на Андроиде (если есть канбус)Скачать

    Выбор CANBUS в Магнитоле на Андроиде (если есть канбус)

    Как настроить Canbus на Android магнитоле . Правильное подключение .Скачать

    Как настроить Canbus  на Android магнитоле . Правильное подключение .

    STM32 CAN шина. Часть 1. Настройка и странности HALСкачать

    STM32 CAN шина. Часть 1. Настройка и странности HAL

    Установка бесконтактного считывателя CAN-шины Eurosens InCANСкачать

    Установка бесконтактного считывателя CAN-шины Eurosens InCAN

    Анализ CAN шины автомобиля адаптер Канхакер-avto100Скачать

    Анализ CAN шины автомобиля адаптер Канхакер-avto100
Поделиться или сохранить к себе:
Технарь знаток