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

Secure Download Mode (защищённый режим загрузки ESP32)

Серийное устройство на ESP32-S3 всё ещё можно прошить через esptool, но прочитать из него флеш или память уже нельзя. Это и есть Secure Download Mode — режим, в который загрузчик ПЗУ переводится одним битом eFuse навсегда.

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

Secure Download Mode (SDM, в ESP-IDF — Secure UART Download mode) — урезанный вариант загрузчика ПЗУ чипов Espressif (ESP32-S3 и другие; у классического ESP32 по справочнику опций ESP-IDF такого режима нет), в котором остаются только команды записи во флеш, стирания области и запроса сводки функций безопасности. Чтение флеш и памяти, загрузка и запуск кода в RAM запрещены. Режим включается битом eFuse и, как любой eFuse, назад не отключается. Обычный режим загрузки и утилита esptool описаны в статье «Прошивка ESP32 через esptool».

Что остаётся доступным

По документации esptool для ESP32-S3 в Secure Download Mode поддерживаются три команды:

Команда esptoolВ SDMПримечание
write-flashдазапись образов по адресам
erase-regionдаerase-flash целиком — нет
get-security-infoдасводка включённых функций безопасности
read-flash, dump-mem, load-ram, read-macнетошибка протокола
elf2image, image-info, merge-binдане требуют связи с чипом

На уровне последовательного протокола загрузчик ПЗУ принимает только SYNC, SPI_ATTACH, SPI_SET_PARAMS, CHANGE_BAUDRATE, FLASH_BEGIN, FLASH_DATA, FLASH_END и GET_SECURITY_INFO. Любая другая команда — чтение или запись памяти, выполнение кода — возвращает ошибку. Поэтому не работает и флеш-стаб esptool: его нужно загрузить в RAM, а это запрещено, и ESP-IDF требует запускать esptool с --no-stub. Недоступна и быстрая перепрошивка --diff-with: esptool сам переходит к полной записи. Если вместе с SDM включено шифрование флеш, esptool отказывается писать открытый образ без --encrypt, чтобы не окирпичить устройство. Команды elf2image, image-info и merge-bin работают как обычно: они только преобразуют файлы прошивки на компьютере и с чипом не связываются.

Как включается

  • На ESP32-S3 режим активируется сам, как только включена любая функция безопасности — secure boot или шифрование флеш в режиме release.
  • Вручную — вызовом esp_efuse_enable_rom_secure_download_mode(): функция прожигает eFuse ENABLE_SECURITY_DOWNLOAD (BLOCK0, бит 133). Если режим уже включён, она ничего не делает и возвращает успех.
  • Следующая ступень — полное отключение загрузки по UART: CONFIG_SECURE_UART_ROM_DL_MODE → «Permanently disable ROM Download Mode» или esp_efuse_disable_rom_download_mode(), бит DIS_DOWNLOAD_MODE. После этого esptool с чипом не работает вовсе, и SDM включить уже нельзя.

У классического ESP32 промежуточного режима нет: руководство ESP-IDF для ESP32 (ревизия ECO3) описывает только полное отключение UART Download mode, когда включены функции безопасности в конфигурации release.

С чем не путать

Secure Download Mode не шифрует и не подписывает прошивку — он лишь закрывает каналы чтения через загрузчик ПЗУ. Защита содержимого — это шифрование флеш, защита от подмены — secure boot, а вход в сам загрузчик по-прежнему зависит от strapping-выводов, как описано в статье про режим загрузки ESP32. Второй загрузчик ESP-IDF во флеш к SDM отношения не имеет: режим касается только ПЗУ.

Что изменилось в esptool 4.13.0

По release notes esptool v4.13.0 (2 ноября 2026): исправлена работа в Secure Download Mode через транспорт USB-Serial/JTAG, для ESP32-C5 разрешена смена скорости порта в этом режиме, а espefuse теперь предупреждает, если включение SDM на ESP32-P4 сделает флеш незаписываемой.

Частые вопросы

Можно ли прочитать прошивку с ESP32-S3 в Secure Download Mode?

Нет. По документации esptool в этом режиме работают только write-flash, erase-region и get-security-info; read-flash, чтение памяти, dump-mem и загрузка кода в RAM возвращают ошибку, потому что протокол загрузчика ПЗУ оставляет лишь команды SYNC, SPI_ATTACH, SPI_SET_PARAMS, CHANGE_BAUDRATE, FLASH_BEGIN, FLASH_DATA, FLASH_END и GET_SECURITY_INFO. Содержимое флеш при этом стоит дополнительно закрыть шифрованием: SDM запрещает чтение через UART, но не защищает саму микросхему памяти.

Как включить Secure Download Mode и можно ли его выключить?

По ESP-IDF для ESP32-S3 режим включается сам при включении любой функции безопасности (secure boot, шифрование флеш в режиме release) или вызовом esp_efuse_enable_rom_secure_download_mode(), который прожигает бит eFuse ENABLE_SECURITY_DOWNLOAD (BLOCK0, бит 133). Это eFuse, поэтому выключить режим обратно нельзя. Единственный шаг «дальше» — полностью отключить загрузку по UART битом DIS_DOWNLOAD_MODE, после чего esptool с чипом работать перестанет.

Почему esptool падает на устройстве с Secure Download Mode?

Чаще всего потому, что esptool по умолчанию загружает в чип флеш-стаб, а загрузка кода в RAM в этом режиме запрещена. ESP-IDF прямо пишет: в Secure UART Download mode esptool работает только с аргументом --no-stub. Вторая причина — недоступная команда: erase-flash, read-flash или быстрая перепрошивка с --diff-with в этом режиме не работают, нужна полная запись write-flash.

Источники

  1. Espressif. ESP-IDF Programming Guide v6.1, ESP32-S3: Security Overview — разд. UART Download Mode: Secure UART Download mode включается автоматически при включении любой функции безопасности или вызовом esp_efuse_enable_rom_secure_download_mode(); не допускает выполнения произвольного кода, загруженного через UART; команды ограничены настройкой SPI, сменой скорости, базовой записью флеш и get-security-info; полное отключение — CONFIG_SECURE_UART_ROM_DL_MODE «Permanently disable ROM Download Mode» или esp_efuse_disable_rom_download_mode(); esptool работает только с --no-stub
  2. Espressif. ESP-IDF Programming Guide v6.1, ESP32-S3: eFuse Manager и ESP32: Security Overview — esp_efuse_enable_rom_secure_download_mode(): включает режим навсегда, прожигает ESP_EFUSE_ENABLE_SECURITY_DOWNLOAD; если UART DL mode уже полностью отключён, включить SDM нельзя, функция возвращает успех; таблица eFuse: ENABLE_SECURITY_DOWNLOAD — BLOCK0, бит 133, «Set this bit to enable secure UART download mode», DIS_DOWNLOAD_MODE — бит 128; у ESP32 (ECO3) по Security Overview для ESP32 режим загрузки по UART либо остаётся включённым, либо отключается полностью — esp_efuse_disable_rom_download_mode(), после чего esptool с чипом не работает
  3. Espressif. esptool Documentation (latest), ESP32-S3: Basic Commands, Serial Protocol; esptool v4.13.0 release notes (2 ноября 2026) — Commands Supported in Secure Download Mode: write-flash, erase-region (erase-flash недоступна), get_security_info; остальные команды — ошибка; elf2image, image-info, merge-bin не затронуты; быстрая перепрошивка --diff-with в SDM недоступна; при шифровании флеш вместе с SDM запись без --encrypt запрещена; Serial Protocol, разд. Supported in Secure Download Mode: SYNC, SPI_ATTACH, SPI_SET_PARAMS, CHANGE_BAUDRATE, FLASH_BEGIN/FLASH_DATA/FLASH_END, GET_SECURITY_INFO, чтение и запись памяти и загрузка в RAM — ошибка; если чип не отвечает на чтение регистра — он в SDM; release notes v4.13.0 (github.com/espressif/esptool/releases/tag/v4.13.0): исправлена работа через USB-Serial/JTAG в Secure Download Mode, для ESP32-C5 разрешена смена скорости в SDM, espefuse предупреждает, когда SDM на ESP32-P4 делает флеш незаписываемой
Страница помогла?

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