CAN
CAN (Controller Area Network) 总线,即控制器局域网总线,是一种有效分布式控制或实时控制的串行通信网络。
Rockchip 平台拓展引脚 CAN 信息如下:
Warning
Rockchip 拓展引脚上的 CAN 为芯片原生接口,使用时需外接 CAN 收发器模块。
| 主板 | SOC | 拓展引脚 | CAN 收发器 |
|---|---|---|---|
| K1 | RK3568 | CAN X2 | N |
| K1B | RK3568 | N | N |
| K1Mini | RK3568 | CAN X2 | N |
| K3 | RK3562 | N | N |
| K3B | RK3562 | N | N |
| K7 | RK3576 | CAN X1 | N |
| K7C | RK3576 | CAN X1 | N |
| K7S/F | RK3576 | N | N |
| K8 | RK3588 | CAN X1 | N |
| K8D | RK3588S2 | CAN X1 | N |
| K11C | RK3566 | N | N |
AllWinner 平台拓展引脚 CAN 信息如下:
| 主板 | SOC | 拓展引脚 | CAN 收发器 |
|---|---|---|---|
| K2B | H618 | N | N |
| K2C | H618 | N | N |
| K4B | T113 | N | N |
| K5C | A133 | N | N |
| K9 | T527 | CAN X2 | Y |
| K10B | A733 | N | N |
DTS 节点配置
Rockchip
下面为 Rockchip 平台 CAN 设备 0 节点配置示例:
Allwinner
Note
在 AllWinner T527 平台的设备树源文件(DTS)中,CAN设备对应的节点名称定义为“awlink”。需注意的是,“awlink”仅为该CAN设备节点的命名标识,其实际功能、硬件属性与CAN设备完全一致,二者本质为同一设备,仅存在称呼上的差异,无功能区别。
下面为 T527 平台 CAN_0 设备节点配置示例:
awlink0: awlink@0x0{
#address-cells = <1>;
#size-cells = <0>;
compatible = "allwinner,t527-awlink";
device_type = "awlink0";
awlink-pin = <1>;
id = <0>;
status = "okay";
};
下面为 T527 平台 CAN_1 设备节点配置示例:
awlink1: awlink@0x1{
#address-cells = <1>;
#size-cells = <0>;
compatible = "allwinner,t527-awlink";
device_type = "awlink1";
awlink-pin = <0>;
id = <1>;
status = "okay";
};
驱动文件
RK3568/RK3588 平台 CAN 总线驱动路径如下:
RK3562 平台 CAN 总线驱动路径如下:
RK3576 平台 CAN 总线驱动路径如下:
AllWinner T527 平台 CAN 总线驱动路径如下:
查询当前 CAN 设备
查询当前网络设备:
Rockchip 平台操作示例:
console$ ifconfig -a
...
can0 Link encap:UNSPEC Driver rk3576_canfd
NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 TX bytes:0
Interrupt:63
...
Allwinner 平台操作示例:
console$ ifconfig -a
...
awlink0: flags=128<NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 27
awlink1: flags=128<NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 28
...
CAN 配置
Rockchip
关闭 CAN:
设置 can0 为 500Kbps 的比特率,并关闭 CAN FD 模式:
设置 can0 仲裁段 1M 波特率,数据段 3M 波特率,启动 CAN FD 模式:
查看 can0 配置信息:
启动 CAN:
Allwinner
Tip
下文将以 CAN_0 节点为例进行说明,该节点对应DTS文件中的 awlink0 节点(即 CAN_0 节点的设备树命名为 awlink0 )。
关闭 CAN:
设置awlink0异常时10ms重启:
设置awlink0的比特率为1 Mbps/s,且开启回环:
设置队列深度:
查看 can0 配置信息:
启动 CAN:
CAN 发送
以节点 can0 为例:
发送(标准帧,数据帧,ID:123,date:DEADBEEF):
发送(标准帧,远程帧,ID:123):
发送(扩展帧,数据帧,ID:00000123,date:DEADBEEF):
发送(扩展帧,远程帧,ID:00000123):
CAN 接收
以节点 can0 为例:
开启打印,等待接收: