Для загрузки (прошивки) ESP32 без нажатия кнопки BOOT можно использовать один из следующих методов:
1. Автоматический сброс через DTR (или RTS)
Многие USB-UART преобразователи (например, CH340, CP2102, FTDI) поддерживают сигналы DTR и RTS, которые можно использовать для автоматического перевода ESP32 в режим загрузки.
Подключите:
DTR → GPIO0 (через конденсатор ~100 нФ)
RTS → EN (через конденсатор ~100 нФ)
При открытии последовательного порта программатор автоматически сгенерирует нужные сигналы для входа в bootloader.
Схема подключения:
USB-UART (DTR) --||--> GPIO0
USB-UART (RTS) --||--> EN
Конденсаторы нужны для формирования импульса, а не постоянного уровня.
2. Использование esptool.py с опцией --no-stub
Если ESP32 не хочет заходить в режим прошивки, попробуйте:
bash
esptool.py --no-stub --before no_reset write_flash 0x1000 firmware.bin
Это отключает стандартный загрузчик и может помочь при проблемах с автоматическим сбросом.
3. Программный сброс в режим загрузчика
Если у вас уже есть прошивка, которая выполняется, можно добавить код для перехода в bootloader:
cpp
#include "esp_loader.h"
void enter_bootloader() {
esp_restart();
// Или более сложный вариант с очисткой RTC памяти
REG_WRITE(RTC_CNTL_OPTION1_REG, RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK);
esp_restart();
}
Затем вызвать эту функцию перед прошивкой.
4. Отключение проверки загрузочных пинов
В некоторых ESP32 (например, ESP32-S2/S3) можно отключить проверку GPIO0 при загрузке, изменив eFuse:
bash
espefuse.py set_flash_voltage 3.3V
Внимание! Это необратимо и может повлиять на безопасность.
5. Использование внешнего программатора (JTAG/SWD)
Если USB-UART не работает, можно прошить ESP32 через JTAG (например, с помощью ESP-Prog или ST-Link).
Вывод
Лучший способ — использовать DTR/RTS с конденсаторами. Если это не работает, проверьте:
Правильность подключения GPIO0 и EN.
Исправность USB-UART адаптера.
Попробуйте другой метод (например, esptool.py --no-stub).