When flashing firmware to an ESP32 or related chip, the flash address determines where each binary is written in the chip's flash memory. Using the wrong address will cause the device to fail to boot. This page documents the correct flash addresses for all supported Espressif chips.
| Chip Family | Bootloader | Partition Table | Application (App) | NVS | OTA Data |
|---|---|---|---|---|---|
| ESP32 (classic) | 0x1000 | 0x8000 | 0x10000 | 0x9000 | 0xD000 |
| ESP32-S2 | 0x0 | 0x8000 | 0x10000 | 0x9000 | 0xD000 |
| ESP32-S3 | 0x0 | 0x8000 | 0x10000 | 0x9000 | 0xD000 |
| ESP32-C2 | 0x0 | 0x8000 | 0x10000 | 0x9000 | 0xD000 |
| ESP32-C3 | 0x0 | 0x8000 | 0x10000 | 0x9000 | 0xD000 |
| ESP32-C6 | 0x0 | 0x8000 | 0x10000 | 0x9000 | 0xD000 |
| ESP32-H2 | 0x0 | 0x8000 | 0x10000 | 0x9000 | 0xD000 |
| ESP8266 | 0x0 | N/A | 0x0 | N/A | N/A |
ESP32 flash is divided into partitions defined by a partition table stored at offset 0x8000. The ROM bootloader reads this table to find the application to boot. If you write firmware to the wrong address:
| File Type | Common Name Pattern | Address |
|---|---|---|
| Single merged / factory | factory.bin, merged.bin, firmware.bin | 0x0 |
| Bootloader (ESP32) | bootloader.bin | 0x1000 |
| Bootloader (C3/S3/C6/H2) | bootloader.bin | 0x0 |
| Partition table | partitions.bin | 0x8000 |
| Application / App | app.bin, firmware.bin, BlinkTest.ino.bin | 0x10000 |
| NVS (WiFi credentials) | nvs.bin | 0x9000 |
| OTA data | otadata.bin | 0xD000 |
| SPIFFS / LittleFS | spiffs.bin, littlefs.bin | 0x290000 |
When you upload a .bin file to ESP Flasher App, it analyzes the filename and auto-selects the flash address:
The ESP32 partition table (at 0x8000) is a 1024-byte binary structure containing up to 95 partition entries. Each entry is 32 bytes and specifies:
ESP Flasher App includes a built-in Partition Table Viewer in the Guide tab — upload any partition table .bin to see its entries decoded.
ESP Flasher App — Browser-based ESP32 & ESP8266 firmware flashing tool