STM32F4xx: блок вычисления CRC |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
В этой статье приведен перевод раздела "CRC calculation unit" из документа RM0090 [1]. Эта информация касается главным образом аппаратного блока CRC семейства STM32F4xx. Информация по другим семействам STM32, принцип работы и примеры использования см. в [2]. В различных приложениях техники CRC широко используются для проверки качества передачи данных или целостности информации устройства хранения данных. В области действия стандарта EN/IEC 60335-1 предусматривается проверка CRC для целостности данных в памяти Flash. Блок вычисления CRC помогает вычислить сигнатуру ПО во время работы программы, и сравнить её с сигнатурой, сгенерированной во время линковки приложения, сохраненной в указанном месте в памяти. Основные функции блока CRC: • Используется стандартный полином CRC-32 (Ethernet): 0x4C11DB7 (X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X + 1). Блок-схема аппаратуры CRC показана на рис. 8. Рис. 8. Устройство блока вычисления CRC. [Функциональное описание CRC] Блок вычисления CRC состоит главным образом из одного 32-битного регистра данных (CRC_DR), который: • Используется как входной регистр для ввода новых данных в калькулятор CRC (когда происходит запись в этот регистр). Каждая операция записи в этот регистр создает комбинацию предыдущего значения CRC и нового (вычисление CRC осуществляется на всем 32-битном слове данных, а не байт за байтом). Операция записи приостанавливается до окончания вычисления CRC над очередной порцией данных, что позволяет выполнить доступ на запись типа back-to-back, или смежные операции записи и чтения. Калькулятор CRC может быть сброшен в 0xFFFFFFFF битом RESET в регистре управления CRC_CR. Эта операция не влияет на содержимое регистра CRC_IDR. [Регистры CRC] Интерфейс блока вычисления CRC очень простой, и содержит всего лишь 2 регистра данных и один регистр управления. К регистрам периферийного устройства CRC нужно обращаться как к словам (32-битный доступ). Далее во врезках приведено описание этих регистров. Байтовое смещение адреса указано относительно базового адреса (базовый адрес CRC_BASE, его значение можно узнать из заголовочного файла библиотеки STM32CubeMX. Например, для микроконтроллера STM32F407 это файл заголовка stm32f407xx.h). Аббревиатура rw обозначает доступ на чтение и запись, w операцию записи. Смещение адреса: 0x00
Используется как регистр ввода новых данных при вычислении CRC. Для операции чтения хранит результат предыдущего шага вычисления CRC. Смещение адреса: 0x04
Биты 31:8 зарезервированы, должны сохраняться в состоянии после сброса (все нули). Биты 7:0 это 8-битный регистр данных общего назначения. Для блока CRC он не нужен, это какой-то атавизм, оставшийся от аппаратуры других семейств. Может использоваться как временное хранилище для одного байта данных. На этот регистр не влияют сбросы CRC, генерируемые битом RESET регистра CRC_CR. Смещение адреса: 0x08
Биты 31:1 зарезервированы, должны сохраняться в состоянии после сброса (все нули). RESET (бит 0): сбрасывает вычисление CRC в начальное состояние, и устанавливает регистр данных в 0xFFFFFFFF. Этот бит можно только лишь установить, он сбрасывается автоматически аппаратурой. Таблица 21. Карта памяти регистров блока CRC и их значения после сброса.
[Ссылки] 1. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com. |