参考文档
以下是本文使用到的参考文档:
在介绍本文之前,有些基础知识需要先知道。
0.1 关于显性(dominant)和隐性(recessive)
CAN总线是双绞线,传输数据时,根据两根电缆之间的电压差进行传输,也称为差分传输 ,通过双绞线连接配合差分传输方式能够有效地抑制共模干扰。
- 在没有数据传输时,两条线的电压相同,为隐性信号,逻辑信号为1。
- 一旦有数据进行传输,两条线就会出现电压不同的情况,从而产生电压差,CAN总线就会表现为显性信号,逻辑信号为0。
本文中所有的图中,逻辑0在y轴的0位置上, 逻辑1在y轴的1位置上, 这符合CAN标准中的绘图规则。
其他参考: https://zhuanlan.zhihu.com/p/447088312
一、 位填充(Bit Stuffing)介绍
在了解CAN总线中的错误帧之前,首先需要了解什么是位填充(Bit Stuffing) , 这是一项非常重要的技术。
1.1 什么是位填充(Bit Stuffing)
一句话概括: 当CAN节点发送 逻辑电平(显性dominant或隐性recessive)相同的五bit时,它必须发送一bit相反电平。 CAN接收 节点会自动删除这个新增的额外bit。
下面用图解释什么是位填充(Bit Stuffing):
这个图的说明:
- 上半部分是发送节点原本需要发送的内容,下半部分是加上位填充(Bit Stuffing) 后在CAN网络中真实的CAN报文。
- 下图中红色的【S】表示的这是一个填充位(Stuffing Bit) , 填充位必然和前面的bit位逻辑相反
1.2 位填充(Bit Stuffing)作用在CAN帧的哪些部分
在CAN标准的“BIT STREAM CODING”章节中规定了需要填充的部分 :
The frame segments START OF FRAME, ARBITRATION FIELD, CONTROL FIELD, DATA FIELD and CRC SEQUENCE are coded by the method of bit stuffing. Whenever a transmitter detects five consecutive bits of identical value in the bit stream to be transmitted it automatically inserts a complementary bit in the actual transmitted bit stream.
翻译后:
帧段START OF frame(帧起始)、ARBITRATION FIELD(仲裁段)、CONTROL FIELD(控制段)、DATA FIELD(数据段)、 CRC SEQUENCE(CRC段) 通过比特填充(Bit Stuffing)的方法进行编码。每当发射端在要发送的比特流中检测到具有相同值的五个连续比特时,它自动在实际发送的比特中插入互补比特。
在CAN标准的“BIT STREAM CODING”章节中规定的**不进行填充的部分 ** :
The remaining bit fields of the DATA FRAME or REMOTE FRAME (CRC DELIMITER, ACK FIELD, and END OF FRAME) are of fixed form and not stuffed. The ERROR FRAME and the OVERLOAD FRAME are of fixed form as well and not coded by the method of bit stuffing.
翻译后:
数据帧或远程帧的剩余位字段【CRC DELIMITER(CRC界定符)、ACK FIELD(ACK段)、 END of FRAME(帧结束)<