我了解CAN中TEC和REC计数器的概念。我想知道的是,错误活动节点在检测到错误后会发送活动错误帧吗?
一旦TEC计数超过127,则错误主动节点将变为错误被动。这是否意味着它将开始发送被动错误帧?
此外,当其他节点检测到某个节点正在发送主动错误帧时,它们是否会自动发送被动错误帧?这些节点可以称为错误被动节点吗?
这是我的困惑,需要澄清。
答案 0 :(得分:2)
是的,它将停止发送带有显性位序列的所谓活动错误帧,并切换为隐性。其他节点将不响应,但会增加其REC计数器。发送活动错误帧后,总线仲裁将照常重新开始,以优先级最高的帧为准。
故障隔离
CAN数据链路层很有可能检测到所有通信错误。检测到错误情况的节点发送错误标志并丢弃当前发送的帧。收到错误标志的所有节点也会丢弃该消息。万一发生本地故障,所有其他节点都将识别到检测到该错误的节点发送的错误帧并自己再次发送该错误帧,从而导致最终重叠的错误帧。有效错误帧由六个优势位和一个8位隐性定界符以及IMF组成。这种本地错误全球化方法可确保网络范围内的数据一致性,这是分布式控制系统中的重要功能。
如果以很高的概率检测到所有错误,则永久错误可能导致传输消息时出现不可接受的延迟。在最坏的情况下,所有通信都会通过错误帧中止。为了避免这种情况,CAN协议引入了两个错误计数器:一个用于接收消息(REC),另一个用于发送消息(TEC)。根据CAN数据链路层协议的标准ISO 11898-1中指定的规则来增加和减少它们。
如果计数器之一达到127,则该节点转换为错误被动状态。在这种状态下,节点将发送由六个隐性位组成的被动错误标志。该标志被发送节点的显性位覆盖。这意味着错误的被动节点无法将错误接收的帧通知其他节点。从系统的角度来看,这是一个关键情况。如果发送节点永久生成错误标志,则这也会延迟,并且在最坏情况(高优先级消息)中会阻止其他通信。因此,如果TEC达到256,则节点被迫进入总线关闭状态。在总线关闭状态下,节点仅发送隐性位电平。要转换到错误激活状态,需要两个条件:复位和出现128 x 11位时间。这意味着剩余的节点能够在总线断开的节点恢复并将自身作为错误激活节点再次集成到网络中之前,传输128个数据帧。