串行通信在汽车环境中遇到的最大难题之一就是如何保证极高的传输可靠性。CAN总线中使用的CRC校验是功能最强大的错误检测方法之一。
CRC方法根据要传输的位(从SOF到数据场结束)和ISO 11898-1定义的生成多项式G(x)计算CRC序列。CRC序列位于数据场之后。接收方会采用同样的方法针对接收到的位(SOF开始到数据场结束)计算CRC并与接收到的报文中的CRC序列进行对比,这样可以非常可靠地检测是否发生了传输错误。(例外情况:当CRC序列本身遭到干扰破坏时)。
根据计算后的结果,每个接收节点都会给出应答,与节点是否会过滤该报文无关。接收方的应答不是肯定就是否定。ACK 位中的显性电平表示肯定应答,隐性电平表示否定应答。
为了进行错误跟踪,ACK界定符始终以隐性方式传输。由于发送方以隐性方式传输ACK 位和ACK界定符,因此一个肯定应答足以告知发送方报文已正确传输。这就是CAN网络中的应答方法被称为节点肯定应答的原因。
您可通过交互式动画了解CAN网络中的应答。该图假设CAN网络中存在一个发送方和两个肯定应答的接收方。
在有节点给出肯定应答的情况下,如果还有其他节点给出否定应答,那么这些否定应答不会被其他节点收到。为确保网络范围内的数据一致性,这些节点会在ACK界定符之后发送错误标志。
如果没有一个肯定应答,则ACK位会保持隐性,发送方将检测到ACK错误,并通过发送错误标志来终止正在进行的报文传输。ACK错误表示由发送方引起的错误或总线上没有接收方引起的错误。