我正在使用一个需要我生成16位CRC的设备.
该设备的数据表显示它需要以下CRC定义:
CRC Type Length Polynomial Direction Preset Residue CRC-CCITT 16 bits x16 + x12 + x5 + 1 Forward 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.
附加您的消息和CRC,然后通过新的CRC计算传递整个事物(请记住首先重置为预设值.)
如果一切顺利,您的CRC寄存器应包含残留值.
我发现的最好的CRC解释是:
https://archive.org/stream/PainlessCRC/crc_v3.txt