CRC8 - SAE J1850

夏南锋 Jerry 2018-06-09 06:31:51
看了很多大神图文并茂的流程解释CRC的计算方法,感觉自己已经东了,但是看了这个文档后,让我有觉得很糊涂


1 请哪位大神帮忙解释一下,第一根据 SAE J1850的CRC计算和我们之前到底有什么不一样(我知道P(x)多项式不一样,但是好像计算方法也不同,因为传统的算法计算出来的结果和他给出的例子完全对不上)?

2 图片上话红线的地方应该怎么理解

3 能否麻烦给出一个计算的实例吗?谢谢
...全文
5935 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyu2988 2020-02-22
  • 打赏
  • 举报
回复 7
第一个问题: 其基本CRC算法是一致的,只是多了一个初始值(0xFF),另外通过协议给定的方程式算出来的RX还要做取反操作。 关键在于对SAE J1850协议的给定的方程式和协议的理解. 第二个问题: 主要给你解释一下这个方程式: 其中:1、X8*D(X)意思是将D(X)左移8位,为什么要左移8位呢?因为要求8位的CRC校验码,所以要在D(x)后补上8个00000000然后再 做模 2除法 2、方程式中+Xn+Xn+1+……Xn+7什么意思呢?n到n+7刚好8bit,Xn+Xn+1+……Xn+7代表的意思是111111110000.......0(n+7代表最高位数据),所以+Xn+Xn+1+……Xn+7就是给左移8位后的D(x)模2加上一个11111111......0(0xFF0000......0)就是第一个问题中所说的初始值0xFF。(为什么是n到n+7呢?因为原始数据为 n bit,在其后加上8个0后数据长度变成了n+8,所以最高数据为n+7) 第三个问题: 以计算 F2 01 83的CRC校验码为例: 首先 F2 01 83左移8位,即:0xF2018300 二进制:11110010000000011000001100000000 其次模2加上一个初始值: 0xFF000000 二进制:11111111000000000000000000000000 得到的结果: 00001101000000011000001100000000 再用这个得到数字模2除以P(X),即X8+X4+X3+X2+1 = 100011101 所得余数为:11001000 RX为对上述余数取反,即00110111(0x37),等于SAE J1850协议中举例表中的值0x37

4,390

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧