Интерфейс памяти Flash STM32F4 |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Интерфейс памяти Flash обслуживает операции доступа CPU AHB I-Code и D-Code к памяти Flash. В этом интерфейсе реализованы операции стирания и программирования Flash, а также механизмы защиты от чтения и от записи. Интерфейс памяти Flash ускоряет выполнение кода с помощью системы предварительной выборки инструкций (instruction prefetch) и строк кэша. Основные функции интерфейса памяти Flash: • Операции чтения Flash. Рис. 3 и 4 показывают соединения интерфейса памяти Flash внутри системной архитектуры MCU STM32F4. Рис. 3. Соединения интерфейса памяти Flash в системной архитектуре STM32F405xx/07xx и STM32F415xx/17xx. Рис. 4. Соединения интерфейса памяти Flash в системной архитектуре STM32F42xxx и STM32F43xxx. [Flash STM32F405xx/07xx и STM32F415xx/17xx] • Емкость памяти до 1 мегабайта. Память Flash организована следующим образом: – Основной блок памяти поделен на 4 сектора по 16 килобайт, 1 сектор на 64 килобайта и 7 секторов по 128 килобайт. Таблица 5. Организация модуля Flash STM32F40x и STM32F41x.
[Flash STM32F42xxx и STM32F43xxx] • Емкость до 2 мегабайт на 2 банках, с поддержкой функции чтение-при-записи (read-while-write, RWW). Два банка Flash организованы следующим образом: – Для каждого банка основной блок памяти (1 мегабайт) поделен на 4 сектора по 16 килобайт, 1 сектор на 64 килобайта и 7 секторов по 128 килобайт. Два банка Flash на MCU с 1 мегабайтом организованы следующим образом. Функция двух банков разрешается установкой бита опций DB1M. Для достижения структуры двух банков последние 512 килобайт одного банка (секторы [8:11]) реструктурирутся так же, как и первые 512 килобайт. Нумерация секторов с двумя банками отличается от нумерации с одним банком: при одном банке он содержит 12 секторов, в то время как с двумя банками имеется 16 секторов (см. таблицу 7). Для операции стирания должна учитываться правильная нумерация секторов, в зависимости от бита DB1M: – Когда DB1M = 0, операция стирания должна выполняться на номерах секторов по умолчанию. Подробности по организации 1 мегабайт на одном банке и на двух банках см. в таблицах 8 и 9. Таблица 6. Двухбанковая организация 2 мегабайт Flash STM32F42xxx и STM32F43xxx.
Таблица 7. 1 мегабайт Flash на одном и на двух банках STM32F42xxx и STM32F43xxx.
Таблица 8. 1 мегабайт Flash на одном банке STM32F42xxx и STM32F43xxx.
Таблица 9. 1 мегабайт Flash на двух банках (STM32F42xxx и STM32F43xxx).
[Интерфейс чтения] Частота тактов CPU и время чтения Flash. Для корректного чтения данных из Flash должно быть запрограммировано соответствующее значение количества циклов ожидания wait states (LATENCY) в регистре управления доступом к Flash (FLASH_ACR). Это значение зависит от частоты тактов CPU (HCLK) и напряжения питания. Буфер предварительной выборки (prefetch) должен быть запрещен, когда напряжение питания ниже 2.1V. Соответствие между количеством wait states и частотой CPU приведена в таблицах 10 и 11. На STM32F405xx/07xx и STM32F415xx/17xx: - Когда VOS = 0, максимальная частота fHCLK = 144 МГц. На STM32F42xxx и STM32F43xxx: - Когда VOS[1:0] = 0x01, максимальное значение fHCLK 120 МГц. Подробнее о том, как активировать режим over-drive см. раздел 5.1.4: Voltage regulator for STM32F42xxx and STM32F43xxx даташита [1]. Таблица 10. Количество wait states, соответствующее тактовой частоте CPU (HCLK) и напряжению питания для STM32F405xx/07xx и STM32F415xx/17xx.
Таблица 11. Количество wait states, соответствующее тактовой частоте CPU (HCLK) для STM32F42xxx и STM32F43xxx.
После сброса тактовая частота CPU равна 16 МГц (тактирование осуществляется от внутреннего RC-генератора HSI), и в регистре FLASH_ACR сконфигурировано 0 wait state (WS). Настоятельно рекомендуется придерживаться следующей последовательности шагов в программе, чтобы подстроить количество wait states, необходимое для доступа к памяти Flash, в зависимости от частоты CPU. Увеличение частоты CPU: 1. Запрограммируйте новое количество wait states в биты LATENCY регистра FLASH_ACR. Уменьшение частоты CPU: 1. Измените источник тактирования CPU записью бит SW в регистре RCC_CFGR. Примечание: изменение конфигурации тактирования CPU или конфигурации wait state (WS) может не вступить в силу сразу же. Для проверки, что текущая тактовая частота CPU соответствует сконфигурированной тактовой частоте, можно проверить значения коэффициента прескалера AHB и биты статуса источника тактов. Для проверки, что количество запрограммированных WS вступило в действие, можно причитать регистр FLASH_ACR. [ART Accelerator™] Проприетарный адаптивный ускоритель памяти, работающий в режиме реального времени (Adaptive real-time memory accelerator, ART) оптимизирован у STM32 для индустриального стандарта Arm® Cortex®-M4 с FPU. Он балансирует достоинства производительности Arm® Cortex®-M4 с FPU вместе с технологиями памяти Flash, когда обычно от процессора требуется ожидание медленной памяти Flash на более высоких рабочих частотах CPU. Чтобы процессор показывал полную производительность, ART реализует очередь предварительной выборки инструкций (instruction prefetch queue) и кэш ветвлений, что увеличивает выполнение программы из 128-разрядной памяти Flash. По тесту CoreMark с помощью ускорителя ART достигается производительность, эквивалентная выполнению программы из Flash с нулевыми тактами ожидания (0 wait state) при частоте тактов CPU до 180 МГц. Предварительная выборка инструкций. Каждая операция чтения памяти Flash при выполнении программы предоставляет 128 бит либо для четырех 32-битных инструкций, либо восьми 16-битных инструкций. Таким образом, при последовательном выполнении кода требуется как минимум 4 такта CPU для выполнения ранее прочитанной строки инструкций. Может использоваться предварительная выборка на шине кода (prefetch on I-Code bus) для чтения следующе последовательной линии инструкций из памяти Flash, пока текущая инструкция запрашивается CPU. Предварительная выборка инструкций разрешается установкой бита PRFTEN в регистре FLASH_ACR. Эта функция полезна, если нужен хотя бы один wait state для доступа к памяти Flash. Рис. 5a и 5b показывают выполнение следующих друг за другом 32-разрядных инструкций с предварительной выборкой и без предварительной выборки, когда требуется три такта ожидания (3 WS) для доступа к памяти Flash. Рис. 5a. Последовательность выполнения 32-битных инструкций без предварительной выборки инструкций. Рис. 5b. Последовательность выполнения 32-битных инструкций с предварительной выборкой инструкций (prefetch). Примечание к рис. 5a и 5b: ins fetch означает выборка инструкции, Read ins чтение инструкции, Gives ins выдача инструкции. Когда код не последовательный (имеет ветвления или переходы), используемая в настоящий момент инструкция может не присутствовать в строке предварительной выборки. В этом случае происходит промах предварительной выборки, и вставляется необходимая задержка доступа к Flash, равная количеству запрограммированных тактов ожидания (wait states, WS). Кэш памяти инструкций. Чтобы ограничить потери времени из-за переходов, в кэше памяти инструкций можно хранить до 64 строки по 128 бит. Эта функция может быть разрешена установкой бита разрешения кэша инструкций (instruction cache enable, ICEN) в регистре FLASH_ACR. Каждый раз, когда происходит промах (запрашиваемые данные не представлены в текущей используемой инструкции, в предварительно выбранной строке инструкций или в памяти кэша инструкций), прочитанная строка копируется в память кэша инструкций. Если CPU запрашивает данные, которые содержатся в кэше инструкций, то они предоставляются без задержки. Когда весь кэш инструкций заполнен, используется политика "последний использованный" (least recently used, LRU), чтобы определить строку, которая должна быть заменена в кэше инструкций. Эта функция в частности полезна для кода, содержащего циклы. Управление данными. Пулы литералов извлекаются из Flash-памяти по шине D-Code на этапе выполнения конвейера CPU. Следовательно, конвейер CPU приостанавливается, пока не будет предоставлен запрошенный пул литералов. Чтобы ограничить потери времени из-за пулов литералов, операции доступа шины данных AHB D-Code имеют приоритет над операциями доступа через шину инструкций AHB I-Code. Если некоторые пулы литералов используются часто, может быть разрешен кэш данных путем установки бита (DCEN) в регистре FLASH_ACR. Эта функция работает подобно кэшу инструкций, но количество сохраненных данных в кэше ограничено 8 строками по 128 бит. Примечание: данные в секторе конфигурации пользователя не кэшируются. [Стирание и программирование] Для любой операции над памятью программ Flash (стирание или программирование), частота тактов CPU (HCLK) должна быть как минимум 1 МГц. Содержимое памяти Flash не гарантируется, если произошел сброс устройства во время операции с Flash. Любая попытка чтения памяти Flash STM32F4xx, когда она записывается или стирается, приведет к приостановке шины. Операции чтения корректно обрабатываются, когда операция программирования завершена. Это значит, что выборки кода или данных не могут выполняться, когда происходит операция записи/стирания. На STM32F42xxx и STM32F43xxx доступны 2 банка, при этом допускается чтение одного банка, когда на другом банке выполняется операция записи/стирания. Разблокирование регистра управления Flash. После сброса не разрешается запись в регистр управления Flash (FLASH_CR), чтобы защитить Flash от возможных неправильных операций, напримр из-за электрических помех. Для разблокировки регистра FLASH_CR используется следующая последовательность действий: 1. Запись KEY1 = 0x45670123 в регистр ключа Flash (FLASH_KEYR). Любое несоответствие в этой последовательности приведет к ошибке шины и блокировке регистра FLASH_CR до следующего сброса. Регистр FLASH_CR может быть снова заблокирован программой путем установки бита LOCK в регистре FLASH_CR. Примечание: регистр FLASH_CR недоступен в режиме записи, когда установлен бит BSY в регистре FLASH_SR. Любая попытка записи в него, когда бит BSY установлен, приведен к приостановке шины AHB до очистки бита BSY. Параллелизм программирования/стирания. Размер параллелизма конфигурируется полем PSIZE в регистре FLASH_CR. Это количество байт для программирования каждый раз, когда происходит операция записи в память Flash. PSIZE ограничивается напряжением питания и фактом, используется ли внешнее напряжение VPP, или нет. Таким образом, это должно быть корректно сконфигурировано в регистре FLASH_CR перед любой операцией программирования/стирания. Операция стирания Flash может быть выполнена только над сектором, над банком или над всей памятью Flash (mass erase). Время стирания зависит от запрограммированного значения PSIZE. Более подробно про время стирания см. секцию электрических характеристик на используемый микроконтроллер. Таблица 12 предоставляет корректные значения PSIZE. Таблица 12. Параллелизм программирования/стирания.
Примечание: любая операция программирования или стирания, начатая с неправильно запрограммированными настроками диапазона параллелизма/напряжения, может привести к непредсказуемым результатам. Даже если последующая операция чтения показет, что логическое значение было эффективно записано в память, это значение может на самом деле не сохраниться. Для использования VPP на ножку VPP должно быть подано внешнее высокое напряжение (между 8V и 9V). Это напряжение должно поддерживать свой уровень, даже если потребление постоянного тока превысит 10 мА. Рекомендуется ограничить использование VPP начальным программированием на производстве. Напряжение VPP не должно прикладываться больше часа, иначе память Flash может быть повреждена. [Стирание (Erase)] Операция стирания памяти Flash может быть выполнена на уровне сектора, или на всей памяти Flash (Mass Erase). Mass Erase не влияет на сектор OTP или на сектор конфигурации. Стирание сектора. Для стирания сектора выполните следующее: 1. Проверьте, что в настоящий момент не выполняется любая операция с памятью Flash путем проверки бита BSY в регистре FLASH_SR. Если BSY = 0, то Flash не занята, и можно перейти к шагу 2. Стирание банка в STM32F42xxx и STM32F43xxx. Чтобы стереть банк 1 или банк 2, следуйте следующей процедуре: 1. Проверьте, что в настоящий момент не выполняется любая операция с памятью Flash путем проверки бита BSY в регистре FLASH_SR. Mass Erase. Для выполнения полного стирания рекомендуется следующая последовательность действий: 1. Проверьте, что в настоящий момент не выполняется любая операция с памятью Flash путем проверки бита BSY в регистре FLASH_SR. Примечание: если в регистре FLASH_CR установлены оба бита MERx и SER, то будет выполнено полное стирание (mass erase). Если оба бита MERx и SER сброшены и бит STRT установлен, то может произойти непредсказуемое поведение с генерацией любого флага ошибки. Не должно допускаться такое поведение программы. [Программирование] Стандартное программирование. Для программирования памяти Flash последовательность действий следующая: 1. Проверьте, что в настоящий момент не выполняется любая операция с памятью Flash путем проверки бита BSY в регистре FLASH_SR. Примечание: успешная операция записи может произойти без предварительной операции стирания, когда значения бит в записываемых данных меняются с 1 на 0. Запись 1 в ячейку Flash, где уже записан 0, требует операции стирания. Если операция стирания и программирования запрошены одновременно, то сначала выполняется стирание. Ошибки программирования. Не разрешается программировать данные в память Flash, когда они пересекают 128-битную границу строки. В этом случае операция записи не выполняется, и установится флаг ошибки выравнивания (program alignment error, PGAERR) в регистре FLASH_SR. Тип доступа на запись (byte, half-word, word или double word) должен соответствовать выбранному типу параллелизма (x8, x16, x32 или x64). Если это не так, то операция записи не выполняется, и установится флаг ошибки параллелизма программирования (program parallelism error, PGPERR) в регистре FLASH_SR. Если не соблюдается стандартная последовательность програмирования (например, если сделана попытка записи по адресу памяти Flash, когда не установлен бит PG), то операция записи будет оборвана, и установится флаг ошибки последовательности программирования (program sequence error, PGSERR) в регистре FLASH_SR. Программирование и кэширование. Если доступ на запись во Flash касается некоторых данных в кэше данных, то доступ на запись Flash изменит данные в памяти Flash и соответствующие данных в кэше. Если операция стирания в памяти Flash также касается данных, находящихся в кэше данных или кэше инструкций, то необходимо убедиться, что эти данные перезаписаны до обращения к ним во время выполнения кода. Если это нельзя сделать безопасным способом, то рекомендуется сбросить (flush) кэши установкой бит DCRST и ICRST в регистре FLASH_CR. Примечание: кэш инструкций/данных (I/D cache) должен быть сброшен только когда кэш запрещен (I/DCEN = 0). [Read-while-write (RWW)] У MCU STM32F42xxx и STM32F43xxx память Flash поделена на 2 банка, что позволяет выполнять операции чтение-при-записи (read-while-write, RWW). Эта функция позволит выполнить операцию чтения из одного банка, когда одновременно происходит операция стирания или программирования другого банка. Примечание: операции write-while-write (запись-при-записи) не допускаются. Например, нельзя выполнить стирание в одном банке одновременно с операцией программирования в другом банке. Чтение банка 1 при стирании в банке 2. Когда программный код выполняется из банка 1, то можно производить стирание в банке 2 (и наоборот). Для этого выполните следующую процедуру: 1. Проверьте, что не выполняется операция с памятью Flash путем проверки на 0 бита BSY в регистре FLASH_SR (BSY = 1, когда происходит операция стирания или программирования в банке 1 или 2). Чтение из банка 1 во время программирования банка 2. При выполнении кода программы (когда выполняется чтение инструкций по шине I-Code) из банка 1 можно выполнить операцию программирования в банке 2 (и наоборот). Для этого выполните следующую процедуру: 1. Проверьте, что не выполняется операция с памятью Flash путем проверки на 0 бита BSY в регистре FLASH_SR (BSY = 1, когда происходит операция стирания или программирования в банке 1 или 2). Прерывания. Установка бита разрешения окончания операции (end of operation interrupt enable, (EOPIE) в регистре FLASH_CR разрешит генерацию прерывания, когда закончится стирание или программирование Flash, т. е. когда очистится бит занятости (BSY) в регистре FLASH_SR (это означает, что операция завершилась, корректно или нет). В этом случае установится бит завершения операции (end of operation, EOP) в регистре FLASH_SR. Если произошла ошибка во время программирования, стирания или при запросе операции чтения, то в регистре FLASH_SR установится один из следующих флагов ошибки: • PGAERR, PGPERR, PGSERR (флаги ошибки программирования). В этом случае, если установлен бит разрешения прерывания ошибки (error interrupt enable, ERRIE) в регистре FLASH_CR, то будет сгенерировано прерывание, и установится бит ошибки операции (operation error, OPERR) в регистре FLASH_SR. Примечание: при обнаружении нескольких последовательных ошибок (например, в случае транзакции DMA в память Flash), флаги ошибки не могут быть очищены до окончания последовательных запросов на запись. Таблица 13. Запросы прерываний Flash.
[Байты опций STM32F4, однократно программируемые данные] Байты опций (user option bytes) микроконтроллеров STM32F4 конфигурируются пользователем в зависимости от требований приложения. Они настраивают защиту от чтения и записи, загрузку и другие опции MCU. Также имеются однократно программируемые данные OTP. Подробно про назначение байт опций, байт OTP, их программирование см. статью [3]. [Регистры интерфейса Flash] Таблица 19. Карта памяти регистров и значения сброса для STM32F405xx/07xx и STM32F415xx/17xx. Таблица 20. Карта памяти регистров и значения сброса для STM32F42xxx и STM32F43xxx. Регистр управления доступом к Flash FLASH_ACR используется для разрешения/запрета функции ускорения и управления доступом к Flash в соответствии с частотой тактов CPU. Смещение адреса: 0x00.
Биты 31:11 зарезервированы, и должны сохраняться в состоянии сброса (все нули). DCRST (бит 12): Data cache reset, сброс кэша данных. Этот бит может быть записан только кода D-кэш запрещен (DCEN = 0). ICRST (бит 11): Instruction cache reset, сброс кэша инструкций. Этот бит может быть записан только кода I-кэш запрещен (ICEN = 0). DCEN (бит 10): Data cache enable, разрешение кэша данных. ICEN (бит 9): Instruction cache enable, разрешение кэша инструкций. PRFTEN (бит 8): Prefetch enable, разрешение предварительной выборки инструкций. Биты 7:3 зарезервированы, и должны сохраняться в состоянии сброса (все нули). LATENCY[2:0] (биты 2:0): Latency, латентность. Эти биты представляют соотношение между периодом тактов CPU и временем доступа к памяти Flash (количество циклов ожидания wait state). Регистр управления доступом к Flash FLASH_ACR используется для разрешения/запрета функции ускорения и управления доступом к Flash в соответствии с частотой тактов CPU. Смещение адреса: 0x00.
Биты 31:11 зарезервированы, и должны сохраняться в состоянии сброса (все нули). DCRST (бит 12): Data cache reset, сброс кэша данных. Этот бит может быть записан только кода D-кэш запрещен (DCEN = 0). ICRST (бит 11): Instruction cache reset, сброс кэша инструкций. Этот бит может быть записан только кода I-кэш запрещен (ICEN = 0). DCEN (бит 10): Data cache enable, разрешение кэша данных. ICEN (бит 9): Instruction cache enable, разрешение кэша инструкций. PRFTEN (бит 8): Prefetch enable, разрешение предварительной выборки инструкций. Биты 7:4 зарезервированы, и должны сохраняться в состоянии сброса (все нули). LATENCY[3:0] (биты 3:0): Latency, латентность. Эти биты представляют соотношение между периодом тактов CPU и временем доступа к памяти Flash (количество циклов ожидания wait state). Регистр ключа Flash используется для разрешения доступа к регистру управления Flash, чтобы можно было выполнять операции программирования и стирания. Смещение адреса: 0x04.
FKEYR[31:0]: FPEC key. Следующие значения должны быть последовательно запрограммированы в этот регистр, чтобы разблокировать доступ к регистру FLASH_CR: a) KEY1 = 0x45670123 Регистр ключа опций Flash используется для разрешения операций программирования и стирания сектора конфигурации пользователя (байты опций). Смещение адреса: 0x08.
OPTKEYR[31:0]: OPTKEYR key. Следующие значения должны быть последовательно запрограммированы в этот регистр, чтобы разблокировать доступ сектору опций: a) OPTKEY1 = 0x08192A3B Регистр состояния Flash предоставляет информацию о том, как происходят операции программирования и стирания. Смещение адреса: 0x0C.
Биты 31:17 зарезервированы, и должны сохраняться в состоянии сброса (все нули). BSY (бит 16): Busy, занятость Flash. Этот бит показывает, осуществляется ли в настоящий момент внутренняя операция с памятью Flash. BSY устанавливается в начале операции, и очищается, когда операция завершилась, или когда произошла ошибка. Биты 15:8 зарезервированы, и должны сохраняться в состоянии сброса (все нули). PGSERR (бит 7): Programming sequence error, ошибка последовательности программирования. Установится аппаратно, когда код попытался осуществить запись во Flash, в то время как регистр управления не был корректно сконфигурирован. Бит PGSERR очищается записью в него лог. 1. PGPERR (бит 6): Programming parallelism error, ошибка параллелизма программирования. Установится аппаратно, когда размер доступа (byte, half-word, word, double word) в последовательности программирования не соответствует полю конфигурации параллелизма PSIZE (x8, x16, x32, x64). Бит PGPERR очищается записью в него лог. 1. PGAERR (бит 5): Programming alignment error, ошибка выравнивания программирования. Установится аппаратно, когда программируемые данные не могут содержаться в пределах одного 128-битного блока строки Flash. Бит PGAERR очищается записью в него лог. 1. WRPERR (бит 4): Write protection error, ошибка защиты от записи. Установится аппаратно, когда адрес для стирания/программирования принадлежит защищенной области памяти Flash. Бит WRPERR очищается записью в него лог. 1. Биты 3:2 зарезервированы, и должны сохраняться в состоянии сброса (все нули). OPERR (бит 1): Operation error, ошибка операции. Установится аппаратно, когда обнаружен запрос операции над Flash (programming/erase/read), и этот запрос не может быть запущен из-за ошибки параллелизма, выравнивания или защиты от записи. Этот бит установится только если разрешены прерывания ошибки (ERRIE = 1). EOP (бит 0): End of operation, завершение операции. Установится аппаратно, когда одна операция (или несколько операций) над памятью Flash (program/erase) завершилась успешно. Этот бит установится только если разрешены прерывания завершения операции (EOPIE = 1). Бит EOP очищается записью в него лог. 1. Регистр состояния Flash предоставляет информацию о том, как происходят операции программирования и стирания. Смещение адреса: 0x0C.
Биты 31:17 зарезервированы, и должны сохраняться в состоянии сброса (все нули). BSY (бит 16): Busy, занятость Flash. Этот бит показывает, осуществляется ли в настоящий момент внутренняя операция с памятью Flash. BSY устанавливается в начале операции, и очищается, когда операция завершилась, или когда произошла ошибка. Биты 15:9 зарезервированы, и должны сохраняться в состоянии сброса (все нули). RDERR (бит 8): Proprietary readout protection (PCROP) error, ошибка защиты от чтения проприетарного кода. Установится аппаратно, когда выполнен доступ на чтение по D-шине, и адрес доступа принадлежит сектору Flash, на который применена защита проприетарного кода. Бит RDERR очищается записью в него лог. 1. PGSERR (бит 7): Programming sequence error, ошибка последовательности программирования. Установится аппаратно, когда код попытался осуществить запись во Flash, в то время как регистр управления не был корректно сконфигурирован. Бит PGSERR очищается записью в него лог. 1. PGPERR (бит 6): Programming parallelism error, ошибка параллелизма программирования. Установится аппаратно, когда размер доступа (byte, half-word, word, double word) в последовательности программирования не соответствует полю конфигурации параллелизма PSIZE (x8, x16, x32, x64). Бит PGPERR очищается записью в него лог. 1. PGAERR (бит 5): Programming alignment error, ошибка выравнивания программирования. Установится аппаратно, когда программируемые данные не могут содержаться в пределах одного 128-битного блока строки Flash. Бит PGAERR очищается записью в него лог. 1. WRPERR (бит 4): Write protection error, ошибка защиты от записи. Установится аппаратно, когда адрес для стирания/программирования принадлежит защищенной области памяти Flash. Бит WRPERR очищается записью в него лог. 1. Биты 3:2 зарезервированы, и должны сохраняться в состоянии сброса (все нули). OPERR (бит 1): Operation error, ошибка операции. Установится аппаратно, когда обнаружен запрос операции над Flash (programming/erase/read), и этот запрос не может быть запущен из-за ошибки параллелизма, выравнивания или защиты от записи. Этот бит установится только если разрешены прерывания ошибки (ERRIE = 1). EOP (бит 0): End of operation, завершение операции. Установится аппаратно, когда одна операция (или несколько операций) над памятью Flash (program/erase) завершилась успешно. Этот бит установится только если разрешены прерывания завершения операции (EOPIE = 1). Бит EOP очищается записью в него лог. 1. Регистр управления Flash FLASH_CR используется для конфигурирования и запуска операции с памятью Flash. Смещение адреса: 0x10.
LOCK (бит 31): Lock, блокировка. Записывается только в лог. 1. Когда установлен, этот бит показывает, что регистр FLASH_CR заблокирован. Бит LOCK очищается аппаратно после детектирования специальной последовательности действий по разблокировке. После неудачной операции разблокировки этот бит останется установленным до следующего сброса (т. е. FLASH_CR нельзя разблокировать, пока не произойдет сброс). Биты 30:26 зарезервированы, и должны сохраняться в состоянии сброса (все нули). ERRIE (бит 25): Error interrupt enable, разрешение прерывания ошибки. Этот бит разрешает генерацию прерывания, когда установится в 1 бит OPERR в регистре FLASH_SR. EOPIE (бит 24): End of operation interrupt enable, разрешение прерывания по окончанию операции. Этот бит разрешает генерацию прерывания, когда перейдет в 1 бит EOP регистра FLASH_SR. Биты 23:17 зарезервированы, и должны сохраняться в состоянии сброса (все нули). STRT (бит 16): Start. Будучи установленным, этот бит запускает операцию стирания. Бит STRT устанавливается только программно, и очистится в момент очистки бита BSY. Биты 15:19 зарезервированы, и должны сохраняться в состоянии сброса (все нули). PSIZE[1:0] (биты 9:8): Program size, размер программируемой порции данных. Эти биты выбирают параллелизм операции записи. Бит 7 зарезервирован, и должен сохраняться в состоянии сброса (0). SNB[3:0] (биты 6:3): Sector number, номер сектора. Это поле бит выбирает номер сектора для стирания. Другие значения не допускаются. MER (бит 2): Mass Erase, полная очистка Flash. Запись лог. 1 в этот бит активирует стирание всех секторов пользователя (кроме сектора конфигурации и байт OTP). SER (бит 1): Sector Erase, стирание сектора. Запись лог. 1 в этот бит активирует стирание выбранного сектора. PG (бит 0): Programming, программирование. Запись лог. 1 в этот бит активирует программирование Flash. Регистр управления Flash FLASH_CR используется для конфигурирования и запуска операции с памятью Flash. Смещение адреса: 0x10.
LOCK (бит 31): Lock, блокировка. Записывается только в лог. 1. Когда установлен, этот бит показывает, что регистр FLASH_CR заблокирован. Бит LOCK очищается аппаратно после детектирования специальной последовательности действий по разблокировке. После неудачной операции разблокировки этот бит останется установленным до следующего сброса (т. е. FLASH_CR нельзя разблокировать, пока не произойдет сброс). Биты 30:26 зарезервированы, и должны сохраняться в состоянии сброса (все нули). ERRIE (бит 25): Error interrupt enable, разрешение прерывания ошибки. Этот бит разрешает генерацию прерывания, когда установится в 1 бит OPERR в регистре FLASH_SR. EOPIE (бит 24): End of operation interrupt enable, разрешение прерывания по окончанию операции. Этот бит разрешает генерацию прерывания, когда перейдет в 1 бит EOP регистра FLASH_SR. Биты 23:17 зарезервированы, и должны сохраняться в состоянии сброса (все нули). STRT (бит 16): Start. Будучи установленным, этот бит запускает операцию стирания. Бит STRT устанавливается только программно, и очистится в момент очистки бита BSY. MER1 (бит 15): Mass Erase of bank 2 sectors, полное стирание секторов пользователя банка 2 (сектора от 12 до 23). Биты 14:19 зарезервированы, и должны сохраняться в состоянии сброса (все нули). PSIZE[1:0] (биты 9:8): Program size, размер программируемой порции данных. Эти биты выбирают параллелизм операции записи. SNB[4:0] (биты 7:3): Sector number, номер сектора. Это поле бит выбирает номер сектора для стирания. MER (бит 2): Mass Erase of bank 1 sectors, полная очистка секторов банка 1 Flash (сектора от 0 до 11). SER (бит 1): Sector Erase, стирание сектора. Запись лог. 1 в этот бит активирует стирание выбранного сектора. PG (бит 0): Programming, программирование. Запись лог. 1 в этот бит активирует программирование Flash. Регистр управления опциями FLASH_OPTCR используется для модификации байт опций пользователя. Смещение адреса: 0x14.
Биты 31:28 зарезервированы, и должны сохраняться в состоянии сброса (все нули). nWRP[11:0] (биты 27:16): Not write protect, нет защиты от записи. Эти биты после сброса содержат значение защиты от записи байт опций. Они могут быть записаны для программирования нового состояния защиты в памяти Flash. RDP[7:0] (биты 15:8): Read protect, защита от чтения. Эти биты после сброса содержат состояние уровня защиты от чтения. Биты RDP могут быть записаны для программирования нового уровня защиты памяти Flash. USER[2:0] (биты 7:5): User option bytes, байты опций пользователя. Эти биты после сброса содержат значение байта опций пользователя. Биты USER могут быть записаны для программирования нового значения в памяти Flash. Примечание: когда меняется режим WDG (сторожевой таймер) с аппаратного на программный, или с программного на аппаратный, требуется сброс системы, чтобы изменение вступило в силу. Бит 4 зарезервирован, и должен сохраняться в состоянии сброса (0). Этот бит всегда считывается как 0. BOR_LEV[1:0] (биты 3:2): BOR reset Level, уровень детектора качества питания, при котором генерируется сброс (Brown-Out Detector). Эти биты содержат порог напряжения, по которому активируется/снимается сигнал сброса. Биты BOR_LEV могут быть запрограммированы, чтобы установить новый уровень BOR. По умолчанию BOR выключен. Когда напряжение питания (VDD) падает ниже порога BOR, генерируется сброс микроконтроллера. Примечание: подробную информацию по характеристикам BOR см. секцию "Electrical characteristics" даташита на используемый MCU. OPTSTRT (бит 1): Option start, запуск изменения опции. Этот бит, будучи установленным, запускает операцию над опцией пользователя. Бит OPTSTRT устанавливается только программно, и очищается, когда очищается бит BSY. OPTLOCK (бит 0): Option lock, блокировка опции. Записывается только в лог. 1. Когда этот бит установлен, то это показывает, что регистр FLASH_OPTCR заблокирован. Этот бит очищается аппаратно после того, как успешно была проведена операция разблокировки. Если операция разблокировки была неудачной, то бит OPTLOCK останется установленным до последующего сброса. Регистр управления опциями FLASH_OPTCR используется для модификации байт опций пользователя. Смещение адреса: 0x14.
SPRMOD (бит 31): Selection of protection mode for nWPRi bits, выбор режима защиты для бит nWPRi. DB1M (бит 30): Dual-bank on 1 Mbyte Flash memory devices, включение режима двух банков для MCU, у которых 1 мегабайт памяти Flash. Примечание: если бит DB1M установлен, и выполняется операция стирания на банке 2, в то время как выбран номер сектора по умолчанию (например, сконфигурирован сектор 8 вместо сектора 12), то операция стирания сектора на банке 2 не выполнится. Биты 29:28 зарезервированы, и должны сохраняться в состоянии сброса (все нули). nWRP[11:0] (биты 27:16): Not write protect, нет защиты от записи. Эти биты после сброса содержат значение защиты от записи байт опций и значение защиты PCROP. Они могут быть записаны для программирования нового состояния защиты от записи или защиты PCROP в памяти Flash. Если бит SPRMOD сброшен: Если бит SPRMOD установлен: RDP[7:0] (биты 15:8): Read protect, защита от чтения. Эти биты после сброса содержат состояние уровня защиты от чтения. Биты RDP могут быть записаны для программирования нового уровня защиты памяти Flash. USER[2:0] (биты 7:5): User option bytes, байты опций пользователя. Эти биты после сброса содержат значение байта опций пользователя. Биты USER могут быть записаны для программирования нового значения в памяти Flash. Примечание: когда меняется режим WDG (сторожевой таймер) с аппаратного на программный, или с программного на аппаратный, требуется сброс системы, чтобы изменение вступило в силу. BFB2 (бит 4): Dual-bank Boot option byte, байт опции загрузки двух банков. Примечание: для STM32F42xx и STM32F43xx с размером памяти Flash 1 мегабайт этот бит опций должен быть очищен, когда DB1M = 0. BOR_LEV[1:0] (биты 3:2): BOR reset Level, уровень детектора качества питания, при котором генерируется сброс (Brown-Out Detector). Эти биты содержат порог напряжения, по которому активируется/снимается сигнал сброса. Биты BOR_LEV могут быть запрограммированы, чтобы установить новый уровень BOR. По умолчанию BOR выключен. Когда напряжение питания (VDD) падает ниже порога BOR, генерируется сброс микроконтроллера. Примечание: подробную информацию по характеристикам BOR см. секцию "Electrical characteristics" даташита на используемый MCU. OPTSTRT (бит 1): Option start, запуск изменения опции. Этот бит, будучи установленным, запускает операцию над опцией пользователя. Бит OPTSTRT устанавливается только программно, и очищается, когда очищается бит BSY. OPTLOCK (бит 0): Option lock, блокировка опции. Записывается только в лог. 1. Когда этот бит установлен, то это показывает, что регистр FLASH_OPTCR заблокирован. Этот бит очищается аппаратно после того, как успешно была проведена операция разблокировки. Если операция разблокировки была неудачной, то бит OPTLOCK останется установленным до последующего сброса. Этот регистр доступен только у STM32F42xxx и STM32F43xxx. Регистр FLASH_OPTCR1 используется при модификации байт опций пользователя для банка 2. Смещение адреса: 0x18. Доступ: без тактов ожидания, когда нет операции над памятью Flash. Доступ возможен как к слову, половине слова или байту. Биты 31:28 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
nWRP[11:0] (биты 27:16): Not write protect, нет защиты от записи. Эти биты после сброса содержат значение защиты от записи байт опций и значение защиты PCROP. Они могут быть записаны для программирования нового состояния защиты от записи или защиты PCROP в памяти Flash. Если бит SPRMOD сброшен (состояние по умолчанию): Если бит SPRMOD установлен: Биты 15:0 зарезервированы, и должны сохраняться в состоянии сброса (все нули). [Ссылки] 1. RM0090Embedded Flash memory interface site:st.com. |