Preview build — page text is a draft awaiting human review. Code badges come from real compiles. The flasher is real but not yet hardware-tested; the Playground is still a preview.
After upload · native USB

Fix “esptool.py can not exit the download mode over USB” (ESP32-S3/C3)

The upload worked, but the native-USB board stays in the bootloader. Press RESET once — and set things up so you don't have to every time.

ESP32-S3ESP32-C3ESP32-S2ESP32-C6XIAO ESP32C3Updated 3 Nov 2026

Community draft — report a mistake

What you see

OutputOutput
Wrote 289712 bytes (160123 compressed) at 0x00010000 in 2.5 seconds (effective 925.4 kbit/s)...
Hash of data verified.

Leaving...
WARNING: ESP32-S3 (revision v0.2) chip was placed into download mode using GPIO0.
esptool.py can not exit the download mode over USB. To run the app, reset the chip manually.
To suppress this note, set --after option to 'no_reset'.

On boards that use the chip’s own USB port, esptool cannot pull the reset and boot lines the way a CH340 or CP2102 does. When the chip was put into download mode with the BOOT button, it stays in the bootloader after flashing until something resets it.

This is a note, not a failure. Press RESET and your sketch runs. To skip the extra press, upload without holding BOOT whenever the board allows it.

Quick fix — try in order

  1. 1

    Press RESET once

    Your sketch is on the board. Pressing RESET (RST/EN) leaves download mode and runs it. Re-select the COM port afterwards — it may change number.

  2. 2

    Next time, don't hold BOOT unless you have to

    If the board uploads without holding BOOT, the USB-Serial/JTAG peripheral can reset the chip into the app automatically. Holding BOOT is what forces the manual reset.

  3. 3

    Use Hardware CDC and JTAG mode

    Tools → USB Mode → Hardware CDC and JTAG, USB CDC On Boot → Enabled. Then the IDE can reset the board itself on most uploads.

  4. 4

    Keep GPIO0 (S3) or GPIO9 (C3) free

    If a button, LED or module holds the boot pin low, every reset lands in download mode again.

Why it happens

Why can't esptool reset it?

On UART boards esptool toggles DTR/RTS wired to EN and GPIO0. Native USB has no such wires; when the chip was put into download mode with the BOOT button, only a real reset gets it out.

Is the upload broken?

No — “Hash of data verified” above the warning means the flash write succeeded.

Board-specific notes

ESP32-S2 (LOLIN S2 Mini): The S2 always needs a manual RST after uploading through its native USB.

XIAO ESP32C3: The RESET button is the tiny one marked R next to the USB-C socket.

↑↓ to move · Enter to open