Manual USB Flashing
Flash a downloaded GhostESP release when the web flasher is unavailable
On this page
Manual USB flashing installs a downloaded release bundle with ESP Huhn Tool. Use it when you need a specific release file or the recommended web flasher is unavailable.
Download the firmware .zip for your board from GhostESP Releases and extract it with 7-Zip or a similar tool. You also need a compatible board and USB data cable, plus Chrome, Brave, or Edge for ESP Huhn Tool.
Flash the firmware
Enter bootloader mode first: hold BOOT, connect USB, then release BOOT. If that does not work, hold BOOT, tap RESET, wait 1-2 seconds, then release BOOT.
- Extract the downloaded firmware archive.
- Open ESP Huhn Tool and click Connect.
- Select the board’s serial port.
- Add
merged.binat offset0x0. This single file contains the bootloader, partition table, and firmware at the correct offsets for your board, so it is the recommended path. - Click Flash and wait for it to finish.
- Unplug and reconnect the board.
GhostESP starts and creates the GhostNet access point. You can verify boot output with a serial console at 115200 baud.
Advanced: flashing the separate binaries
If you prefer to flash the individual files, use the offsets below. The bootloader offset depends on the chip, and the firmware offset depends on your board’s partition layout - getting either wrong produces a board that flashes successfully but never boots.
| Chip | bootloader.bin | partitions.bin | firmware.bin |
|---|---|---|---|
| ESP32, ESP32-S2 | 0x1000 | 0x8000 | 0x10000 (factory) or 0x20000 (OTA) |
| ESP32-C5, ESP32-P4 | 0x2000 | 0x8000 | 0x10000 (factory) or 0x20000 (OTA) |
| ESP32-S3, ESP32-C3, ESP32-C6 | 0x0 | 0x8000 | 0x10000 (factory) or 0x20000 (OTA) |
Check the OTA column in Supported Hardware: ✓ means the release uses a dual-partition layout, so firmware.bin usually belongs at 0x20000, and Manual builds use the single-app layout at 0x10000. Some OTA boards use a custom offset instead: S3TWatch uses 0x800000, the C5 flash-XIP builds (NM-CYD-C5, T-Dongle-C5) use 0x500000, and CrowPanel P4 builds use 0x490000. If you are unsure which you have, flash merged.bin instead.
ESP32-C5 note: the C5 ROM expects the bootloader at
0x2000, not0x1000or0x0. Some third-party flasher instructions still say0x0for C5 boards - that will not boot.
Troubleshooting
- The board is not detected: Use a data-capable cable, close other serial apps, and retry bootloader mode.
- Flash fails: Confirm that each binary came from the same release archive and uses the matching offset.
- The board loops after flashing: Check that the downloaded release matches the exact board and chip.
