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(): функция прожигает eFuseENABLE_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.
Источники
- 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
- 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 с чипом не работает
- 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 делает флеш незаписываемой
Нашли ошибку? ·
Смотрите также
- eFuse и OTPОднократно программируемые биты: настройки, ключи, калибровка
- Шифрование флеш-памятиПрошивка во внешней памяти в зашифрованном виде: XTS-AES, ключи в чипе
- Безопасная загрузкаЗапуск только подписанной прошивки: подпись, ключи в OTP, откат версий
- Флеш-стаб esptool (flasher stub)Программа esptool в RAM чипа вместо загрузчика ПЗУ: быстрее, со сжатием, отключается --no-stub
- Загрузчик второй ступени ESP-IDFbootloader.bin по адресу 0x1000: таблица разделов, выбор приложения, флеш, secure boot
- USB Serial/JTAGВстроенный в ESP32 контроллер USB: COM-порт и JTAG без внешних микросхем
- Прошивка ESP32Загрузчик ПЗУ, GPIO0 и автосброс, write-flash и адреса, ошибки esptool и питание
- ESP32-S3: выводы и GPIO45 GPIO: функции, свободные и занятые выводы, флеш и PSRAM, strapping, USB, JTAG, токи