CAN2.0规范中,规定了检测以下错误类型的机制: l 位错误 当发送器将自己发送的电平与总线上的电平相比较,发现两者不相等时产生。当隐性位传输时,显形位的检测在仲裁区;在帧ACK时间段,或被动故障标志传输期间,检测电平不一致则不会导致位错误产生。 l 应答错误 当发送器确定帧信息没有得到应答时发生。在CRC校验场及帧结束场之间存在一个应答时间段,该时间段内所有接收的节点,无论是否是预定的接收者都必须对接收的信息作出应答。 l 填充错误 当节点检测到6个相同电平值的连续位时发生。在正常工作情况下,当发送器检测到它已经发送了5 个数值相同的连续位时,那么它将在第六位上插入一个取反值(称之为位填充)。所有接收器在CRC 循环冗余检查计算之前将除去填充位。这样,当节点检测到6 个连续的具有相同值的位时,即产生一个填充位错误。 l CRC 错误 当CRC(循环冗余检查)值与发送器生成值不匹配时发生。每一帧包含一个由发送器初始化的循环冗余检查(CRC)域;接收器计算出CRC 值,并与发送器产生的值相比较,如果两个值不相等即产生CRC 错误。 l 格式错误 当在一必须发送预定值的区内检测到非法位时发生。确定的预定义的位值必须在CAN 帧内的一个确定点发送,比如起始位、场间隙等。如果在这些区域中的一个内检测到非法位值,即产生格式错误。 检测到节点错误将改变节点错误状态。为了尽量减小网络上故障节点的负面影响,进而提供故障界定方法,CAN2.0规范中定义了一个故障界定状态机制。一个节点可能处于下列三种错误状态之一: l 错误主动(Error Active)状态 当一个错误主动节点检测到上述某个错误时,它将发送一个错误主动帧,该帧由6 个连续的显性位组成,这一发送将覆盖其他任何同时生成的发送,并导致其他所有节点都检测到一个填充错误,并依次放弃当前帧。 当处于错误主动状态的节点检测到一个发送问题时,它将发出一个活动错误帧,以避免所有其他节点接收信息包。无论检测到错误的节点是否要接收这个数据,它都要执行这个过程。 l 错误被动 (Error Passive)状态 当一个错误被动节点检测到上述的某一个错误时,它将发出一个错误被动帧,该帧由6 个连续的隐性位组成,这个帧可能会被同时出现的其他发送所覆盖。如果其它站点没有检测到这一错误,将不会引起丢弃当前帧。 l 离线 (Bus Off)状态 处于离线状态下的节点不允许对总线有任何影响,它在逻辑上与网络断开。 l 关于故障界定状态机制,其所含过程简述如下: l 节点保持对发送和接收错误计数器的跟踪。 l 节点在开始错误主动状态时错误计数器的值等于0,硬件初始化后错误计数器的值也等于0;该状态下的节点假设所有检测到的错误非该节点所为。 l 错误类型以及检出错误的结点被赋予不同的计数值。这些计数值将根据是发送还是接收错误进行累加。有效的接收及发送使这些计数器递减,直至最小值0。 l 当这些计数器中的任何一个超出CAN 定义的阈值时该节点进入错误被动状态。在此状态下,该节点将被认为是导致错误的原因。 l 当发送错误计数值超出CAN 定义的另一个阈值时,节点进入离线状态。CAN2.0规范定义了从离线到错误主动之间的状态转换机制。 l 当错误被动的节点的发送及接收错误计数器值都减小至CAN 定义的阈值以下时,节点重新进入错误主动状态。 关于出错管理机制的详细内容,可以参考《CAN2.0规范》中相关的叙述。 相关链接:http://www.zlgmcu.com.cn/index.asp?boardid=32