ESP32 FAQ

ESP32 Flashing: esptool, Erase, and Download Mode

// flashing · faq

Filed under: ESP32 · Flashing · Updated August 2026

How to flash esp32, how to erase it when things go sideways, how to get a silent board talking again — flashing is the one skill every ESP32 project leans on. Short answers, real commands.

How to Flash ESP32?

Three sane ways: the Arduino IDE, esptool.py, and the Flash Download Tool — all writing the same bytes. The IDE wraps esptool at 460800 baud; when 921600 times out, 460800 mostly works. The failing speed is board-specific. First board? The getting-started FAQ covers the driver step everyone skips.

What exactly gets written during a flash?

Three things: the bootloader at 0x1000, the partition table at 0x8000, and the application at 0x10000 — 0x0 is the start of the flash, where nothing lives by default. Erase wipes all three, which is why a freshly erased chip won’t boot until they come back; the Arduino IDE rebuilds all of it on every upload.

How to Flash an ESP32?

Fastest path that has never failed me: install the driver for your USB chip — CH340 on most cheap boards, CP2102 on many others — plug in, note the COM port, and run esptool.py --port COM5 write_flash 0x1000 bootloader.bin 0x8000 partitions.bin 0x10000 app.bin. And check the cable: I’ve burned an evening on a charge-only USB cable that powers a board but carries no data.

How to Flash ESP32 WROOM?

A WROOM module has no USB bridge, so flashing depends on your board: wire a USB-to-serial adapter to TX, RX, EN, and GPIO0, hold GPIO0 low at power-on, and flash as usual. Asking does the esp32 wroom have flash? Yes — 4 MB on the WROOM-32. It lacks an auto-reset circuit, so bare modules need manual download mode on every flash.

How to Flash ESP32 with Arduino?

Tools → Board → your board, Tools → Port → the COM port, Tools → Upload Speed → 460800, then Upload. The IDE flashes bootloader, partitions, and app in one click and enters download mode for you on boards with an auto-reset circuit. If it hangs, it’s the driver or the cable.

How to Use ESP32 Flash Download Tool?

Espressif’s Flash Download Tool is a Windows GUI that predates the IDE: add your .bin files, type an address next to each — 0x1000 bootloader, 0x8000 partition table, 0x10000 app — pick SPI mode and flash size, hit START. Searching how to flash espeasy on esp32 s2 mini lands here in step one.

How to Erase ESP32 Flash?

esptool.py erase_flash wipes the chip to blank — the standard fix for boot loops, corrupted partitions, and boards that refuse new firmware. Afterward the chip won’t boot until bootloader, partitions, and app return; the IDE does that on its next upload. Prefer surgical? erase_region 0x9000 0x6000 clears just the NVS settings area.

Can flashing kill my board?

Not by flashing itself. Flash cells survive roughly 10,000 erase cycles per sector, so how many times can you flash esp32 before it dies is a number in the thousands — you won’t hit it developing. What kills boards is 5V on a 3.3V pin or reversed power.

The upload says success, but nothing runs?

Usually the Flash Size setting: if the IDE thinks the chip has 4 MB and it has 2, the bootloader looks for the app in the wrong place. Set it to match the module and re-upload. Curious how to see esp32 flash? esptool.py read_flash 0x0 0x400000 dump.bin shows where the app landed. If the image is right and the boot still crashes, that’s debugging — see the debugging FAQ.

Do I still need esptool if I use the Flash Download Tool?

No — they write the same flash, and you only need one. esptool.py wins on automation; the GUI wins on Windows. The Arduino IDE bundles esptool anyway, so most people never touch either — the flashing knowledge base has both flows. Unless the chip is unusual, where neither quite behaves.

Rehearse the Flash, Skip the Risk

The flashing pipeline this FAQ describes — compile, binary, write, verify — has a browser-sized rehearsal space: every example compiles with arduino-cli and runs on an emulated chip, no esptool, no BOOT pin, no bricked board. Start with blink; the Serial Monitor confirming ESP32 Blink ready! is the same “it lives” moment, at zero stakes.

Leave a Reply

Your email address will not be published. Required fields are marked *