CRC预设和残留

6 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)

其中预置= FFFF(16位)和残留= 1D0F(16位)

我搜索了一个CRC算法并找到了这个链接:http: //www.lammertbies.nl/comm/info/crc-calculation.html

它有两个.CRC-CCITT(0xFFFF)CRC-CCITT(0x1D0F)

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

Har*_*sai 6

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

在通过消息馈送之后,残留物应该留在CRC寄存器中,加上正确的CRC.

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


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

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

我发现的最好的CRC解释是:

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


Zan*_*ynx 0

区别在于算法对这两个值的处理方式不同。我自己看了一个CRC算法,看起来很简单。

预设是其开头的值,残差与末尾的值进行异或。

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