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

时间:2018-11-09 14:40:39

标签: byte stm32 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。

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

对于不同的字长输入,CRC32算法是否给出不同的结果?我并不是真的想将DMA引擎绑定到传输字节上。是否有等效的C函数使用32位WORD输入计算CRC32?我试图反转单词中字节的顺序,但这并不能解决(我认为这可能是个大/小端序问题)。

1 个答案:

答案 0 :(得分:2)

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

我还认为您需要确保字符串以单词边界开头。