摘自VECTOR官网E-Learning的资料
五种错误检测机制
为检测被破坏的报文,CAN协议定义了五种机制:
发送方和接收方的任务
位监控和ACK检查由发送方执行。接收方执行格式检查、填充检查和循环冗余校验,这些检测针对总线上的所有报文,不受接收过滤器影响。“Error Detection”图显示了各种错误检测机制所影响的数据帧场或远程帧场。
填充检查(接收方)
填充检查用于检查位流。CAN协议规定发送方传输五个相同位后必须传输相反的位,以便实现同步。如果连续接收到五个以上的相同位,则会出现填充错误。
位监控(发送方)
在位监控的框架内,发送方会将发送的位电平与实际的总线电平进行比较。如果发送方检测到两个电平之间存在差异,则会发生位错误。位监控可确保检测到发送方的所有全局错误和所有局部错误。
格式检查(接收方)
格式检查用于检查CAN报文的格式。所有CAN报文在某些位置始终呈现相同的位序列,即CRC界定符、ACK界定符和EOF。发送方始终以隐性电平传输这些报文部分。如果接收方在进行格式检查时在其中一个位检测到显性总线电平,则会发生格式错误。
循环冗余校验(接收方)
在循环冗余码中,与接收到的数据帧或远程帧关联的多项式R(x)应是ISO 11898-1指定的生成多项式G(x)的倍数。如果不是,就会产生CRC错误,说明数据帧或远程帧在传输期间遭到了破坏。
ACK检查(发送方)
CAN协议中定义的应答机制规定,所有接收方在完成循环冗余校验之后必须立即应答每一个接收的CAN报文。一个肯定应答足以告知发送方,至少一个接收方已正确接收了其发送的CAN报文。如果发送方没有接收到任何肯定应答,则发生了应答错误(ACK错误)。
数据一致性
为在网络范围内实现数据一致,CAN协议规定,如果有CAN节点检测到了总线错误,则必须通知CAN网络的所有CAN节点。为此,检测到错误的CAN节点会传输由六个显性位构成的错误信号(主要错误标志)。该操作故意违反位填充规则,从而产生位填充错误。
错误标志
传输错误标志可确保其他所有CAN节点会因为检测到总线错误而发送错误标志(次要错误标志),从而像主要错误标志的发送方一样终止常规数据传输。根据情况,主要和次要错误标志可能会有所重叠 。
错误界定符
错误标志的传输由错误界定符来终止。错误界定符由八个隐性位构成,取代了常规报文传输的ACK界定符和EOF,连同CAN总线上的强制传输暂停(ITM - 帧间间隔),合计形成11个隐性位(总线空闲标识符)。
错误处理
错误处理由被中断CAN报文传输的发送方完成。在ITM后,发送方会尝试再次传输被中断的CAN报文。“Error Handling”图总结了检测到错误后CAN网络中采取的所有操作。“Bit Monitoring Error”动画以位监控错误为例展示错误处理。由于总线访问是基于优先级的,因此不能保证立即再次进行总线访问。最佳情况下,从错误检测到重新发送(主要错误标志、错误界定符、ITM)需要17个位时间。如果主要和辅助错误标志不存在重叠,则需要23个位时间。如果CAN节点处于被动错误状态,则需要31个位时间。在这种状态下,CAN节点必须等待8个位暂停传输时间,然后才能再次访问CAN总线。
避免总线拥堵
为在网络范围内确保数据一致,CAN网络中的每个节点都有权终止任何被认为是故障的CAN报文。将正确CAN报文错认为故障的CAN节点同样具有此权利。为防止传输介质发生拥堵,CAN协议规定了错误跟踪,用于确保CAN节点能够区分偶发干扰和持久性干扰。
TEC和REC
每个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。
主动错误(Error Active)
根据特定的错误计数,CAN控制器可以切换错误状态。CAN控制器启动后将进入“主动错误”正常状态。在该状态下,CAN控制器在检测到错误后发送六个显性位(主动错误标志)。超出限制(TEC>127;REC>127)时,CAN控制器将切换为“被动错误(Error Passive)”状态。
被动错误(Error Passive)
处于“被动错误”状态的CAN控制器只能通过发送六个相同的隐性位来指示检测到的错误。这可以防止检测错误的接收方将检测到的错误全局化。此外,发送两个连续的数据帧或远程帧时,处于“被动错误”状态的CAN控制器必须等待“暂停传输时间”(8个位)
Bus Off
如果CAN控制器发生故障或错误累积过多,则会进入“Bus Off”状态,CAN控制器与CAN总线断开连接。只能通过软件恢复(强制等待时间为128 x 11位)或通过硬件复位来退出“Bus-Off”状态。