CRC预设和残留

时间:2008-10-27 22:33:58

标签: crc preset

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

预设和残留物有什么区别?

3 个答案:

答案 0 :(得分:5)

使用 预设 初始化CRC寄存器,然后输入信息。

残留 是通过一条消息加上正确的CRC后应该留在CRC寄存器中的。

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


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

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

我找到的最好的CRC解释是:

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

答案 1 :(得分:0)

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

预设是它开始的值,残差与最后的值进行异或。

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

答案 2 :(得分:0)

有些东西不在这里。

您正在寻找一个16位CRC,但您已经指定了一个24位预置和残留。发布指向您正在查看的设备的数据表的链接。

顺便提一下,CRC信息的最佳来源是Ross Williams' guide to CRC.

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