Организация памяти в микроконтроллерах STM32
Основное предназначение flash памяти микроконтроллера – хранение кода программы. Именно отсюда извлекаются команды, которые затем выполняются ядром микроконтроллера. Весь алгоритм поведения микроконтроллера, каким его придумал разработчик программы, то, каким образом микроконтроллер реагирует на внешние воздействия, настройка всех периферийных модулей и т.д. – все это хранится во встроенной flash памяти.
Основной объем встроенной flash памяти занимает, конечно же, область, предназначенная для хранения кода программы, но кроме нее есть часть памяти, предназначенная для других целей. Сама память программ разделена на фрагменты меньшего размера, число этих фрагментов и их размер зависит от серии микроконтроллера. Структура flash памяти будет рассмотрена на примере микроконтроллеров серий STM32F100, поскольку это один из наиболее распространенных и популярных типов.
В общем виде структуру flash памяти можно представить состоящей из следующих областей:
1) Main memory — память программ. Содержит основной код программы, который исполняется ядром микроконтроллера. Эта область разделена на страницы определенного размера, количество и размер страниц зависит от типа микроконтроллера и размера его памяти программ. Кроме того, для некоторых микроконтроллеров область памяти программ кроме страниц может быть поделена еще и на несколько секторов. Сектор содержит какое-то число страниц определенного размера. В другом секторе размер страниц может отличаться.
2) EEPROM – энергонезависимая перепрограммируемая область памяти. Из всех вышеперечисленных серий имеется только в микроконтроллерах низкопотребляющей серии STM32L1xx. Обычно используется для хранения пользовательских данных, различных настроек устройства, т.е. всего того, что не должно потеряться при отключении питания или сбросе микроконтроллера. Хоть это также область flash памяти, но имеет некоторые отличия от области памяти программ. Эта область памяти будет рассмотрена в одной из следующих частей.
Information block содержит две области памяти: System memory и Option bytes.
3) System memory – это область загрузчика. Позволяет программировать микроконтроллер через внешний интерфейс (для вышеперечисленных семейств — USART). К этой области пользователь не имеет доступа, производитель «прошивает» в нее встроенный загрузчик при производстве микроконтроллера. Поэтому стереть или повредить данные в этой области случайными действиями невозможно.
4) Option bytes – область памяти, где устанавливается защита от записи/чтения отдельных страниц памяти программ, а также некоторые другие пользовательские настройки.
И в самом конце расположены регистры интерфейса flash памяти (FLITF — Flash memory interface). Всеми операциями записи/чтения управляет отдельный модуль – контроллер записи и чтения flash памяти FPEC (Flash Program/Erase Controller). Микроконтроллеры с наибольшим размером памяти выделяются тем, что имеют по два банка памяти программ. Это позволяет хранить в микроконтроллере две версии прошивки, программировать один из банков памяти, в то время как второй является рабочим и в нем выполняется программа.
Для достижения высокой производительности STMicroelectronics разработала и внедрила адаптивный ускоритель реального времени для Flash-памяти (ART Accelerator). Это своего рода контроллер КЭШа (применяемый в микропроцессорных системах), ориентированный на программы, исполняемые из Flash-памяти. Сама Flash-память имеет 128-битную организацию, поэтому одна операция чтения состоит из четырех 32-битных инструкций.
Для уменьшения задержек при изменениях в потоках инструкций, вызванных ветвлениями, вызовами подпрограмм, системными вызовами и прерываниями, ART Accelerator использует очередь предварительной выборки и КЭШ ветвления. Если программный счетчик перенаправления указывает на недавно использованный адрес, инструкции, по всей вероятности, находятся еще в КЭШе, и будут немедленно загружены в очередь предварительной выборки для исполнения, экономя при этом машинные циклы. Более интеллектуальное (адаптивное) управление КЭШ с помощью встроенной логики должно давать более положительные результаты (скорость работы), чем простые технологии.
Интегрированный модуль часов реального времени включает в себя 4 КБайт SRAM с возможностью резервного хранения данных в режиме экстремально низкого потребления. Дополнительно доступно однократно программируемое ПЗУ размером 528 Байт для хранения серийного номера, MAC адреса, криптографических ключей, калибровочных данных и другой уникальной для устройства информации.
Микроконтроллеры STM32 также содержат 7-уровневую высокоскоростную матричную шину AHB, обеспечивающую одновременную передачу данных между ведущими устройствами (ARM процессор, DMA, коммуникационные интерфейсы) и ведомыми (различная периферия и память).
В линейку микроконтроллеров с ядрами Cortex-M0 и Cortx-M3 входят устройства с самой различной конфигурацией – от дешевых «облегченных» до высокоскоростных и производительных устройств с развитой периферией, а также модели с ультранизким потреблением. В настоящее время STMicroelectronics занимает 45% рынка процессоров на основе Cortex-M.
На рисунке 1.5.1 приведена структура flash памяти для микроконтроллеров типа STM32F100 (medium-density value line devices)
Рисунок 1.5.1 – структура flash памяти для микроконтроллеров типа STM32F100