我正在使用一个需要我生成16位CRC的设备。
该设备的数据表显示它需要以下CRC定义:
CRC Type Length Polynomial Direction Preset Residue CRC-CCITT 16 bits x16 + x12 + x5 + 1 Forward FFFF (16) 1D0F (16)
其中preset = FFFF(16位)和Residue = 1D0F(16位)
我搜索了一个CRC算法并找到了这个链接: http://www.lammertbies.nl/comm/info/crc-calculation.html
它有两个。 CRC-CCITT(0xFFFF) CRC-CCITT(0x1D0F)
预设和残留物有什么区别?
答案 0 :(得分:5)
使用 预设 初始化CRC寄存器,然后输入信息。
残留 是通过一条消息加上正确的CRC后应该留在CRC寄存器中的。
如果您只想发送消息,则不会看到残留值。但是当设备再次通过CRC算法运行您的消息+ CRC时,如果没有传输错误,它将看到最终值0x1D0F。
您也可以在不涉及设备的情况下向自己演示。这可以帮助您确认您的算法正在执行至少类似于CRC的操作。
我找到的最好的CRC解释是:
答案 1 :(得分:0)
不同之处在于算法对这两个值的作用。我自己只看了一个CRC算法,看起来很简单。
预设是它开始的值,残差与最后的值进行异或。
现在,原因用于选择预设和残留的特定值,我不知道。
答案 2 :(得分:0)
有些东西不在这里。
您正在寻找一个16位CRC,但您已经指定了一个24位预置和残留。发布指向您正在查看的设备的数据表的链接。
顺便提一下,CRC信息的最佳来源是Ross Williams' guide to CRC.
编辑:啊哈,我看到“24位”预设只是表格的格式。