Flashing Firmware

How to flash PwnPower firmware to ESP32 devices

Flashing Firmware

PwnPower supports ESP32-C3 and ESP32-C5 targets with custom OTA partition layouts.

Flash Offsets

PwnPower uses OTA partition layouts (not factory layouts). Use these offsets when flashing:

ESP32-C3 (4MB Flash)

  • Application: firmware.bin at 0x20000
  • Bootloader: bootloader.bin at 0x0
  • Partition Table: partitions.bin at 0x8000

ESP32-C5 (8MB Flash)

  • Application: firmware.bin at 0x20000
  • Bootloader: bootloader.bin at 0x0
  • Partition Table: partitions.bin at 0x8000

Do NOT use factory offsets - Flashing firmware at 0x10000 will not work with PwnPower’s OTA partition layout.

Flashing Methods

Method 1: Individual Files

Flash the three binary files separately using the offsets above:

  1. Flash bootloader.bin to 0x0
  2. Flash partitions.bin to 0x8000
  3. Flash firmware.bin to 0x20000

Method 2: Merged Binary

Use the pre-merged binary from the build output:

  • Flash pwnpower-merged.bin to 0x0

The merged binary contains all components at the correct offsets for OTA layout.

Partition Tables

Both targets use custom partition tables with OTA support:

  • ESP32-C3: partitions.csv (4MB flash)
  • ESP32-C5: partitions_8mb.csv (8MB flash)

Both tables define:

  • nvs, otadata, phy_init partitions
  • ota_0 and ota_1 application partitions
  • scandata partition for WiFi scan storage

Verification

After flashing, the device should boot and show:

  • ESP-IDF bootloader messages
  • Partition table with OTA layout
  • PwnPower application starting
  • WiFi AP “PwnPower” available

If you see “No bootable app partitions”, the firmware was flashed at the wrong offset (likely 0x10000 instead of 0x20000).