首页 > 汽车技术 > 正文

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

2022-05-11 09:41:52·  来源:新能源汽车家园  
 
CAN和CANFD通信自1986年BOSCH开发出来之后,其在各个领域尤其是汽车领域的应用越来越广泛。那么如何保证CAN和CANFD通信传输的正确率呢?一、Rolling CounterRoll

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

分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号