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.

  1. Extract the downloaded firmware archive.
  2. Open ESP Huhn Tool and click Connect.
  3. Select the board’s serial port.
  4. Add merged.bin at offset 0x0. This single file contains the bootloader, partition table, and firmware at the correct offsets for your board, so it is the recommended path.
  5. Click Flash and wait for it to finish.
  6. 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.

Chipbootloader.binpartitions.binfirmware.bin
ESP32, ESP32-S20x10000x80000x10000 (factory) or 0x20000 (OTA)
ESP32-C5, ESP32-P40x20000x80000x10000 (factory) or 0x20000 (OTA)
ESP32-S3, ESP32-C3, ESP32-C60x00x80000x10000 (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, not 0x1000 or 0x0. Some third-party flasher instructions still say 0x0 for 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.