CAN错误处理CAN怎样处理错误,下面我们就来聊聊关于can总线入门?接下来我们就一起去了解一下吧!
can总线入门
CAN错误处理
CAN怎样处理错误
错误处理内建在CAN协议中,对CAN系统的运行十分重要。错误处理的目标是检测CAN总线上出现的报文中的错误,从而传送器可以重传出错的报文。总线上的每个CAN控制器都会尝试检测报文中的错误。如果发现错误,发现节点将传送一个错误标志,从而中断总线通信。其它节点将检测错误标志导致的错误(如果它们尚未检测到初始错误)并采取合适的措施(例如丢弃当前报文)。
每个节点维护两个错误计数器:传送错误计数器和接收错误计数器。有几个规则规定这些计数器怎样增加和/或减少计数。总的来讲,检测到故障的传送器增加其传送错误计数器比侦听节点增加其接收错误计数器要快。这是因为,很有可能是传送器发生了故障!当任何错误计数器增加到超过某个值时,节点将首先进入“错误被动”,也就是说,它在检测到错误时不会积极地阻止总线通信,然后“离开总线”,这意味着节点根本不参与总线通信。
使用错误计数器,CAN节点不但可以检测故障,而且可以执行错误限制。
错误检测机制
CAN协议定义了五种以上不同的方法来检测错误。其中两种工作在位层次,另外三种工作在报文层次。
位监视
位填充
帧检查
确认检查
循环冗余检查
1. 位监视
CAN总线上的每个传送器都会监视(也就是回读)传送的信号电平。如果真正读到的位电平与传送的位电平不同,会发出信号指示位错误(仲裁过程中不会发出位错误)。
2. 位填充
节点连续发送五个具有相同电平的位后,将在发送出去的位流中加上第六个相反电平的位。接收方将删除这个额外的位。这样做是为了避免总线上出现过度的直流电成分,但它同时也给予了接收方检测错误的额外机会:如果总线上出现五个以上相同电平的连续位,会发出信号指示填充错误。
3. 帧检查
CAN报文的一些部分具有固定的格式,也就是说,标准明确定义了何种电平和何时出现这种电平(那些部分是CRC分隔符、ACK分隔符、帧结束以及间歇,但是间歇还有一些另外的特殊错误检查规则)。如果一个CAN控制器在这些固定字段中的一个中检测到无效值,将发出组成错误。
4. 确认检查
总线上正确收到报文的所有节点(不管这些节点是否对报文内容感兴趣)都被期望在报文中称为确认槽的位置中发送一个显性电平。这是,发送方将发送一个隐性电平。如果发送方无法在确认槽中检测到显性电平,会发出确认错误的信号。
5. 循环冗余检查
每个报文都包含一个15位的循环冗余校验和(CRC)。节点如果在报文中检测到与自己计算所得不同的CRC,将发出CRC错误的信号。
错误限制机制
总线上的每个CAN控制器都将在每个报文中尝试检测以上列出的错误。如果发现错误,发现节点将发送一个错误标志,从而停止总线通信。其它节点将检测到由错误标志引发的错误(如果它们尚未检测到原始错误)并采取恰当的措施(也就是丢弃当前报文)。
每个节点维护两个错误计数器:传送错误计数器和接收错误计数器。有几个规则规定这些计数器怎样增加和/或减少计数。总的来讲,检测到故障的传送器增加其传送错误计数器比侦听节点增加其接收错误计数器要快。这是因为很有可能是传送器发生了故障!
节点开始时处于“错误积极”模式。当两个错误计数器中的任何一个的计数超过127时,节点将进入称为“错误消极”的状态。当传送错误计数器达到255以上时,节点将进入“总线离线”状态。
“错误积极”节点将在检测到错误时发送积极错误标志。
“错误消极”节点将在检测到错误时发送消极错误标志。
“总线离线”节点根本不会在总线上传送任何内容。
增加和减少错误计数器的规则略显复杂,但是原理比较简单:传送错误的步进为8个错误点数,而接收错误的步进为1个错误点数。正确传送和/或接收的报文会减小计数器值。
示例(稍加简化):假设总线上的节点A运气不好。不管什么时候A发送报文都发生失败(由于种种原因)。每次失败时,它的传送错误计数器增加8并发送一个积极错误标志。然后它将尝试重传报文,但是一直失败。
当传送错误计数器超过127时(也就是在16次尝试之后),节点A进入“错误消极”状态。区别在于,它现在将在总线上传送消极错误标志。消极错误标志包含6个隐性位,不会影响其它的总线通信,所以其它节点不会听到A在抱怨总线错误。但是,A继续增加其传送错误计数器。当计数值超过255时,节点A最终放弃传送并进入“总线离线”状态。
其它节点怎样对待节点A?对于A传送的每个积极错误标志,其它节点将为其接收错误计数器增加1。A进入“总线离线”状态时,其它节点的接收错误计数器的计数大大低于“错误消极”的限制值(127)。每次正确收到一条报文,这个计数值将减1。但是,节点A将停留在“总线离线”状态。
大部分CAN控制器将为两种状态提供状态位(和相应的中断):
“错误警告” – 一个或两个错误计数器的计数超过96
“总线离线”,如上所述。
一些控制器(但不是所有)还为“错误消极”状态提供一个位。一些控制器还提供对错误计数器的直接访问。
CAN控制器在发生错误时自动重传报文的特性有时候会很烦人。市场上至少有一种控制器(飞利浦公司生产的SJA1000)允许对错误处理完全人工控制。
总线故障模式
ISO 11898标准列出了CAN总线线缆的几种故障模式:
CAN_H中断
CAN_L中断
CAN_H短路到电池电压
CAN_L短路到接地
CAN_H短路到接地
CAN_L短路到电池电压
CAN_L短路到CAN_H线路
CAN_H和CAN_L在同一个位置中断
丢失到终端网络的连接
对于故障1-6和9,建议总线减小S/N比率继续工作。对于故障8,建议结果子系统继续工作。对于故障7,可以选择减小S/N比率继续工作。
实践中,使用82C250类型收发器的CAN系统无法在发生故障1-7时继续工作,在发生故障8-9时可能无法继续工作。
但是,存在诸如TJA1053等容错能力强的驱动程序可以处理所有故障。通常,获得这种容错能力的代价是最大速度受到限制。对于TJA1053,最大速度是125 kbit/s。
,