CRC32 CRC-периферия в STM 32: байтовые и текстовые потоки одних и тех же данных дают разные результаты - PullRequest
0 голосов
/ 09 ноября 2018

Я использую периферийное устройство 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? Я попытался изменить порядок следования байтов в слове, но это не решило проблему (я подумал, что это могла быть проблема с большим / маленьким порядком байтов).

1 Ответ

0 голосов
/ 09 ноября 2018

Это 51 символ, а не 52. Эта длина больше 4 даст 12, а не 13. Ожидается, что CRC первых 48 символов будет отличаться от CRC 51 символа.

Также я думаю, что вам нужно убедиться, что строка начинается на границе слова.

...