Я использую периферийное устройство CRM STM32 и получаю разные коды 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, поэтому я назвал его снова для размера WORD, используя метод HAL_CALCULATE (чтобы убедиться, что DMA работает должным образом). Это снова дало ~ 0xf2bd1910 0x0d42e6ef.
Дает ли алгоритм CRC32 разные результаты для входных данных с разным размером слова? Я не хочу связывать движок DMA с передачей байтов. Существует ли эквивалентная функция `C ', которая вычисляет CRC32 с 32-битным вводом WORD? Я попытался изменить порядок следования байтов в слове, но это не решило проблему (я подумал, что это могла быть проблема с большим / маленьким порядком байтов).