我正在使用 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/