在我们使用CAN通信的时候,难免会因为各种各样的情况遇到错误帧,那到底什么情况会导致错误帧呢?
首先我们回忆一下哪些情况会导致错误帧。
1.CRC校验错误。为了增加通信的准确性, 保证发送节点发出的数据等于接收节点接收到的数据, CAN数据帧中加入了CRC校验功能, 即发送节点对数据帧中起始段、 仲裁段、 控制端和数据段中的数据通过某种算法计算得到一个CRC值, 并将该值填入CRC段中 (CRC段由15个bit位的数值段和1个bit位的界定符组成, CAN控制器计算的CRC值就存在前15个bit位的数值段中), 然后向总线上发送, 接收节点收到数据后, 会对同样数据段的数据以同样的算法进行CRC计算, 并将计算结果与数据帧中的CRC值进行比对, 当接收节点计算得到的CRC值与发送节点发送的CRC值不一致时会发生CRC校验错误,并由接收节点向总线发送CRC校验错误帧, 该功能由CAN控制器自动完成。
2.格式错误。如果总线上传输的数据帧格式与协议规定的帧格式不符合, 就会发生格式错误。比如, 在数据帧和远程帧中的CRC段、 ACK段和帧结束段EOF, 存在1个bit位的CRC界定符、 1个bit位的ACK界定符和7个bit位的帧结束符, 它们均被定义为隐性电平, 如图2所示, 若在这些位置上出现显性电平, 则视为一种格式错误, 接收节点和发送节点都可能向总线发送该种类型错误帧。
3.应答错误。发送节点向总线发送数据帧时, 会在ACK段发送2个隐性位, 接收节点在收到CRC序列后, 如果接收过程没有出现错误, 接收节点会在ACK段的第1位发出一个显性电平,