can-utils使用

目录

工具获取

1. 可执行二进制获取

2. 源码

命令使用

配置can口

cangen

candump

几组数据的发送接收

递增第一个数据

cansend


工具获取

1. 可执行二进制获取

apt download can-utils 根据前述文章,得知,此工具可以直接使用,不用依赖于其他的库。

2. 源码

此工具源码在  GitHub - linux-can/can-utils: Linux-CAN / SocketCAN user space applications

暂时不需要静态编译,尚未做过多研究

命令使用

can-utils工具里面包含接近30个命令,目前用到三个,后续用到其他时再补充。

配置can口

 ip link set can0 type can bitrate 250000

 ip link set can0 up

而后查询是否配置正确

ip -details link show can0 (查询命令)

以下是查询结果
4: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0 minmtu 0 maxmtu 0
    can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
          bitrate 250000 sample-point 0.875

如果要改配,则需要先将口down掉

#ip link set can0 type can bitrate 1000000  (未down掉改配,则提示busy)
RTNETLINK answers: Device or resource busy
# ip link set can0 down
# ip link set can0 type can bitrate 1000000

cangen

 作用: 通过指定can口发送指定的数据

cangen can1 -g 5 -I 42A -L 1 -D i -x -n 10

 参数说明:

1)g : 发送帧的间隔,单位为毫秒。可以参考波特率的设置进行调整。

2) I : CAN ID 生成的模式,此处42A表示采用固定的CANID 42A。如果不指定则为随机模式。

3)L: 数据长度产生模式,此处固定长度为1,即每帧携带一个数据
4) D: payload 的产生模式,此处为i,即从0开始依次递增发送数据,仅仅递增第一个数据。

5)x: 即禁止本地自环测试。比如我们在同一个单板上有两个can口,我们将其互联,进行互发数据,如果不使用此参数,则通过can1向can1则可以正常发送数据,即使外部没有连接。

6)n: 发送多少个帧,此处发送10个帧

candump

作用: 接收数据

candump can0 -T 10000  (命令,以下为接收输出)
  can0  42A   [1]  00
  can0  42A   [1]  01
  can0  42A   [1]  02
  can0  42A   [1]  03
  can0  42A   [1]  04
  can0  42A   [1]  05
  can0  42A   [1]  06
  can0  42A   [1]  07
  can0  42A   [1]  08
  can0  42A   [1]  09

参数说明

1) T: candump默认一直阻塞,不会退出。参数T即timeout,表示多少时间没有收到数据,则退出candump。单位为毫秒。

接收到的输出说明

第一列为:接收数据的can口名称

第二列为: can id

第三列为: 数据长度

第四列为: 数据本身

几组数据的发送接收

递增第一个数据

cangen can0 -g 5 -I 42A -L 8 -D i -x -n 10  发送10次8数据长度
接收信息如下:
candump can1 -T 10000
  can1  42A   [8]  00 00 00 00 00 00 00 00
  can1  42A   [8]  01 00 00 00 00 00 00 00
  can1  42A   [8]  02 00 00 00 00 00 00 00
  can1  42A   [8]  03 00 00 00 00 00 00 00
  can1  42A   [8]  04 00 00 00 00 00 00 00
  can1  42A   [8]  05 00 00 00 00 00 00 00
  can1  42A   [8]  06 00 00 00 00 00 00 00
  can1  42A   [8]  07 00 00 00 00 00 00 00
  can1  42A   [8]  08 00 00 00 00 00 00 00
  can1  42A   [8]  09 00 00 00 00 00 00 00

canid随机

cangen can0 -g 5  -L 8 -D i -x -n 10 (不指定canid,则随机产生)
可以看到如下canid列(第二列) 为随机的
candump can1 -T 10000
  can1  7C6   [8]  00 00 00 00 00 00 00 00
  can1  77F   [8]  01 00 00 00 00 00 00 00
  can1  28F   [8]  02 00 00 00 00 00 00 00
  can1  687   [8]  03 00 00 00 00 00 00 00
  can1  2C6   [8]  04 00 00 00 00 00 00 00
  can1  212   [8]  05 00 00 00 00 00 00 00
  can1  639   [8]  06 00 00 00 00 00 00 00
  can1  484   [8]  07 00 00 00 00 00 00 00
  can1  7D5   [8]  08 00 00 00 00 00 00 00
  can1  5AF   [8]  09 00 00 00 00 00 00 00

cansend

发送数据,没有多余控制。

cansend can1 111#2233

参数说明

can_id#pay_load形式。其中can_id必须3or 8位,例如填写 11#2233是不正确的。

接收到字符

 candump can0 -T 10000
  can0  111   [2]  22 33

参考资料

CAN口数据传输 - 知乎 (zhihu.com)

猜你喜欢

转载自blog.csdn.net/proware/article/details/126107886