Rockchip · AI & Linux Hub

Linux и загрузка

Rockchip CAN: драйвер, Device Tree и SocketCAN

Полное руководство Rockchip CAN: драйверы, DTS, конфигурация ядра, SocketCAN, диагностика и формулы битового времени.

· Редакция ArmSoM · исходная документация Rockchip · 4 мин чтения

Это справочник по платформе, а не утверждение, что каждая плата ArmSoM имеет выведенный CAN или готовый трансивер. Sige7/AIM7 используют RK3588; Sige5/CM5/AIM5 — RK3576. Сверьте схему платы, pinmux, питание/standby трансивера и поставляемый BSP. В источнике указаны ядра 5.10 для RK3588 и 6.1 для RK3576, но конкретный образ ArmSoM не сертифицирован. Аппаратные испытания ArmSoM не выполнялись.

Основа: Rockchip CAN Developer Guide, RK-KF-YF-C44, V1.3.0, 2025-10-09. Китайский и английский PDF имеют по 9 страниц и не содержат самостоятельных технических рисунков, поэтому изображения не извлекались. Обложка/юридический текст, аудитория и история редакций исключены. Запись редакторской проверки.

1. Драйвер CAN

1.1 Файлы драйверов

SoC Файл драйвера
RV1126/RV1109 drivers/net/can/rockchip/rockchip_can.c
RK3568/RK3588 drivers/net/can/rockchip/rk3568_can.c
RK3562 drivers/net/can/rockchip/rk3562_can.c
RK3576/RK3506/RV1126B drivers/net/can/rockchip/rk3576_can.c

1.2 Узел DTS

interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
assigned-clocks = <&cru CLK_CAN>;
assigned-clock-rates = <200000000>;
clocks = <&cru CLK_CAN>, <&cru PCLK_CAN>;
clock-names = "baudclk", "apb_pclk";
&can { pinctrl-names = "default"; pinctrl-0 = <&canm0_pins>; status = "okay"; };

Прерывание возникает после завершения преобразования. Источник рекомендует 300 MHz для CAN 1 Mbit/s и 200 MHz ниже 1 Mbit/s; по возможности выбирайте чётную кратность скорости. Совместимые строки: "rockchip,can-1.0" (RV1126/RV1109), "rockchip,rk3568-can-2.0" (RK3568), "rockchip,can-2.0" (RK3588), "rockchip,rk3562-can" (RK3562), "rockchip,rk3576-can" (RK3576/RK3506), "rockchip,rv1126b-can" (RV1126B).

&can0 { rockchip,rx-max-data = <4>; };
&can0 { rockchip,auto-retx-cnt = <100>; };
&can0 { dmas = <&dmac0 20>; dma-names = "rx"; };

Для classic CAN <4> даёт RX byte до 8 и FIFO глубиной 64; для CAN FD <18> даёт RX byte до 64 и 14 кадров FIFO. При отсутствии auto-retx-cnt повтор не ограничен; диапазон 1…0xffff прекращает его после порога. RX DMA необязателен: удалите оба свойства DMA. RV1126B поддерживает DMA. Назначьте IOMUX CAN-H/CAN-L функции CAN.

1.3 Конфигурация ядра

Включите драйвер через Networking support → CAN bus subsystem support → CAN Device Drivers → Platform CAN drivers with Netlink support:

CONFIG_CAN_RK3562=y
CONFIG_CAN_RK3576=y

Зависимости: NET=y && CAN=y && CAN_DEV=y && ARCH_ROCKCHIP=y.

2. Средства проверки CAN

canutils включает canconfig, candump, canecho, cansend и cansequence. Используйте полный iproute2: BusyBox ip не поддерживает CAN. Для Buildroot:

BR2_PACKAGE_CAN_UTILS=y
BR2_PACKAGE_IPROUTE2=y

3. Команды

ifconfig -a
ip link set can0 down
ip link set can0 type can bitrate 500000
ip -details -statistics link show can0
ip link set can0 up
cansend can0 123#DEADBEEF
cansend can0 123#R
cansend can0 00000123#12345678
cansend can0 00000123#R
candump can0

Это поиск устройств; останов, настройка 500 kbit/s, просмотр и запуск; стандартные/расширенные data и remote кадры; приём.

4. Диагностика

4.1 Нет приёма или передачи

После запуска CAN включите loopback, используя фактический базовый адрес CAN из DTS:

io -4 0xfe580000 0x8415

Если после cansend candump получает кадр, контроллер исправен. Затем проверьте IOMUX, соединение, 120-омный терминатор и трансивер.

4.2 Периодический сбой

ip -details -statistics link show can0

Проверьте точность фактической скорости и при необходимости скорректируйте входную частоту. Точки выборки должны совпадать во всей сети.

5. Битовая скорость и точка выборки

/* Use CiA recommended sample points */
if (bt->sample_point) sample_point_nominal = bt->sample_point;
else if (bt->bitrate > 800000) sample_point_nominal = 750;
else if (bt->bitrate > 500000) sample_point_nominal = 800;
else sample_point_nominal = 875;
BitRate = clk_can / (2 *(brq + 1) / ((tseg2 + 1) + (tseg1 + 1) + 1)
Sample = (1 + (tseg1 + 1)) / (1 + (tseg1 + 1) + (tseg2 + 1))

brq, tseg1 и tseg2 находятся в регистре CAN BITTIMING TRM. Перед изменением BSP проверьте формулу и ограничения полей в TRM и целевом ядре.

Другие статьи по теме → · Учебные маршруты →