[AIO-3568J] [Firefly-Android] 10min带你了解CAN的使用
Posted Neutionwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[AIO-3568J] [Firefly-Android] 10min带你了解CAN的使用相关的知识,希望对你有一定的参考价值。
- 🍇 博主主页: 【Systemcall小酒屋】
- 🍇 博主追寻:热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是林群院士说过的一句话,另外“成就是最好的老师”,技术既要沉淀,也得分享,成就感的正反馈是支持我持续耕耘的动力!
- 🍇 专栏目录: 【Firefly-RK356x板卡】
- 🍇 专栏说明:基于Firefly旗下的RK356x板卡进行入门篇讲述,欢迎订阅,博主会持续更新!
文章目录
一、CAN 简介
CAN(Controller Area Network)总线,即控制器局域网总线,是一种有效支持分布式控制或实时控制的串行通信网络。CAN总线是一种在汽车上广泛采用的总线协议,被设计作为汽车环境中的微控制器通讯。
更多的内容可以参考CAN应用报告。
二、接口连接
CAN模块之间接线:CAN_H
接CAN_H
,CAN_L
接CAN_L
。
三、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
四、通信测试
可以使用 candump
和 cansend
工具进行收发报文测试,将工具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
以上是关于[AIO-3568J] [Firefly-Android] 10min带你了解CAN的使用的主要内容,如果未能解决你的问题,请参考以下文章
[AIO-3568J] 不知道如何烧录官方Ubuntu系统?那是因为你缺少这篇