目录

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:定义重试策略和恢复步骤的顺序。