前言:
在汽车、工业自动化等领域的广泛应用中,CAN 总线作为关键的通信协议,其稳定性直接关系到系统的可靠运行。然而,实际应用中,CAN 总线常因电磁干扰、硬件故障等出现错误,导致节点进入总线关闭状态,通信中断。本文将深入探讨 CAN 总线自动恢复机制的原理、调优方法及实战应用,旨在帮助工程师优化系统配置,提升通信可靠性。
软硬件环境说明

本次实战应用基于眺望T113-I平台,Talowe-EVM-T113-i底板引出两路 CAN 接口,为方便测试,这里将两个 CAN 口连接(L-L,H-H)进行回传收发测试。
一、CAN 总线的错误处理机制
在 CAN 总线通信中,节点可能会因各种原因(如电磁干扰、硬件故障等)出现错误导致无法正确收发报文而不断的破坏总线的数据帧,从而影响其它正常节点通信。为了应对这种情况,CAN 协议设计了错误计数器机制。根据计数值不同,节点会处于不同的错误状态,并根据计数值的变化进行状态转换,当节点的发送错误计数器TEC达到一定阈值(TEC>255)时,节点会自动进入总线关闭状态。总线关闭态是节点最严重的错误状态,在此状态节点不能收发报文,以防止其对总线通信造成进一步干扰。
二、bus-off自动恢复机制
为了提高系统的可用性和容错能力,CAN驱动提供了 restart-ms 参数,用于自动恢复进入总线关闭状态的 CAN 设备。restart-ms 参数允许用户设置设备在进入总线关闭状态后自动重启的时间间隔。例如,restart-ms 1000 表示设备会在检测到总线关闭状态后,等待 1000 毫秒自动尝试恢复。
自动恢复机制具有以下特点:
- 无限次重试:设备会在每次总线关闭后按照设定的时间间隔尝试重启,直到总线恢复正常。
- 自动化处理:无需人工干预,设备可以自行检测并修复错误。
三、restart-ms 参数的调优
在实际应用中,合理设置 restart-ms 参数至关重要,以确保系统在错误发生时能够高效恢复,同时避免对总线造成额外负担。 3.1根据实时性需求设置恢复时间
- 在高实时性要求的场景(如汽车控制系统),建议将 restart-ms 设置为较短的时间间隔(如 500 - 1000 毫秒),以确保设备快速恢复。
- 在低实时性要求的场景(如工业自动化监控),可以适当延长恢复时间(如 3000 毫秒),以减少频繁重启对总线负载的影响。
3.2考虑系统负载
在高负载的 CAN 总线中,建议延长 restart-ms 时间(如 2000 毫秒或更长),以避免频繁重启增加总线负载
3.3动态调整与监控
系统运行过程中,通过监控工具定期观察错误恢复情况,并根据实际运行状况动态调整 restart-ms 参数。
四、实战案例
全志SDK内CAN自动恢复机制默认未开启。烧录眺望提供固件或SDK默认编译固件。将两个 CAN 口连接(L-L,H-H)进行回传收发测试。
编写一个简单脚本,awlink1每隔1秒通过cansend向awlink0发送一个CAN消息。
#!/bin/bash
ip link set awlink0 downip link set awlink0 type can bitrate 500000ip link set awlink0 up
ip link set awlink1 downip link set awlink1 type can bitrate 500000ip link set awlink1 up
candump -ta awlink0 >/dev/null 2>&1 &
while true; docansendawlink1123#1122334455667788>/dev/null2>&1 sleep 1done
4.1未开启自动恢复机制
运行脚本放到后台去执行后,这里选择用杜邦线将其中一个CAN口的CANH/CANL 短接。CANH/CANL短路时会导致错误从而进入总线关闭(bus-off)状态不再接收和发送数据。
用ip -details -statistics link show awlinkX 查询CANX的状态及情况。

注:根据cansend awlinkX选择的不同,报错提示也会有所不同。这里脚本为cansend awlink1,所以报错为sunxi-awlink awlink@0x1 awlink1: bus-off。
4.2开启自动恢复机制
修改全志SDK内文件(TinaSDK为sunxi_awlink.c,Longan SDK为sunxi_can.c)开启自动恢复机制,这里参数为500ms 后恢复,用户可根据实际需求调整。
priv->awlink.restart_ms = 500;
添加内容如图所示:

重复4.1测试过程,运行脚本放到后台去执行后,将其中一个CAN口的CANH/CANL 短接。设备在检测到进入总线关闭(bus-off)状态后,等待500ms后自动尝试重启。

ip -details -statistics link showawlinkX 查询到CAN数据继续正常收发。证明自动恢复机制开启成功!
五、总结
通过开启CAN自动恢复机制和合理设置 restart-ms 参数,CAN 设备能够在总线错误发生时自动高效恢复,从而保障系统的可靠性和稳定性。
想了解更多相关技术知识或产品信息,请关注眺望电子公众号并联系我们,我们将竭诚为您服务!
-
核心板
+关注
关注
6文章
1344浏览量
31751 -
can通讯
+关注
关注
1文章
32浏览量
11205 -
全志T113
+关注
关注
0文章
65浏览量
846
发布评论请先 登录
米尔核心板纯国产入门级性价比优选T113
STM32G4 CAN为什么无法检测到bus-off状态?
请问NUC240 CAN bus遇到bus-off如何自动恢复?
米尔核心板全志T113纯国产入门级性价比优选
全志D1和t113对比
100%国产物料认证,米尔入门级国产核心板全志T113-i方案
上新!米尔发布纯国产入门级核心板全志T113-i方案
7折购!米尔基于全志T113系列开发板

T113核心板CAN通讯bus-off自动恢复
评论