为在网络范围内确保数据一致,CAN网络中的每个节点都有权终止任何被认为是故障的CAN报文。将正确CAN报文错认为故障的CAN节点同样具有此权利。为防止传输介质发生拥堵,CAN协议规定了错误跟踪,用于确保CAN节点能够区分偶发干扰和持久性干扰。
每个CAN控制器都有一个TEC(Transmit Error Counter,发送错误计数器)和一个REC(Receive Error Counter,接收错误计数器)。如果数据帧或远程帧传输成功,相关的错误计数器将递减(TEC=TEC-1;REC=REC-1)。错误标志的检测和后续传输会导致相关错误计数器根据特定规则递增。对于发送方,适用以下规则:TEC=TEC+8。检测到错误的接收方将其REC递增一个单位(REC=REC+1)。对于引起错误的接收方,适用以下规则:REC=REC+8。
根据特定的错误计数,CAN控制器可以切换错误状态。CAN控制器启动后将进入“主动错误”正常状态。在该状态下,CAN控制器在检测到错误后发送六个显性位(主动错误标志)。超出限制(TEC>127;REC>127)时,CAN控制器将切换为“被动错误(Error Passive)”状态。
处于“被动错误”状态的CAN控制器只能通过发送六个相同的隐性位来指示检测到的错误。这可以防止检测错误的接收方将检测到的错误全局化。此外,发送两个连续的数据帧或远程帧时,处于“被动错误”状态的CAN控制器必须等待“暂停传输时间”(8个位)。
如果CAN控制器发生故障或错误累积过多,则会进入“Bus Off”状态,CAN控制器与CAN总线断开连接。只能通过软件恢复(强制等待时间为128 x 11位)或通过硬件复位来退出“Bus-Off”状态。