【发布时间】:2018-11-09 14:40:39
【问题描述】:
我正在使用 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 方法(以确保 DMA 按预期工作)。这又给了〜0xf2bd1910 0x0d42e6ef。
CRC32 算法是否会针对不同的字长输入给出不同的结果?我真的不想将 DMA 引擎绑定在传输字节上。是否有一个等效的“C”函数可以用 32 位 WORD 输入计算 CRC32?我试过颠倒单词中字节的顺序,但这并没有解决它(我认为这可能是一个大/小字节序问题)。
【问题讨论】: