CRC-16-CCITT的选择

Selection of CRC-16-CCITT

经常使用循环冗余检查,并且在适当的配置下效果很好。 ITU 的 ("CCIT") CRC 被大量使用 -

为什么如此频繁地使用 ITU 的 CRC 值?一个常见的 'default' 发现,可以这么说,只是好奇为什么

多项式0x11021用于软盘。选择该多项式的部分原因是 0x1021 中只有三个 1 位,这简化了基于硬件的 CRC 计算。对于 0x10007 (FOP-16) 和 0x14003(CRC16、CRC16-IBM)也是如此,所以我不确定为什么选择 0x11021 而不是其他两个比较常见的,低 16 位中只有三个 1 位。

0x11021 也用于 XMODEM(旧计算机的串行文件传输程序),它通常在软件中实现,其中多项式中 1 的位数无关紧要,但可能已被选择,因为它用于软盘。

0x11021 是两个质数多项式的乘积:0xf01f 和 0x3。 0x3 (x+1) 将检测任何奇数位错误,它的 2 位错误检测适用于高达 32751 数据位 + 16 crc 位 = 32767 位,足以检测大小为 128、256、512 的软盘扇区, 和 1024 字节(也可以用于 2048 字节,但我不记得扇区大小为 2048 字节的软盘)。我不知道为单突发错误检测选择多项式有什么好处。一些多项式对于单突发纠错会更好,但单突发纠错并不常见。

我提到的另外两个多项式是相似的,0x10007 = 0xfffd * 0x3 , 0x14003 = 0xc001 * 0x3。