
Пролог
Попробуем разузнать что-нибудь про CAN FD (Controller Area Network Flexible Data-Rate). Однако сначала вспомним, как работает классический CAN (Controller Area Network). Образно выражаясь CAN - это труба для чисел. Можно метафорично сказать, что CAN - это нервная система автомобиля. Именно по САN передаются сигналы от датчиков и команды к исполнительным механизмам агрегатов.
CAN - это двух проводной дифференциальный последовательный полудуплексный интерфейс для передачи бинарных данных между электронными платами PCB. В качестве кабеля чаще всего применяют одну экранированную витую пару проводов: CAN_L, CAN_H.
CAN определяет аж два уровня модели OSI-7 (стек сетевых протоколов): физический и канальный. То есть CAN определяет также и бинарную структуру пакета в кабеле. В пакете CAN фигурируют такие переменные, как ID пакета, 8 байт данных, длина пакета, 15 битная контрольная сумма, биты подтверждения ACK, начало и конец пакета.
Физический уровень
Физика CAN проста. Есть 2 скрученных провода с именами CAN_H и CAN_L. Скрутка позволяет преодолевать электромагнитные помехи. Классический CAN позволяет подключить до 127 устройств. По концам шины нужны терминирующие резисторы. В режиме IDLE пины подтянуты одновременно и к земле и к питанию. Поэтому там как правило 2.5V

Так выгладят классические пакет в натуре.

Шина CAN на минимальной битовой скорости 10 кбит/с может достигать аж 5ти км. На максимальной битовой скорости 1 Мбит/с - 40 метров. На одну шину можно пристегнуть максимум 127 абонентов.
Обработка одного CAN бита
Еще CAN трансиверы каждый бит делит на четыре части (сегмента):
-- the Synchronization Segment (Сегмент синхронизации)
-- the Propagation Segment (Сегмент распространения )
-- the Phase Segment 1 (фазовый сегмент 1)
-- the Phase Segment 2 (фазовый сегмент 2)

Сегмент синхронизации, всегда имеет длину в один квант, используется для синхронизации тактов. Ожидается, что здесь будет иметь место фронт бита, когда данные изменяются на шине.
Сегмент распространения необходим для компенсации задержки в линиях шины.
Фазовые сегменты могут быть укорочены (фазовый сегмент 1) или удлинены (фазовый сегмент 2), если необходимо поддерживать синхронизацию тактов.
Уровни шины выбираются на границе между фазовым сегментом 1 и фазовым сегментом 2.
Поэтому при настройке битовой скорости любого CAN драйвера вам надо будет из одного числа (желаемая битовая скорость), так или иначе вычислить 4 числа, которые непосредственно влияют на результирующую битовую скорость.
Большинство CAN-трансиверов также предоставляют возможность делать ADC выборку три раза в течение бита. В этом случае выборка происходит на границах двух квантов, которые предшествуют точке выборки. Финальное значение бита определяется электрическим голосованием внутри цифровых логических цепей CAN-трансивера. Называется это мажорирование сигналов.
Канальный уровень
Биты образуют массив, который формирует пакет CAN. Пакет содержит идентификаторы данные и служебные биты (подтверждение, длина поля данных). CAN пакет передает массив с цифрами (пакет). В пакете самое важное это 8 байт (64 бит) полезных данных. Мы это называем сообщением. Внутри сообщения есть параметры (они же сигналы). У каждого параметра есть номер. Параметры могут быть, как вдавлены друг в друга, так и размазаны по битам поля данных. Максимум в одном сообщении может быть 64 параметра (сигнала) (по одному биту на параметр в предельном случае). В идеологии CAN классического запрос-ответ нет, как в modbus. Обычно ноды просто непрерывно флудят в шину и тот, кому надо выхватывает то, что ему надо.
Главное преимущество интерфейса CAN - это разрешение коллизий без потери битовой скорости. Если два узла начнут передавать пакеты, то продолжит передачу то устройство у которого меньше ID.
CAN интерфейс реализован аппаратно во многих микроконтроллерах, как цифровая электрическая цепь внутри SoC. Это микроконтроллеры от STm, Artery, YTM32(YTM32B1ME05G0MLQ), GigaDevice (GD32C103CB) и проч. Однако есть и отдельные ASIC переходники с SPI на CAN (TJA1145T/FD).
Транспортный уровень
Для классического CAN, чтобы передавать пакеты превышающие 8 байт нужен транспортный протокол. Обычно таким транспортом является протокол ISO-TP. Он же ISO 15765-2.
Уровень приложения
В сетях на основе CAN на уровне приложения обычно гоняют следующие прикладные протоколы: CCP, XCP, CanOpen, UDS или J1939.
Бинарная структура пакета CAN Classic

Бинарную структуру CAN пакета можно изучить тут

Пояснения битовых полей представлены в этой таблице.
№ |
Битовое поле |
Расшифровка |
bits |
Пояснение |
1 |
SOF |
Start of Frame |
1 |
сообщающий о начале фрейма и позволяющий синхронизировать узлы после фазы ожидания; |
2 |
ID |
Identifier |
11 |
Может иметь 11- или 29-битный размер. Устройство с меньшим ID выигрывает арбитраж. Соответственно, чем меньше ID, тем выше приоритет у устройства; |
3 |
RTR |
Remote Transmission Request |
1 |
Если устройство передает данные, то бит RTR принимает рецессивное состояние. Если устройство запрашивает сообщение от другого узла – бит RTR принимает доминантное состояние; |
4 |
IDE |
бит-указатель на расширенный ID |
1 |
Если IDE принимает доминантное состояние – это значит, что используется стандартный 11-битный идентификатор. Если IDE принимает рецессивное состояние, то принимающий контроллер должен быть готов к приему оставшейся части расширенного 29-битного идентификатора; |
5 |
r0 |
1 |
резервный бит |
|
6 |
DLC |
Data Length Code |
4 |
4-битное поле длины данных , которое кодирует, сколько байтов данных будет передано в сообщении. В классическом CAN DLC может принимать значение в диапазоне 0…8. |
7 |
DATA |
DATA |
64 |
В классическом CAN фрейм может содержать 0…8 байтов данных |
8 |
CRC |
CRC |
15 |
15-битный контрольный CRC-код для переданных данных |
9 |
CRC D |
Delimiter |
1 |
бит-ограничитель для поля CRC |
10 |
ACK |
1 |
бит подтверждения сообщения. В исходном фрейме передатчик использует рецессивное состояние этого бита. В свою очередь приемники при отсутствии ошибок должны установить в этом бите доминантное состояние. Другими словами, если на шине есть хотя бы один активный приемник, то в этом бите будет установлено доминантное состояние; |
|
11 |
ACK D |
1 |
бит-ограничитель (Delimiter) для ACK |
|
12 |
EOF |
End-of-Frame |
7 |
7-битное поле окончания фрейма |
13 |
IFS |
Interframe Space |
any |
меж фреймовый интервал, необходимый для того, чтобы приемник успел поместить сообщение в буфер. |
Если трансивер передатчика не увидит бит подтверждения ACK, то передатчик будет снова и снова непрерывно передавать этот же CAN пакет, до тех пор пока его кто-нибудь не примет. Таким образом, шина будет занята на 100 %. Однако некоторые микроконтроллеры всё же позволяют настроить MAC на одиночную отправку.
А это структуру пакета с расширенным идентификатором.

Недостатки CAN classic
Слишком много метаданных. Даже при 11-битных идентификаторах и максимальной длине данных. В лучшем случае на 64 бита полезных данных приходится 47 бит служебной информации, т.е. эффективность менее 58%.
Объем данных в кадре относительно небольшой - 8 байт. В ранних системах этого было достаточно, но сегодня объем данных значительно увеличился. Узлы должны передавать несколько кадров.
На первый взгляд кажется, что эти две проблемы можно решить, увеличив длину поля данных, но тогда шина будет постоянно перегружена, и устройства с более низким приоритетом могут оказаться недоступными. Кадр с 8 байтами данных (длина кадра 111 бит) обменивается со скоростью 250 кбит/с. Можно подсчитать, что кадр с 8 байтами данных (длина кадра 111 бит) занимает шину в течение 0,4 мс при скорости 250 кбит/с. Если размер данных составляет 64 байта (длина кадра 559 бит или более), то шина будет занята за 5,6 мс. Это означает, что за это время ни одно устройство не сможет ничего передать. Это не очень то вяжется для управления real time процессами для которых и был создан CAN.
Ограничения классического CAN были учтены при разработке его следующей версии CAN FD.
Как CAN борется с помехами ошибками?
Протокол CAN определяет по меньшей мере пять различных способов обнаружения ошибок. Два из них работают на уровне битов, а остальные три — на уровне сообщений.
№ |
Способ обнаружения ошибок |
Уровень работы механизма защиты |
1 |
Bit Monitoring. |
бит |
2 |
Bit Stuffing |
бит |
3 |
Frame Check |
пакет |
4 |
Acknowledgement Check |
пакет |
5 |
Cyclic Redundancy Check |
пакет |
Bit Monitoring (Наблюдение за битами)
Каждый передатчик на шине CAN считывает уровень передаваемого сигнала. Если фактически считанный уровень бита отличается от переданного, выдается сигнал об ошибке бита. В процессе арбитража ошибка бита не возникает.
Bit Stuffing (Положительное выравнивание)
Когда узел передал пять последовательных битов одного уровня, он добавит шестой
бит противоположного уровня к исходящему потоку битов. Приемники удалят этот дополнительный бит. Это делается для того, чтобы избежать избыточных компонентов постоянного тока на шине, но также дает приемникам дополнительную возможность обнаруживать ошибки: если на шине встречается более пяти последовательных битов одного уровня, подается сигнал об ошибке заполнения.
Frame check (Проверка пакета)
Некоторые части сообщения CAN имеют фиксированный формат, т. е. стандарт точно определяет, какие уровни должны происходить и когда. (Этими частями являются разделитель CRC, разделитель ACK, конец кадра). Если контроллер CAN
обнаруживает недопустимое значение в одном из этих фиксированных полей, выдается сигнал об ошибке структуры пакета.
Acknowledgement Check (Проверка подтверждения)
Все узлы на шине, которые правильно получают сообщение (независимо от того, «интересуются» ли они его содержимым или нет), должны отправить доминирующий уровень в так называемом слоте подтверждения в сообщении. Передатчик передаст здесь рецессивный уровень. Если передатчик не обнаружит доминирующий уровень в слоте ACK, выдается сообщение об ошибке подтверждения. Как правило начинается повторная отправка.
Cyclic Redundancy Check (Циклический избыточный код)
Каждое сообщение содержит циклическую контрольную сумму (CRC), и любой узел, который обнаруживает в сообщении CRC, отличную от той, которую он рассчитал сам, сообщит об ошибке CRC.
А теперь внимание, все эти механизмы работают полностью аппаратно на уровне ASIC или MAC! То есть всё это происходит незаметно для программиста микроконтроллера с CAN. Вот так. Вам уже нравится CAN?
Где используется шина CAN?
Я лично своими глазами видел, как интерфейс CAN используют в автомобилях (UDS), RFID считывателях для подсчета шахтёров, грузовозах (J1939), автобусах (J1939), в нано спутниках CubeSat(ах) и космических зондах. Вероятно CAN используют и ещё где-то.
Что такое CAN-FD?
Шина CAN-FD – это следующий этап развития классической шины CAN. CAN с гибкой скоростью передачи данных (CAN-FD) является расширением исходного протокола шины CAN, предназначенного для предоставления более точных данных в реальном времени с увеличенной пропускной способностью для удовлетворения требований сетей транспортных средств следующего поколения.
CAN-FD обеспечивает более высокую скорость передачи данных и больший объем передаваемых данных в одном кадре. Только и всего.
Основные отличия CAN-FD от классической шины CAN:
Между CAN classic и CAN-FD можно выделить 7 фундаментальных отличий. Вот они перед вами:
В CAN-FD больше нет пакета Remote frame (Кадр удаленного запроса). Это был кадр, запрашивающий передачу определенного идентификатора. Он использовался в случае, когда один узел хочет запросить данные у другого узла.
-
В CAN-FD по-другому кодируется 4х битовое поле DLC. Ну это и понятно так как 4мя битами можно досчитать максимум до 16. Даже 6 битов не хватит. А у по стандарту надо 64 байта отмерять. Вот и получилось так, что сначала размер увеличивается линейно, а затем резко подскакивает до значения 64.
Payload data length codes (bytes) В CAN-FD контрольная сумма может достигать 21 бита, в то время, как в классическом CAN CRC составляет всего лишь 15 бит. Если объем данных полезной нагрузки составляет до 16 байт, CRC кодируется в 17 битах. Если объем данных полезной нагрузки превышает 20 байт, CRC кодируется в 21 бите.
CAN-FD работает одновременно на двух скоростях. Поле арбитража или заголовок кадра передается со скоростью такой же, как и в классическом варианте, например 500 кбит/с. А поле данных передается на скорости кратно превышающую скорость передачи заголовка, и может иметь значение вплоть до 12 Мбит/с! В CAN FD скорость обмена данными на участке передачи байт данных увеличена, между фазой арбитража, куда входит поле ID и DLC, и фазой ожидания подтверждения. Вот так.
CAN-FD может передать до 64 байт данных в одном пакете! А классический CAN максимум 8 байт. То есть пакет в 8 раз больше!
Совместимость с сетями CAN 2.0A и CAN2.0B. CAN-FD контроллер способен принимать классические CAN пакеты, а классический CAN контроллер не способен принимать пакеты формата CAN-FD.
-
Для шины CAN-FD необходимо применять специальные микросхемы-трансиверы с повышенным быстродействием, например PIC18Q84, TJA1145T/FD, TCAN4550-Q1 и прочие.
В кадр CAN-FD, в контрольное поле добавлены биты:
Битовое поле |
Пояснение |
FDF |
признак того, что кадр есть кадр CAN-FD |
BRS |
признак того, что используется переключение битрейта |
ESI |
флаг того, что счетчик ошибок узла полон |
Таким образом на шине CAN FD существуют следующие варианты передачи пакетов:
11-битный ID, В классическом CAN формате с количеством байт данных до 8.
11-битный ID, В формате CAN-FD с переключением скоростей и количеством байт данных до 64.
11-битный ID, В формате CAN-FD без переключения скоростей и количеством байт данных до 64 .
29-битный ID, В классическом CAN формате с количеством байт данных до 8.
29-битный ID, В формате CAN-FD с переключением скоростей и количеством байт данных до 64.
29-битный ID, В формате CAN-FD без переключения скоростей и количеством байт данных до 64 .
Таким образом из-за различий в базовом формате кадра между CAN-FD и CAN отсутствует совместимость снизу вверх. В переводе на кухонный, модуль CAN classic не может принимать кадры CAN-FD, при этом CAN-FD может принимать пакеты классического CAN. Вот так.
Вообще надо отдать должное разработчика CAN. В далёком 1983 заложив в стандарт всего один зарезервированный бит R0 они смогли через 30 лет в 2012 воспользоваться этим чтобы элегантно встроить новый формат пакетов и при этом полностью сохранить обратную совместимость. Это пример невероятной дальновидности и прозорливости!

Структура пакета CAN FD

Для увеличения максимальной длины данных потребовалось скорректировать формат фрейма CAN FD.
№ |
Пояснение |
Битовое поле |
bit |
1 |
Start-of-frame |
SOF |
1 |
2 |
Identifier |
ID |
11 |
3 |
Stuff bit |
SB (R1) |
1 |
5 |
Identifier extension bit |
IDE |
1 |
6 |
FD Format Indicator |
FDF (EDL) |
1 |
7 |
Reserved bit in FD frames |
R0 |
1 |
8 |
Bit Rate Switch |
BRS |
1 |
9 |
Error State Indicator |
ESI |
1 |
10 |
Data length code |
DLC |
4 |
11 |
Data field |
DATA |
0...512 |
12 |
CRC |
CRC |
17-21 |
13 |
CRC delimiter |
CRC_D |
1 |
14 |
ACK slot |
ACK_S |
1 |
15 |
ACK delimiter |
ACK_D |
1 |
16 |
End-of-frame |
EOF |
7 |
17 |
Inter-frame spacing |
IFS |
4 |
Формат фрейма CAN FD имеет несколько важных отличий от формата фрейма классического CAN:
после передачи ID вместо бита RTR передается бит RRS, который всегда имеет доминантное состояние. Таким образом, в CAN FD поддерживаются только фреймы данных;
вместо зарезервированного бита R0, который всегда является доминантным в классическом CAN, передается рецессивный бит EDL (Extend Data Length), сообщающий о том, что это фрейм CAN FD;
бит BRS (Bit Rate Switching) сообщает приемнику о переключении частоты передачи при передаче данных (подробнее о переключении частот будет рассказано далее);
бит ESI (Error State Indicator) сообщает, что узел находится в режиме Error-active или Error-passive;
поле DLC осталось 4-битным и кодирует длину поля данных;
поле данных может иметь длину до 64 байт;
защита от потери данных кодируется кодом CRC, который сопровождается полем счетчика бит-стаффинга (поле STC)
Практическая часть
Настало время попробовать CAN-FD на практике. Надо найти какое-нибудь электронное устройство с поддержкой CAN-FD. Таким устройством является учебно-тренировочная электронная плата под названием YTM32B1M-EVB-0144 Rev.B. Вот такая в ней электронная начинка.

Что касается физики CAN, то там есть физика трансивера TJA1044GT/3Z. Это чисто аналоговая микросхема. Сам MAC контроллер обитает внутри SoC-a YTM32B1ME05G0MLQ.
Для самой минималистической отладки CAN-FD надо на своём верстаке собрать такой комплект.

Программная часть
Все исходные коды для запуска CAN-FD присутствуют в свободно распространяемой SDK от производителя микроконтроллера на сайте YunTu. Сам драйвер CAN-FD лежит в папке SDK YTM32B1ME0_1_3_1\YTM32Bx_SDK\platform\drivers\src\flexcan\flexcan_driver.c
вот буквально ключевые функции этого программного компонента.
Имя функции |
Пояснение |
FLEXCAN_DRV_Init |
Инициализация CAN трансивера структурой |
FLEXCAN_DRV_ConfigTxMb |
Настроить передатчик |
FLEXCAN_DRV_ConfigRxMb |
Настроить приёмник |
FLEXCAN_DRV_GetTransferStatus |
Для проверки завершен ли предыдущий приём пакета |
FLEXCAN_DRV_Receive |
Начать приём согласно конфигу в настойках приёмника |
FLEXCAN_DRV_Send |
Отправить CAN пакет. |
По ключевому имени этих функций утилитой grep вы найдете даже пример настройки CAN-FD для тестировочного Demo проекта в папке
YTM32B1ME0_1_3_1\YTM32Bx_SDK\YCT_Demos\YTM32B1ME0\Flexcan\YCT\Flexcan_Canfd_Demo\app\main.c
Драйвер позволяет настраивать следующие основные параметры
№ |
Название параметра |
Количество вариантов |
Пояснение |
1 |
Режим работы трансивера |
4 |
Нормальный режим, LoopBack, только слушать и проч. |
2 |
Размер поля данных |
64 |
Количество байт в поле данных |
3 |
FD режим |
2 |
|
4 |
Шина тактирования CAN трансивера |
2 |
Кварц или PLL |
5 |
битовая скорость стандартного CAN |
Это скорость начала пакета. |
|
6 |
битовая скорость для поля данных в FD режиме |
Это скорость середины пакета |
|
7 |
Способ сигнализирования о событиях |
2 |
DMA или прерывания |
8 |
и прочее |
Помимо запуска самого драйвера CAN надо также настроить значения внутренних мультиплексоров для GPIO (PIN MUX), чтобы подключить к пинам именно CAN периферию, а не что-либо другое.

Значения PIN MUX можно найти в спеке на микроконтроллер под названием YTM32B1ME0x Reference Manual. Искать надо по имени GPIO пина, например пин PTD2 в спеке будет находится по имени PTD_2. То есть через нижнее подчеркивание.

И так для всех остальных пинов, которые вы хотите задействовать в своём микроконтроллере.
Как настраивать остальной ToolChain для разработки под YTM32x можно почитать в предыдущем тексте.
Отладка
Вот я запрограммировал драйвер CAN-FD, накатил прошивку, как же проверить, что CAN-FD в самом деле работает? Как водится, первым делом смотрим лог начальной загрузки (ЛНЗ).

Видно, что API от SDK везде отработали без осечек.
Типичная ситуация. Есть устройство с CAN. Как проверить, что оно готово к работе? Я подключился к CAN шине щупами осциллографа к проводам CAN_L и CAN_H. В режиме IDLE там будет по 2.5V на каждом пине. Разность CAN_L - CAN_H составит 0V. Когда ничего не передается на проводах CAN_H = 2.3….2.5V, CAN_L = 2,3….2.5V и разность напряжений 0V. Если передается бит, то возникает разность напряжений CAN_H - CAN_L и MAC контроллер CAN это интерпретирует, как сырые биты с данными.

Осциллографом можно убедиться, что битовая скорость в самом деле, как и было установлено в конфиге составляет 2M Bit/s

По хорошему надо конечно же использовать переходник с USB на CAN-FD, соединить электронную плату и LapTop PC через этот переходник и при помощи специализированного DeskTop ПО на PC анализировать испускаемые гаджетом пакеты. Однако трудность в том, что у меня нет ни переходника ни специализированного ПО. В связи с этим надо как-то импровизировать. Как можно заметить, на плате заложено аж 4 порта для физики CAN трансивера. Надо как-то этим воспользоваться.

Можно просто соединить CAN порты между собой самыми обыкновенными проводами-перемычками. Вот по такому правилу.
A |
B |
||
CAN MAC |
PHY ASIC |
CAN MAC |
PHY ASIC |
CAN0 |
U5 |
CAN5 |
U13 |
CAN2 |
U14 |
CAN3 |
U7 |
CAN3 |
U7 |
CAN2 |
U14 |
CAN5 |
U13 |
CAN0 |
U5 |
Эта техника называется словом LoopBack (петля). Микроконтроллер сам отправляет и сам же принимает свои же CAN пакеты. Как говорят в народе: "клин клином вышибают". Одновременно с этим в прошивке реализована UART-CLI, где можно своими глазами увидеть через утилиту TeraTerm вот такой лог.
Как можно заметить, CAN-FD пакеты благополучно отправляются и принимаются со всех четырех доступных портов. Получился своего рода импровизированный WireShark только на MCU и с доступом через UART-CLI.
Обзор профессиональных средств аппаратной отладки
Тут сразу стоит упомянуть, что разработка агрегатов с подчинением по CAN-FD это удовольствие не из дешевых. Сам CAN-FD применяются с 2011 года главным образом в автомобилях премиум класса и гиперкарах за миллионы евро за один автомобиль. Вот так господа... Поэтому и средства аппаратной отладки тут тоже очень дорогие. При этом львиную долю стоимости таких переходников составляет софтвер, цену которого либо закладывают в стоимость розничного прибора, либо и вовсе продают отдельно за ещё большие деньги. При этом без оригинального софтвера эти переходники в FPGA внутри можно использовать в автомобиле только, как утяжелители на бампере.
№ |
Переходник |
Стоимость |
CAN-FD |
Software |
1 |
PCAN-USB FD |
270 EUR |
1 |
PCAN-View |
2 |
PCAN-USB Pro FD |
550 EUR |
2 |
PCAN-View |
3 |
CH-P FDL2 |
no data |
2 |
CarBusAnalyzer |
4 |
VN1610 |
no data |
2 |
Vector DBC Editor, CANoe*, CANalyzer*, CANape* |
5 |
VN1611 |
no data |
2 |
Vector DBC Editor, CANoe*, CANalyzer*, CANape* |
6 |
Kvaser Memorator Pro 5xHS |
3608 USD |
5 |
Kvaser SDK |
7 |
Kvaser Memorator Pro 2xHS v2 |
1671 USD |
2 |
Kvaser SDK |
К слову, в каждом из таких переходников зиждится настоящая FPGA микросхема, которая буквально аппаратно на лету демодулирует CAN-FD пакеты из непрерывного потока десятки мегагерцовых ADC семплов от диф пары! С нулевым latency. Да, господа, а Вы как хотели... Поэтому переходники с USB на CAN-FD - это очень и очень серьезные технологии, доступные далеко не каждому государству на планете...
Идеи проектов
На основе этого микроконтроллера YTM32B1ME0x можно теоретически сделать первый российский переходник с USB на CAN-FD. Спроектировать схемотехнику, развести топологию, написать прошивку, написать клиентское ПО для Windows 10 и Linux и получится полноценное средство для разработки и отладки агрегатов обменивающихся данными по CAN-FD. Альтернатива и эрзац санкционным Vector, Kvaser и Peak-System.
Итоги
Удалось научиться пользоваться CAN-FD на микроконтроллере YTM32. Теперь приблизительно понятно, как отправлять и как принимать CAN-FD пакеты.
Семейство интерфейсов CAN это далеко не единственный и, к слову, не самый дешевый выбор для разворачивания сетей типа общая шина. Есть ещё RS485, LIN, 1-Wire, DALI, MIL-STD-1553, ARINC 429 и прочие. Сравнение интерфейсов можно произвести вот в этом реестре

Словарь
Акроним |
Расшифровка |
MAC |
Medium access control |
BRS |
Bit rate switching |
ESI |
Error state indicator |
CRC |
Cyclic redundancy check |
SOF |
Start of frame |
IDE |
Identifier Extension |
DLC |
Data length code |
IFS |
Interframe space |
EDL |
Extended data length |
EOF |
End of frame |
CAN |
Controller Area Network |
ASIC |
Application Specific Integrated Circuit |
CAN-FD |
Controller Area Network Flexible Data-Rate |
CHI |
Controller Host Interface |
BIU |
Bus Interface Unit |
PHY |
physical layer |
PE |
Protocol Engine |
Ссылки
# |
Название |
URL |
1 |
CAN FD |
|
17 |
CAN FD — новый интерфейс передачи данных от Bosch |
|
16 |
VN1600 - Network Interfaces with USB and Ethernet for CAN / CAN FD / CAN XL, LIN, K-Line, J1708 and IO |
https://www.vector.com/int/en/products/products-a-z/hardware/network-interfaces/vn16xx/ |
2 |
CAN FD |
|
15 |
https://docs.google.com/spreadsheets/d/1wpmR1piUdwI40TwPPj9IRYKOx4BAWvoPmMoRezqLhrQ/edit?gid=0#gid=0 |
|
3 |
19 Атрибутов Хорошего Канального Протокола Передачи Данных |
|
4 |
Обзор Протокола ISO-TP [ISO 15765-2] |
|
5 |
Обзор Переходника USB-CAN (SYS TEC USB-CANmodul1) |
|
6 |
CAN bus |
|
7 |
Что такое CAN FD |
|
8 |
Что такое CAN FD |
|
9 |
PCAN-USB FD |
|
10 |
PCAN-USB Pro FD |
|
11 |
Kvaser Memorator Pro 5xHS |
https://kvaser.com/product/kvaser-memorator-professional-5xhs/ |
12 |
CH-P FDL2 |
|
PCAN-Explorer 6 |
||
PCAN-Explorer 6: J1939 Add-in 6 |
https://www.peak-system.com/PE6-J1939-Add-in-6.420.0.html?&L=1 |
|
13 |
Обзор переходников с USB на CAN-FD |
https://docs.google.com/spreadsheets/d/1RlZYbiAvPGSZC7jcodfeU_IjBmKSKv0fi38Q513mCRs/edit?gid=0#gid=0 |
14 |
Настройка ToolChain-нa для Разработки на Микроконтроллерах YTM32x |
Вопросы
Каким переходником с USB на CAN-FD можно отлаживать интерфейс CAN-FD? Какое для этого нужно ПО?
Что такое CAN-матрица?
Что такое CAN bus-off?
Как взламывать CAN трафик в иномарках? Какой пакет CAN шины отвечает за скорость автомобиля?
Как найти в CAN трафике легкового автомобиля пакет, который показывает количество пассажиров в автомобиле?
Как измерить процент загрузки CAN шины трафиком в реальном времени?
Комментарии (26)
rsashka
07.02.2025 17:02Можно метафорично сказать, что CAN - это нервная система автомобиля.
Вот не нужно так говорить.
CAN - это стандарт передачи данных, который применяется много где (в том числе и в автомобилях) и физическая среда передачи данных у CAN может быть не только витая пара, но и любая другая, например оптика или даже радиоканал.
В пакете самое важное это 8 байт (64 бит) полезных данных. Мы это называем сообщением.
Кстати, CAN сообщение может быть и без данных, но от этого оно не перестанет быть CAN сообщеним.
x89377
07.02.2025 17:02GD32C103CB два канала CAN-FD. Цена - копейки.
Запускаем портированный CANact и больше ничего не надо (кроме компьютера/телефона/планшета конечно)
VBKesha
07.02.2025 17:02--Каким переходником с USB на CAN-FD можно отлаживать интерфейс CAN-FD? Какое для этоно нужно ПО?
Peak Can FD
Как взламывать CAN трафик в иномарках? Какой пакет CAN шины отвечает за скорость автомобиля?
Захватываем трафик анализируем долго думаем. Тем более обычно есть два способа, из порта ODB, и напрямую с шины которая может её в RAW передавать. Надо только знать что она может передаваться и в оборотах колеса в минуту.
Как найти в CAN трафике легкового автомобиля пакет, который показывает количество пассажиров в автомобиле?
Также как и скорость хватаем травик, садимся встаем, повторяем много раз ищём где. Ну или расковыриваем какой нибудь ODIS и смотрим откуда он вычитывает.
Как измерить процент загрузки CAN шины трафиком в реальном времени?
Peak Can FD показывает и график рисует.
aabzel Автор
07.02.2025 17:02Peak Can FD
Спасибо, не знал про такой. Так уж вышло, что почти весь рынок переходников USB-CAN-FD поделили две компании: Kvaser и Vector.
https://docs.google.com/spreadsheets/d/1RlZYbiAvPGSZC7jcodfeU_IjBmKSKv0fi38Q513mCRs/edit?gid=0#gid=0
aabzel Автор
07.02.2025 17:02Захватываем трафик анализируем долго думаем.
Проблема в том, что в UDS захватывать нечего. Без запроса ECU не ответит. Надо знать, что спрашивать.
Если нет команд UDS, то ничего кулибину и не узнать будет.VBKesha
07.02.2025 17:02Если нет команд UDS, то ничего кулибину и не узнать будет.
Всё так и не так. Там обычно шин то несколько они сходятся в "свич" на котором сидит ODB. Думаю вам об этом известно и так. Так вот до ODB там может быть всё что угодно и оно совсем может быть и не UDS. Это вопервых.
Во вторых если ECU знает скорость, то видимо он ей с кемто делится, ну например с дисплеем на котором спидометр рисуется(InstrumentCluster вроде бы зовется). Ну вот они между собой должны общаться что в логе можно и выловить.
aabzel Автор
07.02.2025 17:02Также как и скорость хватаем травик, садимся встаем, повторяем много раз ищём где. Ну или расковыриваем какой нибудь ODIS и смотрим откуда он вычитывает.
Это был вопрос шутка. Нет в автомобилях датчиков количества пассажиров. Правильный ответ: никак.
Если бы Вас попросили найти в CAN трафике Renault Logan данные о цвете глаз водителя Вы бы тоже всех своих знакомых стали в автомобиль по очереди сажать и как медвежатник взламывать CAN шину?VBKesha
07.02.2025 17:02Это был вопрос шутка. Нет в автомобилях датчиков количества пассажиров. Привильный ответ никак.
Мне если честно абсолютно не интересно есть оно там или нет. А датчики наличия пассажиров на сиденьях вполне могут стоять. Да я понимаю, что сейчас услышу мол а вдруг на одно сиденье два человека сели итд. Но сама суть не меняется.
Если бы Вас попросили найти в CAN трафике Renault Logan данные о цвете глаз водителя вы бы тоже всех своих знакомых стали в автомобиль по очереди сажать и как медвежатник взламывать CAN шину?
Если бы там был датчик которые регистрирует цвет глаз водителя и шлёт на CAN, и это где то отображается, что можно убедится что это работает, да я бы так и сделал.
А что собственно удивляет?
Telmah
07.02.2025 17:02В сиденьях есть датчики которые «видят» сидит кто то или нет, например для индикации непристегнутого ремня безопасности
OldFashionedEngineer
07.02.2025 17:02И для того, чтобы подушки безопасности не взрывались, когда там никого нет
HardWrMan
07.02.2025 17:02Подушки так же не взорвутся, если увидят непристёгнутый ремень безопасности. Привет адептам заглушек "чтоб не пищало", которым эта подушка гарантированно свернёт шею, ибо она работает именно в паре с ремнём (ремень удерживает тело, подушка голову и все расстояния просчитаны очень точно).
OldFashionedEngineer
07.02.2025 17:02Я использую кан хакер, очень удобный девайс. Там у них не очень очевидно, что, как и откуда надо установить. Но в остальном он очень удобный. И цена приемлемая. До этого использовал буржуйский пик кан, больше не пользуюсь этой хренью.
OldFashionedEngineer
07.02.2025 17:02Спасибо автору за труд - занавес слегка приоткрыт. Но до ликбеза конечно тут ещё далеко. Вот например, чем отличается can classic и can2.0, да ещё А и В? Про стандарты ничего не сказано. А ещё есть стандартные идентификатор пакетов - для автодиагностики полезно знать. Есть онлайн калькуляторы пакетов. А ещё и шнайдер пошалили и can open "подарили миру".
HardWrMan
07.02.2025 17:02Рассказывать про CAN и ни разу не привести как это расшифровывается. Только в конце маленькая табличка акронимов... Это фиаско, братан.
CAN это Controller Area Network, и вот уже не надо придумывать метафоры про нервную систему автомобиля, правда?
PS Забавный факт: can в английском может переводиться как жестяная банка (консерва). Применение в автомобилях символично.
ednersky
Хорошая шина для построения устройств со слабой зависимостью между отдельными элементами.
Каждая часть - просто транслирует в шину свой стейт, а дальше, прослушивая "эфир" шины, ты знаешь обо всём, что происходит в системе.
aabzel Автор
Да. Я лично видел как интерфейс CAN используют в автомобилях, в RFID считывателях для шахтёров, в грузовозах, в автобусах, в нано спутниках CubeSat(ах) и даже космических зондах!
ahdenchik
В связи с этим мне всегда было непонятно как такие системы проектировать: у нас есть N устройств, которые должны в гарантированные промежутки времени (реалтайм же!) "высказаться". Но если их много то как определить успеют ли они это сделать?
Или просто загруженность шины не должна быть выше единиц процентов чтобы эта гарантия соблюдалась?
rsashka
Просто выбираете такую шину передачи данных, которая на физическом уровне реализует приоритетность передачи сообщений и та же шина CAN это обеспечивает. Правда в этой статье написано "Устройство с меньшим ID выигрывает арбитраж. Соответственно, чем меньше ID, тем выше приоритет у устройства", но ничего подробно не объясняется, так что гуглите про арбитраж сообщений CAN отдельно.
alcotel
CAN-шину вполне можно загружать по-полной. За счёт аппаратной системы приоритетов обмен по шине достаточно детерминированный, а не случайный, как в Ethernet и многих радио-каналах.
Меньший ID даёт больший приоритет при передаче. Поэтому более частым сообщениям присваивают меньший ID. На картинке Period - в миллисекундах.
aabzel Автор
Это понятно. Вопрос в том, как измерить процент загрузки CAN шины? Каким оборудованием?
alcotel
На глазок - осциллографом)
А если точно надо - также, как и во всех остальных протоколах: взять секундный траффик, хоть в электронную таблицу сохранить. Посчитать, сколько битовых интервалов занято под данные, служебную информацию, необходимые паузы, битстаффинг. Разделить на скорость.
На приведённом скриншоте, например, уже есть все исходные данные для расчёта загрузки.
А оборудование - кому что нравится. Я пользуюсь простыми устройствами с али, с открытой прошивкой типа CANable, CANtact и софтом can-utils. Кому-то адаптеры OBD2 ближе, или кан-хакер жаба не душит купить. CAN-FD я пока не пробовал, но тоже какие-то решения для сливания траффика есть.