【嵌入式Linux】can 初步使用
·
文章目录
如何查看 can 节点
可能的CAN节点命名
can0, can1, ... - SocketCAN接口
vcan0 - 虚拟CAN接口(用于测试)
slcan0 - Serial Line CAN
查看can设备文件
ls -la /dev/can*
ls -la /dev/ttyCAN*
使用IP命令查看can接口
ip link show can*
ip -d link show can* # 显示详细信息
查看网络接口
ifconfig -a | grep can
使用dmesg查看内核日志
dmesg | grep -i can
dmesg | grep -i mcp251 # 如果使用MCP251x SPI转CAN
查看sysfs信息
ls -la /sys/class/net/can*
cat /sys/class/net/can0/type # 查看接口类型
查看设备树信息
ls -la /proc/device-tree/can*
查看CAN接口统计
ip -s -d link show can0
使用can-utils工具
安装can-utils(如果未安装)
# Buildroot配置
BR2_PACKAGE_CAN_UTILS=y
查看CAN接口信息
candump can0 -l # 查看CAN接口信息
显示CAN接口状态
candump can0 --json # 需要支持JSON格式
基本操作
# 设置CAN波特率
ip link set can0 type can bitrate 250000
ip link set can0 up
# 查看CAN接口状态
ip -d link show can0
# 监听CAN数据
candump can0
# 发送CAN数据
cansend can0 123#00 # 标准帧
cansend can0 123#11223344 # 数据帧
检查Buildroot配置,查看是否启用了CAN支持:
# 在Buildroot配置中
grep "BR2_LINUX_KERNEL_EXT_CAN" .config
grep "BR2_PACKAGE_CAN_UTILS" .config
grep "BR2_PACKAGE_SOCKETCAND" .config
检查CAN硬件连接
# 查看GPIO和引脚状态
cat /sys/kernel/debug/gpio # 如果debugfs挂载
ls -la /sys/class/spi_master/ # SPI转CAN芯片
常见CAN节点类型
# SPI转CAN (MCP251x等)
ls -la /sys/bus/spi/devices/
# 内置CAN控制器 (某些SoC)
ls -la /sys/class/net/can*
# USB-CAN适配器
lsusb | grep -i can
常用CAN操作命令:
# 实时监听所有CAN数据
candump can0
# 监听特定ID(例如0x123)
candump can0,123:7FF
# 带时间戳
candump -t a can0
# 发送标准帧(ID 0x123,数据 01 02 03 04)
cansend can0 123#01020304
# 发送扩展帧(ID 0x12345678)
cansend can0 12345678#1122334455667788
# 发送CAN FD帧(需要支持FD)
cansend can0 123##1012345678 # 注意##表示FD帧
# 详细状态
ip -s -d link show can0
# 实时统计
ip -s link show can0
# 查看错误计数器
cat /sys/class/net/can0/statistics/rx_errors
cat /sys/class/net/can0/statistics/tx_errors
CAN配置修改
# 关闭接口
ip link set can0 down
# 修改波特率(例如改为250Kbps)
ip link set can0 type can bitrate 250000
# 重新启用
ip link set can0 up
# 启用CAN FD(如果支持)
ip link set can0 type can bitrate 500000 dbitrate 2000000 fd on
# 设置重启时间
ip link set can0 type can restart-ms 100
测试CAN通信
# 使用cangen生成测试数据(发送随机数据)
cangen can0
# 使用canbusload查看总线负载
canbusload can0@500000
# 使用canplayer重放日志
canplayer -I can_logfile.log
过滤特定ID
# 只监听ID 0x100到0x1FF
candump can0,100:7FF
# 只监听特定ID和接收数据
candump can0,123:7FF,456:7FF
显示更详细的时间戳
# 毫秒精度
candump -t d can0
# 微秒精度
candump -t u can0
# 相对时间(从启动开始)
candump -t r can0
发送测试数据
# 发送到ID 0x200
cansend can0 200#1122334455667788
# 发送到ID 0x300,数据长度可变
cansend can0 300#010203
例子
Croot@rk3506-buildroot:/proc/device-tree/can@ff320000# candump -t a can0
(1609580719.000000) can0 101 [8] 7B 00 00 00 00 00 00 00
(1609580719.000000) can0 102 [8] 00 00 00 04 3F EE 00 01
(1609580719.000000) can0 103 [8] 00 02 00 01 2E AD 2F 7D
(1609580719.000000) can0 101 [8] 7B 00 00 00 00 00 00 00
(1609580719.000000) can0 102 [8] 00 06 00 08 3F F3 00 02
(1609580719.000000) can0 103 [8] FF FF 00 04 2E AD 3C 7D
(1609580719.000000) can0 101 [8] 7B 00 00 00 00 00 00 00
(1609580719.000000) can0 102 [8] 00 0A 00 03 3F ED 00 04
(1609580719.000000) can0 103 [8] 00 01 00 04 2E AD 22 7D
更多推荐
所有评论(0)