新能源汽车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的状态正常。
-
汽车测试网V课堂
-
微信公众号
-
汽车测试网手机站
编辑推荐
最新资讯
-
招商车研与格物科技合作常熟智能汽车测试基
2025-01-22 09:23
-
智驾安全监管“三支柱”不够了,需要“五支
2025-01-22 07:45
-
汽车研发:整车NVH安装点拓扑优化细节及重
2025-01-22 07:44
-
史上最低!零下51℃冷起动试验在达安中心圆
2025-01-21 18:18
-
充换电站国家标准再新增!2025年5月1日起实
2025-01-21 18:16