本帖最后由 lykiller 于 2015-8-14 17:30 编辑
为了 CRC 的发生和校检,发生器和检验器里的移位寄存器置成为全 1型。对于每个被发送或者被收到的数据位,当前余项的最高一位和数据位进行异或( XOR ),然后,余项是左移 1 位,并且,最低一位置零。如果异或的结果是 1 ,余项和生成多项式作异或。当检查的字段最后的一位被发送的时候,发生器里的 CRC 被颠倒,再以最高位( MSb )在前发给检验器。
以上摘自USB2.0协议层
对**crc校验的步骤我的理解是,
一、5位CRC校验寄存器全置1,
二、数据每发送一位,该位与CRC校验寄存器首位异或,之后CRC校验寄存器左移一位,并用0补位,
三、如果二中异或的结果是1,则CRC校验寄存器与生成多项式(即00101)异或
四、重复二,三步骤,直到发送完最后一个数据
五、将最后的CRC校验寄存器取反,则即为发送的CRC(MSB在前)
但是楼主用上述个人理解的方法手算出的CRC总是不对,求大神来答疑解惑
|