Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2743
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

21. Управление Flash-памятью

Flash-память – это безмолвное периферийное устройство, которое мы используем, не особо задумываясь о нем. Как только мы убедились, что во Flash-памяти достаточно места для хранения микропрограммы, мы загружаем бинарный образ с помощью отладчика или специального загрузочного инструмента. Затем мы полностью забываем о ней.

Однако внутренняя Flash-память, предоставляемая всеми микроконтроллерами STM32, работает так же, как и другие периферийные устройства. Она может быть запрограммирована непосредственно из микропрограммы путем конфигурации определенных регистров, и это позволяет нам обновлять встроенное ПО, используя тот же встроенный код, или сохранять соответствующие данные конфигурации без использования специальных внешних аппаратных средств (внешней EEPROM на шине I²C или Flash-памяти на шине SPI).

В данной главе показано, как программировать внутреннюю Flash-память STM32 с помощью специального модуля HAL_FLASH CubeHAL. Она описывает, как Flash-память обычно организована в типовом микроконтроллере STM32, вкратце иллюстрируя различия между каждым семейством и шаги, необходимые для программирования определенных областей этой памяти непосредственно из одного и того же микроконтроллера.

Наконец, описана роль ускорителя ART™ Accelerator, а также развитие этой запатентованной технологии ST в микроконтроллерах STM32F7.

21.1. Введение во Flash-память STM32

Вотличие от других встроенных архитектур1, все микроконтроллеры STM32 предоставляют выделенную Flash-память для хранения программного кода и постоянных данных.

Внастоящее время существует одиннадцать объемов памяти, от 16 КБ до 2 МБ. Последняя цифра в номере устройства по каталогу (P/N) используемого микроконтроллера STM32 определяет размер Flash-памяти, как показано в таблице 1. Например, микроконтроллер STM32F401RE имеет 512 КБ Flash-памяти.

Таблица 1: Размер Flash-памяти с учетом последней цифры в номере по каталогу STM32

Последняя цифра в P/N

Размер Flash-памяти (КБ)

 

 

4

16

6

32

8

64

B

128

Z

192

C

256

D

384

1 Это особенно верно для микропроцессоров Cortex-A или FPGA, где энергонезависимая память предоставляется внешними Flash-памятями, подключенными к ЦПУ через специальные линии шины.

Управление Flash-памятью

551

Таблица 1: Размер Flash-памяти с учетом последней цифры в номере по каталогу STM32

 

Последняя цифра в P/N

Размер Flash-памяти (КБ)

 

 

 

 

 

E

512

 

 

F

768

 

 

G

1024

 

 

I

2048

 

Взависимости от семейства STM32, вида поставки и используемого корпуса Flash-память микроконтроллера STM32 может быть организована в:

один или два банка: большинство микроконтроллеров STM32 предоставляют только один банк Flash-памяти, а самые производительные – до двух банков. Многобанковая (multi-bank) архитектура допускает двойные и одновременные операции: при программировании или стирании в одном банке, в другом возможны операции чтения. Такой подход обеспечивает большую гибкость для двойных операций, особенно для высокопроизводительных приложений. В некоторых более поздних микроконтроллерах STM32, таких как новейшие STM32F7, мультибанк – это программируемая функция, которую можно включить по желанию, а размеры банков можно сконфигурировать при необходимости.

каждый банк в свою очередь разделен на сектора: каждый банк Flash-памяти разделен на несколько подблоков, называемых секторами. Некоторые микроконтроллеры STM32 предоставляют Flash-память, имеющую все сектора одинакового размера (обычно равного 1 КБ или 2 КБ). Некоторые другие предоставляют несколько секторов с разными размерами (обычно первые сектора имеют меньший размер, чем остальные).

каждый сектор может быть разделен на страницы: в некоторых микроконтрол-

лерах STM32 сектор дополнительно разделен на несколько страниц меньшего размера. Иногда это происходит только для первых секторов, что позволяет стирать, а затем программировать только часть сектора.

Втаблице 22 показано, как организована Flash-память в некоторых микроконтроллерах STM32F0. Как видите, они могут обеспечить до семнадцати секторов, каждый из которых разделен на четыре страницы. Кроме того, выделенная область, называемая информационным блоком (Information Block), отображается на другой диапазон адресов: эта энергонезависимая память используется для хранения специальных регистров конфигурации (называемых байтами конфигурации, англ. Option bytes) и некоторых предварительно запрограммированных на заводе загрузчиков, которые мы изучим в следующей главе. В более мощных микроконтроллерах STM32 область информационного блока также содер-

жит однократно программируемую (One-time Programmable, OTP) память (которая может находиться в диапазоне от 512 до 1024 Байт): это энергонезависимая память, которая может использоваться для хранения соответствующих параметров конфигурации устройства.

Почему такая организация памяти? Прежде чем мы сможем ответить на этот вопрос, нам необходимо ознакомиться с некоторыми фундаментальными понятиями, касающимися технологий Flash-памяти. Не вдаваясь в детали конкретной реализации, существует два основных типа Flash-памяти: NAND и NOR.

2 Таблица взята из справочного руководства RM0360 от ST (http://www.st.com/web/en/resource/technical/document/reference_manual/DM00091010.pdf)

Управление Flash-памятью

552

Таблица 2: Организация Flash-памяти в устройствах F030x4, F030x6, F070x6 и F030x8

Память NAND-Flash предлагает более компактную физическую архитектуру, позволяющую хранить больше ячеек памяти в одной и той же кремниевой области. Память NAND доступна с большей плотностью хранения и с меньшими затратами на бит, чем NORFlash (помните, что в электронике, помимо затрат на исследования и разработки, стоимость изготовления ИС зависит от размера кристалла). Памяти NAND также в 10 раз превышают срок службы NOR-Flash. NAND больше подходит для хранения больших файлов, включая видео и аудио. USB-накопители, SD-карты и MMC-карты относятся к типу NAND.

NAND-Flash не предоставляет шину внешнего адреса с произвольным доступом, поэтому данные должны считываться по блокам, где каждый блок содержит от сотен до тысяч битов, что напоминает своего рода последовательный доступ к данным. Это делает технологию NAND-Flash непригодной для встроенных микроконтроллеров, поскольку большинству микропроцессоров и микроконтроллеров требуется произвольный доступ на уровне байтов.

О технологиях Flash-памяти важно знать, что операция записи на Flash-устройстве любого типа может выполняться только на пустом или стертом устройстве. Поэтому в большинстве случаев операции записи должна предшествовать операция стирания. Хотя операция стирания довольно проста в случае устройств NAND-Flash, в NOR-Flash

Управление Flash-памятью

553

обязательно, чтобы все байты в целевом блоке записывались полностью нулями, прежде чем их можно будет стирать. И наоборот, память NOR-Flash предлагает полный адрес и шины данных для произвольного доступа к любой области памяти (адресуемой для каждого байта). Это делает их пригодными для хранения кода и постоянных данных, поскольку их редко требуется обновлять.

Долговечность памяти NOR составляет от 10000 до 100000 циклов стирания. Операции стирания и записи в памяти NOR-Flash медленнее по сравнению с NAND-Flash. Это означает, что NAND-Flash имеет более быстрое время стирания и записи. Кроме того, NAND имеет меньшие единицы стирания. Поэтому требуется меньше стираний, и это делает их более подходящими для хранения файловых систем. NOR-Flash может считывать данные немного быстрее, чем NAND.

Устройства NOR-Flash делятся на стираемые единицы, также называемые блоками, страницами или секторами. Это разделение необходимо для снижения цен и преодоления физических ограничений. Запись информации в конкретный блок может быть выполнена только в том случае, если этот блок пуст/стерт, как было сказано выше. В большинстве памятей NOR-Flash после цикла стирания отдельная ячейка содержит значение «1», а операция записи позволяет изменить ее значение на «0». Это означает, что ячейка памяти слова устанавливается в 0xFFFF FFFF после стирания. Однако существуют некоторые памяти NOR-Flash, в которых значение ячейки по умолчанию после стирания равно «0», и мы можем установить его в «1» с помощью операции записи.

Разделение Flash-памяти на несколько блоков дает нам косвенное преимущество: мы можем стереть, а затем перепрограммировать только небольшие части Flash-памяти. Это особенно полезно, когда мы используем Flash-память для хранения энергонезависимых параметров конфигурации без использования выделенной и внешней памяти EEPROM3.

Чтобы полностью избежать нежелательных записей в энергонезависимую память (Non Volatile Memory, NVM), Flash-память во всех микроконтроллерах STM32 защищена от записи, и для ее отключения существует специальная последовательность разблокировки: в области байтов конфигурации предусмотрены два специальных ключ-регистра, которые позволяют отключить защиту от записи Flash-памяти, поместив в них определенное значение. В некоторых микроконтроллерах STM32 защита от записи должна быть отдельно отключена для каждого сектора. В зависимости от семейства STM32 доступ к записи является 8-, 16-, 32или 64-разрядным.

Чтобы защитить интеллектуальную собственность, Flash-память может быть защищена от чтения при внешнем доступе через интерфейс отладки (очевидно, доступ к чтению все еще разрешен ядру Cortex-M и контроллерам DMA). Это позволяет избежать сохранения содержимого Flash-памяти другими злонамеренные пользователями для дизассемблирования или копирования его на контрафактных устройствах4. Мы проанализируем эту тему позже.

В зависимости от семейства STM32, Flash-память может выполнять несколько операций программирования/стирания параллельно, что позволяет записывать больше байтов

3Несколько микроконтроллеров STM32 из серии STM32L предоставляют выделенную и настоящую память EEPROM, как и в других недорогих 8-разрядных микроконтроллерах (например, в микроконтроллерах

ATMEL AVR).

4Однако имейте в виду, что существуют компании, способные обходить защиту от чтения с использованием передовых аппаратных технологий (обычно связанных с использованием лазеров, которые перезаписывают биты защиты от чтения внутри области байтов конфигурации – это не дешево, но возможно ;-))