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

How to use CRC32 generator for an effective CRC16?

我正在用 C 为嵌入式 STM32F105 微控制器编写代码。我需要实施 CRC 例程来验证通过无线发送的消息。

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

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

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

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

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

对于 CRC 提供的短数据包长度中的少量位错误,它不会具有某些理想的属性。

没有必要将 CRC 生成器置零。继续,每条指令给它四个字节的数据。