Программирование ARM STM32F4xx: байты опций Tue, October 20 2020  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

STM32F4xx: байты опций Печать
Добавил(а) microsin   

Байты опций конфигурируются конечным пользователем в зависимости от требований приложения. Таблица 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 к другому.

STM32F4xx options RDP levels fig06

Рис. 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.

STM32F4xx options PCROP levels fig07

Рис. 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.

 

Добавить комментарий


Защитный код
Обновить

Top of Page