在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6054|回复: 4

[求助] CRC的LSB表示方式该如何计算?

[复制链接]
发表于 2015-3-3 15:52:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
现在在做一个以太网的项目,在看CRC相关概念的时候有些疑问。
CRC的多项式二进制表示有LSB和MSB两种方式,对于MSB的表示和计算我都很清楚,手工计算的结果也和格西CRC计算器结果一致。但是在进行LSB表示方式计算的时候遇到了问题。
比如对0xA7进行多项式为x^8+x^2+x^1+1的CRC-8计算,多项式的MSB表示为0x07,计算出的结果为0x7C,是正确的;如果换成LSB表示的多项式应该为0xE0,但是这样的话用1010011100000000B除以111000001B,得出的结果是000101001B=0x29,即使将0xA7也转换为LSB的1110010100000000B,得出的结果是011000111B=0xC7,都和格西CRC计算器结果0x02不一致。
那么到底在对LSB表示的CRC该如何计算?还是说我的计算过程有问题?
发表于 2015-3-4 11:35:35 | 显示全部楼层
本帖最后由 加油99 于 2015-3-4 14:25 编辑

无论是MSB还是LSB先运算时,如果都是输入数据与多项式对应位先运算,本质上就是是一样的,只是结果位倒序了。例如,如果MSB先算的结果是0x7C,那么LSB先算的结果应是0x3E(0x7C的位倒序)。
具体怎样计算,要看协议怎么要求。
 楼主| 发表于 2015-3-4 15:46:42 | 显示全部楼层
回复 2# 加油99


     这么理解好像不正确……比如x^8+x^2+x^1+1的CRC-8,用格西CRC计算器0xA7的MSB计算结果为0x7C,LSB计算结果为0xAD,并不是0x3E。我在网上也找了很久,最后找到的结果是LSB计算的时候是多项式高次方项系数对应数据的低位,从数据的最低位开始,每完成一次除法除数右移(MSB是多项式高次方项系数对应数据的高位,从数据的最高位开始,每完成一次除法除数左移)。这样计算出的结果才和格西CRC计算器的一样。
但是这样的话就产生了一个问题:对于同样的数据,使用同样的CRC多项式,只是改变LSB和MSB,就会造成计算出的结果完全不同,而且二者之间似乎不能相互转换,相当于对同一组数据使用相同的CRC算法产生了不同的CRC校验和?还是说LSB和MSB本身就和多项式一样是CRC算法的参数,LSB和MSB不同就代表不同的CRC算法?
发表于 2015-3-4 20:57:26 | 显示全部楼层
我说的只是可以相互转换的一种情况。
如果自己传数据LSB-MSB、LSB-LSB...,任何一种组合产生校验效果是一样的。你要做以太网,就要看协议怎么要求。
本论坛关于CRC的帖子很多,你搜索一下,也许有帮助。
发表于 2018-11-27 17:46:46 | 显示全部楼层
学习中。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-4 08:29 , Processed in 0.024056 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表