r/esp32AI

Finally ~950 KH/s NerdMiner Open-Source on the CYD ESP32-2432S028R
▲ 15 r/esp32AI+2 crossposts

Finally ~950 KH/s NerdMiner Open-Source on the CYD ESP32-2432S028R

Modded from the original to give ~950KH/s and some new themes.

GitHub https://github.com/HenrysCat/NerdMiner-Modded

Web flasher here https://henryscat.github.io/NerdMiner-Modded/

Why this hashrate is real...

The ~950 KH/s is what the miner actually hashes, not what a counter says:

- **Hardware limit** – the classic ESP32's SHA engine can't be loaded with an external midstate, so every nonce costs three hardware hash blocks plus two engine loads: about 228 CPU cycles of engine time, a ceiling of roughly 1.05 MH/s at 240 MHz. The mining loop keeps the engine busy for all but ~30 cycles of each nonce (257 cycles per nonce, ~930 KH/s); the second core adds ~25 KH/s in software.

- **Measured on the chip** – the loop's timing comes from an on-device bench (`-D SHA_BENCH`, see `src/sha_bench.cpp`) that checks every single hash against software, also while the other core hammers the peripheral bus. That is how the hardware quirk behind silently corrupted hashes in the usual pipelined loops was found: writes to the SHA registers less than three cycles apart can be dropped whenever the other core is using the same bus.

- **Only valid hashes are counted** – every candidate the hardware finds is recomputed in software before it is used. A hashrate counter on its own can look faster after an optimisation while the miner is quietly producing *fewer* valid shares, because corrupted hashes are still counted; here the firmware checks itself with a known-answer test at power-on and falls back to a slower loop if the fast one ever gets hashes wrong.

- **The rate is the rate it actually mines at** – it's the sustained average over a long run, not a short burst or a best-case peak.If a number sounds too good for this chip, check whether the shares it finds actually keep up with it.

u/enormousaardvark — 11 days ago
▲ 15 r/esp32AI+1 crossposts

ESP32-S3 board as a 13 cm transceiver: rtl_tcp receiver for SDR++ and FM/SSB voice transmitter

An update to my earlier post about receiving 2.4 GHz with an ESP32-S3: it **transmits** now, too, and the whole thing is a proper release.

**Receive.**
`espdr-rx` turns the board into an rtl_tcp server (1.84 to 2.79 GHz, 250 or 333 ksps, no FPGA); SDR++ and GNU Radio use it as an RTL-SDR.

**Transmit.**
`espdr-tx` sends narrowband FM or SSB voice in 2320 to 2450 MHz from a WAV file, a pipe or a sound card. The chip has no I/Q input, so the trick is polar modulation: the Wi-Fi PHY's test-tone carrier is steered in frequency (the RF PLL's sigma-delta word, 40 000 updates per second) and in amplitude (a gain code,
0.28 dB steps over 18 dB), computed on the PC from the analytic signal of the audio. Screenshot: SDR++ with a HackRF on a second computer receiving the SSB
voice from the ESP32-S3 (that is the
*only*
transmitter).

Measured with a PlutoSDR: with the SSB carrier fully suppressed the unwanted sideband is 61 to 63 dB and the third-order intermodulation 33 dB below the wanted tones. Speech is understood
in FM and SSB, from a file and live from a microphone, for 20 to 30 s at a time without an underrun.

**Honest limits:**
one board, one host (Linux), tested with a PlutoSDR and a HackRF. The power is not calibrated (an estimate: microwatts at the antenna of a dev board), harmonics and
spurious emissions are not measured, the frequency is as good as the board's crystal (mine is +5.4 ppm off; `--ppm` corrects it). It sends only in the 13 cm band and needs an amateur
licence, which the tool asks you to confirm. Much of the code and the documentation was written with Claude as the coding assistant; every number in the docs was measured.

It stands on eSpDR by **h0m3us3r**, who found how to read the chip's undocumented I/Q dump path (thank you!).

Repo and release (the wheel contains the firmware, `pipx install` is enough): https://github.com/jochenhammes/esp32-sdr-trx - https://github.com/jochenhammes/esp32-sdr-trx/releases/tag/v1.0.0-rc2.
How it works and all measurements: `docs/internals.md` and `docs/research/TX-RESEARCH.md`. Reports from other boards are very welcome.

u/da2jh — 12 days ago