Can Utils:开源CAN总线工具集合
一、Can Utils简介
Can Utils 是一组开源的CAN总线工具链,专为嵌入式开发者和网络诊断工程师设计,支持Linux、Windows和macOS系统。它包含一系列轻量级命令行工具(如 cantoolz
、candump
、canbus
等),提供CAN总线数据收发、协议解析、日志记录等功能,广泛用于汽车电子、工业自动化、物联网设备的开发与调试。
核心特性:
- 开源免费(GPLv3协议)
- 轻量级且跨平台
- 支持CAN 2.0A/B、CAN FD协议
- 集成DBC/XDC协议数据库解析
- 可扩展性强(支持插件开发)
二、Can Utils使用指南
1. 安装与依赖
Linux(Debian/Ubuntu)
sudo apt-get install can-utils
Windows
- 下载预编译二进制包:https://github.com/can-utils/can-utils/releases
- 安装依赖驱动(如
pcanusb
或ks2000
)
macOS
brew install can-utils
2. 基础工具操作
1. cantoolz(综合工具)
-
实时监控CAN总线:
cantoolz -i can0 -b 500000 # 监听can0接口,波特率500kbps
-
发送CAN报文:
cantoolz -i can0 -b 500000 -x 0x123 # 发送单次报文(ID=0x123)
-
持续发送报文:
cantoolz -i can0 -b 500000 -x 0x123 -d 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x00
2. candump(数据抓包)
-
捕获CAN流量并保存到文件:
candump -i can0 -w can_log.pcap # 保存为PCAP格式
-
实时过滤报文(ID=0x1FF,数据全匹配):
candump -i can0 -v '0x1ff.*'
3. canplayer(回放报文)
- 从PCAP文件回放数据:
canplayer -i can0 -c can_log.pcap
3. DBC/XDC协议解析
1. 配置DBC文件路径
创建符号链接或设置环境变量:
export CAN_DB_PATH=/path/to/your/dbc/files
2. 通过cantoolz解析报文
启动cantoolz时加载DBC文件:
cantoolz -i can0 -b 500000 --dbc my_protocol.dbc
3. 查看解析结果示例
Timestamp: 123456789 (us), ID: 0x100, DLC: 8
TARGET_ADDRESS: 0x01
SPEED: 120 km/h
TEMPERATURE: 35.5 °C
三、详细配置说明
1. 硬件接口配置
Linux(设置CAN接口)
# 查看可用CAN设备
ip link list
# 启用CAN接口(以can0为例)
sudo ip link set can0 up type can bitrate 500000
# 配置PDO(Process Data Object,需配合PDO工具)
sudo pcanconfig can0 -p 0x1600 -d 0x1A00 # 示例PDO配置
Windows(驱动配置)
- 安装对应CAN卡驱动(如Peak-System PCAN系列)
- 在设备管理器中确认CAN接口名称(如
PCAN_USB
)
2.波特率与过滤器配置
1. 动态修改波特率(需重启接口)
sudo ip link set can0 down
sudo ip link set can0 up type can bitrate 1000000
2. 报文过滤规则
-
ID过滤(掩码法):
cantoolz -i can0 -b 500000 -m 0x7FF # 接收ID 0~0x7FF的报文
-
数据内容过滤(十六进制正则表达式):
candump -i can0 -v '0x01ff.*0xAA'
3.高级配置(通过配置文件)
创建 .canutils.conf
文件(全局生效):
[DEFAULT]
interface = can0
bitrate = 500000
dbc_path = /usr/share/can-utils/dbc/
[FILTER]
id_mask = 0x7FF
data_mask = 0xFFFF
[LOGGING]
log_file = /var/log/can_data.log
log_format = csv
四、典型应用场景
-
ECU通信诊断
- 分析发动机控制单元(ECU)的实时报文
- 验证传感器数据(如温度、转速)传输
-
AUTOSAR网络测试
- 模拟AUTOSAR节点行为
- 检测PDO传输一致性
-
故障诊断
- 捕获CAN总线异常帧(CRC错误、帧格式错误)
- 分析CAN FD通信丢包率
五、扩展开发
Can Utils提供Python/C API扩展能力,可通过插件实现自定义功能:
# 示例:Python脚本发送CAN报文
import can
bus = can.Bus(interface='can0', bitrate=500000)
message = can.Message(arbitration_id=0x123, data=[0x41, 0x42], is_extended=False)
bus.send(message)
结语
Can Utils凭借其开源特性和强大的命令行工具链,成为CAN总线开发领域的性价比之选。无论是快速调试还是复杂协议分析,均可通过灵活的组合工具链完成。建议访问官方GitHub仓库获取最新文档和源代码:https://github.com/can-utils/can-utils。