BeagleBone Black(BBB) CAN1 TX计数为0 报文无法发出故障问询
BeagleBone Black CAN发送无输出故障排查与解决方案
前置验证(优先级最高)
- 确认引脚复用实际生效,执行以下命令查询引脚状态,返回值必须为
can:
若配置不生效,直接在config-pin -q p9.24 config-pin -q p9.26/boot/uEnv.txt中添加设备树覆盖配置,重启后再验证:uboot_overlay_addr4=/lib/firmware/BB-CAN1-00A0.dtbo - 确认CAN总线两端均已接入120Ω终端电阻,工业版BeagleBone需额外检查板载终端电阻跳线是否处于闭合状态。
逐层软件排查步骤
- 检查CAN控制器状态与错误统计
执行以下命令查看内核层面的CAN状态,重点关注tx_errors(发送错误计数)、bus_off(总线关闭标记)、arbitration_lost(仲裁丢失计数)三项:
ip -d -s link show can1
若存在bus_off标记,执行以下命令开启自动重启功能:
sudo ip link set can1 down sudo ip link set can1 up type can bitrate 500000 restart-ms 100
- 校验CAN控制器时钟配置
旧版本官方固件默认使用内部时钟驱动DCAN控制器,时钟精度不足会导致波特率偏移超出允许范围,发送帧被硬件直接丢弃。可通过dmesg确认时钟配置报错:
dmesg | grep -i dcan
若存在时钟相关报错,需修改设备树将DCAN1的时钟源切换为外部24MHz晶振。
- 调整发送队列与功能参数
部分场景下默认发送队列长度不足或默认功能配置冲突会导致发送失败,可执行以下命令重新配置CAN接口:
sudo ip link set can1 down sudo ip link set can1 up type can bitrate 500000 loopback off berr-reporting on triple-sampling on sudo ifconfig can1 txqueuelen 1000
- 排查引脚资源冲突
工业版BeagleBone的P9.24、P9.26引脚默认可能被分配给UART、SPI等其他外设,可执行以下命令查询引脚占用情况,禁用冲突外设后再配置CAN:
cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pinmux-pins | grep 9a0 # P9.24对应寄存器偏移 cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pinmux-pins | grep 994 # P9.26对应寄存器偏移
功能验证
完成配置后开启两个终端分别执行以下命令,若本地candump可收到发送的帧,说明本地配置正常,只需确认对端波特率与总线连接即可:
# 终端1:开启CAN数据监听 candump can1 # 终端2:发送测试帧 cansend can1 5A1#00010203
内容的提问来源于stack exchange,提问作者Seth
相关产品推荐
相关产品推荐

