CAN总线
CAN 总线协议(Controller Area Network),控制器局域网总线,是德国 BOSCH(博世)公司研发的一种串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。开发板的CAN总线接口如图
</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
备注
其它CAN文档详见:边缘计算SDK工程的docs/Common/Can/目录下文档