跳到主要内容

CAN总线

CAN 总线协议(Controller Area Network),控制器局域网总线,是德国 BOSCH(博世)公司研发的一种串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。开发板的CAN总线接口如图

RK3588_CAN0 </left>

DTS修改

默认toybrick的DTS配置已经支持板载CAN总线,可自行根据需求进行其他CAN总线配置的修改(无需要可忽略)

# 修改rk3588-toybrick-x0.dtsi
&can2 {
assigned-clocks = <&cru CLK_CAN2>;
assigned-clock-rates = <200000000>;
pinctrl-names = "default";
pinctrl-0 = <&can2m0_pins>;
status = "okay";
};

&can0 {
assigned-clocks = <&cru CLK_CAN0>;
assigned-clock-rates = <200000000>;
pinctrl-names = "default";
pinctrl-0 = <&can0m1_pins>;
status = "okay";
};
提示

时钟频率可以修改,如果CAN的比特率低于等于3M建议修改CAN时钟到100M,信号更稳定。高于3M比特率的,时钟设置200M就可以。

CAN常用命令

can-utils是常用的CAN通信测试工具包,内含 5 个独立的程序:canconfig、candump、canecho、cansend、cansequence,通过apt命令进行安装。

sudo apt update
sudo apt install can-utils

常用CAN命令

# 查看can总线
ip link show

# 设置比特率 500KHz
ip link set can0 type can bitrate 500000

# 打印can0信息
ip -details link show can0

# 启动CAN
ip link set can0 up

# CAN发送
# 发送(标准帧,数据帧,ID:123,date:DEADBEEF)
cansend can0 123#DEADBEEF

# 发送(标准帧,远程帧,ID:123)
cansend can0 123#R

# 发送(扩展帧,数据帧,ID:00000123,date:DEADBEEF)
cansend can0 00000123#12345678

# 发送(扩展帧,远程帧,ID:00000123)
cansend can0 00000123#R

# CAN接收(开启打印,等待接收)
candump can0

CAN总线测试

本实验通过两块开发板进行CAN总线连接,用于验证数据收发,接线如下:

  • 开发板1 ------ 开发板2
  • CAN VSS ------ CAN VSS
  • CANL ------ CANL
  • CANH ------ CANH

RK3588_CAN1

备注

其它CAN文档详见:边缘计算SDK工程的docs/Common/Can/目录下文档