Skip to content

We're upgrading our operations to serve you better. Orders ship as usual from Laval, QC. Questions? Contact us

Bitcoin accepted at checkout  |  Ships from Laval, QC, Canada  |  Expert support since 2016

BITAXE_OTA_FAIL Warning

Bitaxe – OTA Update Failed Mid-Transfer / Partition Switch Error

Bitaxe AxeOS OTA firmware update stalled mid-transfer; web UI unreachable, OLED frozen, or miner stuck in reboot loop / AP-config fallback. ESP-Miner dual-OTA usually rolls back automatically; if not, USB serial re-flash recovers.

Warning — Should be addressed soon

Affected Models: Bitaxe Supra, Bitaxe Ultra, Bitaxe Gamma, Bitaxe Gamma Turbo (GT), Bitaxe Hex (all running AxeOS / ESP-Miner)

Symptoms

  • AxeOS dashboard `Firmware Update` progress bar froze and the page became unresponsive
  • OLED frozen on AxeOS splash, stuck on `Updating firmware...`, or completely dark
  • After power-cycle, Bitaxe boots into AP-config mode (`Bitaxe_XXXXXX` SSID) instead of joining home WiFi
  • Bitaxe stuck in reboot loop — OLED splash, 5-15 s, reset, repeat
  • Web UI at `http://bitaxe.local` or static IP returns connection refused or never responds
  • Serial console at 115200 8N1 shows `ota_ops: Image validation failed`, `boot: Fall back to factory`, or `esp_image: invalid magic byte`
  • Repeated `rst:0x3 (RTC_SW_SYS_RST)` resets immediately after the AxeOS banner on serial console
  • Hashrate is zero across pool dashboard and external monitors; ASIC heatsink at ambient temperature
  • WiFi credentials and pool config appear missing on first boot after the failed update (NVS may be wiped)
  • Was updating from older v2.0.x to newer v2.x.x build, or attempting cross-flash (stock AxeOS to NerdQAxePlus / NerdAxe)
  • Home WiFi switched to 5 GHz / Wi-Fi 6E mid-update — Bitaxe ESP32-S3 only supports 2.4 GHz
  • Power LED solid; 5V and 3.3V rails present at test points (rules out power-domain failure)

Step-by-Step Fix

1

Wait 5 full minutes after the OTA appears to stall before doing anything destructive. ESP-IDF's `esp_https_ota` post-download SHA verification can take 60-90 seconds on a slow flash, and the OTA may complete silently after the visible progress bar froze. If the OLED comes back on its own, run `Test Mining` from the dashboard for 5 minutes to confirm hashrate, then retry the update on a stable network.

2

Hard power-cycle from the breaker / outlet. Unplug both USB-C and the DC barrel jack (or USB-C only if that's your only power). Wait 30 full seconds for the 5V rail capacitors to drain. Plug back in, wait 60 seconds for AxeOS to fully boot, then check `http://bitaxe.local` or your reserved IP. ESP-Miner's bootloader auto-rolls back to the last-known-good OTA partition if the new one fails CRC validation. About 70% of stalled OTAs recover on this single power-cycle.

3

Look for the AP-config fallback SSID `Bitaxe_XXXXXX` in your phone's WiFi list within range of the miner. If it appears, the firmware booted but NVS lost WiFi credentials. Connect a phone to that SSID, browse to `http://192.168.4.1`, re-enter your WiFi password and pool URL. This is soft-recovery — no flashing needed, takes 2 minutes. Save credentials in a password manager next time.

4

Verify your home network is still 2.4 GHz. Bitaxe ESP32-S3 supports ONLY 2.4 GHz WiFi — no 5 GHz, no Wi-Fi 6E. If you switched routers / mesh / bands mid-update, the OTA may have completed but the new firmware can't reconnect. Re-enter the AP-config flow (Step 3) and connect to a 2.4 GHz SSID specifically.

5

Hard-reset NVS via 5-second `RESET` hold. Some AxeOS builds support an NVS-clear gesture: hold the `RESET` button for 5+ seconds while powered. This wipes NVS without touching OTA partitions, forcing AP-config mode on next boot. Useful if NVS state is corrupt from a half-completed migration. Re-enter WiFi and pool config when the AP appears.

6

Use the Bitaxe Web Flasher to re-install factory firmware while preserving NVS. Open bitaxe.org/flasher in Chrome or Edge (Firefox/Safari do NOT support WebSerial). Connect via a known-good USB-C DATA cable. Click `Connect`, select the `USB Serial Device` / `ESP32-S3` port. Pick your exact model from the dropdown. Click `Install`. CRITICAL: leave `Erase Flash` UNCHECKED — this preserves NVS so WiFi creds, pool config, and ASIC calibration survive recovery. Total time: 30-60 seconds.

7

`esptool.py` re-flash from the command line for full control. `pip install esptool`. Force ROM bootloader: unplug, hold `BOOT`, plug USB-C, release `BOOT` after 3 seconds. Run `esptool.py --chip esp32s3 --port COMx --baud 921600 write_flash -z 0x0 esp-miner-factory-<model>-vX.Y.Z.bin` — substitute correct factory `.bin` from github.com/skot/ESP-Miner/releases. The combined factory image writes bootloader (0x0), partition table (0x8000), and factory app (0x10000) in one shot. Terminal errors are vastly more informative than the Web Flasher.

8

Reset `otadata` to force factory boot if rollback won't engage. If the symptom is repeated `boot: Fall back to factory` on serial console or the bootloader is stuck pointing at a corrupt OTA slot, erase only `otadata`: `esptool.py --chip esp32s3 --port COMx erase_region 0xe000 0x2000`. The 0xe000 offset and 0x2000 size match the standard ESP-IDF partition layout. After erase, reset the chip — it boots from the `factory` slot. You can then OTA back to the desired version from a clean state.

9

Download the EXACT correct factory `.bin` for your hardware. From github.com/skot/ESP-Miner/releases pick: `factory-gamma` for Gamma/GT, `factory-supra` for Supra, `factory-ultra` for Ultra, `factory-max` for Max. Bitaxe Hex uses the multichip-fork factory image from shufps/ESP-Miner-NerdQAxePlus if running that fork, or the Hex-specific image in the main repo. Cross-flashing variants boots ESP32 but traps `asic_init_fail` because the wrong ASIC driver talks to wrong silicon — looks bricked, isn't, but requires re-flash with correct image.

10

Validate flash address layout before writing custom binaries. Standard ESP-Miner partition table: `bootloader` at 0x0, `partition_table` at 0x8000, `nvs` at 0x9000, `otadata` at 0xe000, `phy_init` at 0xf000, `factory` at 0x10000, `app0` at ~0x110000, `app1` at ~0x210000. If flashing partitions individually instead of the combined factory `.bin`, get those offsets right or you overwrite NVS and lose WiFi creds. The combined factory `.bin` writes everything except `nvs` — that's why it's the safe default.

11

UART recovery if USB-C is also dead. Bitaxe exposes labeled `TX0`, `RX0`, `GND`, `EN`, `IO0` test points on the PCB. Solder pin headers (or use spring-loaded pogo pins). Connect FT232RL or CP2102 USB-to-3.3V-UART adapter: adapter `TX` → Bitaxe `RX0`, adapter `RX` → Bitaxe `TX0`, common `GND`. Power Bitaxe via its normal 5V input (not the UART adapter's 5V — avoids backfeed). Short `IO0` to `GND`, briefly pulse `EN` to `GND` (hardware reset), release `EN`, then release `IO0`. Run `esptool.py --port <UART-COMx> --chip esp32s3 --baud 460800 chip_id`.

12

Drop UART baud rate if 460800 fails. UART signal integrity over flying leads is much worse than a clean USB trace. Try `--baud 230400`, then `--baud 115200`. `write_flash` at 115200 on a 16 MB part takes 6-8 minutes — be patient, don't move the wires, don't unplug. The slower baud is more reliable on noisy hookups.

13

Read NVS before any destructive recovery to preserve WiFi creds and pool config. `esptool.py --chip esp32s3 --port COMx read_flash 0x9000 0x6000 nvs-backup.bin`. After re-flashing factory, write NVS back: `esptool.py write_flash 0x9000 nvs-backup.bin`. This preserves network configuration across a full erase-and-restore. Particularly useful when you don't remember the long auto-generated WiFi password from your AP-config setup three months ago.

14

Cross-flash an alternative firmware to confirm hardware health. From bootloader (USB-C or UART), flash a different ESP-Miner fork to confirm ESP32-S3 + flash chip are both healthy. For NerdQAxe-style multichip Bitaxes try shufps/ESP-Miner-NerdQAxePlus. For NerdAxe try BitMaker-hub/ESP-Miner-NerdAxe. If any boots and shows native UI, hardware is fine and original failure was firmware-side. Returning to your preferred stock build is just another flash cycle from a known-good baseline.

15

Check SPI flash health with `esptool.py flash_id` and full erase test. Run `esptool.py --chip esp32s3 --port COMx flash_id` — should return manufacturer ID matching MFG 0xc8 (GigaDevice) or 0xef (Winbond) and `Detected flash size: 16MB`. Then run a full `erase_flash` and re-program. If the erase fails partway through with `Timed out waiting for packet header` or hangs at a specific sector, the SPI flash chip itself may be wearing out — that's Tier 4 territory because it requires desolder + replace, not a home fix.

16

Stop DIY (Tier 4) when: UART recovery per Step 11 also returns `Failed to connect`; OR `esptool.py erase_flash` consistently fails at the same sector (SPI flash wearout); OR ESP32-S3 module shows physical damage (scorching, cracked epoxy, swollen caps, burnt smell); OR you reverse-polaritied 5V DC input and the 3.3V LDO is dead; OR USB-C connector pads have torn loose past hand-reflow; OR your own hot-air reflow attempt made things worse. Ship to D-Central — we pioneered the Bitaxe ecosystem, built the original Bitaxe Mesh Stand, developed the first Bitaxe + Bitaxe Hex heatsinks, and stock ESP32-S3 modules + 16 MB SPI flash + USB-C connectors for exactly these recoveries.

17

D-Central bench process: run the full diagnostic protocol on bench fixtures with a known-good 3.3V UART harness and a clean USB-C tester. If SPI flash is the culprit, hot-air-swap the GD25Q128 / W25Q128 module, re-flash factory image, burn-in 4-6 hours at nameplate hashrate. If ESP32-S3 module itself is dead, swap with a pre-flashed replacement matching your variant. Replacement USB-C connectors, lifted-pad jumpers, burnt LDO replacements all happen on the same bench. Turnaround typically 3-7 business days.

18

Ship safely. ESD bag (anti-static), foam cradle inside a rigid box, note inside describing the failure (which AxeOS version you were OTA'ing from → to, whether USB-C and UART recovery were attempted, whether the OLED shows anything during boot). If you soldered UART headers onto the test points, mention it — we either remove them or leave them per your preference. Include any heatsink and fan accessories so we can full-stack bench-test. Canada Post small-parcel or UPS Ground; we receive at D-Central HQ in Quebec and crack open within 48 hours.

When to Seek Professional Repair

If the steps above do not resolve the issue, or if you are not comfortable performing these repairs yourself, professional service is recommended. Attempting advanced repairs without proper equipment can cause further damage.

Related Error Codes

Still Having Issues?

Our team of Bitcoin Mining Hackers has been repairing ASIC miners since 2016. We have seen it all and fixed it all. Get a professional diagnosis.