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:
- Flash bootloader.bin to 0x0
- Flash partitions.bin to 0x8000
- 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).