8 November 2026 · Soldr
ESP32 "Failed to connect: Wrong boot mode detected": how to fix it
Short answer: the upload tool found the ESP32, but the chip didn't enter download mode. Put it there by hand: start the upload, then hold the BOOT button, press and release EN, and release BOOT. Espressif's DevKitC guide describes exactly this ("holding down Boot and then pressing EN initiates Firmware Download mode"). If that works every time, look at what's connected to GPIO0.
An ESP32 decides how to start at the moment it comes out of reset: run your sketch from flash, or wait for new firmware over the serial port. The upload tool normally flips the board into download mode by itself. When that fails, you see "Wrong boot mode detected" or a timeout while it waits for the chip. Here's why, from Espressif's own documents, as cited on our ESP32-DevKitC and ESP32-WROOM-32 pages.
Why it happens
The ESP32 datasheet names GPIO0 and GPIO2 as the pins that select the boot mode at reset. For download mode, GPIO0 has to be low as the chip comes out of reset. On the DevKitC, the two buttons do that by hand:
- BOOT: in the guide's words, the "Download button", used "for downloading firmware through the serial port".
- EN: the "Reset button" (the chip's CHIP_PU line).
So "wrong boot mode" means GPIO0 wasn't low when the chip reset for the upload. Either the automatic switching didn't happen, or something on your board held GPIO0 high.
The manual fix, step by step
- Start the upload (in the IDE, or with Flash in Soldr).
- When it starts trying to connect, press and hold BOOT.
- Press and release EN while still holding BOOT.
- Release BOOT. The upload should continue.
- After it finishes, press EN once to run the new firmware.
If you need the buttons every time
- Something on GPIO0. A module or button that holds GPIO0 high at reset fights the download switch. Move it off GPIO0. Our strapping pins post lists the safe alternatives.
- Something on GPIO2. It's also a boot-mode pin. A part that pulls it high can stop download mode too.
- An early DevKitC V4 board. Espressif's guide notes that on earlier V4 boards a capacitor (C15) can cause problems, including the board booting into Download mode, and that it can affect a clock signal on GPIO0. It's a board revision issue, not your code.
- A compatible board. Third-party ESP32 boards copy the DevKit idea, but their auto-reset circuit isn't covered by Espressif's documents. If the buttons work and the automatic way doesn't, use the buttons.
Other errors that look similar
- No port at all, or "port not found": that's the USB driver or the cable. See CH340 and CP210x drivers.
- The upload works, but the board then won't start: that's usually a part holding a strapping pin at power-up, or a flash setting. See ESP32 won't boot with something on GPIO 0, 2, 12 or 15 and It compiled. It flashed. The board still won't boot.
- It works until a motor starts: that's power. See the power budget guide.
Flashing from the browser
Soldr flashes ESP32 boards from Chrome or Edge with no IDE to install, and the same rule applies there: the chip has to enter download mode. Some ESP32 boards need you to hold BOOT while the upload starts. That's a property of the board, and the same in any tool. The browser upload walk-through covers the rest.
On Compoden: ESP32-DevKitC, ESP32 30-pin (CP2102). Describe your build on app.soldr.ai. Sign in and get 100 credits free.