Байты опций конфигурируются конечным пользователем в зависимости от требований приложения. Таблица 14 показывает организацию этих байт в секторе конфигурации пользователя (user configuration sector).
Таблица 14. Организация байт опций.
Адрес |
Биты [63:16] |
Биты [15:0] |
0x1FFFC000 |
зарезервированы |
Защита от чтения и байты опций пользователя (RDP & USER) |
0x1FFFC008 |
SPRMOD и биты защиты от записи nWRP для секторов 0 .. 11 |
0x1FFEC000 |
зарезервированы |
0x1FFEC008 |
SPRMOD и биты защиты от записи nWRP для секторов 12 .. 23 |
Таблица 15. Описание байт опций STM32F405xx/07xx и STM32F415xx/17xx.
Байты опций (слово, адрес 0x1FFFC000) |
RDP: байт опций защиты от чтения. Это защищает от нежелательного доступа код программы, сохраненный в памяти Flash. |
Биты 15:8 |
0xAA: Level 0, защита отключена. 0xCC: Level 2, защита активирована (запрещены функции отладки и загрузки из RAM). Другие значения: Level 1, защита от чтения памяти (функции отладки ограничены). |
USER: байт опций пользователя. Этот байт используется для конфигурирования следующих функций: – Выбор события сторожевого таймера (watchdog event): аппаратное или программное. – Событие сброса при входе в режим Stop. – Событие сброса при входе в режим Standby. |
Бит 7 |
nRST_STDBY 0: при входе в режим Standby генерируется сброс. 1: сброс не генерируется. |
Бит 6 |
nRST_STOP 0: при входе в режим Stop генерируется сброс. 1: сброс не генерируется. |
Бит 5 |
WDG_SW 0: аппаратный независимый сторожевой таймер. 1: программный независимый сторожевой таймер. |
Бит 4 |
1: не используется |
Биты 3:2 |
BOR_LEV: BOR reset Level, уровень сброса блока контроля напряжения питания. Эти биты задают порог напряжения питания, который активирует/снимает сброс. Они могут быть записаны программой в Flash памяти, чтобы установить новый уровень BOR. 00: BOR Level 3 (VBOR3) 01: BOR Level 2 (VBOR2) 10: BOR Level 1 (VBOR1) 11: BOR отключен, применяется порог POR/PDR.
Примечание: для получения полной информации по характеристикам BOR см. секцию "Electrical characteristics" даташита на используемый микроконтроллер. |
Биты 0:1 |
1: не используются |
Байты опций (слово, адрес 0x1FFFC008) |
Биты 15:12 |
0xF: не используются |
nWRP: байты опций защиты от записи секторов 0 .. 11. |
Биты 11:0 |
nWRPi (0 ≤ i ≤ 11) 0: на выбранном секторе i активна защита от записи. 1: на выбранном секторе i защита от записи не активна. |
Таблица 16. Описание байт опций STM32F42xxx и STM32F43xxx.
Байты опций (слово, адрес 0x1FFFC000) |
RDP: байт опций защиты от чтения. Это защищает от нежелательного доступа код программы, сохраненный в памяти Flash. |
Биты 15:8 |
0xAA: Level 0, защита отключена. 0xCC: Level 2, защита активирована (запрещены функции отладки и загрузки из RAM). Другие значения: Level 1, защита от чтения памяти (функции отладки ограничены). |
USER: байт опций пользователя. Этот байт используется для конфигурирования следующих функций: – Выбор события сторожевого таймера (watchdog event): аппаратное или программное. – Событие сброса при входе в режим Stop. – Событие сброса при входе в режим Standby. |
Бит 7 |
nRST_STDBY 0: при входе в режим Standby генерируется сброс. 1: сброс не генерируется. |
Бит 6 |
nRST_STOP 0: при входе в режим Stop генерируется сброс. 1: сброс не генерируется. |
Бит 5 |
WDG_SW 0: аппаратный независимый сторожевой таймер. 1: программный независимый сторожевой таймер. |
Бит 4 |
BFB2: Dual bank boot 0: загрузка из банка 1 памяти Flash или системной памяти, в зависимости от состояния ножек управления загрузкой (по умолчанию). 1: загрузка всегда происходит из системной памяти (Dual bank boot mode). |
Биты 3:2 |
BOR_LEV: BOR reset Level, уровень сброса блока контроля напряжения питания. Эти биты задают порог напряжения питания, который активирует/снимает сброс. Они могут быть записаны программой в Flash памяти, чтобы установить новый уровень BOR. 00: BOR Level 3 (VBOR3) 01: BOR Level 2 (VBOR2) 10: BOR Level 1 (VBOR1) 11: BOR отключен, применяется порог POR/PDR.
Примечание: для получения полной информации по характеристикам BOR см. секцию "Electrical characteristics" даташита на используемый микроконтроллер. |
Биты 0:1 |
1: не используются |
Байты опций (слово, адрес 0x1FFFC008) |
Бит 15 |
SPRMOD: выбор режима защиты бит nWPRi 0: биты nWPRi используются для защиты от записи сектора i (по умолчанию). 1: биты nWPRi используются для защиты PCROP сектора i. |
Бит 14 |
DB1M: устройства с Flash-памятью Dual bank 1 мегабайт 0: одно пространство Flash-памяти 1 мегабайт (непрерывная адресация в банке 1). 1: два банка памяти Flash объемом 1 мегабайт. Память Flash организована как 2 банка по 512 килобайт каждый (см. таблицы 7 и 9 даташита [1]). Для выполнения операции стирания должен быть запрограммирован правильный сектор (см. таблицу 7 для информации по схеме нумерации секторов). |
Биты 13:12 |
0x2: не используются |
nWRP: байты опций защиты от записи памяти Flash для банка 1. Могут быть защищены секторы 0 .. 11. |
Биты 11:0 |
nWRPi, если бит SPRMOD сброшен (по умолчанию): 0: активна защита от записи сектора i. 1: защита от записи сектора i не активна.
Если бит SPRMOD установлен: 0: защита PCROP для сектора i не активна. 1: для сектора i активна защита PCROP. |
Байты опций (слово, адрес 0x1FFEC000) |
Биты 15:0 |
0xFFFF: не используются |
Байты опций (слово, адрес 0x1FFEC008) |
Биты 15:12 |
0xF: не используются |
nWRP: байты опций защиты от записи памяти Flash для банка 2. Могут быть защищены секторы 12 .. 23. |
Биты 11:0 |
nWRPi, если бит SPRMOD сброшен (по умолчанию): 0: активна защита от записи сектора i. 1: защита от записи сектора i не активна.
Если бит SPRMOD установлен: 0: защита PCROP для сектора i не активна. 1: для сектора i активна защита PCROP. |
[Программирование байт опций]
Чтобы запустить любую операцию на этом секторе, должен быть очищен бит блокировки опций (option lock bit, OPTLOCK) в регистре управления опциями Flash (FLASH_OPTCR). Чтобы можно было очистить этот бит, Вы должны выполнить следующие действия:
1. Записать OPTKEY1 = 0x08192A3B в регистр ключа опций Flash (FLASH_OPTKEYR). 2. Записать OPTKEY2 = 0x4C5D6E7F в регистр ключа опций Flash (FLASH_OPTKEYR).
Байты опций пользователя могут быть защищены от нежелательных операций стирания/программирования путем программной установки бита OPTLOCK.
Модификация байт опций STM32F405xx/07xx и STM32F415xx/17xx. Чтобы модифицировать значение опции, выполните следующую последовательность действий:
1. Проверьте, что в настоящий момент не выполняется операция с памятью Flash, путем проверки бита BSY в регистре FLASH_SR. 2. Запишите желаемое значение опции в регистр FLASH_OPTCR. 3. Установите бит запуска изменения опции (option start bit, OPTSTRT) в регистре FLASH_OPTCR. 4. Подождите очистки бита BSY.
Примечание: значение опции модифицируется автоматически, при этом сначала стирается сектор конфигурации пользователя, и затем программируются все байты опций с значениями, содержащимися в регистре FLASH_OPTCR.
Модификация байт опций STM32F42xxx и STM32F43xxx. Байты параметров пользователя для банка 1 и банка 2 не могут быть изменены независимо. Они должны обновляться одновременно. Чтобы изменить значение байта пользовательской опции, выполните следующие действия:
1. Проверьте, что в настоящий момент не выполняется операция с памятью Flash, путем проверки бита BSY в регистре FLASH_SR. 2. Запишите значение байта опций банка 2 в регистр FLASH_OPTCR1. 3. Запишите значение байта опций банка 1 в регистр FLASH_OPTCR. 4. Установите бит запуска изменения опции (option start bit, OPTSTRT) в регистре FLASH_OPTCR. 5. Подождите очистки бита BSY.
Примечание: значение байта опций модифицируется автоматически, при этом сначала стирается сектор конфигурации пользователя (банк 1 и банк 2), и затем программируются все байты опций с значениями, содержащимися в регистрах FLASH_OPTCR и FLASH_OPTCR1.
[Read protection (RDP)]
Пользовательская область в памяти Flash может быть защищена от операций чтения со стороны доверенного кода. Определены 3 уровня защиты от чтения:
• Level 0: нет защиты от чтения
Когда установлен уровень 0 защиты чтения путем записи 0xAA в байт опции защиты чтения (read protection option byte, RDP), разрешены все операции чтения/записи (если не установлена защита от записи) памяти Flash или Backup SRAM во всех конфигурациях загрузки (Flash user boot, debug or boot from RAM).
• Level 1: разрешена защита от чтения
Это уровень защиты по умолчанию после стирания байта опций. Защита от чтения Level 1 активируется путем записи любого значения (кроме 0xAA и 0xCC, используемые для установки уровней Level 0 и Level 2 соответственно) в байт опций RDP. Когда установлена защита от чтения Level 1:
– Не разрешен доступ к памяти Flash или Backup SRAM (чтение, стирание, программирование) при подключении функции отладки или при загрузке из RAM или из загрузчика системной памяти (system memory bootloader). Генерируется ошибка шины при запросе чтения. – Когда была загрузка из памяти Flash, разрешен доступ (чтение, стирание, программирование) к памяти Flash и Backup SRAM из кода пользователя.
Когда активен уровень защиты Level 1, программирование байта опций защиты (RDP) на уровень Level 0 приведет к полному стиранию памяти Flash и Backup SRAM. В результате перед снятием защиты от чтения вся область кода пользователя стирается. Эта операция массовой очистки стирает только область кода пользователя. Другие байты опций, включая защиту от записи, остаются нетронутыми. Область OTP также не затрагивается этой операцией массового стирания. Операция массового стирания выполняется только когда активен уровень защиты Level 1, и запрошен уровень защиты Level 0. Когда уровень защиты увеличивается (0 -> 1, 1 -> 2, 0 -> 2), массовое стирание не выполняется.
• Level 2: защита от отладки / чтения чипа
Уровень защиты от чтения Level 2 активируется записью 0xCC в байт опций RDP. Когда установлен уровень защиты от чтения Level 2:
– Активны все функции защиты, предоставляемые Level 1. – Больше не разрешена загрузка из RAM или system memory bootloader. – Запрещены JTAG, SWV (single-wire viewer), ETM и функция пограничного сканирования (boundary scan). – Больше нельзя поменять байты опций пользователя. – При загрузке из памяти Flash разрешается доступ (чтение, стирание и программирование) к памяти Flash и Backup SRAM из кода пользователя.
Установка уровня защиты Level 2 является необратимой операцией. Когда активирован Level 2, уровень защиты не может быть уменьшен до Level 0 или Level 1.
Примечание: при активном Level 2 порт JTAG безвозвратно запрещен (это работает как фьюз JTAG). Как следствие тесты boundary scan выполнить нельзя. STMicroelectronics не может выполнить анализ дефектных чипов, у которых установлена защита Level 2.
Таблица 17. Уровни доступа в зависимости от установленного уровня защиты.
Область памяти
|
Уровень защиты
|
Функции отладки, загрузка из RAM или из загрузчика системной памяти |
Загрузка из памяти FLASH |
Read |
Write |
Erase |
Read |
Write |
Erase |
Основная память Flash и Backup SRAM |
Level 1 |
нет |
нет(1) |
ДА |
Level 2 |
нет |
ДА |
Байты опций |
Level 1 |
ДА |
ДА |
Level 2 |
нет |
нет |
OTP |
Level 1 |
нет |
недоступно |
ДА |
недоступно |
Level 2 |
нет |
недоступно |
ДА |
недоступно |
Примечание (1): основная память Flash и Backup SRAM стираются только когда RDP меняется с уровня Level 1 к уровню Level 0. Область OTP остается неизмененной.
На рис. 6 показано, как переходить от одного уровня RDP к другому.
Рис. 6. Уровни защиты RDP.
[Защита от записи]
Может быть защищено до 24 секторов пользователя от нежелательных операций записи из-за сбоев в контекстах программы. Когда бит защиты (non-write protection nWRPi, здесь 0 ≤ i ≤ 11) в регистрах FLASH_OPTCR или FLASH_OPTCR1 сброшен в лог. 0, соответствующий сектор не может быть стерт или запрограммирован. Как следствие, операция полного стирания (mass erase) не может быть выполнена, если хотя бы один из секторов защищен от записи.
Если сделана попытка стирания/программирования на защищенной части памяти Flash (на секторе, защищенном битом защиты от записи, на заблокированной части OTP или части Flash, которая никогда не может быть записана так, как записывается память Flash ICP), установится флаг ошибки защиты записи (write protection error, WRPERR) в регистре FLASH_SR.
На микроконтроллерах STM32F42xxx и STM32F43xxx, когда установлен режим PCROP, активный уровень бит nWRPi составляет лог. 1, и соответствующий сектор i защищен от записи, когда nWRPi в лог. 1. Сектор PCROP автоматически защищен от записи.
Примечание: когда выбран уровень защиты чтения памяти (уровень RDP = 1), нельзя запрограммировать или стереть сектор i памяти Flash, если подключена функция отладки CPU (JTAG или однопроводный интерфейс отладки), или из RAM выполняется код загрузки, даже если nWRPi = 1.
Флаг ошибки защиты записи. Если выполнилась операция стирания/программирования в защищенную область Flash, установится флаг ошибки защиты записи (Write Protection Error, WRPERR) в регистре FLASH_SR.
Если запрашивается операция стирания, то бит WRPERR установится в следующих ситуациях:
• Сконфигурирована операция mass erase, bank erase, sector erase (MER или MER/MER1 и SER = 1). • Запрашивается операция sector erase, и номер сектора (Sector Number, поле SNB) недопустимый. • Запрошена операция mass erase, когда хотя бы один из секторов пользователя защищен от записи битом опций (биты MER или MER/MER1 = 1, и nWRPi = 0, где 0 ≤ i ≤ 11 в регистре FLASH_OPTCRx). • Запрошена операция стирания сектора на защищенном секторе (биты SER = 1, SNB = i и nWRPi = 0, где 0 ≤ i ≤ 11 в регистре FLASH_OPTCRx). • Активна защита от чтения памяти Flash, и было обнаружено вторжение.
Если запрошена операция программирования, то бит WRPERR установится в следующих ситуациях:
• Операция записи выполняется на системной памяти (system memory) или в определенный сектор на зарезервированной части пользователя. • Операция записи выполняется на секторе конфигурации пользователя. • Операция записи выполняется на защищенном от записи секторе (сектор, защищенный битом опций nWRPi). • Операция записи выполняется на области OTP, которая уже заблокирована. • Память Flash защищена от чтения, и было обнаружено вторжение.
[Proprietary code readout protection (PCROP)]
Проприетарная защита от чтения (proprietary readout protection, PCROP) доступна только на микроконтроллерах STM32F42xxx и STM32F43xxx.
Сектора памяти Flash пользователя (от 0 до 23) могут быть защищены от чтения со стороны D-bus с использованием proprietary readout protection (PCROP).
Защита PCROP выбирается следующим образом, через бит опций SPRMOD в регистре FLASH_OPTCR:
• SPRMOD = 0: nWRPi управляет защитой от записи соответствующих секторов пользователя. • SPRMOD = 1: nWRPi управляет защитой от чтения и записи (PCROP) соответствующих секторов пользователя.
Когда сектор защищен активацией режима PCROP, к нему можно получить доступ для кода только только для выборки кода через шину ICODE во Flash-интерфейсе:
• Любая попытка чтения, выполненная через D-bus, приведет к установке флага ошибки RDERR. • Любая операция программирования/стирания на защищенном PCROP секторе приведет к установке флага ошибки WRPERR.
Рис. 7. Уровни защиты PCROP.
Примечание *: "правильный nWRPi" означает, что ни один из установленных бит nWRP не может быть сброшен (переход от 1 к 0).
Деактивация SPRMOD и/или снятие защиты PCROP секторов пользователя может происходить только когда одновременно уровень RDP меняется с 1 на 0. Если это условие не выполняется, то модификация байта опций пользователя отменяется, и установится флаг ошибки записи WRPERR. Модификация байт опций пользователя (BOR_LEV, RST_STDBY, ..) допускается, пока ни один из бит nWRPi не сброшен, и активен режим SPRMOD.
Примечание: активное значение бит nWRPi инвертируется, когда активен режим PCROP (SPRMOD=1). Если SPRMOD=1 и nWRPi=1, то сектор i пользователя в банке 1, соответственно и в банке 2, защищен от чтения/записи (PCROP).
[Однократно программируемые байты]
Таблица 18 показывает организацию однократно программируемой области (one-time programmable, OTP) памяти.
Таблица 18. Организация области OTP.
Блок |
[128:96] |
[95:64] |
[63:32] |
[31:0] |
Адрес байта 0 |
0 |
OTP0 |
OTP0 |
OTP0 |
OTP0 |
0x1FFF7800 |
OTP0 |
OTP0 |
OTP0 |
OTP0 |
0x1FFF7810 |
1 |
OTP1 |
OTP1 |
OTP1 |
OTP1 |
0x1FFF7820 |
OTP1 |
OTP1 |
OTP1 |
OTP1 |
0x1FFF7830 |
. . . |
. . . |
. . . |
15 |
OTP15 |
OTP15 |
OTP15 |
OTP15 |
0x1FFF79E0 |
OTP15 |
OTP15 |
OTP15 |
OTP15 |
0x1FFF79F0 |
Блок блокировки |
LOCKB15 ... LOCKB12 |
LOCKB11 ... LOCKB8 |
LOCKB7 ... LOCKB4 |
LOCKB3 ... LOCKB0 |
0x1FFF7A00 |
Область OTP поделена на 16 блоков данных OTP по 32 байта и блок блокировки OTP из 16 байт. Данные OTP data и блоков блокировки не могут быть стерты. Блок блокировки содержит 16 байт LOCKBi (0 ≤ i ≤ 15) для блокировки соответствующих блоков данных OTP (блоки от 0 до 15). Каждый блок данных OTP может программироваться, пока не будет записано значение 0x00 в соответствующий байт блокировки OTP. Байты блокировки должны содержать только значения 0x00 и 0xFF, иначе байты OTP могут учитываться неправильно.
[Ссылки]
1. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com. 2. Интерфейс памяти Flash STM32F4. 3. STM32F4xx: память и архитектура шин. |