CAN通信基础:总线关闭(BUS OFF)的概念和处理方式

1 BUS OFF的概念

在CAN通信中,BUS OFF是指节点由于发送错误帧超出一定数量,而被总线“关闭”的状态。当节点进入BUS OFF状态时,它将无法再发送或接收任何消息,直到被重置或自动恢复。BUS OFF是CAN通信提供的一种错误处理机制,它可以防止错误节点继续影响整个网络。

2 BUS OFF故障

2.1 通信节点状态

CAN节点的状态转移包括以下几个阶段:
节点状态转移图

  • 主动错误(Error Active)
    • ECU上电或重启后,默认进入主动错误状态,TEC(发送错误计数器)和REC(接收错误计数器)清零;
    • 主动错误状态下,通信节点可以正常发送和接收消息;
    • 主动错误状态下,通信节点若检测到错误,则发送主动错误标志(连续6个显性位)
  • 被动错误(Error Passive)
    • 当ECU的TEC或REC计数大于127,ECU自主动错误状态进入被动错误状态;
    • 被动错误状态下,通信节点可以发送和接收消息,但会受到一定的限制(如传输暂停);
    • 被动错误状态下,通信节点若检测到错误,则发送被动错误标志(连续6个隐性位)
    • 被动错误状态下,若TEC和REC计数均小于127,ECU则可以返回主动错误状态;若TEC技术大于255,ECU进入总线关闭状态。
  • 总线关闭(Bus Off):节点因发送错误帧过多而被总线关闭,无法发送或接收消息。
    • 当被动错误状态下的通信节点,TEC大于255时,ECU进入总线关闭状态;
    • 总线关闭状态下,通信节点不能接受和发送消息;
    • CAN协议提供了总线关闭状态的恢复策略,即上层控制且通信节点检测到128次11个连续隐性后,ECU可以清零TEC和REC并重新进入主动错误状态。

2.2 错误计数器累加原则

说明:以下计数器累加原则,翻译自ISO-11898:2015 12.1.4.2 Error counting章节。

  1. Receiver检测到错误时,接收REC应增 1,除非检测到的错误是在发送有效错误标志或过载标志时发生的位错误。
  2. Receiver在发送错误标志后的第一位检测到一个显性位时,REC应递增 8。
  3. Transmitter发送错误标志时,TEC应递增 8。
    • 例外 1:如果Transmitter处于被动错误状态,由于没有检测到显性ACK位而产生ACK错误,TEC不增加;如果Transmitter处于被动错误状态,发错被动错误标志时没有检测到显性位,TEC不增加。
    • 例外 2:如果Transmitter发送错误标志是因为在仲裁过程中发生了位错误,即发送隐性位,而回读到显性位,TEC不增加。
  4. 如果Transmitter在发送主动错误标志或过载标志时检测到位错误,发送错误计数器应递增 8。
  5. 如果Receiver在发送主动错误标志或过载标志时检测到位错误,则接收错误计数器应递增 8。
  6. 任何节点在发送主动错误标志、被动错误标志或过载标志后,应最多容忍 7 个连续的主位。在检测到连续 14 个显性位后(在主动错误标志或过载标志的情况下),或在被动错误标志后检测到连续 8 个显性位后,以及在每个额外的连续 8 个显性位序列后,每个Transmitter应将其TEC递增 8,每个Receiver应将其REC递增 8。
  7. 传输帧成功后(获得 ACK 且在 EOF 结束前未检测到错误),TEC应减 1,除非它已为 0。
  8. 成功接收帧后(接收到 ACK 时隙前无错误且成功发送 ACK 位),如果REC在 1 和 127 之间,则应递减 1。如果REC为 0,则应保持为 0;如果大于 127,则应设置为 119 至 127 之间的值。

3 BUS OFF恢复策略

3.1 BUS OFF恢复

当通信节点进入BUS OFF状态后,需执行如下操作:

  1. 通信节点的初始化CAN模块。
  2. 通信节点在指定时间内禁止发送报文,处于只听状态。指定时间为快恢复时间或者慢恢复时间,参考3.2章节。
  3. 通信节点恢复CAN正常通信。
    BUS OFF恢复过程

3.2 BUS OFF恢复策略

恢复策略选择
  1. 自动恢复:ECU使用自动恢复功能,ECU检测到128次11个连续隐性位便可恢复通信。请参考节点状态图中Bus Off→Error Active的恢复策略。
  1. 重启控制器:ECU不适用自动恢复功能,且不主动干预BUS OFF错误,则ECU无法自BUS OFF状态恢复总线通信。只能通过重新上电的方式,使节点进入主动错误状态。
  1. 主动控制(快恢复和慢恢复):ECU对于BUS OFF恢复状态进行编程控制,使用快恢复+慢恢复的策略,减少严重错误的ECU对于总线通信的干扰。主动控制是更为常见的方式。
恢复策略介绍
  1. ECU进入BUS OFF状态后,会先执行快恢复操作。快恢复过程中,ECU会尝试向总线上发送报文(Tx Attempt阶段),若出现发送错误,TEC正常累加。TEC累加至255后,ECU再次进入BUS OFF状态。此时,ECU会在 tBusOffQuick 时间内,不再尝试向总线发送报文。等待 tBusOffQuick 时间后,ECU再次尝试向总线发送报文。
  1. ECU在连续5次快恢复,即6次进入BUS OFF状态,将执行慢恢复操作。备注:具体次数由ECU设计决定,5次是常见值。
  1. ECU执行慢恢复,会在进入BUS OFF状态等待 tBusOffSlow 时间后,再尝试向总线发送报文。

BUS OFF恢复策略

参数最小值(ms)标称值(ms)最大值(ms)
tBusOffQuick455070
tBusOffSlow180200220

4 BUS OFF与DTC记录

  1. 连续 nBusOffCount 次BUS OFF,且没有报文成功发送,则ECU需要记录BUS OFF的故障码。下表中值仅供参考,具体值需要参考OEM对于ECU的诊断设计。
参数最小值标称值最大值
nBusOffCount-8-
  1. 当ECU进入BUS OFF模式后,只应存储BUS OFF故障码,不应存储节点丢失或通信超时故障码。因为BUS OFF状态无法接受总线报文,不能判定其他节点丢失或通信超时。

5 学习拓展

[1] CAN控制器总线错误分析之CAN节点BusOff恢复过程分析与测试
[2] 利用Vector VH6501 CAN干扰仪经典CAN2.0/CANFD帧触发BUS OFF

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值