如何查看 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
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐