我正在使用需要我生成 16 位 CRC 的设备。
该设备的数据表说它需要以下 CRC 定义:
CRC 类型长度多项式方向预设残差
CRC-CCITT 16 位 x16 + x12 + x5 + 1 正向 FFFF (16) 1D0F (16)
其中预设=FFFF(16 位)和残差=1D0F(16 位)
我搜索了一个 CRC 算法并找到了这个链接:
http://www.lammertbies.nl/comm/info/crc-calculation.html
两者都有。
CRC-CCITT (0xFFFF)
CRC-CCITT (0x1D0F)
预设和残留有什么区别?
最佳答案
您使用 初始化 CRC 寄存器预设 在输入您的信息之前。
残留物 是在输入消息后应留在 CRC 寄存器中的内容,加上其正确的 CRC。
如果您只是想发送消息,则不会看到剩余值。但是,当设备再次通过 CRC 算法运行您的消息 + CRC 时,如果没有传输错误,它将看到最终值 0x1D0F。
您也可以在不涉及设备的情况下向自己演示这一点。这可以帮助您确认您的算法正在执行至少类似于 CRC 的操作。
我找到的最好的 CRC 解释在这里:
https://archive.org/stream/PainlessCRC/crc_v3.txt
关于CRC 预置和残差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/241605/