SDR
for Raspberry Pi 5
V1 built and validated · V2 prototypes being ordered Software-defined radio · full duplex

A real radio, wired straight into the Pi 5.

RFive is a software-defined radio add-on board that talks to the Raspberry Pi 5 over PCIe, not USB, transmits and receives at the same time, and timestamps every sample in hardware. Enough to run a cellular base station on a single-board computer.

Rendering of the RFive board mounted on a Raspberry Pi 5, with RX and TX SMA connectors on the edge

Rendering of the V2 board, shown mounted on a Raspberry Pi 5 (not included). Final hardware may differ.

  • 325 MHz – 3.8 GHzTransceiver tuning range, up to 20 MHz of bandwidth
  • Full duplexTransmit and receive at once, on separate SMA ports
  • PCIe ×1Direct to the Pi 5 · 122 MB/s measured on V1
  • Hardware timeOne sample counter for both directions
01  What it runs

Not a roadmap. Demonstrations, measured.

Every item below ran on the manufactured V1 board driven by a Raspberry Pi 5, unless it is marked as simulated. Work still in progress is marked as such.

LTE · NB-IoT · 5G NR

A cellular network on a single-board computer

  • NB-IoT base station (OpenAirInterface, Release 17): a commercial nRF9151 modem finds the cell, authenticates and receives an IP address. Five attach/detach cycles in a row, no failure.
  • LTE eNB on srsRAN, 50 PRB: cell confirmed on air, a test UE decodes its SIB1, and a 5-minute run drops no transmit frame.
  • LTE attach: not complete yet (the random-access response misses its window).
  • 5G NR (OAI): attach and ping at 5 and 10 MHz in simulation only, through the board's real gateware and a model of the transceiver. Not on air.

Why it works: the FPGA meets transmit deadlines itself, so slot timing does not depend on Linux scheduling.

866 MHz · 8 MHz

Broadcast TV, sent and received by the same board

A standard 8 MHz DVB-T signal, transmitted and demodulated live on the Pi, then streamed to a web browser.

  • Decoded at 1.00× real time, 197 600 packets at 100 % sync.
  • Full duplex is not a line in a datasheet here: it is what the demo runs on.

Also: live H.265 video over the air from a lab transmitter, received by RFive: 100 frames decoded, none lost.

1090 MHz

Live aircraft map

ADS-B / Mode S decoding with readsb, the decoder the community already uses, served as a live map from the Pi.

  • One antenna switched between RFive and a USRP B200: 18 997 messages versus 19 489, a 2.6 % gap, inside the 12 % drift of air traffic measured over the session.

In short: on this test the two receivers are level.

Wideband receive

Everything you already use

OpenWebRX in the browser, GNU Radio flowgraphs, and any tool that speaks SoapySDR or the PlutoSDR interface.

  • PlutoSDR-compatible names: pyadi-iio (adi.Pluto()), SoapySDR and the IIO Oscilloscope work unmodified; SoapySDR also verified in full duplex.
  • 15 of the 18 automated compatibility checks pass; the other 3 are libiio limits that fail the same way on a real PlutoSDR.

Day one: no new toolchain to learn.

DemonstratedIn progress or simulated
02  Why PCIe and timestamps

The Pi 5 grew a PCIe lane. RFive uses it.

The data goes over the Pi 5's PCIe connector through a flat cable. The 40-pin header carries only power and the ID EEPROM.

122MB/s

Measured link throughput

Receiving at 30.72 MSPS through the standard libiio path, with zero overflow, on V1. Full duplex has been tested up to 15.36 MSPS.

0dropped frames

Over 30 endurance runs

V1 passed its full acceptance plan, 73 cases out of 73. Every received frame carries the instant it was captured; every transmitted frame, the instant it must leave. Misses are counted, never hidden.

1counter

Shared by both directions

Receive and transmit live on the same clock, which is what slotted protocols such as LTE and NB-IoT require.

03  Specifications

Technical specifications

Measured figures come from the manufactured V1 board. Range and bandwidth are those of the transceiver chip. What is expected of V2 but not yet proven is labelled as such.

V1 · built and validated
  • Manufactured and running on a Raspberry Pi 5
  • Full acceptance plan passed: 73 of 73 cases, including 30 endurance runs with zero dropped frames
  • Every demonstration on this page, unless marked as simulated
TransceiverAnalog Devices AD9363, 12-bit
Tuning range325 MHz to 3.8 GHzTransceiver specification. Board-level performance above 3 GHz still to be measured.
Analogue bandwidthUp to 20 MHz, receive and transmitTransceiver specification.
RF ports2 × SMA: one receive, one transmit
DuplexFull duplex
Sample rateReceive only: 30.72 MSPS (V1, measured)
Full duplex: tested up to 15.36 MSPS (V1)Higher full-duplex rates, through 12-bit sample packing or PCIe Gen2, are in development and not yet validated.
FPGAAMD Artix-7
FPGA debugJTAG on a Tag-Connect TC2030 footprint, plus four FPGA GPIO test pads beside itNothing to fit on the board: a standard TC2030-IDC-NL cable and TC-XILINX6-M adapter connect any Xilinx-compatible programmer to AMD Vivado, including the integrated logic analyser. The Pi configures the FPGA on its own; JTAG is only needed for debugging. V2 board.
Host linkPCIe ×1 to the Raspberry Pi 5, over a flat cableGen1 on V1, 122 MB/s measured. Gen2 possible on V2, not yet validated.
TimestampingHardware, both directions, shared sample counter
Power5 V from the Pi's 40-pin header
Form factor65 × 56 mm add-on board, with ID EEPROM and device-tree overlay
Host compatibilityRaspberry Pi 5 only (earlier models have no PCIe)
Noise figure, TX powerNot yet measured
CertificationNot FCC or CE certified at this stage
04  Bandwidth

Where the 20 MHz comes from

RFive's bandwidth is set by the transceiver chip, not by the Raspberry Pi or the PCIe link. Each layer of the data path has its own ceiling, listed here from the antenna to the CPU.

Transceiver chip20 MHz of RF bandwidth, 325 MHz to 3.8 GHz. This is the AD9363's specification and the limit that applies today.The AD9361 and AD9364 share its package and pinout and are specified for 56 MHz.
PCIe link to the Pi 5122 MB/s measured on V1 at PCIe Gen1. Full duplex has been tested up to 15.36 MSPS. Packing samples to 12 bits brings 30.72 MSPS in both directions to about 77 % of a Gen1 link.The V2 board supports PCIe Gen2, which doubles the link rate. Not yet validated.
Transceiver to FPGACMOS data interface in the current gateware.The V2 board routes these lines as LVDS pairs for higher sample rates. The gateware does not use them yet.
Pi 5 CPUFour Cortex-A76 cores at 2.4 GHz run a 10 MHz LTE base station (50 resource blocks) and an NB-IoT base station in real time.Above a few tens of MSPS, filtering and decimation belong in the FPGA. That offload is planned.
05  Comparison

How it compares

Fifteen transceivers and one receive-only reference, from hobby boards to lab instruments. Of the boards listed, RFive is the only full-duplex transceiver built to mount on a Raspberry Pi 5 and use its PCIe link.

DevicePrice (USD), statusTuning rangeMax bandwidthADC / DACChannelsHost linkHW timestampsFPGAStandaloneOpen source
Hobby & entry
RFive V2, Pi 5 add-on boardTo be announcedIn development; not FCC/CE certified325 MHz – 3.8 GHz20 MHz30.72 MSPS RX; full duplex tested to 15.36 MSPS (V1)12-bit1 RX + 1 TX, full duplexPCIe ×1 to the Pi 5Gen1, 122 MB/s measured (V1); Gen2-capableYes, RX and TX on one counter, timed TXArtix-7 XC7A25TYes, with the Pi 5To be announced
ADALM-PLUTO PlutoSDR$253 DigiKey; in production325 MHz – 3.8 GHz20 MHz12-bit1 RX + 1 TX, fullRev C/D: second pair on internal u.FL, unofficialUSB 2.0No stock firmwareZynq-7010 SoCYes, on-board ARM + LinuxYes
HackRF One~$330–340 last reseller price; being replaced by HackRF Pro1 MHz – 6 GHz20 MSPS8-bit1 port, half duplexUSB 2.0NoCPLD (CoolRunner-II)Limited with PortaPack add-onYes, hardware and software
HackRF Pro$400 US resellers; shipping100 kHz – 6 GHztunable to 7.1 GHz20 MSPS40 MSPS at 4-bit8-bit16-bit at low rates1 port, half duplexUSB 2.0 (Type-C)not documentedFPGA part not publishedLimited standalone modeYes, hardware and software
CaribouLite RPi HAT$119 / $69 ISM no longer available30 MHz – 6 GHz+ sub-1 GHz channel2.5 MHz4 MSPS13-bit2 channels, each half duplexPi SMI busnot supported on Pi 5not documentediCE40LP (1.28k LE)Yes, with a Pi 4 or earlierYes
LimeSDR Micro$249 pre-order, ships Dec 202630 MHz – 3.8 GHz50 MHz FDD100 MHz TDDnot stated1 TX + 2 RXM.2 2280, PCIe Gen3 ×1not statedNone NXP LA9310 DSPNo, needs a PCIe hostYes, hardware and software
LimeSDR Mini 2.0$600 Crowd Supply; in stock10 MHz – 3.5 GHz30.72 MSPS40 MHz RF bandwidth12-bit1 RX + 1 TX, fullUSB 3.0YesLattice ECP5 (44k)NoYes, hardware and software
AntSDR E200 AD9363 / AD9361$449–489 AD9361: $689–729; Crowd Supply325 MHz – 3.8 GHzAD9361: 70 MHz – 6 GHz20 MHzAD9361: 56 MHz12-bit2×2 MIMO, fullGigabit EthernetWith UHD firmware not with libiio firmwareZynq-7020 SoCYes, on-board ARMSchematics, firmware
AntSDR E310 AD9363 / AD9361No maker price resellers vary widely325 MHz – 3.8 GHzAD9361: 70 MHz – 6 GHz20 MHzAD9361: 56 MHz; 10 MSPS to host12-bit2×2, half or fullGigabit Ethernet, USB 2.0not documentedZynq-7020 SoCYes, on-board ARMFirmware, documentation
Pro & lab
bladeRF 2.0 micro xA4 / xA9$540 / $860 Nuand store47 MHz – 6 GHzRX from 70 MHz56 MHz61.44 MSPS12-bit2×2 MIMO, fullUSB 3.0YesCyclone V (49k / 301k LE)NoHDL, firmware, host; schematics published
LimeSDR XTRX$960 Crowd Supply; in stock30 MHz – 3.8 GHz120 MHz120 MSPS SISO, 90 MIMO12-bit2×2 MIMO, fullMini PCIeYesArtix-7 XC7A50TNo, needs a PCIe hostYes, hardware and software
USRP B200mini$1,503 Ettus/NI store70 MHz – 6 GHz56 MHz12-bit1 RX + 1 TX, fullUSB 3.0YesSpartan-6 XC6SLX75NoDriver, FPGA; schematics published
USRP B200$1,462 board only; Ettus/NI store70 MHz – 6 GHz56 MHz12-bit1 RX + 1 TX, fullUSB 3.061.44 MS/s benchmarkedYesSpartan-6 XC6SLX75NoDriver, FPGA; schematics published
USRP B210$2,387 board only; Ettus/NI store70 MHz – 6 GHz56 MHz12-bit2×2 MIMO, fullUSB 3.0YesSpartan-6 XC6SLX150NoDriver, FPGA; schematics published
Rincon RaptorOn request Rincon Research commercial price list70 MHz – 6 GHz56 MHz12-bit2×2 MIMO, full2× USB 3.0Yes 1 PPS, NMEA, NTP and 10 MHz inputsZynq UltraScale+ XCZU9EGYes, embedded Arm coresBoard support package
Receive-only reference
Airspy R2~$169 dealers; varies24 – 1700 MHz10 MSPS IQ12-bit ADC1 RX, no transmitUSB 2.0–NoneNoHost software
Where RFive leads
  • A transceiver board for the Pi 5. It plugs onto the Pi and talks PCIe. CaribouLite, the other transceiver board for the Pi, uses a bus the Pi 5 does not have, runs half duplex at 2.5 MHz, and is no longer sold.
  • Hardware timestamps with timed transmit, from one counter shared by RX and TX. Cellular stacks need this. The PlutoSDR's stock firmware does not have it.
  • A complete station with no PC. The Pi 5 is the host, over a link measured at 122 MB/s on V1. That is more than a USB 2.0 bus can carry.
  • PlutoSDR-compatible software from day one: libiio, pyadi-iio, SoapySDR and GNU Radio.

Specifications are from manufacturers' published data, accessed in October 2026. Where a maker publishes no figure, the cell says so. Prices are in US dollars, before tax and shipping, from the maker's own store or Crowd Supply where one exists, and from authorized resellers otherwise. Prices change; check them before you buy. RFive figures are measured on the V1 board, and the V2 may differ. PlutoSDR is the common name of Analog Devices' ADALM-PLUTO. The AMD ZCU102 evaluation kit with an Analog Devices FMC radio card (AD-FMCOMMS series) is the common lab reference platform; it is not a stand-alone SDR product, so it is not listed.

06  Software

Open interfaces, familiar tools

A Linux kernel driver on the Pi, a C library, and adapters for the interfaces the SDR world already uses.

SoapySDR

Native driver=rfive module with hardware timestamps on receive and transmit.

GNU Radio

Flowgraphs through gr-soapy; used for the DVB-T demonstration.

PlutoSDR compatibility

pyadi-iio, SoapyPlutoSDR and the IIO Oscilloscope see a PlutoSDR-compatible device.

OpenAirInterface

NB-IoT eNB with a driver written for this board; 5G NR gNB in simulation only.

srsRAN 4G

LTE eNB through SoapySDR; cell on air, attach still in progress.

OpenWebRX · readsb

Web receiver and ADS-B decoding, running on the Pi.

# SoapySDR, Python
import SoapySDR
sdr = SoapySDR.Device("driver=rfive")
sdr.setSampleRate(SoapySDR.SOAPY_SDR_RX, 0, 15.36e6)
sdr.setFrequency(SoapySDR.SOAPY_SDR_RX, 0, 1090e6)
sdr.hasHardwareTime()   # True