Интерфейс памяти Flash обслуживает операции доступа CPU AHB I-Code и D-Code к памяти Flash. В этом интерфейсе реализованы операции стирания и программирования Flash, а также механизмы защиты от чтения и от записи.
Интерфейс памяти Flash ускоряет выполнение кода с помощью системы предварительной выборки инструкций (instruction prefetch) и строк кэша.
Основные функции интерфейса памяти Flash:
• Операции чтения Flash. • Операции программирования/стирания Flash. • Варианты защит от чтения и записи. • Предварительная выборка I-Code. • 64 строк кэша 128 бит на I-Code. • 8 строк кэша 128 бит на D-Code.
Рис. 3 и 4 показывают соединения интерфейса памяти Flash внутри системной архитектуры MCU STM32F4.
Рис. 3. Соединения интерфейса памяти Flash в системной архитектуре STM32F405xx/07xx и STM32F415xx/17xx.
Рис. 4. Соединения интерфейса памяти Flash в системной архитектуре STM32F42xxx и STM32F43xxx.
[Flash STM32F405xx/07xx и STM32F415xx/17xx]
• Емкость памяти до 1 мегабайта. • 128-разрядное чтение данных. • Запись байта (8 бит), половины слова (16 бит), слова (32 бита) и двойного слова (64 бита). • Стирание сектора и полное стирание (mass erase). • Режимы пониженного энергопотребления, подробности см. в секции Power control (PWR) руководства.
Память Flash организована следующим образом:
– Основной блок памяти поделен на 4 сектора по 16 килобайт, 1 сектор на 64 килобайта и 7 секторов по 128 килобайт. – Системная память, из которой MCU загружается в режиме загрузки System memory boot. – 512 однократно программируемых байт OTP (one-time programmable) для пользовательских данных. Область OTP содержит 16 дополнительных байт, используемых для блокировки соответствующей области данных OTP. – Байты опций для конфигурирования защит от чтения и от записи, уровень BOR, watchdog software/hardware и сброса, когда MCU находится в режиме Standby или Stop.
Таблица 5. Организация модуля Flash STM32F40x и STM32F41x.
Область памяти
Имя
Диапазон адресов
Размер
Основная память
Сектор 0
0x08000000 - 0x08003FFF
16 килобайт
Сектор 1
0x08004000 - 0x08007FFF
Сектор 2
0x08008000 - 0x0800BFFF
Сектор 3
0x0800C000 - 0x0800FFFF
Сектор 4
0x08010000 - 0x0801FFFF
64 килобайта
Сектор 5
0x08020000 - 0x0803FFFF
128 килобайт
Сектор 6
0x08040000 - 0x0805FFFF
128 килобайт
. . .
. . .
. . .
Сектор 11
0x080E0000 - 0x080FFFFF
128 килобайт
Системная память
0x1FFF0000 - 0x1FFF77FF
30 килобайт
OTP
0x1FFF7800 - 0x1FFF7A0F
528 байт
Байты опций
0x1FFFC000 - 0x1FFFC00F
16 байт
[Flash STM32F42xxx и STM32F43xxx]
• Емкость до 2 мегабайт на 2 банках, с поддержкой функции чтение-при-записи (read-while-write, RWW). • 128-разрядное чтение данных. • Запись байта (8 бит), половины слова (16 бит), слова (32 бита) и двойного слова (64 бита). • Операции стирания сектора, банка и полного стирания (обоих банков).
Два банка Flash организованы следующим образом:
– Для каждого банка основной блок памяти (1 мегабайт) поделен на 4 сектора по 16 килобайт, 1 сектор на 64 килобайта и 7 секторов по 128 килобайт. – Системная память, откуда MCU загружается в режиме System memory boot. – 512 байт OTP для пользовательских данных. Область OTP содержит 16 дополнительных байт, используемых для блокировки соответствующей области данных OTP. – Байты опций для конфигурирования защит от чтения и от записи, уровня BOR, watchdog, режима dual bank boot, функции dual bank, software/hardware и сброса, когда MCU находится в режиме Standby или Stop.
Два банка Flash на MCU с 1 мегабайтом организованы следующим образом. Функция двух банков разрешается установкой бита опций DB1M. Для достижения структуры двух банков последние 512 килобайт одного банка (секторы [8:11]) реструктурирутся так же, как и первые 512 килобайт. Нумерация секторов с двумя банками отличается от нумерации с одним банком: при одном банке он содержит 12 секторов, в то время как с двумя банками имеется 16 секторов (см. таблицу 7).
Для операции стирания должна учитываться правильная нумерация секторов, в зависимости от бита DB1M:
– Когда DB1M = 0, операция стирания должна выполняться на номерах секторов по умолчанию. – Когда DB1M = 1, для выполнения операции стирания банка 2 должен быть запрограммирован номер сектора (от 12 до 19). См. регистр FLASH_CR для конфигурации поля номера сектора SNB (Sector number).
Подробности по организации 1 мегабайт на одном банке и на двух банках см. в таблицах 8 и 9.
Таблица 6. Двухбанковая организация 2 мегабайт Flash STM32F42xxx и STM32F43xxx.
Область памяти
Банк
Имя
Диапазон адресов
Размер
Основная память
Банк 1
Сектор 0
0x08000000 - 0x08003FFF
16 килобайт
Сектор 1
0x08004000 - 0x08007FFF
16 килобайт
Сектор 2
0x08008000 - 0x0800BFFF
16 килобайт
Сектор 3
0x0800C000 - 0x0800FFFF
16 килобайт
Сектор 4
0x08010000 - 0x0801FFFF
64 килобайта
Сектор 5
0x08020000 - 0x0803FFFF
128 килобайт
Сектор 6
0x08040000 - 0x0805FFFF
128 килобайт
. . .
. . .
. . .
Сектор 11
0x080E0000 - 0x080FFFFF
128 килобайт
Банк 2
Сектор 12
0x08100000 - 0x08103FFF
16 килобайт
Сектор 13
0x08104000 - 0x08107FFF
16 килобайт
Сектор 14
0x08108000 - 0x0810BFFF
16 килобайт
Сектор 15
0x0810C000 - 0x0810FFFF
16 килобайт
Сектор 16
0x08110000 - 0x0811FFFF
64 килобайта
Сектор 17
0x08120000 - 0x0813FFFF
128 килобайт
Сектор 18
0x08140000 - 0x0815FFFF
128 килобайт
. . .
. . .
. . .
Сектор 23
0x081E0000 - 0x081FFFFF
128 килобайт
Системная память
0x1FFF0000 - 0x1FFF77FF
30 килобайт
OTP
0x1FFF7800 - 0x1FFF7A0F
528 байт
Байты опций
Банк 1
0x1FFFC000 - 0x1FFFC00F
16 байт
Банк 2
0x1FFEC000 - 0x1FFEC00F
16 байт
Таблица 7. 1 мегабайт Flash на одном и на двух банках STM32F42xxx и STM32F43xxx.
1 мегабайт в одном банке Flash (по умолчанию)
1 мегабайт в двух банках Flash
DB1M = 0
DB1M = 1
Основная память
№ сектора
Размер
Основная память
№ сектора
Размер
1 мегабайт
Сектор 0
16 килобайт
Банк 1, 512 килобайт
Сектор 0
16 килобайт
Сектор 1
16 килобайт
Сектор 1
16 килобайт
Сектор 2
16 килобайт
Сектор 2
16 килобайт
Сектор 3
16 килобайт
Сектор 3
16 килобайт
Сектор 4
64 килобайта
Сектор 4
64 килобайта
Сектор 5
128 килобайт
Сектор 5
128 килобайт
Сектор 6
128 килобайт
Сектор 6
128 килобайт
Сектор 7
128 килобайт
Сектор 7
128 килобайт
Сектор 8
128 килобайт
Банк 2, 512 килобайт
Сектор 12
16 килобайт
Сектор 9
128 килобайт
Сектор 13
16 килобайт
Сектор 10
128 килобайт
Сектор 14
16 килобайт
Сектор 11
128 килобайт
Сектор 15
16 килобайт
-
-
Сектор 16
64 килобайта
-
-
Сектор 17
128 килобайт
-
-
Сектор 18
128 килобайт
-
-
Сектор 19
128 килобайт
Таблица 8. 1 мегабайт Flash на одном банке STM32F42xxx и STM32F43xxx.
Область памяти
Банк
Имя
Диапазон адресов
Размер
Основная память
Один банк
Сектор 0
0x08000000 - 0x08003FFF
16 килобайт
Сектор 1
0x08004000 - 0x08007FFF
16 килобайт
Сектор 2
0x08008000 - 0x0800BFFF
16 килобайт
Сектор 3
0x0800C000 - 0x0800FFFF
16 килобайт
Сектор 4
0x08010000 - 0x0801FFFF
64 килобайта
Сектор 5
0x08020000 - 0x0803FFFF
128 килобайт
Сектор 6
0x08040000 - 0x0805FFFF
128 килобайт
Сектор 7
0x08060000 - 0x0807FFFF
128 килобайт
Сектор 8
0x08080000 - 0x0809FFFF
128 килобайт
Сектор 9
0x080A0000 - 0x080BFFFF
128 килобайт
Сектор 10
0x080C0000 - 0x080DFFFF
128 килобайт
Сектор 11
0x080E0000 - 0x080FFFFF
128 килобайт
Системная память
0x1FFF0000 - 0x1FFF77FF
30 килобайт
OTP
0x1FFF7800 - 0x1FFF7A0F
528 байт
Байты опций
0x1FFFC000 - 0x1FFFC00F
16 байт
0x1FFEC000 - 0x1FFEC00F
16 байт
Таблица 9. 1 мегабайт Flash на двух банках (STM32F42xxx и STM32F43xxx).
Область памяти
Банк
Имя
Диапазон адресов
Размер
Основная память
Банк 1
Сектор 0
0x08000000 - 0x08003FFF
16 килобайт
Сектор 1
0x08004000 - 0x08007FFF
16 килобайт
Сектор 2
0x08008000 - 0x0800BFFF
16 килобайт
Сектор 3
0x0800C000 - 0x0800FFFF
16 килобайт
Сектор 4
0x08010000 - 0x0801FFFF
64 килобайта
Сектор 5
0x08020000 - 0x0803FFFF
128 килобайт
Сектор 6
0x08040000 - 0x0805FFFF
128 килобайт
Сектор 7
0x08060000 - 0x0807FFFF
128 килобайт
Банк 2
Сектор 12
0x08100000 - 0x08103FFF
16 килобайт
Сектор 13
0x08104000 - 0x08107FFF
16 килобайт
Сектор 14
0x08108000 - 0x0810BFFF
16 килобайт
Сектор 15
0x0810C000 - 0x0810FFFF
16 килобайт
Сектор 16
0x08110000 - 0x0811FFFF
64 килобайта
Сектор 17
0x08120000 - 0x0813FFFF
128 килобайт
Сектор 18
0x08140000 - 0x0815FFFF
128 килобайт
Сектор 19
0x080E0000 - 0x080FFFFF
128 килобайт
Системная память
0x1FFF0000 - 0x1FFF77FF
30 килобайт
OTP
0x1FFF7800 - 0x1FFF7A0F
528 байт
Байты опций
Банк 1
0x1FFFC000 - 0x1FFFC00F
16 байт
Банк 2
0x1FFEC000 - 0x1FFEC00F
16 байт
[Интерфейс чтения]
Частота тактов 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 МГц. - Когда VOS = 1, максимальная частота fHCLK = 168 МГц.
На STM32F42xxx и STM32F43xxx:
- Когда VOS[1:0] = 0x01, максимальное значение fHCLK 120 МГц. - Когда VOS[1:0] = 0x10, максимальное значение fHCLK 144 МГц. Максимальная частота может быть увеличена до 168 МГц активацией режима over-drive. - Когда VOS[1:0] = 0x11, максимальное значение fHCLK 168 МГц. Максимальная частота может быть увеличена до 180 МГц активацией режима over-drive. - Режим over-drive недоступен для VDD в диапазоне от 1.8V до 2.1 V.
Подробнее о том, как активировать режим over-drive см. раздел 5.1.4: Voltage regulator for STM32F42xxx and STM32F43xxx даташита [1].
Таблица 10. Количество wait states, соответствующее тактовой частоте CPU (HCLK) и напряжению питания для STM32F405xx/07xx и STM32F415xx/17xx.
Количество тактов ожидания WS (LATENCY)
HCLK (МГц)
2.7V - 3.6V
2.4V - 2.7V
2.1V - 2.4V
1.8V - 2.1V Prefetch OFF
0 WS (1 такт CPU)
0 < HCLK ≤ 30
0 < HCLK ≤ 24
0 < HCLK ≤ 22
0 < HCLK ≤ 20
1 WS (2 тактов CPU)
30 < HCLK ≤ 60
24 < HCLK ≤ 48
22 < HCLK ≤ 44
20 < HCLK ≤ 40
2 WS (3 такта CPU)
60 < HCLK ≤ 90
48 < HCLK ≤ 72
44 < HCLK ≤ 66
40 < HCLK ≤ 60
3 WS (4 такта CPU)
90 < HCLK ≤ 120
72 < HCLK ≤ 96
66 < HCLK ≤ 88
60 < HCLK ≤ 80
4 WS (5 тактов CPU)
120 < HCLK ≤ 150
96 < HCLK ≤ 120
88 < HCLK ≤ 110
80 < HCLK ≤ 100
5 WS (6 тактов CPU)
150 < HCLK ≤ 168
120 < HCLK ≤ 144
110 < HCLK ≤ 132
100 < HCLK ≤ 120
6 WS (7 татов CPU)
144 < HCLK ≤ 168
132 < HCLK ≤ 154
120 < HCLK ≤ 140
7 WS (8 тактов CPU)
154 < HCLK ≤ 168
140 < HCLK ≤ 160
Таблица 11. Количество wait states, соответствующее тактовой частоте CPU (HCLK) для STM32F42xxx и STM32F43xxx.
Количество тактов ожидания WS (LATENCY)
HCLK (МГц)
2.7V - 3.6V
2.4V - 2.7V
2.1V - 2.4V
1.8V - 2.1V Prefetch OFF
0 WS (1 такт CPU)
0 < HCLK ≤ 30
0 < HCLK ≤ 24
0 < HCLK ≤ 22
0 < HCLK ≤ 20
1 WS (2 тактов CPU)
30 < HCLK ≤ 60
24 < HCLK ≤ 48
22 < HCLK ≤ 44
20 < HCLK ≤ 40
2 WS (3 такта CPU)
60 < HCLK ≤ 90
48 < HCLK ≤ 72
44 < HCLK ≤ 66
40 < HCLK ≤ 60
3 WS (4 такта CPU)
90 < HCLK ≤ 120
72 < HCLK ≤ 96
66 < HCLK ≤ 88
60 < HCLK ≤ 80
4 WS (5 тактов CPU)
120 < HCLK ≤ 150
96 < HCLK ≤ 120
88 < HCLK ≤ 110
80 < HCLK ≤ 100
5 WS (6 тактов CPU)
150 < HCLK ≤ 180
120 < HCLK ≤ 144
110 < HCLK ≤ 132
100 < HCLK ≤ 120
6 WS (7 татов CPU)
144 < HCLK ≤ 168
132 < HCLK ≤ 154
120 < HCLK ≤ 140
7 WS (8 тактов CPU)
168
154 < HCLK ≤ 176
140 < HCLK ≤ 160
8 WS (9 тактов CPU)
176 < HCLK ≤ 180
160 < HCLK ≤ 168
После сброса тактовая частота CPU равна 16 МГц (тактирование осуществляется от внутреннего RC-генератора HSI), и в регистре FLASH_ACR сконфигурировано 0 wait state (WS).
Настоятельно рекомендуется придерживаться следующей последовательности шагов в программе, чтобы подстроить количество wait states, необходимое для доступа к памяти Flash, в зависимости от частоты CPU.
Увеличение частоты CPU:
1. Запрограммируйте новое количество wait states в биты LATENCY регистра FLASH_ACR. 2. Проверьте, что новое количество wait states вступило в действие для доступа к памяти Flash, путем чтения регистра FLASH_ACR. 3. Измените источник тактирования CPU записью бит SW в регистре RCC_CFGR. 4. Если необходимо, измените прескалер тактов CPU записью бит HPRE в регистре RCC_CFGR. 5. Проверьте, что новый источник тактов CPU и/или новое значение прескалера тактов CPU вступили в действие путем соответственно чтения статуса источника тактирования (биты SWS) и/или значения прескалера AHB (биты HPRE) в регистре RCC_CFGR.
Уменьшение частоты CPU:
1. Измените источник тактирования CPU записью бит SW в регистре RCC_CFGR. 2. Если необходимо, измените прескалер тактов CPU записью бит HPRE в регистре RCC_CFGR. 3. Проверьте, что новый источник тактов CPU и/или новое значение прескалера тактов CPU вступили в действие путем соответственно чтения статуса источника тактирования (биты SWS) и/или значения прескалера AHB (биты HPRE) в регистре RCC_CFGR. 4. Запрограммируйте новое количество wait states в биты LATENCY регистра FLASH_ACR. 5. Проверьте, что новое количество wait states вступило в действие для доступа к памяти Flash, путем чтения регистра FLASH_ACR.
Примечание: изменение конфигурации тактирования 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). 2. Запись KEY2 = 0xCDEF89AB в регистр ключа 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.
Примечание: любая операция программирования или стирания, начатая с неправильно запрограммированными настроками диапазона параллелизма/напряжения, может привести к непредсказуемым результатам. Даже если последующая операция чтения показет, что логическое значение было эффективно записано в память, это значение может на самом деле не сохраниться. Для использования 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. 2. Установите бит SER, и выберите один из 12 секторов для STM32F405xx/07xx и STM32F415xx/17xx, и один из 24 секторов для STM32F42xxx и STM32F43xxx в основном блоке памяти, который нужно стереть. Номер сектора выбирается полем SNB в регистре FLASH_CR. 3. Установите бит STRT в регистре FLASH_CR. 4. Подождите, пока не очистится бит BSY. BSY = 0 означает завершение операции стирания.
Стирание банка в STM32F42xxx и STM32F43xxx. Чтобы стереть банк 1 или банк 2, следуйте следующей процедуре:
1. Проверьте, что в настоящий момент не выполняется любая операция с памятью Flash путем проверки бита BSY в регистре FLASH_SR. 2. Установите соответствующий банку бит MER или MER1 в регистре FLASH_CR. 3. Установите бит STRT в регистре FLASH_CR. 4. Подождите, пока не очистится бит BSY.
Mass Erase. Для выполнения полного стирания рекомендуется следующая последовательность действий:
1. Проверьте, что в настоящий момент не выполняется любая операция с памятью Flash путем проверки бита BSY в регистре FLASH_SR. 2. Установите бит MER в регистре FLASH_CR для STM32F405xx/07xx и STM32F415xx/17xx, или оба бита MER и MER1 для STM32F42xxx и STM32F43xxx. 3. Установите бит STRT в регистре FLASH_CR. 4. Подождите, пока не очистится бит BSY.
Примечание: если в регистре FLASH_CR установлены оба бита MERx и SER, то будет выполнено полное стирание (mass erase). Если оба бита MERx и SER сброшены и бит STRT установлен, то может произойти непредсказуемое поведение с генерацией любого флага ошибки. Не должно допускаться такое поведение программы.
[Программирование]
Стандартное программирование. Для программирования памяти Flash последовательность действий следующая:
1. Проверьте, что в настоящий момент не выполняется любая операция с памятью Flash путем проверки бита BSY в регистре FLASH_SR. 2. Установите бит PG в регистре FLASH_CR. 3. Выполните операцию (или несколько операций) записи по желаемому адресу в памяти (в пределах основного блока памяти или области OTP): – При параллелизме x8 используется байтовый доступ. – При параллелизме x16 используется доступ на половину слова. – При параллелизме x32 используется доступ к слову. – При параллелизме x64 используется доступ к двойному слову. 4. Подождите, пока не очистится бит BSY.
Примечание: успешная операция записи может произойти без предварительной операции стирания, когда значения бит в записываемых данных меняются с 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). 2. Установите бит MER или MER1 в регистре FLASH_CR. 3. Установите бит STRT в регистре FLASH_CR. 4. Подождите, пока не очистится бит BSY (или используйте прерывание окончания программирования EOP).
Чтение из банка 1 во время программирования банка 2. При выполнении кода программы (когда выполняется чтение инструкций по шине I-Code) из банка 1 можно выполнить операцию программирования в банке 2 (и наоборот). Для этого выполните следующую процедуру:
1. Проверьте, что не выполняется операция с памятью Flash путем проверки на 0 бита BSY в регистре FLASH_SR (BSY = 1, когда происходит операция стирания или программирования в банке 1 или 2). 2. Установите бит PG в регистре FLASH_CR. 3. Выполните операцию (или операции) записи данных по желаемому адресу памяти в пределах основной области памяти или области OTP. 4. Подождите, пока не очистится бит BSY.
Прерывания. Установка бита разрешения окончания операции (end of operation interrupt enable, (EOPIE) в регистре FLASH_CR разрешит генерацию прерывания, когда закончится стирание или программирование Flash, т. е. когда очистится бит занятости (BSY) в регистре FLASH_SR (это означает, что операция завершилась, корректно или нет). В этом случае установится бит завершения операции (end of operation, EOP) в регистре FLASH_SR.
Если произошла ошибка во время программирования, стирания или при запросе операции чтения, то в регистре FLASH_SR установится один из следующих флагов ошибки:
• PGAERR, PGPERR, PGSERR (флаги ошибки программирования). • WRPERR (флаг ошибки защиты от записи). • RDERR (флаг ошибки защиты от чтения) - только для STM32F42xxx и STM32F43xxx.
В этом случае, если установлен бит разрешения прерывания ошибки (error interrupt enable, ERRIE) в регистре FLASH_CR, то будет сгенерировано прерывание, и установится бит ошибки операции (operation error, OPERR) в регистре FLASH_SR.
Примечание: при обнаружении нескольких последовательных ошибок (например, в случае транзакции DMA в память Flash), флаги ошибки не могут быть очищены до окончания последовательных запросов на запись.
Байты опций (user option bytes) микроконтроллеров STM32F4 конфигурируются пользователем в зависимости от требований приложения. Они настраивают защиту от чтения и записи, загрузку и другие опции MCU. Также имеются однократно программируемые данные OTP. Подробно про назначение байт опций, байт OTP, их программирование см. статью [3].
[Регистры интерфейса Flash]
Таблица 19. Карта памяти регистров и значения сброса для STM32F405xx/07xx и STM32F415xx/17xx.
Таблица 20. Карта памяти регистров и значения сброса для STM32F42xxx и STM32F43xxx.
Регистр управления доступом к Flash FLASH_ACR используется для разрешения/запрета функции ускорения и управления доступом к Flash в соответствии с частотой тактов CPU.
Смещение адреса: 0x00. Значение сброса: 0x00000000. Доступ: без тактов ожидания, как к слову, половине слова или байту.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
заререзвировано
DCRST rw
ICRST w
DCEN rw
ICEN rw
PRFTEN rw
зарезервировано
LATENCY[2:0] rw
Биты 31:11 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
DCRST (бит 12): Data cache reset, сброс кэша данных. 0 кэш данных не сброшен. 1 кэш данных сброшен.
Этот бит может быть записан только кода D-кэш запрещен (DCEN = 0).
Биты 7:3 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
LATENCY[2:0] (биты 2:0): Latency, латентность. Эти биты представляют соотношение между периодом тактов CPU и временем доступа к памяти Flash (количество циклов ожидания wait state). 000: ноль циклов ожидания. 001: 1 цикл ожидания. 010: 2 цикла ожидания. 011: 3 цикла ожидания. 100: 4 цикла ожидания. 101: 5 циклов ожидания. 110: 6 циклов ожидания. 111: 7 циклов ожидания.
Регистр управления доступом к Flash FLASH_ACR используется для разрешения/запрета функции ускорения и управления доступом к Flash в соответствии с частотой тактов CPU.
Смещение адреса: 0x00. Значение сброса: 0x00000000. Доступ: без тактов ожидания, как к слову, половине слова или байту.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
DCRST rw
ICRST w
DCEN rw
ICEN rw
PRFTEN rw
зарезервировано
LATENCY[3:0] rw
Биты 31:11 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
DCRST (бит 12): Data cache reset, сброс кэша данных. 0 кэш данных не сброшен. 1 кэш данных сброшен.
Этот бит может быть записан только кода D-кэш запрещен (DCEN = 0).
Биты 7:4 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
LATENCY[3:0] (биты 3:0): Latency, латентность. Эти биты представляют соотношение между периодом тактов CPU и временем доступа к памяти Flash (количество циклов ожидания wait state). 0000: ноль циклов ожидания. 0001: 1 цикл ожидания. 0010: 2 цикла ожидания. .. 1110: 14 циклов ожидания. 1111: 15 циклов ожидания.
Регистр ключа Flash используется для разрешения доступа к регистру управления Flash, чтобы можно было выполнять операции программирования и стирания.
Смещение адреса: 0x04. Значение сброса: 0x00000000. Доступ: без тактов ожидания, как к слову.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
KEY[31:16]
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
KEY[15:0]
FKEYR[31:0]: FPEC key. Следующие значения должны быть последовательно запрограммированы в этот регистр, чтобы разблокировать доступ к регистру FLASH_CR:
Регистр ключа опций Flash используется для разрешения операций программирования и стирания сектора конфигурации пользователя (байты опций).
Смещение адреса: 0x08. Значение сброса: 0x00000000. Доступ: без тактов ожидания, как к слову.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
OPTKEYR[31:16]
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OPTKEYR[15:0]
OPTKEYR[31:0]: OPTKEYR key. Следующие значения должны быть последовательно запрограммированы в этот регистр, чтобы разблокировать доступ сектору опций:
Регистр состояния Flash предоставляет информацию о том, как происходят операции программирования и стирания.
Смещение адреса: 0x0C. Значение сброса: 0x00000000. Доступ: без тактов ожидания, как к слову, половине слова или байту.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
BSY r
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
PGSERR rc_w1
PGPERR rc_w1
PGAERR rc_w1
WRPERR rc_w1
зарезрв.
OPERR rc_w1
EOP rc_w1
Биты 31:17 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
BSY (бит 16): Busy, занятость Flash. Этот бит показывает, осуществляется ли в настоящий момент внутренняя операция с памятью Flash. BSY устанавливается в начале операции, и очищается, когда операция завершилась, или когда произошла ошибка. 0 в настоящий момент не осуществляется операция с памятью Flash. 1 происходит внутренняя операция Flash.
Биты 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. Значение сброса: 0x00000000. Доступ: без тактов ожидания, как к слову, половине слова или байту.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
BSY r
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
RDERR rc_w1
PGSERR rc_w1
PGPERR rc_w1
PGAERR rc_w1
WRPERR rc_w1
зарезерв.
OPERR rc_w1
EOP rc_w1
Биты 31:17 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
BSY (бит 16): Busy, занятость Flash. Этот бит показывает, осуществляется ли в настоящий момент внутренняя операция с памятью Flash. BSY устанавливается в начале операции, и очищается, когда операция завершилась, или когда произошла ошибка. 0 в настоящий момент не осуществляется операция с памятью Flash. 1 происходит внутренняя операция Flash.
Биты 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. Значение сброса: 0x80000000. Доступ: без тактов ожидания, когда нет операции с Flash. Доступ возможен как к слову, половине слова или байту.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
LOCK rs
зарезервировано
ERRIE rw
EOPIE rw
зарезервировано
STRT rs
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
PSIZE[1:0] rw
зарез.
SNB[3:0] rw
MER rw
SER rw
PG rw
LOCK (бит 31): Lock, блокировка. Записывается только в лог. 1. Когда установлен, этот бит показывает, что регистр FLASH_CR заблокирован. Бит LOCK очищается аппаратно после детектирования специальной последовательности действий по разблокировке. После неудачной операции разблокировки этот бит останется установленным до следующего сброса (т. е. FLASH_CR нельзя разблокировать, пока не произойдет сброс).
Биты 30:26 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
ERRIE (бит 25): Error interrupt enable, разрешение прерывания ошибки. Этот бит разрешает генерацию прерывания, когда установится в 1 бит OPERR в регистре FLASH_SR. 0 генерация ошибки прерывания запрещена. 1 генерация ошибки прерывания разрешена.
EOPIE (бит 24): End of operation interrupt enable, разрешение прерывания по окончанию операции. Этот бит разрешает генерацию прерывания, когда перейдет в 1 бит EOP регистра FLASH_SR. 0 генерация прерывания запрещена. 1 генерация прерывания разрешена.
Биты 23:17 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
STRT (бит 16): Start. Будучи установленным, этот бит запускает операцию стирания. Бит STRT устанавливается только программно, и очистится в момент очистки бита BSY.
Биты 15:19 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
PSIZE[1:0] (биты 9:8): Program size, размер программируемой порции данных. Эти биты выбирают параллелизм операции записи. 00: x8 (программируется байт). 01: x16 (программируется половина слова). 10: x32 (программируется слово). 11: x64 (программируется двойное слово).
Бит 7 зарезервирован, и должен сохраняться в состоянии сброса (0).
SNB[3:0] (биты 6:3): Sector number, номер сектора. Это поле бит выбирает номер сектора для стирания. 0000: сектор 0. 0001: сектор 1. .. 1011: сектор 11.
Другие значения не допускаются.
MER (бит 2): Mass Erase, полная очистка Flash. Запись лог. 1 в этот бит активирует стирание всех секторов пользователя (кроме сектора конфигурации и байт OTP).
SER (бит 1): Sector Erase, стирание сектора. Запись лог. 1 в этот бит активирует стирание выбранного сектора.
PG (бит 0): Programming, программирование. Запись лог. 1 в этот бит активирует программирование Flash.
Регистр управления Flash FLASH_CR используется для конфигурирования и запуска операции с памятью Flash.
Смещение адреса: 0x10. Значение сброса: 0x80000000. Доступ: без тактов ожидания, когда нет операции с Flash. Доступ возможен как к слову, половине слова или байту.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
LOCK rs
зарезервировано
ERRIE rw
EOPIE rw
зарезервировано
STRT rs
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
MER1 rw
зарезервировано
PSIZE[1:0] rw
SNB[3:0] rw
MER rw
SER rw
PG rw
LOCK (бит 31): Lock, блокировка. Записывается только в лог. 1. Когда установлен, этот бит показывает, что регистр FLASH_CR заблокирован. Бит LOCK очищается аппаратно после детектирования специальной последовательности действий по разблокировке. После неудачной операции разблокировки этот бит останется установленным до следующего сброса (т. е. FLASH_CR нельзя разблокировать, пока не произойдет сброс).
Биты 30:26 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
ERRIE (бит 25): Error interrupt enable, разрешение прерывания ошибки. Этот бит разрешает генерацию прерывания, когда установится в 1 бит OPERR в регистре FLASH_SR. 0 генерация ошибки прерывания запрещена. 1 генерация ошибки прерывания разрешена.
EOPIE (бит 24): End of operation interrupt enable, разрешение прерывания по окончанию операции. Этот бит разрешает генерацию прерывания, когда перейдет в 1 бит EOP регистра FLASH_SR. 0 генерация прерывания запрещена. 1 генерация прерывания разрешена.
Биты 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, размер программируемой порции данных. Эти биты выбирают параллелизм операции записи. 00: x8 (программируется байт). 01: x16 (программируется половина слова). 10: x32 (программируется слово). 11: x64 (программируется двойное слово).
SNB[4:0] (биты 7:3): Sector number, номер сектора. Это поле бит выбирает номер сектора для стирания. 00000: сектор 0. 00001: сектор 1. .. 01011: сектор 11. 01100: не допускается. 01101: не допускается. 01110: не допускается. 01111: не допускается. 10000: сектор 12. 10001: сектор 13. ... 11011: сектор 23. 11100: не допускается. 11101: не допускается. 11110: не допускается. 11111: не допускается.
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. Значение сброса: 0x0FFFAAED. Биты опций загружаются значениями из памяти Flash после снятия сброса. Доступ: без тактов ожидания, когда нет операции над памятью Flash. Доступ возможен как к слову, половине слова или байту.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
nWRP[11:0] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
RDP[7:0] rw
nRST_STDBY rw
nRST_STOP rw
WDG_SW rw
зарез.
BOR_LEV rw
OPTSTRT rs
OPTLOCK rs
Биты 31:28 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
nWRP[11:0] (биты 27:16): Not write protect, нет защиты от записи. Эти биты после сброса содержат значение защиты от записи байт опций. Они могут быть записаны для программирования нового состояния защиты в памяти Flash. 0 на выбранном секторе активна защита от записи. 1 на выбранном секторе защита от записи не активна.
RDP[7:0] (биты 15:8): Read protect, защита от чтения. Эти биты после сброса содержат состояние уровня защиты от чтения. Биты RDP могут быть записаны для программирования нового уровня защиты памяти Flash. 0xAA: Level 0, защита от чтения не активна. 0xCC: Level 2, активен не понижаемый (необратимый) уровень защиты от чтения. Другие значения: Level 1, защита от чтения активна.
USER[2:0] (биты 7:5): User option bytes, байты опций пользователя. Эти биты после сброса содержат значение байта опций пользователя. Биты USER могут быть записаны для программирования нового значения в памяти Flash. USER[2] (бит 7): nRST_STDBY. USER[1] (бит 6): nRST_STOP. USER[0] (бит 5): WDG_SW.
Примечание: когда меняется режим WDG (сторожевой таймер) с аппаратного на программный, или с программного на аппаратный, требуется сброс системы, чтобы изменение вступило в силу.
Бит 4 зарезервирован, и должен сохраняться в состоянии сброса (0). Этот бит всегда считывается как 0.
BOR_LEV[1:0] (биты 3:2): BOR reset Level, уровень детектора качества питания, при котором генерируется сброс (Brown-Out Detector). Эти биты содержат порог напряжения, по которому активируется/снимается сигнал сброса. Биты BOR_LEV могут быть запрограммированы, чтобы установить новый уровень BOR. По умолчанию BOR выключен. Когда напряжение питания (VDD) падает ниже порога BOR, генерируется сброс микроконтроллера. 00: BOR Level 3 (VBOR3), уровень порога 3. 01: BOR Level 2 (VBOR2), уровень порога 2. 10: BOR Level 1 (VBOR1), уровень порога 1. 11: BOR off, применяется порог сброса POR/PDR.
Примечание: подробную информацию по характеристикам BOR см. секцию "Electrical characteristics" даташита на используемый MCU.
OPTSTRT (бит 1): Option start, запуск изменения опции. Этот бит, будучи установленным, запускает операцию над опцией пользователя. Бит OPTSTRT устанавливается только программно, и очищается, когда очищается бит BSY.
OPTLOCK (бит 0): Option lock, блокировка опции. Записывается только в лог. 1. Когда этот бит установлен, то это показывает, что регистр FLASH_OPTCR заблокирован. Этот бит очищается аппаратно после того, как успешно была проведена операция разблокировки. Если операция разблокировки была неудачной, то бит OPTLOCK останется установленным до последующего сброса.
Регистр управления опциями FLASH_OPTCR используется для модификации байт опций пользователя.
Смещение адреса: 0x14. Значение сброса: 0x0FFFAAED. Биты опций загружаются значениями из памяти Flash после снятия сброса. Доступ: без тактов ожидания, когда нет операции над памятью Flash. Доступ возможен как к слову, половине слова или байту.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
SPRMOD rw
DB1M rw
зарезерв.
nWRP[11:0] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
RDP[7:0] rw
nRST_STDBY rw
nRST_STOP rw
WDG_SW rw
BFB2 rw
BOR_LEV rw
OPTSTRT rs
OPTLOCK rs
SPRMOD (бит 31): Selection of protection mode for nWPRi bits, выбор режима защиты для бит nWPRi. 0 защита PCROP запрещена. Биты nWPRi используются для защиты от записи сектора i. 1 защита PCROP разрешена. Биты nWPRi используются для защиты PCROP сектора i.
DB1M (бит 30): Dual-bank on 1 Mbyte Flash memory devices, включение режима двух банков для MCU, у которых 1 мегабайт памяти Flash. 0 один банк памяти Flash размером 1 мегабайт (непрерывная адресация в банке 1). 1 два банка, на которые поделен 1 мегабайт памяти Flash. В этом случае память Flash организована как два банка по 512 килобайт каждый (см. выше таблицы 7 и 9). Для выполнения операции стирания должен быть правильно запрограммирован номер сектора (см. таблицу 7 для информации по схеме нумерации секторов).
Примечание: если бит DB1M установлен, и выполняется операция стирания на банке 2, в то время как выбран номер сектора по умолчанию (например, сконфигурирован сектор 8 вместо сектора 12), то операция стирания сектора на банке 2 не выполнится.
Биты 29:28 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
nWRP[11:0] (биты 27:16): Not write protect, нет защиты от записи. Эти биты после сброса содержат значение защиты от записи байт опций и значение защиты PCROP. Они могут быть записаны для программирования нового состояния защиты от записи или защиты PCROP в памяти Flash.
Если бит SPRMOD сброшен: 0 на выбранном секторе i активна защита от записи. 1 на выбранном секторе i защита от записи не активна.
Если бит SPRMOD установлен: 0 на выбранном секторе i защита PCROP не активна. 1 на выбранном секторе i активна защита PCROP.
RDP[7:0] (биты 15:8): Read protect, защита от чтения. Эти биты после сброса содержат состояние уровня защиты от чтения. Биты RDP могут быть записаны для программирования нового уровня защиты памяти Flash. 0xAA: Level 0, защита от чтения не активна. 0xCC: Level 2, активен не понижаемый (необратимый) уровень защиты от чтения. Другие значения: Level 1, защита от чтения активна.
USER[2:0] (биты 7:5): User option bytes, байты опций пользователя. Эти биты после сброса содержат значение байта опций пользователя. Биты USER могут быть записаны для программирования нового значения в памяти Flash. USER[2] (бит 7): nRST_STDBY. USER[1] (бит 6): nRST_STOP. USER[0] (бит 5): WDG_SW.
Примечание: когда меняется режим WDG (сторожевой таймер) с аппаратного на программный, или с программного на аппаратный, требуется сброс системы, чтобы изменение вступило в силу.
BFB2 (бит 4): Dual-bank Boot option byte, байт опции загрузки двух банков. 0 Dual-bank boot disabled. Загрузка может быть выполнена либо из банка 1 памяти Flash, или из системной памяти, в зависимости от состояния ножек управления загрузкой (по умолчанию). 1 Dual-bank boot enabled. Загрузка всегда выполняется из системной памяти.
Примечание: для STM32F42xx и STM32F43xx с размером памяти Flash 1 мегабайт этот бит опций должен быть очищен, когда DB1M = 0.
BOR_LEV[1:0] (биты 3:2): BOR reset Level, уровень детектора качества питания, при котором генерируется сброс (Brown-Out Detector). Эти биты содержат порог напряжения, по которому активируется/снимается сигнал сброса. Биты BOR_LEV могут быть запрограммированы, чтобы установить новый уровень BOR. По умолчанию BOR выключен. Когда напряжение питания (VDD) падает ниже порога BOR, генерируется сброс микроконтроллера. 00: BOR Level 3 (VBOR3), уровень порога 3. 01: BOR Level 2 (VBOR2), уровень порога 2. 10: BOR Level 1 (VBOR1), уровень порога 1. 11: BOR off, применяется порог сброса POR/PDR.
Примечание: подробную информацию по характеристикам BOR см. секцию "Electrical characteristics" даташита на используемый MCU.
OPTSTRT (бит 1): Option start, запуск изменения опции. Этот бит, будучи установленным, запускает операцию над опцией пользователя. Бит OPTSTRT устанавливается только программно, и очищается, когда очищается бит BSY.
OPTLOCK (бит 0): Option lock, блокировка опции. Записывается только в лог. 1. Когда этот бит установлен, то это показывает, что регистр FLASH_OPTCR заблокирован. Этот бит очищается аппаратно после того, как успешно была проведена операция разблокировки. Если операция разблокировки была неудачной, то бит OPTLOCK останется установленным до последующего сброса.
Этот регистр доступен только у STM32F42xxx и STM32F43xxx. Регистр FLASH_OPTCR1 используется при модификации байт опций пользователя для банка 2.
Смещение адреса: 0x18. Значение сброса: 0x0FFFF0000. Значение бит опций загружается из Flash, когда снимается сигнал сброса.
Доступ: без тактов ожидания, когда нет операции над памятью Flash. Доступ возможен как к слову, половине слова или байту.
Биты 31:28 зарезервированы, и должны сохраняться в состоянии сброса (все нули).
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
nWRP[11:0] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
nWRP[11:0] (биты 27:16): Not write protect, нет защиты от записи. Эти биты после сброса содержат значение защиты от записи байт опций и значение защиты PCROP. Они могут быть записаны для программирования нового состояния защиты от записи или защиты PCROP в памяти Flash.
Если бит SPRMOD сброшен (состояние по умолчанию): 0 на выбранном секторе i активна защита от записи. 1 на выбранном секторе i защита от записи не активна.
Если бит SPRMOD установлен: 0 на выбранном секторе i защита PCROP не активна. 1 на выбранном секторе i активна защита PCROP.
Биты 15:0 зарезервированы, и должны сохраняться в состоянии сброса (все нули).