CAN总线错误处理介绍

描述

 

总线

CAN怎样处理错误

错误处理内建在CAN协议中,对CAN系统的运行十分重要。错误处理的目标是检测CAN总线上出现的报文中的错误,从而传送器可以重传出错的报文。总线上的每个CAN控制器都会尝试检测报文中的错误。如果发现错误,发现节点将传送一个错误标志,从而中断总线通信。其它节点将检测错误标志导致的错误(如果它们尚未检测到初始错误)并采取合适的措施(例如丢弃当前报文)。

每个节点维护两个错误计数器:传送错误计数器和接收错误计数器。有几个规则规定这些计数器怎样增加和/或减少计数。总的来讲,检测到故障的传送器增加其传送错误计数器比侦听节点增加其接收错误计数器要快。这是因为,很有可能是传送器发生了故障!当任何错误计数器增加到超过某个值时,节点将首先进入“错误被动”,也就是说,它在检测到错误时不会积极地阻止总线通信,然后“离开总线”,这意味着节点根本不参与总线通信。

使用错误计数器,CAN节点不但可以检测故障,而且可以执行错误限制。

错误检测机制

CAN协议定义了五种以上不同的方法来检测错误。其中两种工作在位层次,另外三种工作在报文层次。

位监视

位填充

帧检查

应答检查

循环冗余检查

1. 位监视

CAN总线上的每个传送器都会监视(也就是回读)传送的信号电平。如果真正读到的位电平与传送的位电平不同,会发出信号指示位错误(仲裁过程中不会发出位错误)。

2. 位填充

节点连续发送五个具有相同电平的位后,将在发送出去的位流中加上第六个相反电平的位。接收方将删除这个额外的位。这样做是为了避免总线上出现过度的直流电成分,但它同时也给予了接收方检测错误的额外机会:如果总线上出现五个以上相同电平的连续位,会发出信号指示填充错误。

3. 帧检查

CAN报文的一些部分具有固定的格式,也就是说,标准明确定义了何种电平和何时出现这种电平(CRC定界符、ACK定界符、帧结束以及间歇,但是间歇还有一些另外的特殊错误检查规则)。如果一个CAN控制器在这些固定字段中的一个中检测到无效值,将发出组成错误。

4. 应答检查

总线上正确接收报文的所有节点(不管这些节点是否对报文内容“感兴趣”)预期将在报文中所谓的应答时隙中发送一个显性电平。这是,发送方将发送一个隐性电平。如果发送方无法在应答时隙中检测到显性电平,会发出应答错误的信号。

5. 循环冗余检查

每个报文都包含一个15位的循环冗余校验和(CRC)。节点如果在报文中检测到与自己计算所得不同的CRC,将发出CRC错误的信号。

错误限制机制

总线上的每个CAN控制器都将在每个报文中尝试检测以上列出的错误。如果发现错误,发现节点将发送一个错误标志,从而停止总线通信。其它节点将检测到由错误标志引发的错误(如果它们尚未检测到原始错误)并采取恰当的措施(也就是丢弃当前报文)。

每个节点维护两个错误计数器:传送错误计数器和接收错误计数器。有几个规则规定这些计数器怎样增加和/或减少计数。总的来讲,检测到故障的传送器增加其传送错误计数器比侦听节点增加其接收错误计数器要快。这是因为很有可能是传送器发生了故障!

节点开始时处于主动错误模式。当两个错误计数器中的任何一个的计数超过127时,当两个错误计数器中的任何一个计数超过127时,节点将进入称为被动错误的状态。当传送错误计数器达到255以上时,节点将进入总线离线状态。

1.主动错误节点将在检测到错误时发送主动错误标志。

2.被动错误节点将在检测到错误时发送被动错误标志。

3.总线离线节点不会在总线上传送任何内容。

增加和减少错误计数器的规则略显复杂,但是原理比较简单:传送错误的步进为8个错误点数,而接收错误的步进为1个错误点数。正确传送和/或接收的报文会减小计数器值。

示例(稍加简化):假设总线上的节点A运气不好。不管什么时候A发送报文都发生失败(由于种种原因)。每次失败时,它的传送错误计数器增加8并发送主动错误标志。然后它将尝试重传报文,但是一直失败。

当传送错误计数器超过127时(也就是在16次尝试之后),节点A进入被动错误模式。区别在于,它现在将在总线上传送被动错误标志。被动错误标志包含6个隐性位,不会影响其它的总线通信,所以其它节点不会侦听到有关总线错误的反馈。但是,A继续增加其传送错误计数器。当计数值超过255时,节点A最终放弃传送并进入总线离线模式。

其它节点怎样响应节点A?对于A传送的每个主动错误标志,其它节点将为其接收错误计数器增加1。当A进入总线离线状态时,其它节点的接收错误计数器的计数大大低于错误被动的限制值(127)。每次正确收到一条报文,这个计数值将减1。但是,节点A将停留在总线离线状态。

大部分CAN控制器将为两种状态提供状态位(和相应的中断):

“错误警告” – 一个或两个错误计数器的计数超过96

“总线离线”,如上所述。

一些控制器(但不是所有)还为被动错误状态提供一个位。一些控制器还可以直接访问错误计数器。

CAN控制器在发生错误时自动重传报文的特性有时候会很烦人。市场上至少有一种控制器(飞利浦公司生产的SJA1000)允许对错误处理完全人工控制。

总线故障模式

ISO 11898标准列出了CAN总线线缆的几种故障模式:

1.CAN_H中断

2.CAN_L中断

3.CAN_H短路到电池电压

4.CAN_L短路到接地

5.CAN_H短路到接地

6.CAN_L短路到电池电压

7.CAN_L短路到CAN_H线路

8.CAN_H和CAN_L在同一个位置中断

9.丢失到终端网络的连接

对于故障1-6和9,建议减小S/N比率保持总线继续工作。对于故障8,建议保持产生的子系统继续工作。对于故障7,可以选择减小S/N比率继续工作。

实践中,使用82C250类型收发器的CAN系统无法在发生故障1-7时继续工作,在发生故障8-9时可能无法继续工作。

但是,存在诸如TJA1053等容错能力强的驱动程序可以处理所有故障。通常,获得这种容错能力的代价是最大速度受到限制。对于TJA1053,最大速度是125kbps。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分