新能源汽车CAN和CANFD通信中的校验算法

2024-06-19  |  来源:互联网 125浏览
百检网是一家专业的第三方检测机构平台,为你提供各类型的第三方检测服务,检测范围涵盖各行各业,全程实物实检 可追溯可溯源,只做真是检测。本文百检网为你介绍关于汽车领域的相关专业知识,更多信息可以关注我们官网网站-百检网。

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的状态正常。


关于汽车领域的相关的专业知识就为大家介绍到这里了,更多相关的行业知识可以关注我们。百检网是一个大型的综合性知识分享型平台,持续为您分享各类行业知识。做检测 上百检!百检网只做真实检测。