RK3568 CAN配置与调试实战指南
1. RK3568 CAN总线基础认知第一次接触RK3568的CAN总线时我和大多数工程师一样被各种专业术语绕得头晕。简单来说CAN就像工业设备间的微信群聊——每个节点都能收发消息而且自带错误检测机制。RK3568芯片原生支持两个CAN控制器CAN1和CAN2最高支持1Mbps通信速率这在工业控制、汽车电子等领域特别实用。实际项目中遇到过这样的场景某工厂自动化生产线需要实时传输传感器数据用RS485总线经常出现延迟换成CAN总线后就像从乡间小路换到了高速公路。RK3568的CAN控制器支持标准帧11位标识符和扩展帧29位标识符两种格式这点在设备树配置时需要特别注意。2. 设备树配置避坑指南2.1 引脚复用检查设备树配置是第一个容易翻车的地方。上周刚帮同事排查过一个案例明明配置了CAN2却无法通信最后发现是引脚被UART功能占用了。RK3568的CAN控制器引脚通常与其它功能复用比如CAN1_TX/CAN1_RX 可能对应GPIO3_A0/A1CAN2_TX/CAN2_RX 可能对应GPIO3_A4/A5建议先用io -r -4 0xfe770000命令查看复用寄存器状态具体地址需查手册。在设备树里要确保pinctrl配置正确例如can1 { pinctrl-names default; pinctrl-0 can1m1_pins; // 注意m1表示复用选项1 status okay; };2.2 时钟配置玄机遇到过最隐蔽的bug是CAN总线时通时断最后发现是时钟配置问题。RK3568的CAN控制器需要100MHz的时钟源设备树要这样写can1 { assigned-clocks cru CLK_CAN1; assigned-clock-rates 100000000; };实测发现如果时钟配置缺失或数值错误可能会出现低波特率能通高波特率失败发送数据时波形畸变接收端CRC校验频繁报错3. 驱动选择与性能对比3.1 经典CAN vs CAN FDRK3568支持两种驱动rockchip_can.c传统CAN驱动适合简单场景rockchip_canfd.c支持CAN FD灵活数据速率去年做车载项目时做过对比测试指标rockchip_can.crockchip_canfd.c最大帧长8字节64字节波特率1Mbps5Mbps(数据段)CPU占用率12%18%扩展帧支持需打补丁原生支持如果遇到扩展帧被识别为标准帧的问题建议直接使用canfd驱动并打上瑞芯微官方补丁。3.2 驱动加载检查加载驱动后建议按这个顺序检查dmesg | grep can # 查看驱动加载日志 ls /sys/class/net/ # 确认can0/can1节点 ip -d link show can0 # 查看详细参数遇到过驱动加载成功但节点未创建的情况通常是设备树status未设为okay。4. 实战调试全流程4.1 硬件连接要点调试CAN总线就像接网线但有几个细节容易出错终端电阻线缆两端要接120Ω电阻线序CANH接CANHCANL接CANL千万别交叉共地不同设备间必须共地曾经用示波器抓包发现波形异常最后发现是终端电阻没接。建议先用万用表测量CANH-CANL间电阻正常值应该在60Ω左右两个120Ω并联。4.2 软件配置命令配置500kbps波特率的完整流程ip link set can0 type can bitrate 500000 ip link set can1 type can bitrate 500000 ifconfig can0 up ifconfig can1 up测试通信时建议开两个终端# 终端1接收数据 candump can1 # 终端2发送测试帧 cansend can0 123#11223344556677884.3 常见故障排查整理了几个典型问题案例现象能发不能收检查ip -d link show can0的RX/TX计数器解决通常是硬件线序接反现象高波特率丢包检查dmesg | grep bitrate看实际设置的波特率解决确认时钟配置为100MHz现象随机出现错误帧检查ip -s -s link show can0的错误计数器解决调整采样点位置建议75%~80%记得有一次调试时遇到间歇性通信中断最后发现是电源干扰。后来在CANH/CANL加了共模电感就稳定了。