如何使用CRC32生成器实现有效的CRC16?

时间:2018-02-16 03:51:02

标签: checksum crc crc32 crc16

我正在用C语言编写嵌入式STM32F105微控制器。我需要实现一个CRC例程来验证通过无线方式发送的消息。

微控制器内置了一个CRC32发生器。您一次为它提供4个字节,它可以计算CRC,而无需额外的处理器开销。它是不可配置的,并使用以太网CRC32多项式。

我想使用这个硬件CRC生成器,但我只想为每个数据包添加两个字节(而不是四个)。数据包的大小将在4到1022字节之间变化。

我可以简单地使用CRC32的两个高(或低)字节吗?或者我总是可以一次向CRC模块提供2个字节,高字节为零?

还有其他方法可以获得我想要的东西吗?

1 个答案:

答案 0 :(得分:1)

对于大多数应用程序,当然,您可以使用CRC-32的低两个字节作为16位校验值。但是,这不是16位CRC。它将与检查消息中的严重错误的任何其他哈希值一样好。

对于CRC提供的短数据包长度中的少量比特错误,它没有某些理想的属性。

没有必要为CRC生成器提供零点。继续为每条指令提供四个字节的数据。