编辑推荐: |
本文主要介绍了Autosar
CAN Bus off相关内容。希望对您的学习有所帮助。
本文来自于微信公众号谦益行,由火龙果软件Linda编辑、推荐。 |
|
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:定义重试策略和恢复步骤的顺序。
|