Можно ли считать прошивку из STM32 с защитой от чтения?
Обновлено Редакция GAW
Защита от чтения (Read Out Protection, RDP) задаётся байтом в области байтов конфигурации (option bytes). Пока она включена, флеш-память доступна только программе, которая выполняется из неё же. Отладчик по SWD или JTAG, встроенный загрузчик ST и код, загруженный в ОЗУ, получают отказ — у STM32F4 при попытке чтения возникает ошибка шины (RM0090, разд. 3.7.3). Ниже — поведение STM32F1 и STM32F4; у других семейств набор уровней и условия снятия защиты отличаются, подробности — в справочном руководстве конкретного семейства.
| Уровень | STM32F1 (PM0075) | STM32F4 (RM0090) | Что можно |
|---|---|---|---|
| Без защиты | RDP = 0xA5 | уровень 0: RDP = 0xAA | читать и писать отладчиком и загрузчиком |
| Защита | любое другое значение | уровень 1: любое, кроме 0xAA и 0xCC | только снять защиту — со стиранием флеш |
| Необратимая защита | нет | уровень 2: RDP = 0xCC | ничего: отладка выключена навсегда |
Почему снятие защиты не помогает
Снять защиту разрешено — именно так «оживляют» микросхему, в которую записали защищённую прошивку. Но STM32 сам стирает основную флеш-память перед тем, как применить новое значение RDP: у STM32F1 запись кода 0x00A5 сначала выполняет полное стирание (PM0075, разд. 2.4.2), у STM32F4 переход с уровня 1 на 0 стирает флеш и резервную SRAM (RM0090, разд. 3.7.3). После этого читать нечего.
У STM32F1 есть ещё одна тонкость: стёртый байт защиты равен 0xFF, а это тоже значение «защищено» (PM0075, табл. 6). Поэтому простое стирание области байтов конфигурации защиту не снимает.
Когда это важно знать
- Вы защищаете свою прошивку — включайте RDP на серийных платах; уровень 2 у STM32F4 оставляйте для случаев, когда обновлять прошивку будет только ваш собственный загрузчик.
- Плата «не прошивается» после чужой прошивки — снимите защиту и прошейте заново: как это сделать в STM32CubeProgrammer, рассказано в статье «STM32CubeProgrammer: прошивка STM32 через ST-LINK и загрузчик».
Что ещё хранится в байтах конфигурации, объясняет термин «байты конфигурации», уровни защиты — термин «защита от чтения», загрузчик и режимы загрузки — статья «Flash-память и загрузчик STM32».
Похожие вопросы
Работает ли прошивка на защищённом STM32?
Да: код, запущенный из самой флеш-памяти без подключённого отладчика, читает флеш как обычно. Защита запрещает доступ снаружи — отладчику, загрузчику и коду, загруженному в ОЗУ.
Сотрутся ли байты конфигурации при снятии защиты?
У STM32F4 по RM0090 полное стирание затрагивает только пользовательскую флеш-память и резервную SRAM; остальные байты конфигурации, включая защиту от записи, остаются как были, область OTP тоже не меняется.
Можно ли снять уровень 2 защиты на STM32F4, если отладчик больше не подключается?
Нет. По RM0090 уровень 2 необратим: JTAG и SWD отключены навсегда, загрузка из ОЗУ и встроенного загрузчика запрещена, байты конфигурации не меняются. Обновлять прошивку такой микросхемы может только загрузчик, заложенный в саму пользовательскую программу.
Источники
- STMicroelectronics. PM0075 (Doc ID 17863 Rev 2). STM32F10xxx Flash memory microcontrollers, programming manual — разд. 2.4.1 — защита включается байтом RDP и применяется после сброса; чтение флеш недоступно, кроме кода, запущенного из самой флеш без отладки; доступ к данным через JTAG, SWD, SWV, ETM и при загрузке из ОЗУ запрещён; страницы 0–3 (0–1 у high-density) защищены от записи; табл. 6 — защищено при любом значении, кроме пары 0xA5 и дополнения; стирание байтов конфигурации даёт 0xFF — защита остаётся; разд. 2.4.2 — запись 0x00A5 сначала выполняет полное стирание основной флеш, затем сброс по питанию; снять защиту можно и через загрузчик
- STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439, Rev 21 (June 2024) — разд. 3.7.3 — уровень 0: 0xAA, уровень 1: любое другое значение (по умолчанию после стирания байтов конфигурации) — при подключённой отладке, загрузке из ОЗУ или из системного загрузчика доступа к флеш нет, ошибка шины; переход 1 → 0 стирает флеш и резервную SRAM; уровень 2: 0xCC — отключены JTAG, SWV, ETM, загрузка из ОЗУ и загрузчика, байты конфигурации больше не меняются, операция необратима
Нашли ошибку?
Смотрите также
- Защита от чтения (RDP)Запрет чтения прошивки STM32 отладчиком и загрузчиком
- STM32CubeProgrammer и ST-LINKПрошивка STM32: ST-LINK и загрузчик, команды CLI, option bytes, RDP, ошибки
- Flash и загрузчик STM32Страницы и секторы, BOOT0, системный загрузчик, AN3155, IAP, option bytes, RDP
- Байты конфигурации (option bytes)Настройки защиты и режимов STM32 во флеш-памяти