总线离线模式:CAN 节点的 “故障隔离状态”
扫描二维码
随时随地手机看文章
总线离线模式是 CAN 控制器的 “故障保护” 模式,当节点的 “发送错误计数(TEC)超过 255” 时,控制器会自动从正常模式切换至总线离线模式,此时节点完全停止与总线的交互:既不发送任何帧(包括数据帧、错误帧),也不接收总线上的帧,仅能通过软件复位或硬件复位恢复。总线离线模式的核心目标是 “隔离故障节点”,避免持续发送错误帧的节点占用总线带宽、干扰其他正常节点的通信,是 CAN 总线 “故障容错” 能力的关键机制。
(一)总线离线模式的技术细节:错误计数触发与恢复逻辑
总线离线模式的触发完全依赖 “错误计数机制”,这是 CAN 协议定义的核心容错逻辑。CAN 控制器内部维护两个计数器:发送错误计数(TEC) 与接收错误计数(REC),计数器的增减由总线错误类型决定:
当节点发送帧时检测到错误(如位错误、仲裁丢失),TEC 加 8;若发送成功(未检测到错误),TEC 减 1(最低为 0);
当节点接收帧时检测到错误(如 CRC 错误、填充错误),REC 加 8;若接收成功,REC 减 1(最低为 0);
当 TEC > 96 或 REC > 96 时,节点进入 “错误被动模式”(Error Passive Mode),此时节点发送错误帧时仅发送 “被动错误标志”(6 个隐性位),而非显性位,减少对总线的干扰;
当 TEC > 255 时,节点进入 “总线离线模式”,控制器禁用收发电路,停止与总线交互。
在总线离线模式下,CAN 控制器的状态寄存器会置位 “总线离线标志”(如 SJA1000 的 CAN_SR 寄存器中的 BOFF 位),MCU 可通过读取该标志判断节点是否离线。节点要从离线模式恢复,需满足 “恢复条件”:控制器需监测到总线连续出现 11 个隐性位(总线空闲)的次数达到 “恢复计数器” 阈值(通常为 128 次),此时 TEC 与 REC 会被清零,控制器自动切换回正常模式;或通过软件写入 “复位位”(如 CAN_CR 寄存器中的 INIT 位),强制控制器复位并恢复正常模式。这种 “自动监测 + 手动复位” 的恢复逻辑,确保故障节点在总线恢复正常后能重新接入,同时避免故障未解决时频繁接入总线。
(二)总线离线模式的应用场景:故障隔离与系统容错
总线离线模式是 CAN 系统 “稳定性保障” 的关键,主要用于 “故障节点隔离” 与 “系统容错”。在汽车 CAN 总线中,若某 ECU(如车窗控制模块)因硬件故障(如 CAN 收发器短路)持续发送错误帧,其 TEC 会快速增长:第一次错误 TEC+8,第二次 + 8…… 当 TEC 超过 255 时,ECU 进入总线离线模式,停止发送错误帧。此时,汽车的其他核心节点(如发动机 ECU、ABS 控制器)仍能正常通信,避免车窗模块的故障导致整个总线瘫痪,确保汽车的行驶安全 —— 若没有总线离线模式,错误帧会持续占用总线,导致发动机转速数据、刹车信号无法传输,引发严重安全事故。
在工业 CAN 系统中,总线离线模式同样重要:例如,工业生产线的某传感器因线路老化导致 CAN_H 与 CAN_L 短路,持续发送错误帧,TEC 超过 255 后进入离线模式,停止与总线交互。生产线的其他节点(PLC、伺服驱动器)仍能正常通信,生产线可继续运行(仅丢失该传感器的数据),工程师可在不停机的情况下更换故障传感器,待传感器更换后,通过软件复位使其恢复正常模式,接入总线,大幅降低停机损失。
在智能家居 CAN 系统中,若智能灯节点因固件错误持续发送无效帧,TEC 超过 255 后进入离线模式,停止干扰总线。其他设备(如窗帘电机、空调)仍能正常通信,用户可通过 APP 发现该智能灯离线,联系维修人员处理,避免因一个设备故障影响整个家居系统的使用。





