跳转至

CAN

CAN (Controller Area Network) 总线,即控制器局域网总线,是一种有效分布式控制或实时控制的串行通信网络。

Tip

K9内置了 CAN 收发器模块。

AllWinner 平台拓展引脚 CAN 信息如下:

主板 SOC 拓展引脚
K9 T527 CAN X2

DTS 节点配置

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";
};

驱动文件

AllWinner T527 平台 CAN 总线驱动路径如下:

  • Android 系统
longan/bsp/drivers/awlink/sunxi_awlink.c
  • Debian 11 系统
bsp/drivers/awlink/sunxi_awlink.c

查询当前CAN设备

查询当前网络设备:

ifconfig -a

操作示例

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 配置

Tip

下文将以CAN_0节点为例进行说明,该节点对应DTS文件中的awlink0节点(即CAN_0节点的设备树命名为awlink0)。

关闭 CAN:

ip link set awlink0 down

设置awlink0异常时10ms重启:

ip link set awlink0 type can restart-ms 10

设置awlink0的比特率为1 Mbps/s,且开启回环:

ip link set awlink0 type can bitrate 1000000 loopback on

设置队列深度:

ip link set awlink0 qlen 300

查看 can0 配置信息:

ip -d -s link show awlink0

启动 CAN:

ip link set awlink0 up

CAN 发送

发送(标准帧,数据帧,ID:123,date:DEADBEEF):

cansend awlink0 123#DEADBEEF

发送(标准帧,远程帧,ID:123):

cansend awlink0 123#R

发送(扩展帧,数据帧,ID:00000123,date:DEADBEEF):

cansend awlink0 00000123#12345678

发送(扩展帧,远程帧,ID:00000123):

cansend awlink0 00000123#R

CAN 接收

开启打印,等待接收:

candump awlink0