我正在使用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?我试图反转单词中字节的顺序,但这并不能解决(我认为这可能是个大/小端序问题)。
答案 0 :(得分:2)
这是51个字符,而不是52个字符。长度超过4个字符将得到12个字符,而不是13个字符。前48个字符的CRC预期将与51个字符的CRC不同。
我还认为您需要确保字符串以单词边界开头。