SocketCAN 基本调试方法
KH-UCANFD_Linux_SDK
推荐使用 KH-UCANFD_Linux_SDK 驱动包,专为鲲弘 CAN FD 系列硬件产品设计,提供基于 SocketCAN 标准的深度优化 Linux 驱动及工具,充分释放设备的吞吐能力并降低 CPU 开销。
SDK 驱动包提供了一系列工具和库,方便用户快速上手和开发,例如:多通道压力测试脚本、kcan_monitor 监视器。
详情链接:https://gitee.com/ChengDu-KunHong/KH-UCANFD_Linux_SDK
调试技巧
关于 SocketCAN 的入门教程,在 SDK 链接中已经有详细的介绍了,
这里针对实际使用技巧做一些补充。
CAN FD
使用 SocketCAN 时,掌握以下几个简单操作,能够帮助你进行 CAN FD 的调试。
1. 开启 CAN FD 模式
SocketCAN 中 FD 模式的开启,需要在开启通道前进行配置,通道开启后无法进行配置。
bash
# 配置 can0 波特率为 1M/5M 并开启 FD 模式
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on
sudo ip link set can0 up2. 发送 CAN 帧
bash
# 发送标准帧:ID=0x123,数据=11223344
cansend can0 123#11223344
# 发送 CAN FD 帧
cansend can0 123##1112233443. 监听 CAN 帧
运行candump时带上-x参数,可以显示帧类型,这能够极大帮助我们调试通讯。
bash
# 显示帧类型
candump -x can0更多命令选项
| 选项 | 说明 |
|---|---|
-t <type> | 时间戳格式: • a - 绝对时间 • d - 相对时间 • z - 零时间 • A - 带日期的绝对时间 |
-H | 读取硬件时间戳而非系统时间戳 |
-c | 增加颜色模式级别 |
-i | 二进制输出(可能超过每行 80 字符) |
-a | 启用额外的ASCII输出 |
-S | 交换打印CAN数据[]中的字节顺序(用'`'标记) |
-l | 将CAN帧记录到文件(默认设置 -s 2) |
-f <fname> | 将CAN帧记录到指定文件(默认设置 -s 2) |
-L | 在标准输出上使用日志文件格式 |
-n <count> | 接收指定数量的CAN帧后终止 |
-r <size> | 设置套接字接收缓冲区大小 |
-D | 如果检测到的CAN设备宕机,不退出程序 |
-d | 监控丢弃的CAN帧 |
-e | 以可读格式转储CAN错误帧 |
-8 | 在{}中显示经典CAN的原始DLC值 |
-x | 打印额外消息信息(rx/tx brs esi) |
-T <msecs> | 如果在指定毫秒内未收到帧,则终止 |
TEST:
- 按照以上命令开启candump
- 使用cansend发送标准can和canfd帧
- cundump显示如下
通过测试可以得出CAN 2.0和CAN FD帧在candump +x显示的差异
- CAN FD 帧 显示数据类型为**"B"**为 FD 带 BRS 类型,而CAN 2.0帧没有
- CAN FD帧的DLC(数据长度)因为预留了两位数的长度,显示为"[04]",与CAN 2.0帧显示不同。
kcan_monitor
kcan_monitor 是 KH-UCANFD_Linux_SDK 提供的监测工具,能够一键查看所有 CAN 通道关键状态,告别查询各个通道状态的繁琐过程,极大优化用户在调试过程中的体验。
