Контрольная сумма CRC32

Если вы принимаете кучу данных, в целостности и корректности которых вы должны быть уверены (например прошивки), то имеет смысл перед их использованием убедиться, что при передачи ни один никакой бит не был повреждён. В случае с прошивкой устройство просто может превратиться в кирпич. Перебирать каждое слово и сверять его -- очень долго. Есть хорошее решение для такой задачи -- использовать контрольную сумму (хеш-сумму). В stm32 имеется аппаратный модуль CRC32.

Циклический избыточный код (англ. Cyclic redundancy check, CRC) — алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных. CRC является практическим приложением помехоустойчивого кодирования, основанным на определённых математических свойствах циклического кода. // Википедия

Детально разбирать работу CRC32 мы не будем, вы можете ознакомиться с этим самостоятельно (например тут часть 1, часть 2 и часть 3).

У саго блока всего два регистра. Один для ввода данных \ вывода контрольной суммы (DR). И второй это регистр контроля (CR) у которого, к тому же всего один активный бит сброса.

Пример использования:

У этого блока, однако, есть недостатки. Первый, не столь существенный, заключается в фиксированном палиндроме (0x04C11DB7).

Второй, кроется в том, что расчёт суммы происходит не по классическому алгоритму -- данные побитово переставляются и инвертируются. Подробнее об этом вы можете прочитать в блоке Alex-EXE, там же можно скачать утилиту для Windows, которая рассчитывает CRC32 так же как и STM32. Реализацию можно найти здесь (на Си и на Delphi).


Назад | Оглавление | Дальше