接口/总线/驱动
认识CAN 总线错误的第一步就是了解认识CAN 总线协议和它的具体功能,这样才能更容易地理解CAN 总线是如何去发现并解决错误的。首先没有系统是完美的 ,错误难免发生,但一个优秀的系统知道如何检测错误,检查并重新发送修正后的数据。CAN 总线虽然也会出现错误,但却可以高效的解决错误。
在开始学习之前,我们需要先了解一下CAN 总线的数据帧,其如图所示。
对于标准CAN 数据帧而言,它有一个更详细的版本(如下图所示),它可以帮助我们了解错误位的位置和工作原理。
● 分隔符位:它们是隐性位,通常为完成一个特定动作提供时间/空间。这些位确保了在没有显性位填充的字段中,存在位转换。位转换对于恢复时间的同步是必要的,否则可能由于NRZ 编码而无法实现同步。除了为同步提供时间外,分隔符在错误检测中还有一个特殊的地方,即分隔符位必须在一个预定的位置,以便保持CAN 帧的格式。
● CRC 分隔符:CRC 分隔符位给ECU 提供时间或空间来计算CRC。
● ACK 分隔符:一旦收到数据,接收端会向发送节点发送确认,这需要一些时间,因此使用ACK分隔符。
● 位填充:一个节点在连续传输了五个相同值的位后,会在发出的位流中增加第六个相反的位。这个额外的位被接收器移除,不仅避免了总线上过多的直流分量,而且也使接收器能够检测到错误。由于这一般规则,接收器不需要关于填充位的额外信息来去掉填充。此外,填充位无法确保数据传输不被错误所破坏,它只能确保传输在正确的位置开始和结束。
CAN总线错误
CAN 总线错误共有五种不同类型的错误,这些错误可能会影响CAN 总线上的位传输,具体如下:
▶ 位错误:当收到的位与传输的位不一致时,每个接收数据的节点从总线上逐位读取数据,并将传输的位与接收的位进行比较,如果传输的和接收的不一样,就会发生“位错误”。
▶ 填充错误:在填充位过程中,如果总线上出现超过五个连续的同级位,就会发出“填充错 误”信号。
▶ 格式错误 :这指的是字段的固定形式,格式检查是指检查发送或接收的CAN 帧的标准格式,违反固定位的格式会导致格式错误。例如,CRCD、ACKD、EOF 必须是隐性位,任何显性 位的出现将自动被视为格式错误。另外,分隔位必须出现在指定的位置,这样才能保证帧的格式,如果接收器不能在适当的位置找到分隔位,这也会产生一个格式错误帧,在这种情况下,固定形式的字段必须被重新传送。
▶ CRC 错误:发送节点发送一个15位的CRC 值到总线上,然后,接收节点根据它自己收到 的有效载荷计算出一个15位的数字, 它将其与作为信息的一部分收到的CRC 分隔符进 行比较。如果收到的CRC 与计算出的代码不一致,接收器就知道有效载荷的8个字节被损坏,或在传输过程中被修改,这被称为CRC 错误。
▶ ACK 错误:ACK 位是一个确定的隐性"1"(由发送器节点传输),来自接收器的回复是一个确定的显性 "0",但是如果情况不是这样,发射器没有收到回复的显性确认位, 则被称为ACK 错误。
下面是ASAM 的CAN 总线错误标准表
错误帧格式
当一个节点检测到一个报文中的错误时,就会传送一个被称为”错误帧”的特殊报文,这个特殊的报文违反了CAN 报文的格式标准,导致所有其他节点(在网络上所连接的)也发送一个错误帧。这种有意违反CAN 标准的行为(即发送6个显性位)可以保证将有问题的数据或远程帧销毁,使得原来的发送器能够自动重传信息。
CAN-BUS 的错误帧格式
▶ 错误帧:由6个显性位或隐性位组成,取决于传输它的节点的错误状态,它由可以检测到任何通信错误的节点来传输,它会导致传输的立即终止的,并在之后重新传输,不过这都是由控制器控制的,而不是应用软件。
▶ 错误标志 :总线上的每个CAN 控制器都会尝试检测报文中的错误,因为错误处理是内置在CAN 协议中的,总线上的每个CAN 控制器都会尝试检测报文中的错误。如果发现了错误,发现的节点就会发送一个错误标志,从而破坏了总线通信。如果使用错误计数器,CAN 节点不仅可以检测故障,还可以进行错误限制。
CAN总线的错误状态
根据具体的错误计数,由一个CAN 控制器处理错误状态的切换。
主动错误
一个节点在主动错误模式下启动,CAN 控制器承担正常状态下的主动错误。在这种状态下,CAN 控制器在检测到错误后发送6个显性位。当极限值低于127(TEC<127,REC<127)时,一个主动错误节点在检测到错误时将发送主动错误标志。
被动错误
被动错误状态仅通过发送6个同质隐性位来表示检测到的错误。这可以防止检测错误的接收机将检测到的错误全球化。当两个错误计数器中的任何一个上升到127以上(TEC>127和REC>127),节点将进入一个被称为错误被动的状态。
此外,在发送两个连续的数据或远程帧时,处于“被动错误”状态的CAN 控制器必须等待“暂停传输时间”(8位)。一个被动错误节点在检测到错误时将发送被动错误标志。
总线关闭
传输错误计数器上升到255以上(TEC>255和REC>255),节点将进入总线关闭状态。当CAN 控制器发生故障或错误,累积到极限时,就会发生这种情况。在这种情况下,CAN 控制器将自己从CAN 总线上断开连接,那个特定的CAN 节点将从CAN 网络中被关闭,导致完全没有通信。
全部0条评论
快来发表一下你的评论吧 !