NerdNOS firmware V2.3.1: clean starts, more hashrate, steady numbers
What the new firmware does, why we built it that way, and the measurements behind it.
The BitMiner24 firmware V2.3.1 is the firmware for the NerdNOS, the Bitcoin solo miner with an ESP32-S3 and a Bitmain BM1397 ASIC, the chip generation of the Antminer S17. It is open source under the MIT licence and builds on the NerdMiner_v2 project. We measured it on a unit of the current batch, counted from the results the chip returns, and compared it with what the maintained firmware for this chip family does (Bitaxe ESP-Miner, NerdQAxe, the cgminer driver for the BM1397).
What is new in V2.3.1
- A clean start every time: the chip is switched off and on like pulling the plug, also after a restart over USB, an update or the Hashlink app.
- Every start is checked: within 90 seconds the firmware measures what the chip delivers and how evenly its core groups work, and restarts it at once if it comes up slow.
- New in V2.3.1: the NerdNOS reliably shows up in the Hashlink app and as the WiFi network "NerdMinerAP" after power-on. Before, the radio could stay silent after a start, and the unit could then not be set up or did not join the WiFi.
- Since V2.3.0: the firmware tells the two board variants of the NerdNOS apart and controls each one to suit. It no longer lowers the clock where that costs output, and it remembers the start setting your chip runs cleanly with.
- Since V2.2.1: the start check judges every chip by what it actually delivers. Fast chips whose cores are split differently, as in earlier batches, keep running undisturbed.
- About 135 GH/s at 275 MHz instead of 250 MHz, with a clock setting (PLL) in the range the chip itself uses.
- Steady numbers: display, dashboard and Hashlink app show the average of the last ten minutes, counted from the chip's results.
- Settings stay during the update: WiFi, Bitcoin address and pool survive the browser update.
- From V2.1.0: self-healing, supervisor for accepted shares, thermal protection, plain-language status, Hashlink app compatibility.
Why we built in self-healing
Some NerdNOS units stopped after minutes to hours: display and fan kept going, the dashboard said "KEINE NONCES" (no nonces), and only unplugging helped. The cause was in the firmware. Every restart of the mining chip while running, for example after the thermal protection kicked in, went wrong: on a reset the chip falls back to a slow link speed of 115,200 baud, while the ESP32 kept sending at 3.125 MBaud. From then on the two no longer understood each other.
We fixed it in three layers that build on each other:
- Every chip restart works. Before each start the chip is held in reset and left without power for a second, the link speed is reset, and reading pauses until the chip answers.
- Stall watchdog: if the chip returns no result for a minute while it has work, it is restarted automatically.
- Supervisor: a watchdog of its own checks what counts: does the pool accept shares? If not, it first opens a fresh pool connection and then restarts the whole device, exactly like pulling the plug. The pauses in between grow, so a pool outage does not cause a restart loop.
The supervisor waits on purpose while the chip cools down, while WiFi is gone or while the pool refuses your address. A restart would not help there, so the display tells you what to do instead.
Every start is checked
The BM1397 does not come up equally well after every start. In some starts it ran at only a quarter to half of its speed, and it stayed that way until the next start. We looked at where its results come from: the chip's cores fall into three groups, and in these starts one group delivered almost nothing and the next about half, while the core voltage stayed exactly the same. The clock did not reach every core properly after the start.
The firmware handles this on two levels. The clock setting now stays in the range the chip itself uses after a reset, which made these starts much rarer in our measurements. And after every start the firmware measures for about 90 seconds what the chip delivers and how evenly its three core groups work; if it delivers too little while a group lags, it restarts the chip at once. Since V2.2.1 both conditions count together: chips differ in how their cores are split, and a fast chip with an unusual split keeps running. On units from two batches this check caught every slow start and left every healthy one running.
Why 275 MHz
On the NerdNOS the board fixes the chip's core voltage at about 1.18 volts; other BM1397 miners run at 1.4 volts. At this voltage more clock only helps up to a point. We compared three clocks with six cold starts and 25 minutes of mining each, counting the chip's own results:
| Clock | Hashrate, mean of the starts | Chip temperature |
|---|---|---|
| 250 MHz | 117 GH/s | 51 °C |
| 275 MHz (default) | 136 GH/s | 53 °C |
| 300 MHz | 135 GH/s, a restart needed about every third start | 55 °C |
275 MHz brings about 15 percent more than 250 MHz for 2 °C, and 300 MHz adds nothing on average. Healthy starts also land at slightly different levels, so a NerdNOS delivers between about 120 and 150 GH/s depending on the start, and holds that level while it runs. A unit that cannot hold 275 MHz is stepped down by the firmware on its own.
Thermal protection that thinks along
The temperature is the median of five readings, so a single outlier triggers nothing. Only after three readings above 80 °C, or one at 85 °C, does the firmware switch the chip off. Below 70 °C it starts again at a reduced clock, and after five minutes below 65 °C at full clock. At 275 MHz the NerdNOS sits at around 53 °C, well below all of that.
See at a glance what is going on
The display shows a status at the top right. Whenever it reads something other than MINING, it tells you what to do:
Too hot: give the NerdNOS more air. It resumes by itself.
Chip silent: check the power supply (5 V, at least 2.4 A) and unplug once.
Enter your own Bitcoin address; the pool refuses it or the default is still set.
No pool: check the pool address and the internet connection.
In the browser, the NerdNOS dashboard shows hashrate, temperature, clock, accepted shares and the firmware version. Open it at the IP address the Hashlink app shows after the network scan, the one in your router's device list, or at nerdnos-xxxx.local.
The button on top: reset
The button on top of the NerdNOS is there for resetting. Hold it for 5 seconds and WiFi and settings are cleared; the NerdNOS then restarts in setup mode and you set it up again in the Hashlink app or through the WiFi NerdMinerAP. Handy when you move to a new WiFi or pass the NerdNOS on.
Security and openness
Settings can only be changed from the NerdNOS's own page and from apps on your home network; other websites are turned away, and so is the trick of disguising a foreign website as the device (DNS rebinding). The device never hands out the pool password. We check every firmware file on this page against its SHA-256 before delivery. The firmware is licensed under MIT.
Technical data
| Controller | ESP32-S3, 16 MB flash, 8 MB PSRAM |
| Mining chip | Bitmain BM1397 (Antminer S17 generation) |
| Clock | 275 MHz default, 175 MHz under thermal protection |
| Hashrate | about 135 GH/s (120 to 150 depending on the start) |
| Core voltage | about 1.18 V, fixed by the board |
| Chip temperature | about 53 °C at room temperature |
| Pool | public-pool.io, port 21496 (changeable) |
| Protocol | Stratum v1 with version rolling (BIP 310) |
| Display | 1.9 inch, 320 × 170 pixels |
| Setup | Hashlink app (Bluetooth) or WiFi NerdMinerAP |
| Firmware | V2.3.1-BM24, MIT licence |
Your own block, from your desk
The NerdNOS mines solo on the real Bitcoin network: if it ever finds a block, the whole block reward goes to your address. It runs alongside, and the firmware keeps it running. Shipped from Stuttgart, support in German and English.
