• 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口

    1.  ip link set can0 type can bitrate 250000
    2. ip link set can0 up

    而后查询是否配置正确

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

    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

    作用: 接收数据

    1. candump can0 -T 10000 (命令,以下为接收输出)
    2. can0 42A [1] 00
    3. can0 42A [1] 01
    4. can0 42A [1] 02
    5. can0 42A [1] 03
    6. can0 42A [1] 04
    7. can0 42A [1] 05
    8. can0 42A [1] 06
    9. can0 42A [1] 07
    10. can0 42A [1] 08
    11. can0 42A [1] 09

    参数说明

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

    接收到的输出说明

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

    第二列为: can id

    第三列为: 数据长度

    第四列为: 数据本身

    几组数据的发送接收

    递增第一个数据

    1. cangen can0 -g 5 -I 42A -L 8 -D i -x -n 10 发送108数据长度
    2. 接收信息如下:
    3. candump can1 -T 10000
    4. can1 42A [8] 00 00 00 00 00 00 00 00
    5. can1 42A [8] 01 00 00 00 00 00 00 00
    6. can1 42A [8] 02 00 00 00 00 00 00 00
    7. can1 42A [8] 03 00 00 00 00 00 00 00
    8. can1 42A [8] 04 00 00 00 00 00 00 00
    9. can1 42A [8] 05 00 00 00 00 00 00 00
    10. can1 42A [8] 06 00 00 00 00 00 00 00
    11. can1 42A [8] 07 00 00 00 00 00 00 00
    12. can1 42A [8] 08 00 00 00 00 00 00 00
    13. can1 42A [8] 09 00 00 00 00 00 00 00

    canid随机

    1. cangen can0 -g 5 -L 8 -D i -x -n 10 (不指定canid,则随机产生)
    2. 可以看到如下canid列(第二列) 为随机的
    3. candump can1 -T 10000
    4. can1 7C6 [8] 00 00 00 00 00 00 00 00
    5. can1 77F [8] 01 00 00 00 00 00 00 00
    6. can1 28F [8] 02 00 00 00 00 00 00 00
    7. can1 687 [8] 03 00 00 00 00 00 00 00
    8. can1 2C6 [8] 04 00 00 00 00 00 00 00
    9. can1 212 [8] 05 00 00 00 00 00 00 00
    10. can1 639 [8] 06 00 00 00 00 00 00 00
    11. can1 484 [8] 07 00 00 00 00 00 00 00
    12. can1 7D5 [8] 08 00 00 00 00 00 00 00
    13. 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是不正确的。

    接收到字符

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

    参考资料

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

  • 相关阅读:
    ios xcode15 navigationController?.navigationBar.isHidden = false无效
    Java 序列化和反序列化为什么要实现 Serializable 接口呢?
    学习C++第二十二课--类模版概念与函数模版的定义、调用笔记
    内存还有几十G,为何jvm会oom crash
    【Electron】开发实战
    成员变量为动态数据时不可轻易使用
    10个Python脚本来自动化你的日常任务
    ProtoBuf lite版中使用Any
    Flowable 工作流 删除任务
    浪潮信息Owen ZHU:大模型百花齐放,算力效率决定速度
  • 原文地址:https://blog.csdn.net/proware/article/details/126107886