CAN总线错误处理机制详解
CAN总线错误处理机制详解
在工业场景中,稳定可靠远比先进更重要。对于通信系统而言,这一点同样适用。CAN(Controller Area Network)总线作为一种广泛应用于汽车和工业控制领域的串行通信协议,其卓越的错误处理机制确保了数据传输的完整性和系统的可靠性。本文将详细介绍CAN总线的流处理原理及其五种核心错误检测方法。
CAN流处理
在上一节中,我们介绍了如何确保CAN消息交互的有序进行。CAN通信基于优先级机制来发送消息。在CAN协议中,消息的优先级通过仲裁字段来设定。对于标准帧,消息标识符是11位;而对于扩展帧,消息标识符是29位。这种设计允许系统设计者在设计阶段就确定消息标识符。消息标识符越小,消息的优先级就越高。
仲裁机制的工作流程如下:
- 总线空闲检测:发送者想要发送消息时,首先等待CAN总线变为空闲状态。
- 发送起始位:如果CAN总线是空闲的,发送者会发送SOF(帧起始位)或者主导位来获取总线访问权。
- 发送消息标识符:接着,发送者会以最高有效位的形式发送消息标识符位。
- 仲裁过程:如果在发送隐性位的同时节点检测到总线上的主导位,这意味着该节点在仲裁中失败,因此会停止传输更多的位。
- 等待和重发:发送者会等待,一旦总线空闲,就会重新发送消息。
通过这种方式,CAN总线确保了高优先级的消息能够优先被发送,同时也能够在多个节点同时尝试发送数据时,通过仲裁机制解决冲突,保证了CAN总线的高效和可靠通信。
五种错误检测方法
CAN总线系统的关键特性之一是其高效的错误检测和处理能力。系统包含五种错误检测方法,每种方法都旨在确保数据传输的完整性,如下所述:
位监测:CAN网络系统中的每个传输节点在传输时都会监测总线的状态。如果总线状态与预期状态不匹配,节点就知道发生了错误。
帧校验序列(FCS):该字段包含一个基于帧内数据计算的循环冗余校验(CRC)值。每个接收节点计算自己的CRC值,并将其与接收到的FCS进行比较。如果两个值不匹配,节点就知道发生了错误。
确认检查:每个帧包含一个ACK位,所有其他节点都期望发送一个主导位来确认接收到帧。如果传输节点在ACK位上没有检测到主导位,它就知道发生了错误。
帧格式检查:每个帧都有特定的格式,包括预期出现主导位和隐位的特定位置。如果节点检测到违反此格式的情况,它就知道发生了错误。
错误帧:当节点使用上述任何方法检测到错误时,它会传输一个特殊的错误帧,以警告所有其他节点发生了错误。这导致所有节点丢弃当前帧,并等待正确帧的重传。当检测到错误时,检测到错误的节点会自动重传帧。这会一直持续,直到帧无错误地传输。如果一个节点检测到太多错误,它会进入错误被动状态,此时它只监听总线而不传输。如果错误继续发生,节点会进入总线关闭状态,此时它与总线断开连接。这种机制确保了一个有故障的节点不会干扰总线上的通信。