一文详解Autosar CAN Bus off

目录

1. 总线错误    1.1 电平    1.2 错误帧        1.2.1 格式错误        1.2.2 CRC 错误        1.2.3 ACK 错误2. busoff3. Busoff 恢复    3.1 硬件需要做的    3.2 软件需要做的    3.3 硬件需要又做了4. Autosar CanSM 快慢恢复4.1 快速恢复机制    1. 错误处理和清除:    2. 重新初始化:    3. 重新尝试通信:    4. 短时间内恢复:    5. 系统调整:4.2  慢速恢复机制    1. 错误处理和监控:    2. 较长时间的初始化:    3. 周期性检查:    4. 逐步恢复:    5. 系统诊断:4.3 AUTOSAR CANSM 配置

1.总线错误   

1.1 电平  

 作为基础知识。
CAN总线的电平分为显性电平与隐性电平。CAN总线的差分电平分为显性电平和隐性电平,显性电平的逻辑为0,隐性电平的逻辑为1,在同一个位时间,一个节点发显性电平,另一个节点发隐性电平,则总线电平为显性电平,这是CAN总线仲裁的基础。就是像有些书上写的线与的概念,如图1所示,很好理解,1&0=0,显性能覆盖隐性。    

图片

1.2 错误帧  

错误帧有下面五种情况
图片    

1.2.1 格式错误  

很好理解,报文的帧有着严格的格式。如下图。果然检测到格式不一样了。比如缺少了,长了,就会有问题

图片

1.2.2 CRC 错误  

 注意这里的CRC 和 CAN 报文内部用户自己定义的CRC 不是一个东西。这是链路层使用的CRC。如下图所示,链路层会自己计算。

图片

1.2.3 ACK 错误  

 前面我们直到显性会抑制隐形,这里就用到了,在发送的时候,发送端会在ACK 位置置隐形位。接收方正常收到之后会改为显性,这时候发送方回读到之后发现是显性了,则认为这一帧正常发出去了。   

图片

2. Busoff  

上面的一些错误会导致busoff. 当然也不是立马进入busoff

图片

这里面是有一些错误的counter。这个counter的自增,是硬件自身处理的。可以看下面寄存器。    

图片

自此 BusOff 发生了。

3.Busoff 恢复  

3.1 硬件需要做的  

 在发生busoff 时,硬件会对一些寄存器进行置位。这里列取两个,主要直到这是硬件自己做的事情即可。

图片    

3.2 软件需要做的  

上面可以看到,CAN 已经被硬件停了,想要恢复的话,软件需要重新拉起来。软件通过清除CCCR INIT 寄存器。

图片

后面就需要硬件开始内部处理了,从软件的角度就是在这等就可以了。

3.3 硬件需要又做了  

但是要等多长时间呢?

图片

 然后设备将等待129次总线Idle的出现(129 * 11个连续的隐性位),然后再恢复正常操作。在Bus_Off恢复流程结束时,错误管理计数器将被重置。    

 有了这个支撑就可以计算一下到底需要等多长时间了。我们可以拿报文来分析 下图为 CAN 的报文

图片

 对于一帧8字节数据的标准CAN报文总共的Bit位数量:             
帧起始(1位) 仲裁段(13位) 控制段(5位) 数据段(64位) CRC段(16位) ACK段(2位) 帧结束(7位)= 108位

 对于数据8字节的扩展帧:             
帧起始(1位) 仲裁段(33位) 控制段(5位) 数据段(64位) CRC段(16位) ACK段(2位) 帧结束(7位)= 128位

 当对应CAN报文传输速率为500kBaud/s时,即传输一个Bit需要的时间为:1/500k = 2us/bit,对应上述的标准帧及扩展帧的传输时间:             
标准帧:108 x 2 = 216us              
扩展帧:128 x 2 = 256us              
当然 CANFD 也是一样的分析过程

图片

由于CANFD采用了双波特率形式:标准波特率(也称仲裁域波特率)和数据域波特率,所以帧结构中不同段采用的波特率也不同。

仲裁域波特率所占位数:帧起始(1位) 仲裁段(13位) 控制段的EDL、r0、BRS(3位) ACK段(2位) 帧结束(7位),共26位。

数据域波特率所占位数:控制段的ESI、DLC(5位) 数据段(0~512位) CRC段(28/33位),最多共550位。

假设仲裁域波特率为500Kbps(位时间2us),数据域波特率为2Mbps(位时间0.5us)              
则发送一帧标准CANFD报文需要的时间为:26 x 2us 550 x 0.5us = 52 275 = 327us              
可以进行计算了。

 CAN使用接收错误计数器来计数总线空闲条件的发生情况。如果需要,可以在ECR.REC上进行监控。此外,总线空闲条件的每次发生都被PSR.LEC = 5 =位0错误,它触发一个中断 IR.PRA当然这需要 IR.PEAE 已经被启用。

图片

从上面的过程也能得出一个结论,在Busoff recovery 的过程。CAN 一直处于 synchronizing 状态。这时候PSR.ACT = 1. PSR.BO 也是置位的。    

图片

图片

在这个过程之后。CAN 依然需要保持一个bit位的idle。随后PSR.ACT 为2. 就是可以接收。随后为3. 可发可收的状态。
自此 CAN BusOff 恢复完毕。

4.Autosar CanSM 快慢恢复  

4.1 快速恢复机制  

快速恢复机制旨在尽可能迅速地将 CAN 控制器从 Bus Off 状态恢复到正常工作状态。这种机制适用于需要快速恢复总线通信的场景。具体过程如下:

1.错误处理和清除   

控制器在检测到严重错误并进入 Bus Off 状态后,会进行内部的错误处理,如清除错误标志和重置错误计数器。

2.重新初始化:   

快速恢复机制会尽快重新初始化 CAN 控制器。这通常包括重新配置 CAN 控制器的参数和重置内部状态。

3.重新尝试通信:   

控制器会尽快重新尝试重新加入总线。通常,控制器在总线处于空闲状态时,会开始发送重启帧或监测总线活动。

4.短时间内恢复:   

在快速恢复过程中,CANSM 会尽量减少等待时间和延迟,使得控制器能尽快进入正常工作状态。    

5.系统调整:   

如果快速恢复机制无法解决问题,可能会触发额外的诊断或错误处理流程。

图片   

 

4.2  慢速恢复机制  

慢速恢复机制则更加稳健,通常用于对恢复过程有更高可靠性要求的场景。该机制会在恢复过程中引入更多的时间和步骤,以确保所有错误和潜在问题都被妥善处理。具体过程如下:

1.错误处理和监控


控制器进入 Bus Off 状态后,会进行详细的错误处理,并启动错误监控,以防止在恢复过程中出现更多错误。
2.较长时间的初始化
慢速恢复机制可能会在重新初始化 CAN 控制器时引入较长的延迟,以确保所有错误标志都被清除,并对控制器状态进行全面检查。
3.周期性检查
控制器会周期性地检查总线活动,并在确认总线状态稳定后才会尝试重新加入网络。这包括监测总线空闲状态和等待其他节点的活动。    
4.逐步恢复
慢速恢复机制可能会采取逐步恢复的方法,例如,首先恢复部分功能,然后逐渐恢复全功能。
5.系统诊断
在慢速恢复过程中,系统会进行详细的诊断和日志记录,以确保问题被正确定位并解决。

图片

4.3 AUTOSAR CANSM 配置  

在 AUTOSAR 中,CANSM 的恢复机制可以通过配置文件进行设置和调整。具体的配置参数包括:    

图片

·Error Detection:配置错误检测机制的敏感度和处理策略。
·Recovery Timing:设置恢复的时间参数,包括超时时间和重试次数。
·Retry Strategies:定义重试策略和恢复步骤的顺序。