Фильтр по тематике

Современные 32-разрядные ARM-микроконтроллеры серии STM32: блок вычисления кода CRC

В статье приведено описание блока вычисления кода СRС 32-разрядных ARM-микроконтроллеров серии STM32 от компании STMicroelectronics. Рассмотрен состав и назначение регистров блока, а также даны примеры программ для работы с этим блоком.

01.09.2014 450 0
Современные 32-разрядные ARM-микроконтроллеры серии STM32: блок вычисления кода CRC

Введение

В большинстве протоколов передачи данных для обеспечения достоверности их передачи обычно используется контрольная сумма произвольного блока данных. Для повышения качества проверки данных вместо контрольной суммы можно применять специальный код, так называемый CRC (Cyclic Redundancy Code – циклический избыточный код). Обычно используют коды с разрядностью 8, 16 или 32 бит. Для вычисления такого кода применяются исходные полиномы определённого вида.

В отличие от простой контрольной суммы код CRC позволяет обнаружить искажение даже в одном бите большого массива данных. Если обнаружено несовпадение кода CRC, вычисленного на приёмной стороне для блока принятых данных, и принятого кода CRC – данные считаются недостоверными и отбраковываются. В этом случае приёмник данных посылает сообщение об ошибке кода CRC и осуществляется повторная передача данных. Таким образом, производится защита данных от искажения во время обмена между устройствами.

В принципе код CRC можно вычислять с помощью программы. Однако на такое вычисление требуется определённое время. И если обмен данными происходит регулярно, то процессору потребуется отводить немало времени на подсчёт кодов CRC для каждой передачи или приёма данных.

Для снижения затрат времени на эти операции 32-разрядные ARM-микроконтроллеры серии STM32 [1] были оснащены аппаратным блоком вычисления контрольной суммы данных в виде кода CRC.

Описание блока

На рисунке приведена диаграмма работы блока вычисления CRC микроконтроллера STM32.

Вычисление кода CRC в блоке производится с помощью 32-разрядного регистра ввода и вывода и вычислителя CRC с полиномом. Подсчёт кода производится за 4 тактовых цикла шины AHB с тактовой частотой HCLK.

Блок вычисления микроконтроллера STM32 использует для получения 32-битного слова кода CRC полином вида: X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 +X^8 + X^7 + X^5 + X^4 + X^2 + X + 1. Этот полином можно представить в виде шестнадцатеричного числа: 0x04C11DB7. Каждый разряд этого числа определяет наличие или отсутствие члена полинома X в соответствующей степени.

Блок вычисления использует 32-разрядный регистр данных как входной регистр для записи очередных данных для вычислителя кода CRC, а также хранит в нём результат предыдущего вычисления CRC, используемый при чтении этого регистра. Каждая операция записи в регистр данных создаёт комбинацию предыдущего значения CRC и его нового значения. Вычисление кода CRC выполняется не побайтно, а сразу над целым 32-разрядным словом.

Вычисление кода CRC обычно используется для проверки корректности передачи и приёма данных. Кроме того, в соответствии со стандартом EN/IEC 60335-1 код CRC может использоваться для проверки целостности содержимого флэш-памяти. Код CRC программы вычисляется в контроллере во время его работы, а затем сравнивается с контрольной суммой, которая была подсчитана во время её предварительной компоновки и была сохранена в определённой области памяти. При их несовпадении формируется соответствующее прерывание, и выполнение программы прекращается.

Регистры блока

Блок вычисления CRC включает в свой состав следующие регистры:

  • регистр данных CRC_DR;
  • регистр независимых данных CRC_IDR;
  • регистр управления CRC_CR.

В таблице приведена карта регист­ров блока вычисления CRC, а также и их значения после сброса.

Регистр данных CRC_DR используется как входной регистр при записи новых данных в вычислитель CRC. При чтении он содержит предыдущий результат вычисления CRC.

Регистр независимых данных CRC_IDR используется как 8-разрядный регистр общего назначения. Он может использоваться для временного хранения одного байта. Данные этого регист­ра сохраняются при сбросе CRC, вызванного битом регистра CRC_CR.

Регистр управления CRC_CR содержит всего один бит, используемый как бит сброса. Он сбрасывает блок вычисления CRC и устанавливает регистр данных в исходное значение 0xFFFF FFFF. Этот бит программно можно только устанавливать. Сбрасывается он автоматически, аппаратно.

Более подробную информацию о блоке вычисления кода CRC можно получить в оригинальном источнике [2].

Программирование

Библиотека CMSIS предоставляет целый набор функций для работы с блоком CRC. Функции этой библиотеки и подробные комментарии к ним представлены в листинге 1.

Для инициализации блока вычисления кода CRC и работы с ним необходимо выполнить следующие действия:

  • разрешить тактирование блока;
  • произвести сброс данных блока;
  • записать массив данных в блок;
  • считать вычисленное значение кода CRC из блока.

Рассмотрим конкретный пример программы, приведённый в листинге 2, которая позволяет вычислить код CRC для массива данных.

В результате работы программы переменная data_crc будет иметь значение 0x4B6B373E. Это и есть код CRC, который можно передавать вместе с массивом данных по каналу связи.

Таким образом, с помощью блока вычисления кода СRС обеспечивается надёжный обмен данными с внешним устройством без увеличения нагрузки на процессор микроконтроллера STM32.

Литература

  1. https://www.st.com.
  2. http://www.st.com/web/en/resource/technical/document/reference_manual/CD00246267.pdf.

© СТА-ПРЕСС

Если вам понравился материал, кликните значок — вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал —не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

01.09.2014 450 0
Комментарии
Рекомендуем
Знаменитый разработчик радиотелескопов, волноводов, РЛС и радаров А.А. Пистолькорс

Знаменитый разработчик радиотелескопов, волноводов, РЛС и радаров А.А. Пистолькорс

Среди исследователей и разработчиков, стоявших у истоков разных областей современной электроники, есть много имён, известных лишь в научном сообществе. Тем не менее без них развитие отечественной радиоэлектроники было бы другим. В статье рассказывается о научном пути и результатах исследований доктора наук Александра Александровича Пистолькорса, как фундаментальных, так и прикладных, нашедших широкое применение в развивающихся областях науки и техники в ХХ веке и определивших на десятилетия вперёд прогресс в развитии радиотехники, электроники и связи. Метод наведённых ЭДС, принцип двойственности, теория связанных линий для передачи информации, оптические волноводы и фазированные антенные решетки, голографические линзы, фотонные кристаллы – их создание и совершенствование напрямую связано с Александром Пистолькорсом.
31.03.2026 СЭ №3/2026 242 0
Космическая версия зарождения жизни Часть 2. Неопознанные атмосферные образования Роуна Джозефа с точки зрения современной науки

Космическая версия зарождения жизни Часть 2. Неопознанные атмосферные образования Роуна Джозефа с точки зрения современной науки

В первой части статьи были рассмотрены видеозаписи результатов американо-итальянской системы привязанных спутников (TSS-1R), полученные ровно тридцать лет назад во время миссии космического шаттла «Колумбия» (22 февраля 1996 года). В опубликованной не так давно статье известного астробиолога Роуна Джозефа [1] предлагалось интерпретировать некоторые атмосферные плазменные образования, зафиксированные на этих видеозаписях, как самоорганизующиеся субстанции, которые миллиарды лет назад могли инициировать зарождение биологической жизни на Земле. Во второй части статьи показано, насколько доказательны с точки зрения современной науки новые аргументы в поддержку внеземного зарождения жизни, предложенные Роуном Джозефом.
30.03.2026 СЭ №3/2026 243 0
Линейные интегральные стабилизаторы напряжения с низким падением напряжения на регулирующем элементе

Линейные интегральные стабилизаторы напряжения с низким падением напряжения на регулирующем элементе

В статье представлены интегральные линейные стабилизаторы с малым падением напряжения на регулирующем элементе (LDO-стабилизаторы, Low Dropout Output), выпускаемые предприятием XMTI (Xi’an Microelectronics Technology Institute), для применения в качестве вторичного источника электропитания в аппаратуре с батарейным питанием, дополнительных стабилизаторов напряжения в импульсных источниках питания. Линейные регуляторы подразделяются на радиационно-стойкие модели для применения в бортовой аппаратуре космических аппаратов и модели уровня качества Military для аппаратуры специального применения. Выпускаются микросхемы для формирования положительного и отрицательного напряжения, а также с расщеплённым выходом для питания аналоговых устройств. Выходное напряжение может быть фиксированным и регулируемым.
26.03.2026 СЭ №3/2026 327 0

ООО «ИнСАТ»  ИНН 7734682230  erid = 2SDnjeHksEz
ООО «ИнСАТ»  ИНН 7734682230  erid = 2SDnjddDXPx
  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться