目录
apt download can-utils 根据前述文章,得知,此工具可以直接使用,不用依赖于其他的库。
此工具源码在 GitHub - linux-can/can-utils: Linux-CAN / SocketCAN user space applications
暂时不需要静态编译,尚未做过多研究
can-utils工具里面包含接近30个命令,目前用到三个,后续用到其他时再补充。
- 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
作用: 通过指定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 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 can1 111#2233
参数说明:
can_id#pay_load形式。其中can_id必须3or 8位,例如填写 11#2233是不正确的。
接收到字符
- candump can0 -T 10000
- can0 111 [2] 22 33
参考资料