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.
Boot failure · ESP32

Fix ESP32 “invalid header: 0xffffffff” boot loop

The flash is empty or erased where the bootloader should be. Re-upload, or flash the bootloader, partitions and app together.

ESP32ESP32-CAMUpdated 31 Oct 2026

Community draft — report a mistake

What you see

OutputOutput
ets Jul 29 2019 12:21:46

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
invalid header: 0xffffffff
invalid header: 0xffffffff
invalid header: 0xffffffff

The board is fine — there is just no valid firmware where the ESP32 expects to find it. Uploading a complete image (bootloader + partitions + app) fixes it.

Quick fix — try in order

  1. 1

    Upload any sketch from Arduino IDE

    The IDE writes the bootloader, partition table and app together, which fixes an erased chip.

  2. 2

    If you flashed only an app .bin, flash all parts

    A raw app image must go to 0x10000 with the bootloader at 0x1000 and partitions at 0x8000. Our browser flasher writes all parts at the right offsets.

  3. 3

    Check the flash mode

    Try DIO if the chip was flashed with QIO and does not boot.

Why it happens

What is 0xffffffff?

Erased flash reads as all 1s (0xFF bytes). The ROM expected a bootloader header at the start of flash and found blank flash instead.

Flashed to the wrong address

Writing an app binary at 0x0 instead of 0x10000 overwrites the bootloader area with something the ROM cannot parse.

A full erase without a re-flash

After “Erase all flash” the chip has no firmware until you upload again.

Board-specific notes

ESP32-C3 / S3: On these chips the bootloader lives at 0x0, not 0x1000. Use the offsets your build reports.

↑↓ to move · Enter to open