Драйвер can для CAN контроллеров MX35
dev-can-mx35 [опции] ["can#"[,sysirq]] ["ringocan#"] &
0-7). 1-7). 0-3). 0-8) (по умолчанию – 8).100).mdriver на основе MID (по умолчанию все сохраняется на первом устройстве)./dev/can). Значение по умолчанию – 1; дополнительным устройствам присваиваются номера в порядке возрастания.can0 или can1, где # определяет номер CAN шины (0 или 1).can0 или can1 для платы ADSMX35, где # определяет номер CAN шины (0 или 1).ЗОСРВ «Нейтрино»
aarch64
| Для запуска этого драйвера необходимо войти в систему под учетной записью root. |
Драйвер для шины can для контроллеров MX35.
После запуска драйвер dev-can-mx35 создает устройство (по умолчанию – /dev/can1).
Запуск драйвера dev-can-mx35 для CAN контроллера:
dev-can-mx35 can0 can1
Основные функции
| Функция | Поддержка |
|---|---|
| Режим Autobus | + |
| Режим Loopback | + |
| Ручная настройка параметров битрейта (TSEG1, TSEG2, SJW, BRP) | + |
| Аппаратная фильтрация по ID с маской для каждого приёмного ящика | + |
| Поддержка расширенного формата кадра (EFF) | + |
Расширенная операция записи через CAN_DEVCTL_WRITE_CANMSG_EXT | + |
Расширенная операция чтения через CAN_DEVCTL_READ_CANMSG_EXT | + |
| Дублирование принятых сообщений между приёмными почтовыми ящиками при пересечении фильтров | - |
Установка идентификатора передаваемого кадра для конкретного mailbox’а через CAN_DEVCTL_SET_MID | + |
Чтение текущего идентификатора mailbox’а через CAN_DEVCTL_GET_MID | + |
Расширенные функции
| Функция | Поддержка |
|---|---|
| CAN FD | - |
| Аппаратный RX/TX FIFO | - |
| Режим Listen-Only | + |
| Передача/приём через DMA | - |
| Режим тройной выборки битрейта | + |
| Автоматический расчёт параметров битрейта по заданной скорости | + |
| Несколько независимых аппаратных mailbox’ов для передачи | + |
| Несколько независимых аппаратных mailbox’ов для приёма | + |
Сброс CAN-контроллера через CAN_DEVCTL_RESET | - |
Чтение регистров ошибок через CAN_DEVCTL_ERROR | + |
Установка маски фильтра для конкретного приёмного mailbox’а через CAN_DEVCTL_SET_MFILTER | + |
Чтение маски фильтра конкретного приёмного mailbox’а через CAN_DEVCTL_GET_MFILTER | + |
Настройка локального приоритета отправки кадров через CAN_DEVCTL_SET_PRIO | + |
Чтение локального приоритета отправки кадров через CAN_DEVCTL_GET_PRIO | + |
Сброс счётчика временных меток через CAN_DEVCTL_SET_TIMESTAMP | + |
Чтение текущего значения счётчика временных меток через CAN_DEVCTL_GET_TIMESTAMP | + |
Вывод отладочной информации через CAN_DEVCTL_DEBUG_INFO на стандартный поток вывода или в лог | + |
По умолчанию драйвер настроен следующим образом:
Device Mailbox MID ============================ RX0/TX32 0x100C0000 RX1/TX33 0x101C0000 RX2/TX34 0x102C0000 RX3/TX35 0x103C0000 RX4/TX36 0x104C0000 RX5/TX37 0x105C0000 RX6/TX38 0x106C0000 RX7/TX39 0x107C0000 RX8/TX40 0x108C0000 RX9/TX41 0x109C0000 RX10/TX42 0x10AC0000 RX11/TX43 0x10BC0000 RX12/TX44 0x10CC0000 RX13/TX45 0x10DC0000 RX14/TX46 0x10EC0000 RX15/TX47 0x10FC0000 RX16/TX48 0x110C0000 RX17/TX49 0x111C0000 RX18/TX50 0x112C0000 RX19/TX51 0x113C0000 RX20/TX52 0x114C0000 RX21/TX53 0x115C0000 RX22/TX54 0x116C0000 RX23/TX55 0x117C0000 RX24/TX56 0x118C0000 RX25/TX57 0x119C0000 RX26/TX58 0x11AC0000 RX27/TX59 0x11BC0000 RX28/TX60 0x11CC0000 RX29/TX61 0x11DC0000 RX30/TX62 0x11EC0000 RX31/TX63 0x11FC0000
Значение фильтра каждого rx-mailboxа -0xFFFFFFFF` (проверять каждый бит идентификатора).
Работа должна вестись между четкой парой rx-tx устройств.
Примеры обмена данными между контроллерами.
Пример 1:
# echo test > /dev/can0/tx32 # cat /dev/can1/rx0 test
Пример 2:
# echo test > /dev/can0/tx32 # canctl -u1,rx0 -r READ_CANMSG_EXT: mid = 0x100C0000 timestamp = 0x3C48 dat len = 8 dat = test
Пример 3:
# canctl -u0,tx32 -W '0x100C0000;65,62,99' # canctl -u1,rx0 -r READ_CANMSG_EXT: mid = 0x100C0000 timestamp = 0x501E dat len = 8 dat = A>c
Настройка фильтров. При изменении ID у mailbox`ов, необходимо поменять ID у tx и rx устройств:
# canctl -u1,rx0 -m 0x13FC0000 # canctl -u1,rx0 -F MFILTER = 0xFFFFFFFF # canctl -u1,rx0 -M GET_MID = 0x13FC0000 # canctl -u0,tx32 -m 0x13FC0000 # canctl -u0,tx32 -M GET_MID = 0x13FC0000 # echo msg > /dev/can0/tx32 # cat /dev/can1/rx0 msg # canctl -u0,tx32 -W '0x13FC0000;83,87,68' # canctl -u1,rx0 -r READ_CANMSG_EXT: mid = 0x13FC0000 timestamp = 0xF3CA dat len = 8 dat = SWD
При необходимости получать все кадры нужно настроить фильтры.
Пример приема всех кадров: canctl -u1,rx0 -f 0x0. В таком случае устройство /dev/can1/rx0 будет принимать кадры с любым идентификатором.
Пример 1:
# canctl -u1,rx0 -F MFILTER = 0xFFFFFFFF # canctl -u1,rx0 -f 0x0 CANIMR0 = 0x00 # canctl -u0,tx32 -M GET_MID = 0x100C0000 # echo kpda > /dev/can0/tx32 # cat /dev/can1/rx0 kpda # echo kpda > /dev/can0/tx32 # canctl -u1,rx0 -r READ_CANMSG_EXT: mid = 0x100C0000 timestamp = 0xCD42 dat len = 8 dat = kpda
Пример 2:
# echo kpdtx33 > /dev/can0/tx33 # cat /dev/can1/rx0 kpdtx33 # echo kpdtx33 > /dev/can0/tx33 # canctl -u1,rx0 -r READ_CANMSG_EXT: mid = 0x101C0000 timestamp = 0x8F51 dat len = 8 dat = kpdtx33
Пример 3:
# canctl -u0,tx32 -W '0x1FFC0000;87,66,96,44' # canctl -u1,rx0 -r READ_CANMSG_EXT: mid = 0x1FFC0000 timestamp = 0xD53A dat len = 8 dat = WB`,
BSP для систем на базе процессора NXP i.MX8M, драйверы
Предыдущий раздел: перейти