实战案例 | RK3588 CAN通信BUG避坑指南

描述

 

前言:

        RK3588内置CAN控制器存在不可修复的硬件缺陷,考虑工业、医疗、车载等应用领域对CAN通讯稳定性有着极高的要求,为规避此问题,建议使用SPI转CAN替代原生CAN接口。

一、背景说明

        RK3588内置CAN控制器存在以下不可修复的硬件缺陷:

发送扩展帧时可能降级为标准帧,导致丢帧;

接收时概率性CRC校验和ID填充错误,触发总线错误帧。

 

RK3588

   为规避此问题,我司建议使用MCP2518(SPI转CAN控制器)替代原生CAN接口。如下是基于眺望电子RK3588核心板资料所提供的方案支持,提供从硬件设计、驱动调试等方面的详细指导。

 

二、硬件电路设计

 

 2.1  接口连接
    眺望电子RK3588核心板无默认预留SPI接口,需根据提供的引脚分配表选择引脚进行功能复用,如下选择J2连接器中的UART6作为案例进行介绍。

RK3588RK3588

 2.2  防护设计

  • 电源滤波:MCP2518的VCC引脚需并联100nF+10μF电容;
  • 信号防护:CANH/CANL添加TVS二极管(如SMBJ6.5CA)和共模电感(如DLW21HN221SQ2L);
  • SPI信号匹配:若走线长度>5cm,建议串联22Ω电阻以减少反射。

注:CAN收发器的选择以及隔离防护等级可按照项目需求灵活调整。

 

三、SDK内核修改

 3.1  复用修改

设备树文件:talowe-rk3588-Linux.dts


 

首先diabled uart6节点,使引脚释放出来

RK3588

 

 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-names = "default"; pinctrl-0 = <&mcp2518_int>; status = "okey"; };};
&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


RK3588RK3588

 

 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>; };*/

RK3588

 3.4  固件生成

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


 

RK3588

出现如上信息则编译成功,将新生成的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

 

       如果您在基于我司RK3588核心板进行SPI转CAN调试期间遇到任何问题,欢迎随时与我们联系,可以为您提供专业的技术支持,期待与您合作!
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分