STM 32 上的 CRC32 CRC 外设:相同数据的字节流和字流给出不同的结果

CRC32 CRC peripheral on STM 32 : byte and word streams of same data give different results

我使用的是 STM32 ARM CRC 外围设备,当以字节形式馈入时与以字形式馈入时相比,我为相同的数据获得不同的 CRC 代码。

使用字节字长和小字对齐的数据串:

 const char *ts4 = "The quick brown fox jumped over the lazy brown dog."; // 52 CHARS divisible by 4; 

缓冲区大小为 strlen(ts4) 的 CRC32 为 ~ 0x01fba559 0xfe045aa6.

然后将 CRC 配置为 WORD 大小(将缓冲区大小设置为 strlen(ts4)/4),并将 DMA 引擎指向 CRC 数据寄存器。它给出了不同的 CRC 结果,~ 0xf2bd1910 0x0d42e6ef,所以我调用它,再次使用 HAL_CALCULATE 方法计算 WORD 大小(以确保 DMA 按预期工作)。这又给了 ~ 0xf2bd1910 0x0d42e6ef.

CRC32 算法是否会针对不同的字长输入给出不同的结果?我真的不想将 DMA 引擎绑定到传输字节上。是否有等效的“C”函数可以使用 32 位 WORD 输入计算 CRC32?我试过颠倒单词中字节的顺序,但这并没有解决问题(我认为这可能是一个 big/little 字节序问题)。

那是 51 个字符,而不是 52。超过 4 的长度将给出 12,而不是 13。前 48 个字符的 CRC 预计与 51 个字符的 CRC 不同。

此外,我认为您需要确保字符串从单词边界开始。