在出现的瞬态信道故障中,CAN常常被看做提供了下面列出的五个属性,它们对应于原子广播的定义[RUFI98]:
•AB1——有效性:如果一个正确的节点广播了一条消息,那么这条信息最终会交付给正确的节点。
•B2——协议:如果一条消息被交付给正确的节点,那么这条消息最终会交付给所有正确的节点。
•B3——至多进行一次交付:任何交付给正确节点的信息,最多交付一次。
•B4——非平凡性:任何交付给正确节点的消息,通过一个节点来广播。
•B5——总顺序:交付给任何两个正确的节点的任何两条消息,以相同的顺序交付给两个节点。(www.daowen.com)
为了实现数据一致性,CAN协议针对错误检测和误差信号传递定义了一些特定的机制[ISO93]。这些机制强烈依赖于CAN的基本特征:在整个网络中位的准同时视角。
在CAN网络中,位时间长度足够长,因而所有节点准同步采样到相同位的值。在每一个瞬时,通过CAN总线传递的位可以采取两个值之一:显性或隐性。在大多数的CAN实施中,显性值由逻辑“0”表示,隐性值由逻辑“1”表示。只有所有节点同时传递一个隐性值,才会导致总线值是隐性值。与此相反,如果任何一个节点传送了显性值,那么总线值将会是显性值。
如上所示,由于其特殊的错误检测和误差信号传递机制,所以声称的CAN协议中的数据一致性是可以实现的。CAN展示了五种错误检测机制,检测五个不同类型的错误,即位错误、填充错误、CRC错误、应答错误和形式错误。此外,每个CAN节点保留两个错误计数器,分别传输错误计数器(TEC)和接收错误计数器(REC),分别估计节点最近检测到的传输/接收的错误数量。
根据TEC和REC的值,CAN节点的内部状态可能会发生变化。任何CAN节点的初始状态称为主动错误状态。如果其中一个错误计数器达到给定的阈值,则节点进入被动错误状态,这意味着许多本地信道错误已被发现,但节点仍然可以在降级模式下参与通信。然而,如果错误计数器不断增加且TEC终于超过第二个(或更高的)阈值,那么CAN节点就进入总线断开状态,此时不允许节点以任何方式参加通信。
当被动错误状态中的一个节点通过之前提到的机制检测到一个错误时,通过发送主动错误标志将这种情况传递到其他节点。一个主动错误标志由6个连续的显性位组成,且在检测到错误至少1bit后开始。这个标志将最终违反CAN协议规则,例如它可能破坏需要固定的一些字段,从而导致形式错误。因此,所有其他节点也检测到一个错误状况,并开始传播主动错误标志。在发送主动错误标志后,每个节点发送隐性位,并监测总线直到检测到一个隐性位。之后,它开始发送另外7个隐性位。产生在总线上的8个隐性位链被称为错误分隔符。这个错误分隔符连同来自不同节点的错误标志的叠加,构成了一个错误帧。错误帧传输后,发送出去的帧自动被所有接收器拒绝,并由最初的发送器再次发送。这个简单机制允许当地错误的全局化,并容忍瞬时故障导致的错误。通过这种方式,应该能够实现数据的一致性。然而,并非总是本地错误可以全局化。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。