Перейти к содержанию

Почему ST-LINK подключается к STM32, но не может прочитать или записать флеш?

Обновлено Редакция GAW

Если ST-LINK видит микроконтроллер — идентификатор читается, ядро останавливается, — но чтение флеш-памяти, проверка или запись заканчиваются ошибкой, первая гипотеза — защита от чтения (RDP). Она не мешает подключению к ядру, а закрывает именно память.

Уровни защиты

УровеньЗначение RDPSTM32F1STM32F4Что можно
00xA5 (F1) / 0xAA (F4)нет защитынет защитывсё
1любое другоефлеш-память не читается снаружифлеш-память и backup SRAM недоступны снаружиснять с полным стиранием
20xCC (F4)—SWD и JTAG отключены навсегданичего снаружи

Как вернуть микроконтроллер

  1. Подключитесь в STM32CubeProgrammer с режимом Connect under reset.
  2. Переведите RDP на уровень 0: на вкладке байтов конфигурации или командой -rdu (UM2237, разд. 3.2.17).
  3. Микроконтроллер сам сотрёт всю основную флеш-память — у STM32F4 ещё и backup SRAM — и только потом снимет защиту.
  4. Отключите питание платы и подключитесь снова: PM0075 требует сброса по питанию, если защиту меняли при подключённом отладчике.

Если после этого запись всё равно не идёт, проверьте защиту от записи — разбор в ответе «Как снять защиту от записи с STM32F103». Подробнее о защите от чтения — в словаре, о том, почему защищённую прошивку не скопировать, — в ответе «Можно ли считать прошивку из STM32 с защитой».

Похожие вопросы

Как защита включилась, если я её не ставил?

Например, при стирании байтов конфигурации, если после него RDP не записали заново до сброса: у STM32F1 и STM32F4 стёртое значение RDP означает защиту уровня 1. Её могла поставить и прошивка или фабричный загрузчик готового устройства — так производители закрывают свою программу.

Что будет, если чип на уровне 2?

Подключиться по SWD не получится вовсе: уровень 2 отключает JTAG и SWD навсегда, и RM0090 называет его необратимым. Программа в такой микросхеме продолжит работать, но перепрошить её можно только загрузчиком, который заложен в самой программе.

Можно ли сначала прочитать прошивку, а потом снять защиту?

Нет. Пока защита включена, флеш-память снаружи не читается, а при её снятии микроконтроллер стирает память раньше, чем изменит уровень. Подробно — в отдельном ответе о чтении прошивки с защитой.

Источники

  1. STMicroelectronics. RM0090 Reference manual STM32F405/415, F407/417, F427/437, F429/439, Rev 21 (June 2024) — разд. 3.7.3: уровень 0 — RDP = 0xAA; уровень 1 — любое другое значение кроме 0xAA и 0xCC, он же состояние после стирания байтов конфигурации: при подключённой отладке и загрузке из RAM или загрузчика доступа к флеш-памяти и backup SRAM нет, чтение даёт ошибку шины; переход 1 → 0 стирает флеш-память пользователя и backup SRAM, остальные байты конфигурации и OTP не меняются; уровень 2 — RDP = 0xCC, необратим, JTAG/SWD отключены
  2. STMicroelectronics. PM0075 STM32F10xxx Flash memory microcontrollers, programming manual (Doc ID 17863 Rev 2, August 2012) — разд. 2.4.1: при защите чтение флеш-памяти через JTAG/SWD запрещено, программа из флеш-памяти работает; снятие — RDP = 0x00A5, перед этим автоматически стирается вся основная память; если защиту включали при подключённом отладчике — сброс по питанию; снять можно и встроенным загрузчиком (AN2606)
  3. STMicroelectronics. UM2237 STM32CubeProgrammer software description, Rev 29 (November 2025) — разд. 3.2.17 — команда -rdu, --readunprotect: снять защиту чтения, перевести RDP с уровня 1 на уровень 0; подключение под сбросом

Нашли ошибку?