BeagleBone Black(BBB) CAN发送功能仅在环回模式下可用问题求助
BeagleBone Black CAN关闭环回模式无发送信号排查思路
首先明确一个统计逻辑差异:/proc/net/can/stats 中的 transmitted frames 统计的是内核CAN子系统已经递交给CAN控制器的帧数量,和实际总线发送成功状态无关,只要你执行了发送操作该数值就会增长;而ifconfig中的TX计数是CAN控制器实际成功发送到总线的帧计数,两者计数不一致是正常现象。
以下是分步排查思路:
- 物理层与总线环境检查
CAN总线属于差分串行总线,关闭环回模式后控制器需要收到接收节点返回的ACK应答才会标记帧发送完成,否则会一直重试,不会输出实际发送信号:- 确认BBB的CAN1引脚已外接标准CAN收发器(如TJA1050、SN65HVD230),BBB原生引脚输出的是TTL电平的CAN_RX/CAN_TX,不能直接挂载到CAN总线
- 确认CAN总线两端已各接一个120Ω终端电阻,总线上至少存在一个其他正常工作的CAN节点,且节点波特率与BBB配置的1Mbps一致
- 若暂时没有其他CAN节点,可将CAN收发器的CAN_H和CAN_L短接后测试,验证是否为无ACK导致的发送阻塞
- 引脚复用与设备树配置检查
BBB默认引脚多为GPIO模式,需手动配置为CAN功能:- 执行命令
cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pinmux-pins | grep can,检查CAN1对应的引脚复用状态是否正确,无被其他外设占用的情况 - 若使用官方Debian镜像,可在
/boot/uEnv.txt中添加设备树 overlay 配置:uboot_overlay_addr0=/lib/firmware/BB-CAN1-00A0.dtbo,保存后重启生效
- 执行命令
- CAN控制器配置校验
- 关闭环回时执行完整配置命令:
sudo ip link set can1 down sudo ip link set can1 up type can bitrate 1000000 loopback off berr-reporting on restart-ms 100 - 执行
ip -details link show can1确认配置已生效,输出中loopback状态应为off、比特率为1000000 - 开启错误报告后执行
candump can1查看总线报错,若存在ACK错误则可确认是总线侧无应答导致的发送失败
- 关闭环回时执行完整配置命令:
内容的提问来源于stack exchange,提问作者Seth
相关产品推荐
相关产品推荐

