0
点赞
收藏
分享

微信扫一扫

[AIO-3568J] [Firefly-Android] 10min带你了解CAN的使用

[AIO-3568J] [Firefly-Android] 10min带你了解CAN的使用_android

[AIO-3568J] [Firefly-Android] 10min带你了解CAN的使用_rk3568_02

文章目录

  • 一、CAN 简介
  • 二、接口连接
  • 三、DTS 配置
  • 四、通信测试
  • 四、特殊时钟频率配置

一、CAN 简介

CAN(Controller Area Network)总线,即控制器局域网总线,是一种有效支持分布式控制或实时控制的串行通信网络。CAN总线是一种在汽车上广泛采用的总线协议,被设计作为汽车环境中的微控制器通讯。

更多的内容可以参考CAN应用报告。

二、接口连接

CAN模块之间接线:CAN_HCAN_HCAN_LCAN_L

[AIO-3568J] [Firefly-Android] 10min带你了解CAN的使用_网络_03

三、DTS 配置

公共配置 arch/arm64/boot/dts/rockchip/rk3568-firefly-port.dtsi

&can1 {
        status = "disabled";
        compatible = "rockchip,can-1.0";
        assigned-clocks = <&cru CLK_CAN1>;
        assigned-clock-rates = <150000000>;
        pinctrl-names = "default";
        pinctrl-0 = <&can1m1_pins>;
};

&can2 {
        status = "disabled";
        compatible = "rockchip,can-1.0";
        assigned-clocks = <&cru CLK_CAN2>;
        assigned-clock-rates = <150000000>;
        pinctrl-names = "default";
        pinctrl-0 = <&can2m0_pins>;
};

板级配置 arch/arm64/boot/dts/rockchip/rk3568-firefly-aioj.dtsi

&can1 {
    status = "okay";
};

&can2 {
    status = "okay";
};

硬件接口对应软件上的节点分别为:

CAN2(H2、L2):can0
CAN1(H1、L1):can1

四、通信测试

可以使用 candumpcansend 工具进行收发报文测试,将工具adb push/system/bin/目录下执行。工具可以在 Firefly 官方 或者 github 下载。

常用指令用法如下:

#在收发端关闭can0设备
ip link set can0 down
#在收发端设置比特率为250Kbps                 
ip link set can0 type can bitrate 250000
#在收发端打开can0设备  	
ip link set can0 up
#在接收端执行candump,阻塞等待报文                        	
candump can0
#在发送端执行cansend,发送报文        	
cansend can0 123#1122334455667788

更多其他指令:

ip link set canX down 		#关闭can设备;
ip link set canX up   		#开启can设备;
ip -details link show canX 		#显示can设备详细信息;
candump canX  			#接收can总线发来数据;
ifconfig canX down 			#关闭can设备,以便配置;
ip link set canX up type can bitrate 250000 #设置can波特率
conconfig canX bitrate + 波特率;
canconfig canX start 		#启动can设备;
canconfig canX ctrlmode loopback on #回环测试;
canconfig canX restart 		# 重启can设备;
canconfig canX stop 		#停止can设备;
canecho canX 			#查看can设备总线状态;
cansend canX --identifier=ID+数据 	#发送数据;
candump canX --filter=ID:mask	#使用滤波器接收id匹配的数据

四、特殊时钟频率配置

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

CAN时钟频率修改方法参考如下:

diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-port.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-port.dtsi
index 274ebb1..5f2ca7b 100644
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-port.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3568-firefly-port.dtsi
@@ -673,7 +673,7 @@
        status = "disabled";
        compatible = "rockchip,can-1.0";
        assigned-clocks = <&cru CLK_CAN1>;
-       assigned-clock-rates = <150000000>;
+       assigned-clock-rates = <100000000>;
        pinctrl-names = "default";
        pinctrl-0 = <&can1m1_pins>;
 };
@@ -682,7 +682,7 @@
        status = "disabled";
        compatible = "rockchip,can-1.0";
        assigned-clocks = <&cru CLK_CAN2>;
-       assigned-clock-rates = <150000000>;
+       assigned-clock-rates = <100000000>;
        pinctrl-names = "default";
        pinctrl-0 = <&can2m0_pins>;
 };

注意:

在某些时钟频率下,CAN的bitrate无法获得准确的速率,我们可以自行调整assigned-clock-rates去解决。

查看是否得到所需的bitrare:

ip -d link show can1


举报

相关推荐

0 条评论