0
点赞
收藏
分享

微信扫一扫

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)​​

举报

相关推荐

0 条评论