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

NERDQAXE_FAN_FW Warning

NerdQAxe – Fan Not Spinning After Firmware Update

NerdQAxe fan stuck at 0 RPM immediately after a firmware update - dashboard shows fan tach `0`, ASIC chain heat-soaks past 70 C and the firmware throttles into overtemp protection. Almost always firmware-side: PWM polarity flipped, `fan_min_pct` reset to 0 by NVS migration, or PWM GPIO pin reassigned in the new build. Three dashboard tweaks plus a rollback to a known-good factory `.bin` recovers the unit without a soldering iron.

Warning — Should be addressed soon

Affected Models: NerdQAxe, NerdQAxe+, NerdQAxe++, NerdQAxe++ Hydro

Symptoms

  • NerdQAxe was running fine until a firmware update was flashed via OTA, the shufps Web Flasher, or `esptool.py`
  • Dashboard reads `Fan Speed: 0 RPM` or `Fan Tach: --` immediately after the update
  • Fan blades do not move on power-up - or twitch once and stop
  • Fan blades spin freely when nudged with a finger (chassis off, miner off) - blade is not seized
  • Case temperature climbs steadily after boot - controller PCB and BM1370 ASICs heat-soak with no airflow
  • Dashboard ASIC temp climbs past 60 C within 5 minutes, past 70 C within 10
  • Firmware overtemp throttle activates around 70-75 C - hashrate drops or unit reboots into thermal-protection state
  • Manual fan override at 100% in the dashboard does not spin the fan, or spins it briefly then stops
  • Rolling firmware back to the previous tag makes the fan work again - confirms bug is firmware-side, not hardware
  • Serial monitor at 115200 baud shows `pwm: invalid duty` / `fan_pwm_init failed` / `gpio_set_level: pin XX not configured` after boot
  • Dashboard fan tach reads `0` while manual fan slider is at any non-zero value
  • Multimeter on the 4-pin header reads 12V between pin 1 (GND) and pin 2 (VCC) but PWM line (pin 4) is stuck high or stuck low instead of pulsing

Step-by-Step Fix

1

Power off the miner immediately by unplugging the 12V PSU at the wall. With the fan stopped, the BM1370 chain heat-soaks within minutes and thermal damage on ESP32-S3 boards plus BM1370 silicon is cumulative. Don't keep the unit running while you diagnose. Open the chassis if needed and let everything cool to room temperature before retrying. Diagnostic time should be measured in minutes-with-airflow-restored, not hours-baking-with-fan-stopped.

2

Spin the fan blade by hand to rule out seizure or obstruction. Case open, miner powered off. The blade should turn freely with light bearing drag - no grinding, no scraping, no resistance from a cable or airflow vane in the rotor path. If anything obstructs the blade, fix it before powering up. If the fan itself is mechanically dead - seized, bearing failed, blade cracked - you need a replacement fan, not a firmware fix; skip ahead to fan replacement (Step 9).

3

Power back up, open the dashboard at `http://nerdqaxe.local` (or the static IP), set Fan Speed Override to 100% manually. Navigate Settings -> Fan Control. Switch Auto Fan Control: OFF and pull the manual fan slider to 100%. Save. Wait 5 seconds. If the fan ramps to full speed audibly, the auto-curve is broken (NVS wipe set `fan_min_pct = 0`); go to Step 4. If the fan does nothing at 100% manual, the PWM signal isn't reaching the fan; go to Step 5 then Step 6.

4

Check Fan Min % and Fan Invert PWM in the dashboard. Newer `nerdqaxeplusplus` builds expose `fan_min_pct` and an Invert Fan PWM toggle in Settings -> Fan Control -> Advanced. Set Fan Min % to 30 (safe baseline). If Invert Fan PWM exists, toggle it - if your fan stops on auto but spins at 100% manual, polarity is the issue; one position works, the other won't. Save and reboot. Watch the fan for 60 s after boot. If `fan_min_pct` is not exposed, the running build is too old or too new for that field - go directly to Step 5 (rollback).

5

Roll back the firmware to the last-known-good release. Identify the firmware tag that was running before the update broke the fan. Open https://github.com/shufps/ESP-Miner-NerdQAxePlus/releases, download the factory `.bin` for that earlier release matching your variant (BM1366 = NerdQAxe, BM1368 = NerdQAxe+, BM1370 = NerdQAxe++ / Hydro). Force ROM bootloader (unplug USB-C, hold `BOOT`, plug, release after 3 s), open https://shufps.github.io/nerdqaxe-web-flasher/ in Chrome or Edge, tick Erase Flash, install the older factory. Wipes NVS state and any half-migrated config from the bad update.

6

Multimeter the 4-pin fan header to isolate firmware vs hardware. Power off, unplug the fan from the controller PCB, power back on with case open. Multimeter set DC volts: pin 1 (GND) to pin 2 (12V) should read 12 V sustained. Pin 4 (PWM) to GND with manual override at 100% should read steady 3.3 V (non-inverted polarity) or steady 0 V (inverted polarity). Steady 12 V on pin 2 + correctly pulsing pin 4 = firmware is fine, fan is dead. No 12 V or stuck PWM tells you controller PCB or firmware GPIO mapping is at fault.

7

Identify your exact NerdQAxe variant before re-flashing. Open the case, count ASICs, read chip part number under a jeweller's loupe or phone macro lens: BM1366 = NerdQAxe, BM1368 = NerdQAxe+, BM1370 = NerdQAxe++ / Hydro. Note the display (0.96 inch OLED vs 1.14 inch TFT vs 1.9 inch TFT) and any Hydro markings. Cross-reference https://github.com/shufps/ESP-Miner-NerdQAxePlus/releases before downloading. A wrong factory `.bin` turns one fan-PWM problem into a multi-issue brick. The PWM GPIO pin differs between PCB revisions on `nerdqaxe+` vs `nerdqaxe++`.

8

Web Flasher -> Erase Flash -> install variant-correct factory `.bin`. With variant confirmed, force ROM bootloader (unplug USB-C, hold `BOOT`, plug, release after 3 s). Open https://shufps.github.io/nerdqaxe-web-flasher/ in Chrome or Edge - Firefox and Safari do NOT support WebSerial. Click Connect, pick the ESP32-S3 serial port, tick Erase Flash (mandatory - wipes the broken NVS state), pick your variant's factory `.bin`, click Install. Erase 15-30 s, flash 60-120 s. After completion, unplug USB-C, cold-plug the 12V PSU, watch the fan ramp within 30 s.

9

Replace the fan if it's mechanically dead. NerdQAxe++ uses a 40 mm or 60 mm 12V 4-pin PC fan depending on chassis revision. Recommended: Noctua NF-A4x10 PWM (40 mm) or NF-A6x25 PWM (60 mm) - quiet, long-lived, full PWM control. Sunon Maglev, Delta, or Arctic alternatives also work. Match the connector (standard 4-pin PC fan header), match size to chassis cutout, verify the fan is rated for at least 0.10 A on the 12V rail. D-Central stocks NerdQAxe variants and accessories in the Nerd Family catalog including replacement fans.

10

Reconfigure pool, WiFi, and Bitcoin payout address after a fresh flash. Erase Flash wipes stored pool URL, worker name, SSID, and password. On first boot the miner broadcasts `NerdQAxe_XXXXXX` AP SSID. Connect, set WiFi credentials, set pool (`solo.ckpool.org:3333` or `public-pool.io:21496` for solo hunters, your pool of choice otherwise), set Bitcoin payout address (verify pool accepts Taproot before using `bc1p...`). Save. Reboot. Watch the dashboard for fan ramping and hashrate climbing within 3 minutes.

11

Capture PWM signal with a logic analyzer or oscilloscope. Saleae Logic 8 clones run $15-25 on Amazon. Probe the PWM line (pin 4 of the 4-pin header) and GND. With manual fan override at 50% in the dashboard, expect a 25 kHz square wave with 50% duty cycle swinging 0 to 3.3 V (or inverted polarity if firmware/board pairing inverts). If frequency is way off (1 kHz, 50 kHz, anything outside 20-30 kHz), firmware LEDC timer config is wrong - this is a build-side bug, roll back to a known-good release tag. If duty cycle doesn't track the dashboard slider, firmware PWM-to-duty mapping is broken.

12

Manually edit NVS via `esptool.py` to reset fan parameters. When the dashboard doesn't expose `fan_min_pct` (older firmware) and you want to keep the current build instead of rolling back: dump NVS, edit, write back. `pip install esptool nvs_partition_gen`. Connect over UART or USB-C debug (force ROM bootloader). Read NVS partition: `esptool.py --chip esp32s3 --port COMx read_flash 0x9000 0x6000 nvs.bin`. Convert binary blob to CSV with Espressif `nvs_partition_gen.py decode`, edit `fan_min_pct` row to `30`, regenerate the partition, write back: `esptool.py --chip esp32s3 --port COMx write_flash 0x9000 nvs_modified.bin`. Reboot.

13

Cross-flash the upstream `bitmaker-mining/NerdQAxePlus` build to confirm the bug is fork-specific. If the fan misbehaves on the shufps fork, try the upstream https://github.com/bitmaker-mining/NerdQAxePlus build for your variant. Or vice-versa. If one runs the fan correctly and the other doesn't, you've isolated the bug to a specific fork's PWM or NVS handling - file an issue against the broken fork with your serial-log capture and dashboard screenshot. Open-source means you can pivot forks in 5 minutes when one breaks.

14

Re-seat or re-solder the 4-pin fan header. If pin 4 (PWM) reads stuck high / stuck low at the multimeter regardless of dashboard override, and the fan is known good, the GPIO trace from the ESP32-S3 to the header may have a bad joint. Inspect under magnification - cold joints, cracked solder, lifted pads. Reflow each pin with a fine-tip iron (~330 C, Pinecil / TS100 / Hakko). Lifted pad: scrape 0.5 mm of soldermask back to expose fresh copper, bridge with 30-gauge enamelled wire to the nearest via or component pad on the same net. $5 in parts, 15 minutes if you've worked on a Bitaxe or NerdQAxe controller before.

15

Build firmware from source with verified pin mapping. When no public release matches your exact PCB revision, build from source. `git clone https://github.com/bitmaker-mining/NerdQAxePlus` (or shufps fork), open `main/include/pin_definitions.h` in your editor, verify `FAN_PWM_PIN` matches your board's silkscreen-labeled GPIO, set `FAN_PWM_FREQ_HZ` to `25000`, set `FAN_DEFAULT_MIN_PCT` to `30`. ESP-IDF build: `idf.py set-target esp32s3 && idf.py build && idf.py -p COMx flash monitor`. Your config, your hardware, your guarantee - the Mining Hacker move when stock builds keep breaking the fan.

16

When to stop DIY: book D-Central repair if multimeter shows 0 V or below 11 V on pin 2 (the fan-power FET on the controller PCB is dead), PWM line is stuck high or stuck low at all overrides AND a clean factory reflash + cross-flash of an alternative firmware doesn't change behaviour, you reflowed or replaced components and made things worse, the controller PCB shows scorched components or burnt-electrolytic odour near the fan header, or the unit ran hot for an extended period before fan failure was caught and you want a bench-test on the BM1370 chain for thermal-stress damage. D-Central stocks NerdQAxe variants, replacement fans, ESP32-S3 modules, fan-power FETs.

17

What D-Central does at the bench. We probe the 4-pin header with a calibrated bench DMM and a Saleae logic analyzer to confirm whether the issue is firmware, GPIO output stage, fan-power FET, or fan itself. If firmware: re-flash variant-correct factory `.bin` from internal pre-loaded image library and verify fan operation through 4-hour burn-in. If FET: replace the 12V switch FET (typical SOT-23 P-MOSFET, $0.50 part) and re-test. If ESP32-S3 GPIO is dead: hot-air the ESP32-S3 module (preheat 150 C, top-side 320-340 C for ~30 s), drop in fresh pre-flashed module. If fan: swap in Noctua or spec-equivalent.

18

Ship safely to D-Central. ESD bag, foam cradle in a rigid box, include the 12V PSU and XT30 lead you've been using, a note describing symptoms - what firmware version you flashed, what the fan did pre- and post-update, what the dashboard fan-control screen showed, whether multimeter testing was attempted, whether you cross-flashed an alternate firmware. If you soldered or reflowed anything, mention it. Canada Post small-parcel or UPS Ground; D-Central HQ receives and opens 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.