6

我正在使用需要我生成 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)

预设和残差有什么区别?

4

3 回答 3

6

在输入消息之前,您使用预设初始化 CRC 寄存器。

残差是在输入消息后应该留在 CRC 寄存器中的内容,加上其正确的 CRC。

如果您只想发送消息,您将看不到剩余值。但是当设备再次通过 CRC 算法运行你的 message+CRC 时,如果没有传输错误,它会看到最终值 0x1D0F。


您也可以在不涉及设备的情况下向自己展示这一点。这可以帮助您确认您的算法正在执行的操作至少类似于 CRC。

  • 首先,计算您的消息的 CRC。
  • 附加您的消息和该 CRC,然后通过新的 CRC 计算传递整个内容(请记住先重置为预设值。)
  • 如果一切顺利,您的 CRC 寄存器应该包含残差值。

我找到的最好的 CRC 解释在这里:

https://archive.org/stream/PainlessCRC/crc_v3.txt

于 2008-10-28T03:33:10.003 回答
0

不同之处在于算法对这两个值的作用。我只是自己查看了一个 CRC 算法,它看起来很简单。

Preset 是它开始的值,residual 与最后的值进行异或。

现在,我不知道为预设和残差选择特定值的原因。

于 2008-10-28T00:47:20.493 回答
0

这里有点不对劲。

您正在寻找 16 位 CRC,但您指定了 24 位预设和残差。发布您正在查看的设备的数据表链接。

顺便说一下,CRC 信息的最佳来源是Ross Williams 的 CRC 指南。

编辑:啊哈,我看到“24 位”预设只是表格的格式。

于 2008-10-28T00:52:24.133 回答