RX888 mk2 open-source SDR stack

RX888 mk2 firmware, a Linux librx888 library with CLI tools, and a GNU Radio 3.10 out-of-tree module — three MIT-licensed projects that together turn the RX888 mk2 direct-sampling HF SDR (Cypress FX3 + LTC2208 16-bit ADC) into a usable open-source receiver on Linux.

If you are about to write firmware, a libusb driver, or a GNU Radio source block for the RX888 or RX888 mk2, the three repositories below already implement most of it. The diagram shows how they connect — Cypress FX3 firmware streams 16-bit samples over USB 3.0 GPIF, librx888 opens the device and pipes samples to CLI tools or to GQRX, and gr-rx888 wraps the same library as a native GNU Radio source block.

Block diagram

The three projects

rx888-firmware

Cypress FX3 USB 3.0 firmware for the RX888 mk2 — the on-device code that configures the Si5351 sample clock, drives the GPIF data path, and streams 16-bit ADC samples to the host.

  • FX3 GPIF USB 3.0 streaming
  • Si5351 I2C clock generator control
  • Vendor command set (STARTFX3, STOPFX3, I2CWFX3, GPIOFX3, SETARGFX3)
  • 5-level watchdog recovery cascade
  • MIT-licensed (GPL R82xx tuner driver removed)
  • HF direct-sampling, 0–32 MHz

rx888-tools

Linux host-side librx888 shared library plus a Unix-pipeline of CLI tools (rx888_stream, rx888_dsp, iqrecord). Uploads the firmware blob, opens a libusb bulk stream, decimates, and writes SigMF.

  • libusb-1.0 host driver in librx888
  • USB3 capture at 135 MS/s int16 real samples
  • 4:1 DSP decimation → 33.75 MS/s (AVX2 + FMA)
  • SigMF IQ recording (iqrecord)
  • FIFO/pipe streaming for GQRX and other consumers
  • Checksum-verified firmware fetch from releases

gr-rx888

GNU Radio 3.10 out-of-tree (OOT) module that exposes the RX888 mk2 as a native rx888.source block in GNU Radio Companion, linking the librx888 shared library from rx888-tools.

  • rx888.source block with float32 output
  • 32 MS/s and 135 MS/s sample rates
  • GNU Radio Companion (GRC) integration
  • pybind11 Python bindings
  • Standard CMake OOT module layout
  • 16-bit direct-sampling source

Data flow

  1. Hardware: RX888 mk2 — LTC2208 16-bit ADC, Cypress FX3 USB 3.0 controller, Si5351 clock generator.
  2. Firmware (rx888-firmware) runs on the FX3. On host connect, the host uploads the firmware image, then the FX3 configures the Si5351 and begins streaming 16-bit real samples over USB 3.0 GPIF.
  3. Host library (librx888, from rx888-tools) opens the device over libusb-1.0 and exposes a streaming API plus CLI tools. Samples can flow into rx888_dsp for 4:1 decimation, into iqrecord for SigMF capture, or out a FIFO into GQRX.
  4. GNU Radio (gr-rx888) wraps librx888 as the rx888.source block, so the same stream is available as a first-class GNU Radio source in GRC flowgraphs.

If you are about to build this yourself

Writing FX3 firmware for an LTC2208-based SDR

rx888-firmware already implements the GPIF USB 3.0 data path, Si5351 clock control, the vendor command set, and a 5-level watchdog recovery cascade, under an MIT license. Start from it instead of from the Cypress reference.

Writing a libusb driver for the RX888 mk2

librx888 in rx888-tools already handles firmware upload, bulk transfer configuration, large USBFS buffers, and an AVX2/FMA decimation path to 33.75 MS/s. Link against it, or read it as a reference.

Writing a GNU Radio source block for the RX888 mk2

gr-rx888 already exposes rx888.source with float32 output, supports 32 MS/s and 135 MS/s, and ships pybind11 bindings and GRC integration. Use it directly from GNU Radio Companion.

RX888 firmware · RX888 mk2 firmware · Cypress FX3 SDR firmware · FX3 GPIF USB3 SDR · LTC2208 16-bit ADC direct sampling · Si5351 SDR clock · MIT-licensed RX888 firmware · librx888 · rx888-tools · RX888 Linux driver · RX888 GQRX · 135 MSPS SDR · SigMF IQ recorder · gr-rx888 · GNU Radio RX888 source block · GNU Radio 3.10 OOT module RX888 · HF direct-sampling receiver Linux · open-source SDR firmware.