byte - CRC32 STM 32 上的 CRC 外设 : byte and word streams of same data give different results

标签 byte stm32 cpu-word crc32

我正在使用 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?我尝试过颠倒单词中字节的顺序,但这并不能解决问题(我认为这可能是一个大/小尾数问题)。

最佳答案

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

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

关于byte - CRC32 STM 32 上的 CRC 外设 : byte and word streams of same data give different results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53227855/

相关文章:

c - 如何从十六进制值中提取低位字节?

用于传输数据的 USB DUAL CDC 端点

Mysql Word Association/thesaurus 数据库

Java - 用一个字节索引到数组

c# - Telnet 流的字节到字符转换

stm32 - 如何在STM32F4中使用备份SRAM作为EEPROM

eclipse - 用于 Eclipse 的 STM32 库

javascript - Div 可编辑以及更多...更多

javascript - 如何使用 javascript 在 Iframe 页面中查找特定单词?

byte - protobuf 3.0 中的 any 和 bytes 有什么区别?