前言:
RK3588内置CAN控制器存在不可修复的硬件缺陷,考虑工业、医疗、车载等应用领域对CAN通讯稳定性有着极高的要求,为规避此问题,建议使用SPI转CAN替代原生CAN接口。
一、背景说明
RK3588内置CAN控制器存在以下不可修复的硬件缺陷:
发送扩展帧时可能降级为标准帧,导致丢帧;
接收时概率性CRC校验和ID填充错误,触发总线错误帧。

为规避此问题,我司建议使用MCP2518(SPI转CAN控制器)替代原生CAN接口。如下是基于眺望电子RK3588核心板资料所提供的方案支持,提供从硬件设计、驱动调试等方面的详细指导。
二、硬件电路设计
2.1 接口连接
眺望电子RK3588核心板无默认预留SPI接口,需根据提供的引脚分配表选择引脚进行功能复用,如下选择J2连接器中的UART6作为案例进行介绍。


2.2 防护设计
注:CAN收发器的选择以及隔离防护等级可按照项目需求灵活调整。
三、SDK内核修改
3.1 复用修改
设备树文件:talowe-rk3588-Linux.dts
首先diabled uart6节点,使引脚释放出来

3.2 启用SPI控制器
添加以下节点内容:
&spi4 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi4m2_cs0 &spi4m2_pins>; max-speed = <10000000>; // 10MHz mcp2518: can-controller@0 { compatible = "microchip,mcp2518fd"; reg = <0>; spi-max-frequency = <10000000>; interrupt-parent = <&gpio1>; interrupts =
&pinctrl {
mcp2518 { mcp2518_int: mcp2518_int { rockchip,pins = <1 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>; }; };};
确认内核配置选项:
CONFIG_SPI=y CONFIG_SPI_ROCKCHIP=y CONFIG_CAN_MCP251XFD=y


3.3 禁用原生CAN控制
在设备树中注释或删除RK3588原生CAN节点:
/* &can1 { pinctrl-0 = < &can1m1_pins>; status = "okay"; assigned-clocks = <&cru CLK_CAN1>; assigned-clocks-rates = <200000000>; }; &can2 { status = "okay"; assigned-clocks = <&cru CLK_CAN2>; assigned-clocks-rates = <200000000>; };*/

3.4 固件生成
保存配置后生成固件烧写到板子上进行下一步验证。

出现如上信息则编译成功,将新生成的boot.img烧写到板子上验证即可。
四、驱动调试记录
4.1 基础功能验证
SPI通信测试:
# 查看SPI设备是否识别 cat /sys/bus/spi/devices/spi1.0/modalias # 输出应为:spi:microchip,mcp2518fd
CAN接口注册:
ip link set can0 up type can bitrate 500000 ifconfig can0 up
4.2 数据收发测试
发送测试:
cansend can0 123#DEADBEEF
接收测试:
candump can0
4.3 常见问题处理

如果您在基于我司RK3588核心板进行SPI转CAN调试期间遇到任何问题,欢迎随时与我们联系,可以为您提供专业的技术支持,期待与您合作!
全部0条评论
快来发表一下你的评论吧 !