CaribouLite SDR

CaribouLite SDR Complete #

Hardware adoption of the CaribouLite SDR HAT β€” a software-defined radio receiver on a Raspberry Pi, built as a baked image in deevnet-image-factory, proven on the Pi Lab bank, and graduated to dedicated hardware.

The project write-up is at Pi SDR.

Purpose #

Software-defined radio (SDR) receiver for RF signal monitoring and experimentation. The CaribouLite HAT provides dual-channel SDR capability directly on the Pi’s GPIO header.


Hardware #

ComponentSpecification
ComputeRaspberry Pi 4 Model B, 8GB
SDR HATCaribouLite SDR
Storage32GB SD card (minimum)
AntennaSMA connector, antenna per use case

CaribouLite Specifications #

AttributeValue
Frequency range30 MHz – 6 GHz (with gaps)
Channels2 (S1000: sub-1GHz, HiF: 30MHz-6GHz)
ADC13-bit
BandwidthUp to 2.5 MHz per channel
InterfaceGPIO header (directly mounted)

Network Position #

graph LR
    A[Core Router] <--> B[Access Switch
IoT VLAN] <--> C[CaribouLite SDR
Pi4 + SDR HAT]

Deployed on the IoT VLAN for isolation from management traffic.


Software Stack #

LayerComponent
OSRaspberry Pi OS (64-bit)
SDR DriverCaribouLite kernel module
SDR FrameworkSoapySDR
ApplicationsGNU Radio, SDR++ (optional GUI)

Configuration #

Kernel Module #

The CaribouLite kernel module loads automatically via udev rules. Verify with:

lsmod | grep cariboulite

SoapySDR Integration #

CaribouLite integrates with SoapySDR for application compatibility:

SoapySDRUtil --find
SoapySDRUtil --probe="driver=Cariboulite"

Test Scripts #

Located at /opt/deevnet/tests/:

ScriptPurpose
test-sdr-detect.shVerify CaribouLite HAT detected
test-sdr-channels.shConfirm both SDR channels operational
test-sdr-receive.shCapture samples, verify data flow

Running Tests #

sudo /opt/deevnet/tests/run-all-tests.sh

Expected output:

[PASS] Network connectivity
[PASS] CaribouLite HAT detected
[PASS] Kernel module loaded
[PASS] SoapySDR integration
[PASS] Channel S1000 operational
[PASS] Channel HiF operational

Post-Startup Scripts #

Located at /opt/deevnet/post-startup/:

ScriptPurpose
init-sdr.shInitialize SDR hardware, set default gains

These run on first boot after the hardware is detected.


Use Cases #

ApplicationDescription
ADS-B receptionAircraft tracking (1090 MHz)
FM broadcastLocal FM station monitoring
Weather satelliteNOAA APT reception (137 MHz)
ISM band monitoring433/868/915 MHz IoT traffic
Amateur radioHF/VHF/UHF experimentation

Maintenance #

TaskFrequencyProcedure
Firmware updatesAs releasedCheck CaribouLite GitHub for updates
Test validationMonthlyRun test scripts, verify all pass
Antenna inspectionQuarterlyCheck connections, replace worn cables

Project History #

The project was tracked on the Roadmap until it completed; its plan is kept here.

Vision & Scope #

Adopt the CaribouLite SDR HAT and deploy a software-defined radio platform on Raspberry Pi for RF signal monitoring and experimentation.

In scope: CaribouLite hardware integration; remote SDR access via network streaming; client software for tuning and visualization; a baked image via deevnet-image-factory.

Out of scope: transmit capability; signal decoding and demodulation pipelines.

Milestones #

MilestoneTasksStatus
Requirementssupported frequency ranges defined; network streaming protocol definedβœ…
CaribouLite backendbase Pi image with Ansible support; CaribouLite driver installation; post-image configurationβœ…
SDR clientnetwork streaming configuration; GQRX (or alternative) front-end setupβœ…
Documentationbuild documentation; client documentationβœ…
Page last modified: September 26, 2026