Canbus 使用
CANBUS 简介
控制器区域网络(CAN总线)是一种车辆总线标准,旨在允许微控制器和设备相互通信。 它是一种基于消息的协议,最初设计用于汽车内部的多路电气布线,以节省铜,但它也可以用于许多其他 环境。 对于每个设备,帧中的数据是串行传输的,但如果多个设备同时传输,则最高优先级设备可以继续传输,而其他设备则后退。 帧被所有设备接收,包括发送设备。
准备
- 两块带有 CANBUS 的 Radxa 开发板
- 两个 CANBUS 模块
开启 Overlay
请参照设备树配置 启用 CANBUS 相关 Overlay, eg: "Enable CAN1-M0"。
连接
主设备 CAN 模块 CAN 模块 主设备
3.3V <--> VCC VCC <--> VCC
GND <--> GND GND <--> GND
CAN_TX <--> CTX CTX <--> CAN_TX
CAN_RX <--> CRX CRX <--> CAN_RX
CANH <--> CANH
CANL <--> CANL
安装测试工具
sudo apt update
sudo apt-get install can-utils iproute2
检查 CAN 节点
$ ip a
can0: flags=193<UP,RUNNING,NOARP> mtu 72
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 144 bytes 1152 (1.1 KiB)
RX errors 175 dropped 0 overruns 0 frame 35
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 62
回还测试
一块板子作为发送端,另一块则作为接收端
- 发送端
$ sudo ip link set can0 down
$ sudo ip link set can0 type can bitrate 1000000 dbitrate 1000000 loopback on fd on
$ sudo ip link set can0 up
$ sudo cansend can0 123#11223344
- 接收端
$ sudo ip link set can0 down
$ sudo ip link set can0 type can bitrate 1000000 dbitrate 1000000 loopback on fd on
$ sudo ip link set can0 up
$ sudo candump can0
can0 123 [4] 11 22 33 44