请教一个crc的问题
时间:12-12
整理:3721RD
点击:
串行crc,要求初值为0xFF:如果初值为0xFF,是不是需要在发送前将crc计算所得的余数取反再发送?接收端收到以上数据后做crc校验时,是不是最后余数是0xFF(不是0x0)才代表传输无误?
对crc算法没有太深的理解,针对初值为0xFF的情况试了一下似乎是的,请教大牛帮忙确认,谢谢!
对crc算法没有太深的理解,针对初值为0xFF的情况试了一下似乎是的,请教大牛帮忙确认,谢谢!
CRC有两种校验方式,一种是payload根据parity算出来一个signature,然后payload+signature发给接收端。接收端根据payload(无parity)再算一遍crc,得出的signature(new)和接受到的signature比较。这种不多。
第二种就是结果是0x00那种。接收端收到payload+signature后,根据parity再整体(payload+signature)crc,结果是0x00就是无误的。
第一种没什么问题,现在就是想实现第二种,但我无论如何也得不到0x0。
假设x^8+x^4+x^3+x^2+1,初值为0xff,需要怎么处理呢?求指点,多谢!
假设初值为0xff,crc计算完成后,传输前取反,这样第二种校验可以得到0xff,是否初值不为0的判断条件不是0而是0xff?
就是从头开始xor就可以了~ 你这相当于100011101,用这个和0xFF从MSB开始异或,然后往LSB移动parity,最后就得到了signature。
不行你可以看下wiki,有crc的例子。
跟初值无关,本质上是多项式除法,余数应该为0.
很多CRC校验在传输前取反,在receiver端会得到一个固定值(不是零)
标准生成多项式是这么说,因为客户给的不是标准多项式,我又缺乏足够的crc数学理论基础。
写个model算一下就好了啊,只要有多项式,就能算出结果
先找个标准多项式,标准数据,验证代码OK了。再改成非标多项式