如何计算E2E Profile 2的CRC

目录

1 E2E Profile 2使用的CRC算法

1.1 8-bit 0x2F polynomial CRC算法的介绍

2 E2E Profile 2计算CRC过程

2.1 主机厂向供应商提供的E2E Profile 2的配置参数信息

2.2 E2E Profile 2的流程图

2.3 推荐:手动计算E2E Profile 2的CRC

结尾


推荐阅读链接:

【AUTOSAR-E2E】-1.1-End-to-End通信保护介绍(Functional Safety功能安全相关)_autosar e2e故障后如何处理-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qfmzhu/article/details/122334722

1 E2E Profile 2使用的CRC算法

在Autosar文档AUTOSAR_SWS_E2ELibrarySpecification of SW-C End-to-End Communication Protection Library.pdf中,介绍了E2E Profile 2的CRC算法引用自文档AUTOSAR_SWS_CRCLibrarySpecification of CRC Routines.pdf中的8-bit 0x2F polynomial CRC,并将其封装为接口函数Crc_CalculateCRC8H2F()

1.1 8-bit 0x2F polynomial CRC算法的介绍

CRC 模块的 Crc_CalculateCRC8H2F() 函数应基于生成多项式 0x2F 实现 CRC8 例程:

CRC result width: 循环冗余校验的位长度

8 bits

Polynomial: 多项式

2Fh

Initial value: 初始值

FFh

Input data reflected: 反映的输入数据

No

Result data reflected: 反映的结果数据

No

XOR value:

FFh

Check: 校验

DFh

Magic check: 魔法校验

42h

CRC 模块的 Crc_CalculateCRC8H2F() 函数应提供以下 CRC 结果:

Data bytes (hexadecimal)

CRC

00

00

00

00

12

F2

01

83

C2

0F

AA

00

55

C6

00

FF

55

11

77

33

22

55

AA

BB

CC

DD

EE

FF

11

92

6B

55

33

FF

FF

FF

FF

6C

2 E2E Profile 2计算CRC过程

2.1 主机厂向供应商提供的E2E Profile 2的配置参数信息

E2E Profile 2的参数用E2E_P02ConfigType描述,包含以下信息,这些参数将被用于接口函数E2E_P02ProtectE2E_P02Check

DataLength

uint16

数据长度(单位Bit)。该值应为 8 的倍数。

DataIDList

uint8[16]

一个由适当选择的Data ID 组成的数组(长度16个Byte),用于防止伪装。

MaxDeltaCounterInit

uint8

两个连续接收到的有效数据的两个counter值之间的初始最大允许间隔。

例如,如果接收方收到counter为 1 的数据,且 MaxDeltaCounterInit 为 1,那么在下一次接收时,接收方可以接收counter值为 2 和 3 的数据,但不能接受counter值为 4 的数据。

注意,如果接收方在连续读取时没有接收到新数据,那么接收方会将容差递增 1。

MaxNoNewOrRepeatedData

uint8

接收方在正常通信条件下预计不会超过的最大缺失或重复数据量。

SyncCounterInit

uint8

验证counter一致性所需的数据量,在检测到接收counter出现意外行为后,必须接收到有效counter(即counter在允许的锁定范围内)。

Offset

uint16

Data[]数组中 E2E header的Offset(单位Bit)。

它应为:0 ≤ Offset ≤ DataLength-(2*8)。

2.2 E2E Profile 2的流程图

接口函数E2E_P02Protect计算一个CRC的流程图:

2.3 推荐:手动计算E2E Profile 2的CRC

假设8位的CRC信号位置在Byte0,4位的Counter信号位置在Byte1的低四位,整个数据8个Byte,DataIDList为{ 156, 204, 225, 76, 201, 57, 227, 83, 120, 51, 21, 73, 85, 10, 98, 131 }。

8个字节的数据为:

AD F6 7F B9 00 21 00 03

CRC计算网站:

CRC在线计算 (lddgo.net)icon-default.png?t=O83Ahttps://www.lddgo.net/encrypt/crc

结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注CSDN博客“汽车电子助手”,做您的好助手。

在MATLAB中实现CAN FD (Controller Area Network Fast Data) 的CRC(循环冗余校验)校验,参考AUTOASR E2E Profile 5这样的标准,通常需要以下几个步骤: 1. **理解标准**:首先,你需要熟悉E2E Profile 5的规定,了解CRC的具体算法、生成多项式、数据字节数等信息。 AUTOASR可能有自己的CRC计算规则。 2. **定义生成多项式**:CRC算法通常基于特定的生成多项式。例如,如果你知道Profile 5使用的生成多项式,可以将其作为MATLAB中的常数定义。 ```matlab % 假设生成多项式是0x104C11DB7 crc_poly = '104C11DB7'; ``` 3. **创建CRC函数**:创建一个接受输入数据、执行循环移位和异或操作的函数。MATLAB中有内置函数`polyval`可以帮助处理多项式运算。 ```matlab function [crc] = calculate_crc(input_data) crc_init = 'FFFF'; % 初始化值,根据Profile 5可能有所不同 data_word_size = 8; % 数据字节长度 % 转换输入数据为二进制并添加结束标志 input_data_with_end = padarray(uint8(input_data), [data_word_size - length(input_data)], 0, 'post'); % 执行CRC计算 for i = 1:length(input_data_with_end) temp = xor(crc_init, polyval(crc_poly, input_data_with_end(i))); crc_init = temp; end % 将结果转换回原字节表示 crc = bitxor(crc_init, 'FFFF'); end ``` 4. **应用到实际数据**:将实际的CAN FD帧的数据传递给`calculate_crc`函数,得到CRC校验值。 ```matlab input_frame = ...; % 从CAN FD帧读取的实际数据部分 calculated_crc = calculate_crc(input_frame); ``` 5. **验证校验**:如果`calculated_crc`等于预期的CRC校验值,那么校验通过;反之则校验失败。 **
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车电子助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值