图2 CAN状态转换图
在每一总线单元里使用两种计数以便故障界定: 发送错误计数、 接收错误计数。
这些计数按以下规则改变(注意,在给定的报文发送期间,可能要用到的规则不只一个):
1、当接收器检测到一个错误,接收错误计数就加1。在发送主动错误标志或过载标志期间所检测到的错误为位错误时,接收错误计数器值不加1。
2、当错误标志发送以后,接收器检测到的第一个位为“显性”时,接收错误计数值加8。
3、当发送器发送一错误标志时,发送错误计数器值加8。
例外情况1:发送器为“错误被动”,并检测到一应答错误(注:此应答错误由检测不到一“显性”ACK 以及当发送被动错误标志时检测不到一“显性”位而引起)。
例外情况2:发送器因为填充错误而发送错误标志(注:此填充错误发生于仲裁期间。引起填充错误是由于:填充位〈填充位〉位于RTR位之前,并已作为“隐性”发送,但是却被监视为“显性”)。
例外情况1和例外情况2时,发送错误计数器值不改变。
4、发送主动错误标志或过载标志时,如果发送器检测到位错误,则发送错误计数器值加8。
5、当发送主动错误标志或过载标志时,如果接受器检测到位错误(位错误),则接收错误计数器值加8。
6、在发送主动错误标志、被动错误标志或过载标志以后,任何节点最多容许7个连续的 “显性”位。以下的情况,每一发送器将它们的发送错误计数值加8,及每一接收器的接收错误计数值加8:
当检测到第14个连续的“显性”位后;
在检测到第8个跟随着被动错误标志的连续的“显性”位以后;
在每一附加的8个连续“显性”位顺序之后。
7、报文成功传送后(得到ACK及直到帧末尾结束没有错误),发送错误计数器值减1,除非已经是0。
8、如果接收错误计数值介于1和127之间,在成功地接收到报文后(直到应答间隙接收没有错误,及成功地发送了ACK位),接收错误计数器值减1。如果接收错误计数器值是0,则它保持0,如果大于127,则它会设置一个介于119到127之间值。
9、当发送错误计数器值等于或超过128时,或当接收错误计数器值等于或超过128时,节点为“错误被动”。让节点成为“错误被动”的错误条件致使节点发出主动错误标志。
10、当发送错误计数器值大于或等于256时,节点为“总线关闭”。
11、当发送错误计数器值和接收错误计数器值都小于或等于127时,“错误被动”的节点重新变为“错误主动”。
12、在总线监视到128次出现11个连续“隐性”位之后,“总线关闭”的节点可以变成“错误主动”(不再是“总线关闭”),它的错误计数值也被设置为0。