阅读 207

can总线错误处理机制,can总线分析

1根据一些重要概念ISO11898,有以下重要的CAN相关定义:

Fault confinement(错误界定)cannodesshallbeabletodistinguishshortdisturbancesfrompermanentfailures.defectivetransmittingnodesshallbeswitchedoff.switchitchetched nectedfromthebus,sothatitcanneithersendnorreceiveanyframes。

CAN节点可以区分常规错误和永久故障。 故障的发送节点将切换到离线状态。 脱机意味着在逻辑上与总线分离,无法发送或接收。

Error-active(主动错误)an error-activenodeshallnormallytakepartinbuscommunicationandsendanactiveerrorflagwhenanerrorhasbeendetected.theactiveveeeeeeeeeeeeeeeeerved utivedominantbitsandshallviolatetheruleofbitstuffingandallfixedformatsappearinginaregularframe

处于活动错误状态的节点正常参与总线通信的收发,检测到错误时发送错误标志。 错误标志由与传统的填充位和其他帧固定格式不同的6个连续显示位组成。 因此,硬件很容易区分。

33558 www.Sina.com/an error-passivenodeshallnotsendanactiveerrorflag.ittakespartinbuscommunication,butwhenanerrorhashasication consecutiverecessivebits.after transmission,an error-passivenodeshallwaitsomeadditionaltimebeforeinitiatingafurtherthertrtransmion

处于被动错误状态的节点无法发送主动错误标志。 可以参与常规通信,但检测到错误时发送的是被动错误标志。 被动错误标志由6个连续隐性位组成。 发送完成后,处于被动错误状态的节点在下次重新发送之前需要等待一些额外的时间。

3358 www.Sina.com/anodeshallbeinthebus-offstatewhenitisswitchedoffromthebusduetoarequestoffce.int hebus-offstate, anodeshallneithersendnorreceiveanyframes.anodeshallstarttherecoveryfrombus-offstateonlyuponauserrequest。

由于规则定义错误,节点可能处于脱机状态。 在这种情况下,节点既不发送也不接收。 离线恢复的时间取决于用户请求的时间。

2 ISO11898中的错误定义规则2.1描述了在涉及错误定义的情况下,一个节点必须处于以下三种错误状态之一,具体是哪个错误状态取决于节点的错误计数值。

主动错误状态(Error-active )被动错误状态(Error-passive )脱机状态(Bus-off )。

2.2错误计数错误计数器检测到以下事件时修改错误计数值:

当接收节点检测到错误时,错误计数器加1。 可能是独占的,除非在发送活动错误标志或重载标志时检测到发生错误。 如果接收节点发送错误标志时,检测到开头是优先位,则向错误计数器加8。 在发送部分之后发送错误标志时,将错误计数器加8。 在这种情况下,除了一种情况。 如果此发送节点处于活动错误状态,则表示检测到由于ACK字段中没有显性比特而导致的ACK错误,但在发送时未检测到被动错误标志。 2 )如果发送节点发送错误标志,则在仲裁时检测填充比特上的差错(虽然这些填充比特本来应该是隐性的,但检测结果是显性的)。 上述两种异常错误计数值保持原始值不变。 当发送节点发送活动错误标志或过载标志时,如果检测到位错误,则向错误计数器加8。 接收节点发送活动错误标志或过载标志时,检测到位错误时,对错误计数器加8。 所有节点都正在发送

主动错误标志,被动错误标志,或重载标志时都应都忍受连续7个显示位。当检测到连接14个显示位,或者被动错误标志后紧跟着连接8个显示位,或者8个连续显性位后紧跟着被动错误标志时,所有发送节点发送错误计数器加8,所有接收节点接收错误计数器加8.发成功发送一帧报文后,发送计数器应减1,除非当前已经为0.当成功接收一帧报文后,如果当前接收计数器的值大于1且小于127,则接收计数器减1;如果接收计数器的值为0,则保持为0;如果在于127,则接收计数器的值应设置 为119~127之间的值。 2.3 主动错误状态和被动错误状态之间的转变

当发送错误计数器或者接收错误计数器的值大于127时,该节点变成被动错误状态。

当节点从主动错误状态变为被动错误状态时,节点将发送一主动错误标志。

当被动错误节点的发送错误计数器和接收错误计数器的值都小于且等于127时,将再次变为主动错误状态。

2.4 离线管理

如果一个节点的发送错误计数器的值超过255时,那么此节点将会处于离线状态。处于离线状态的节点不会对总线产生任何影响,它将不会发送消息帧,ACK,错误帧,过载帧等,至于会不会接收总线上的数据,取消于此节点的实现。

当一个处于离线状态下的节点接收到128次连接11位隐性位时,将变成主动错误状态,且同时设置发送错误计数器和接收错误计数器为0.

注:具体实现可能并不会与上述所描述的一模一样,比如离线还原,在STM32是有一开关来设置是否会自动还原,如果此功能禁止了,那么当处于离线状态下的节点接收到128次连接11连隐性位时也不会不还原成主动错误状态。


                                                                  图1

3 STM32的bxCAN实现 3.1 bxCAN错误状态图


                                                                                 图2

3.2 出错管理

CAN协议描述的出错管理,完全由硬件通过发送错误计数器(CAN_ESR寄存器里的TEC域),和接收错误计数器(CAN_ESR寄存器里的REC域)来实现,其值根据错误的情况而增加或减少。软件可以读出它们的值来判断CAN网络的稳定性。此外,CAN_ESR寄存器提供了当前错误状态的详细信息。通过设置CAN_IER寄存器(比如ERRIE位),软件可以灵活地控制中断的产生――当检测到出错时。

3.3 离线恢复

当TEC等于255时,bxCAN就进入离线状态,同时CAN_ESR寄存器的BOFF位被置’1’。在离线状态下,bxCAN无法接收和发送报文。

根据CAN_MCR寄存器的ABOM位的设置,bxCAN可以自动或在软件的请求下,从离线状态恢复(变为错误主动状态)。在这两种情况下,bxCAN都必须等待一个CAN标准所描述的恢复过程(CAN RX引脚上检测到128次11个连续的隐性位)。

如果ABOM位为’1’,bxCAN进入离线状态后,就自动开启恢复过程。
如果ABOM位为’0’,软件必须先请求bxCAN进入然后再退出初始化模式,随后恢复过程才被开启。

注: 在初始化模式下,bxCAN不会监视CAN RX引脚的状态,这样就不能完成恢复过程。为了完成恢复过程,bxCAN必须工作在正常模式。

4 CAN错误状态寄存器 (CAN_ESR)

地址偏移量: 0x18
复位值: 0x0000 0000


                                                                                       图3


位31:24REC[7:0]: 接收错误计数器
这是对CAN协议的故障界定机制接收部分的实现。按照CAN的标准,当接收出错时, 根据出错的情况该计数器加1或加8;而在每次接收成功后,该计数器减1,或减少其值为120-当该计数器的值大于127时。当该计数器的值超过127时,CAN进入错误被动状态。位23:16TEC[7:0]: 发送错误计数器
与上面相似,这是对CAN协议的故障界定机制发送部分的实现。位15:7保留位,硬件强制为0。位6:4LEC[2:0]: 上次错误代码
在检测到CAN总线上发生错误时,硬件根据出错情况设置其为1~6的值。当报文被正确发送或接收后,硬件清除其值为’0’。
硬件没有使用错误代码7,软件可以设置该值,从而可以检测代码的更新。
000: 没有错误;
001: 位填充错;
010: 格式(Form)错;
011: 确认(ACK)错;
100: 隐性位错;
101: 显性位错;
110: CRC错;
111: 由软件设置。位3保留位,硬件强制为0。位2BOFF: 离线(Bus Off)标志
当进入离线状态时,硬件对该位置1。当发送错误计数器TEC溢出,即大于255时,CAN进入离线状态。位1EPVF: 错误被动(Error Passive)标志
当出错次数达到错误被动的阈值时,硬件对该位置1。
(接收错误计数器或发送错误计数器的值>127)。位0EWGF: 错误警告标志
当出错次数达到警告的阈值时,硬件对该位置1。
(接收错误计数器或发送错误计数器的值≥96)。


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐