crc 校验错误_E2E中的CRC是怎样计算的

E2E(end to end)是autosar规范里规定的一种用于保证数据传输正确的概念,属于功能安全范畴。

下面的例子可以简单介绍E2E的工作机制,假设汽车内有两个ECU,A和B,两个节点之间通过CAN总线进行通信,A节点要将某一安全相关的数据(比如汽车车速信号,油门踏板信号等)传给B节点,这里我们假定车速信号VehSpeed = 0x1157,如果采用E2E概念对这个车速数据进行保护,那么实际上A除了要发给B上边VehicleSpeed数据之外,还要将CRC和Counter传给B,B在接受到数据之后也会计算出CRC然后将其和收到的进行比较,B会根据校验的结果进行下一步操作。

6fbc90123cd4ae24a2cc25ed2418c16a.png

那么现在的问题就是已知数据Data=0x1157,计算出CRC、Counter。

按照Autosar规范的要求,E2E存在一系列的Profile(配置)每种配置在计算CRC时有各自的机制、参数、数据格式,具有非常强的灵活性,用户可以根据实际需要选择配置1,或者配置2,目前本人接触的仅有Profile1,所以我们只讨论Profile1 (⊙﹏⊙)

Profile1的一些属性:CRC,Counter,Timeout monitoring,Data ID

CRC:对数据进行多项式除法计算后的余数

Counter:用于计数每次增加1,A将计数值发给B,B可以依据收到的counter值确定是否接收及时。

Timeout monitoring:用来评价Counter是否丢失延时等。

DataID:一个A和B提前定好的特殊数字,一般是16bits,按照E2E_P01DataIDMode 的不同分为1A,1B,1C三种细分的配置,计算CRC时对DataID做不同处理。

在考虑上述Autosar要求后,我们要计算CRC的数据最终可写为Data = {0x09,0x00,0x00,0x57,0x11};这里我们假定DataID=0x0009,VehSpeed低8位放到数组靠前位置。

acebfc8f207c7f39e04410fa00116082.png
数据填充,从左至右Data0-4

总结一下就是下面的过程

1.将counter放入Data

2.将DataID(16bits)按照一定规则放入Data

3.计算Data的CRC值

4.将counter增加1

关于CRC计算,CRC可以理解为多项式做除法后的余数,按照除数的不同可以分类为CRC-8,CRC-16,CRC-32等,看了一下大概好几十种。Autosar E2E profile 1 规定采用CRC-8-SAE J1850 ,对应多项式

,即100011101,通常写为0x1D,注意这里不是0x11D,可能是最高位必然为1,所以省去了。

下面图片显示了二进制除法采用多项式计算0x57: CRC=0x8D的过程,实际上0x57按照不同的传输顺序分为两种Msbit-first(01010111)Lsbit-first(11101010)这里只计算Msbit-first的情况。此外这里数学不是太好不太明白为什么后边添加了8个padded bits,但是观察下来猜测若要计算CRC-3要padded 3 bits?CRC-16要padded 16 bits??

5ded9c1a58c1c6dd784a50f603b2e5e2.png
Most-significant bit first

下边是C代码实现部分,可以看出每计算一个byte移位8次,如果考虑运行速度的话可以提前计算出0x00-0xFF每一个数据对应的CRC先放好,然后再查表,这就是另一种计算CRC的方法了,Autosar两种方法都推荐,第一种速度较慢ROM占用少,第二种速度快但ROM占用多。

另一点要注意的是Autosar明确规定Profile 1初始值和XOR的值均为0x00。假如在某些代码中看到u8Crc ^= 0xFF时一定要留意看一下初始值,若是0xFF那就没问题,异或运算满足交换率就抵消了,否则计算结果错误了。

unsigned 

online compiler: https://onlinegdb.com/BylhWbL3tU

扩展:其实Autosar给出了函数级的配置方案,要对上面的车速信号做E2E保护只要调用E2E_P02Protect函数即可,调用后的计算的CRC会存放在Data0,而Counter会存放在Data1.

E2E_P02Protect(Config, State, Data)

8a00159b928863e1815b57a5a390ddad.png

参考资料

https://en.wikipedia.org/wiki/Cyclic_redundancy_check

https://www.autosar.org/fileadmin/user_upload/standards/foundation/1-3/AUTOSAR_PRS_E2EProtocol.pdf

https://en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值