Linux CAN调试工具can-utils的使用

CAN,Controller Area Network,控制器局域网,一种高可靠性的现场总线。广泛用于汽车电子、工业控制通信。

canutils 工具包内含如下独立的程序,功能简述如下:

canconfig:用于配置 CAN 总线接口的参数,主要是波特率和模式。

candump:从 CAN 总线接口接收数据并以十六进制形式打印到标准输出,也可以输出到指定文件。

canecho:把从 CAN 总线接口接收到的所有数据重新发送到 CAN 总线接口。

cansend:往指定的 CAN 总线接口发送指定的数据。

cansequence:往指定的 CAN 总线接口自动重复递增数字,也可以指定接收模式并校验检查接收的递增数字。

canbusload: 用于查看CAN总线使用率

以下指令,若有两个指令,则两个指令均可。

使用 ip 命令来配置 CAN 总线的位速率:

复制代码
ip link set can0 type cantq 125 prop-seg 6phase-seg1 7 phase-seg2 2 sjw 1

ip 命令直接设定位速率:

复制代码
ip link set can0 type can bitrate 125000
echo 500000 > /sys/class/net/can0/can_bittiming/bitrate

当设置完成后,可以通过下面的命令查询 can0 设备的参数设置:

复制代码
ip -details link show can0

当设置完成后,可以使用下面的命令使能 can0 设备(两个指令均可):

复制代码
ifconfig can0 up
ip link set can0 type can restart-ms 100

使用下面的命令取消 can0 设备使能:

复制代码
ifconfig can0 down

在设备工作中,可以使用下面的命令来查询工作状态:

复制代码
ip -details -statistics link show can0

向can0设备发送数据:

复制代码
cansend can0 123#11223344556677
./cansend can0 -e 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

发送默认ID为0x1的can标准帧,数据为0x11 22 33 44 55 66 77 88

每次最大8个byte

复制代码
./cansend can0 -i 0x800 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 -e

-e 表示扩展帧,CAN_ID最大29bit,标准帧CAN_ID最大11bit

-i表示CAN_ID

循环发送数据:

复制代码
cansend can0 -i 0x02 0x11 0x12 --loop=20

查看接收到的数据:

复制代码
candump can0

查看特定ID的CAN数据

candump can1,181:7FF,281:7FF // candump <can_devices>,<can_id>:<can_mask>

这里是只监听CANID为0x181,0x281的数据。(知识点:CAN标准帧ID为11位,对应的掩码为0x7FF。CAN扩展帧ID为29位,对应的掩码为0x1FFFFFFF)

添加时间戳参数

candump can1 -tA

使用canconfig配置:

canconfig can0 stop

canconfig can0 bitrate 125000

canconfig can0 start

canbusload用法

canbusload - monitor CAN bus load.

Usage: canbusload options <CAN interface>+

(use CTRL-C to terminate canbusload)

Options:

-t (show current time on the first line)

-c (colorize lines)

-b (show bargraph in 5% resolution)

-r (redraw the terminal - similar to top)

-i (ignore bitstuffing in bandwidth calculation)

-e (exact calculation of stuffed bits)

Up to 16 CAN interfaces with mandatory bitrate can be specified on the

commandline in the form: <ifname>@<bitrate>

The bitrate is mandatory as it is needed to know the CAN bus bitrate to

calcultate the bus load percentage based on the received CAN frames.

Due to the bitstuffing estimation the calculated busload may exceed 100%.

For each given interface the data is presented in one line which contains:

(interface) (received CAN frames) (used bits total) (used bits for payload)

Examples:

user$> canbusload can0@100000 can1@500000 can2@500000 can3@500000 -r -t -b -c

  1. 查看CAN1总线负载

    canbusload can1@500000

参考链接:

https://zhuanlan.zhihu.com/p/470681140

https://blog.csdn.net/sinolover/article/details/114833102

https://blog.csdn.net/xiaoyuanwuhui/article/details/136562983

相关推荐
程序员与背包客_CoderZ10 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
Android系统攻城狮10 小时前
Linux PipeWire深度解析之pw_properties_iterate调用流程与实战(六十五)
linux·运维·服务器·音频进阶·pipewire音频进阶
研华科技Advantech11 小时前
案例 | 从离线巡检到在线看护:研华PHM解决方案赋能石油钻井平台智能运维
运维·人工智能·边缘计算
難釋懷11 小时前
Nginx主动健康检查
运维·nginx
ITyunwei098711 小时前
内存溢出报错,实战处理记录
运维·服务器·企业微信
Elastic 中国社区官方博客11 小时前
你的 AI agent 不需要你的 API 密钥:使用 OAuth 2.1 对 Elasticsearch MCP 服务器进行身份验证
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索
FreeTinker12 小时前
AP AC组网中的远程运维挑战及内网穿透技术应用分析
运维
谷哥的小弟13 小时前
腾讯云服务器安装Redis Stack图文教程
服务器·redis·腾讯云·redis stack
发量惊人的中年网工13 小时前
中小企业网络管理进阶:从设备堆叠到统一管理
服务器·网络·安全·网络安全·php·制造
jason.zeng@150220713 小时前
linux的top命令
java·linux·服务器