新能源汽车CAN和CANFD通信中的校验算法
CAN和CANFD通信自1986年BOSCH开发出来之后,其在各个领域尤其是汽车领域的应用越来越广泛。那么如何保证CAN和CANFD通信传输的正确率呢?
一、Rolling Counter
Rolling counter:报文计数器,位于CAN数据帧中的数据段,4bit。
发送一条报文则计数器加1,用于判断报文传输过程是否出现丢帧,从0累加到15,然后不断循环,其中若出现计数器不连续或首尾值不对,接收方会认为丢帧,同时会上报报文丢失或超时故障码。

二、Checksum
Checksum:和校验,位于CAN数据帧中的数据段,一般为8bit。
Checksum算法示例:
现有一数据帧中数据段长度为8个byte,其具体数据为0xc0 00 00 0c 00 00 08 00,
首先计算所有数据的累加和:0xc0+00+00+0c+00+00+08+00=0xd4,
则Checksum=0xff-0xd4=0x2b;
若计算出所有数据的累加和为0x01 d4,则取其低两位d4,
Checksum=0xff-0xd4=0x2b。
三、CRC校验
3.1 CRC在CAN帧中的位置

传统CAN

一个传统CAN帧结构中,CRC域放置在数据结束后应答检测之前,对于CANFD也是相同的位置,可以通过CANscope总线分析仪解码窗口或者带有CAN协议解码能力的示波器从总线模拟波形上得到对应的CRC数据展示,见下图。

3.2 CRC的计算
3.2.1确定分母
传统CAN的CRC校验码有15位,而CANFD规范中对帧数据长度进行了扩展,对于数据长度小于等于16字节的CANFD帧,采用17位CRC,对于数据长度大于16字节的CANFD帧采用21位CRC。
CAN总线中使用的若干版本CRC生成多项式g整理如下表所示。

3.2.2确定分子
数据补0即在原始数据后加上除数位数减一的0。
CRC-15:原始数据后补15个0;
CRC-17:原始数据后补17个0;
CRC-21:原始数据后补21个0。
3.2.3结果及实例
分子除以分母的余数即为CRC校验码。
CRC校验码比分母少一位,余数不足的位用0补足。
实例:
原始数据:10110011
多项式:
多项式生成除数序列:11001
原始数据补零:10110011 0000 (除数为五位,故补4个0)
10110011 0000 除以 11001 = 0100,余数为0,即校验码:0000
原始数据+CRC校验码发送给接收端,即该序列除以多项式生成的除数得到余数为0;
接收端用收到的数据除以多项式生成的除数,若余数为0则数据正确,否则数据出错。
四、Heartbeat
Heartbeat类似于rolling count,报文计数器周期性加1,若计数器不连续则认为故障发生。
但heartbeat和rolling count的区别在于:
1、Heart beat应用于CANopen,rolling count应用于CAN。CANopen处于应用层,而CAN处于物理层和数据链路层。

CAN和CANopen
2、Heartbeat和rolling count帧格式不同。


Rollingcount
3、Heartbeat为周期性加一,rolling counter每发送一帧报文加一。
4、heartbeat目的是检查被测ECU状态是否正常,rolling counter目的是保证数据传输正确。
五、总结
1、Checksum和rolling count都位于数据段,校验对象为数据段中的内容,是对重点数据的二次校验,一般为厂商自定义。
2、CRC校验对象为CRC段前的所有数据,是标准中要求必备的校验。
3、Checksum、rolling count、CRC都应用于CAN,目的是保证数据传输的正确性;而heartbeat应用于CANopen,目的是确保被测ECU的状态正常。
编辑推荐
最新资讯
-
中汽中心工程院能量流测试设备上线全新专家
2025-04-03 08:46
-
上新|AutoHawk Extreme 横空出世-新一代实
2025-04-03 08:42
-
「智能座椅」东风日产N7为何敢称“百万级大
2025-04-03 08:31
-
基于加速度计补偿的俯仰角和路面坡度角估计
2025-04-03 08:30
-
《北京市自动驾驶汽车条例》正式实施 L3级
2025-04-02 20:23