CaribouLabs
Software Defined Radio
Staples
CaribouLite is an affordable, open-source, dual-channel software-defined radio (SDR) platform—and an SDR-focused FPGA development framework—implemented as a Raspberry Pi (RPi) HAT. CaribouLite turns your Raspberry Pi single-board computer (SBC) into a self-contained, dual-channel radio Tx/Rx that spans a wide tunable frequency spectrum up to 6 GHz.
CaribouLite gives you full control of its hardware, including the FPGA, its firmware, and all of its supporting software. With the deeply integrated IceStorm toolchain, writing your own FPGA application couldn’t be easier. You can reuse many Verilog modules, such as SPI and SMI modules, to support custom applications of CaribouLite hardware.
We created two versions of CaribouLite: the full version and the ISM version. Both versions include an internal TCXO clock-source, a low-noise amplifier (NF < 4 dB under 3 GHz) and high Tx power (up to 14 dBm). They also provide fully controllable, 8-bit, read/write PMOD expansion ports to facilitate advanced applications such as direction finding, GPS synchronization, etc.
On the software side, Raspberry Pi’s high-level APIs like Soapy / GNU Radio, and Jupyter notebooks are fully supported, through which the HAT’s complete feature-set can be accessed.
The full version of CaribouLite provides two Tx/Rx SDR channels:
The 4 MSPS I/Q samples (both Tx and Rx) are transmitted over the RPi’s secondary memory interface, where CaribouLite acts as a high-throughput memory peripheral.
The ISM version of CaribouLite supports the native 2.4-GHz and sub-1-GHz bands available within the Microchip chipset used.
In testing, CaribouLite exceeded the frequency capabilities described above. The lower bound of the wide channel measured closer to 1 MHz, for example. We are sticking with the official component specifications, however, in full confidence that the SDR community will drive the board to its limits and determine its actual capabilities.
As mentioned above, we decided to offer a CaribouLite variant optimized for the unlicensed ISM bands. It contains a bare modem, without additional frequency-conversion capabilities. As a result, it can transmit over 2.4 GHz and Sub-1-GHz bands. This variant is not only significantly less expensive than the full version of CaribouLite, it closely implements the reference design of its Microchip modem so as to comply with various countries’ radio regulations (ETSI, FCC, etc.). While neither of the CaribouLite variants have undergone a regulation-compliance process, it might be easier for a third party to navigate such a process using the ISM version.
CaribouLite and CaribouLite-ISM were built to make low-cost, educational tools and test equipment as accessible as possible. Nevertheless, users need to be familiar with, and adhere to, the radio regulations in their country or region so as to mitigate potentially harmful interference. We urge you to study up on your local restrictions and to read the safety information that comes with your CaribouLite board thoroughly.
As a fully open source SDR, CaribouLite allows you to customize, optimize, or improve it to suit your own needs. To that end, we are committed to providing complete source code and thorough documentation, including toolchain and programming guidelines. We are also excited to hear your suggestions and to implement them if we can!
During the campaign, we aim to provide custom, step-by-step application guides (FPGA, C/C++, Python, etc.) and a library to support applications such as…
…and more to come as the CaribouLite community grows.
CaribouLite is recognized by Raspbian during the boot sequence, and the board variant is determined through the on-board configuration resistors. Each CaribouLite is shipped with a programmed RPi-HAT EEPROM containing the board’s information, including the device-tree overlay and drivers to be loaded. Unless additional customization is required by the user, all needed Linux modules are loaded and pin-muxing is configured on system start-up.
Experts Zone: EEPROM customization is possible using the EEPROM API and the device-tree overlays. For more information have a look here first.
All CaribouLite software components are located in our GitHub repository. That includes libcariboulite & SoapySDR drivers, device-tree overlays, and sample code.
SoapySDR API is fully supported and included in Soapy API. To support both channels in CaribouLite SDR—and to stay backward compatible with the current ecosystem software—each CaribouLite board is recognized as two SDR devices rather than as one device with two channels. The two devices are:
This configuration supports a wide range of standard software packages such as SDR-PlusPlus, GQRX, CubicSDR, GNU-Radio, and more.
CaribouLite also supports using the standard IEEE-802.15.4 PHY built-in cores implemented within Microchip’s AT86RF215-ZU modem. With the dual IEEE-802.15.4 PHY radio channels, you can implement hardcore basebands and communication nodes such as Zigbee(Pro), Thread, and others without the need for any further SDR programming or design.
CaribouLite contains a ICE40LP1K FPGA chip that is primarily used for the SDR application – channel configuration, bi-directional data-streaming, and diagnostics services. Like any other element of CaribouLite, it can be tweaked, modified, and reused for custom applications.
The FPGA is programmed by libcariboulite
when the operation session starts. Programming is handled by a special API adapted to CaribouLite and can be used from the commandline. Further details can be found in the firmware subdirectory of our repo.
SMI (Secondary Memory Interface) allows you to stream I/Q samples back and forth between the RPi and CaribouLite. To the best of our knowledge, this interface has not been fully investigated previously, and we are happy to provide our contribution to the RPi community. We have explored two different approaches for this interface – the user-mode approach (see Lean2‘s amazing work), and the kernel-mode module approach. In the end, we decided to adopt the kernel-mode approach, as it proved more robust for high-volume data streams.
We have contributed design considerations, a software API, bugs, and benchmarking, all of which can be found on our SMI page and in our external documentation pages.
CaribouLite draws power through its 40-pin header from the Raspberry Pi’s 5 V rail. Those 5 V are used by the Tx-side RF amplifier after some filtering (full version only). A low-noise 3.3 V LDO is used to supply the board’s 3.3 V peripherals. An additional LDO down converts the 3.3 V to 2.5 V and 1.2 V voltages for the FPGA.
The usage of LDOs, rather than DC-DC converters, decreases the level of conducted and radiated interference into the sensitive parts of the board. It also results in low-mid frequency isolation between the RPi and CaribouLite and decreased levels of EMI emissions.
USER
on board) - a dual-purpose button used mainly for user-programmable functionality or to enable access to the HAT EEPROM. This button can also be used for flashing the internal HAT-EEPROM parameters. (See EEPROM API.)The 8-bit PMOD connector allows you to use the FPGA for digital-control applications, debugging, or synchronization. The firmware exposes these pins as an input/output-selectable and -maskable GPIO bank. These GPIOs are controllable through both the FPGA APIs and the SoapySDR APIs.
@mossmann
in opera-cake, can be realized by accurately automating reception-port-synchronization within the FPGA firmware.General purpose LEDs (LD1 / LD2): These high-brightness LEDs are FPGA controllable through the FPGA software API. They can be used to trigger user action, to indicate system state (such as PLL-lock status), or to warn the user of a problem.
RF activity LED indications: Each of the two radios have a pair of Tx/Rx LEDs adjacent to their RF connectors that indicate the radio’s current activity.
To support a wide range of frequency tuning, CaribouLite uses the Qorvo RFFC5072 integrated mixer IC. By default, the frequency reference source (of 32 MHz) to the PLL is generated and provided by the modem.
For some application (clock-phase matching, different frequency resolution, etc.), a separate clock source may be required. On the top side of the board, you can mount an external clock source via U.FL. Resistor jumpers can be modified as needed.
Top | Bottom |
---|---|
1. 6 GHz SMA connector | 8. Modem - AT86RF215 |
2. Sub-1-GHz SMA connector | 9. FPGA - ICE40LP1K |
3. User switch and user LEDs | 10. RFFC5072(A) - Synth. Integrated Mixer |
4. PMOD connector (8-bit I/O, GND and 3.3V) | 11. TCXO 26 MHz |
5. External reference clock input | 12. RPI 40-pin connector |
6. RF activity indication LEDs | 13. RPi HAT-EEPROM |
7. RF Front-end for 6 GHz channel |
CaribouLite | CaribouLite-ISM | RTL-SDR | LimeSDR Mini | Airspy R2 | PlutoSDR | LimeSDR | HackRF One | bladeRF | iotSDR | |
---|---|---|---|---|---|---|---|---|---|---|
RF Chipset | AT86RF215 | AT86RF215 | RTL2832U | LMS7002M | R820T2 | AD9363 | LMS7002M | MAX5864, MAX2837, RFFC5072 | LMS6002M | AT86RF215, MAX2769 |
FPGA / CPLD | ICE40LP 1.28 kLE | ICE40LP 1.28 kLE | N/A | Altera MAX 10 | N/A | Zynq XC7Z010 28 kLE | Altera 40KLE Cyclone 4 | 64 Macrocell CPLD | Altera 40KLE/115KLE Cyclone 4 | ZYNQ XC7Z010 / XC7Z020 |
Tuning Range | CH1: 30 MHz - 6 GHz / CH2: Sub-1GHz | CH1: 2.4 - 2.4835 GHz / CH2: Sub-1GHz | 22 MHz - 2.2 GHz | 10 MHz - 3.5 GHz | 24 - 1700 MHz | 325 - 3800 MHz | 30 MHz - 3.8 GHz | 1 MHz - 6 GHz | 300 MHz - 3.8 GHz | Sub-1GHz, 2.4 GHz, and 1575.42 MHz |
Max Sampling Rate | 4 MSPS | 4 MSPS | 3.2 MSPS | 30.72 MSPS | 10 MSPS | 61.44 MSPS | 61.44 MSPS | 20 MSPS | 40 MSPS | 4 MSPS (16.368 MSPS MAX2769) |
ADC/DAC Resolution | 13-bit | 13-bit | 8-bit | 12-bit | 12-bit | 12-bit | 12-bit | 8-bit | 12-bit | 13-bit (2-bit MAX2769) |
Max RF Bandwidth | 2.5 MHz | 2.5 MHz | 2.5 MHz | 30.72 MHz | Unknown | 20 MHz | 61.44 MHz | 20 MHz | 28 MHz | 4 MHz (8 MHz MAX2769) |
Transmit Power | up to 14 dBm (@ISM frequencies), | up to 14 dBm | N/A | 0 to 10 dBm (frequency dependent) | N/A | 7 dBm | 0 to 10 dBm (frequency dependent) | 0 to 10 dBm, -10 dBm+ (15 dBm @ 2.4 GHz) | 6 dBm | 14 dBm+ |
Frequency Stability | <±2 ppm | <±2 ppm | ±1 ppm | ±2.5 ppm | ±0.5 ppm | ±25 ppm | ±2.5 ppm | ±20 ppm | ±1 ppm | ±2 ppm |
Channels | 2 | 2 | 1 (Rx only) | 1 | 1 | 2 | 2 | 1 | 1 | 2 + 1 GPS Rx |
Duplex | Dual Half Duplex | Dual Half Duplex | N/A | Full SISO | N/A | Full | Full MIMO | Half | Full SISO | Dual-channel full duplex |
In-System Processor | BCM283x (x1/4) BCM2711 (x4) | BCM283x (x1/4) / BCM2711 (x4) | N/A | No | Cortex M4F | ARM Cortex-A9 (x1) | No | LPC4320F | No | Arm Cortex A9 (x2) |
Open source | Full | Full | No | Full | Unknown | Full | Full | Full | Schematic, Firmware | Hardware, Firmware |
Operating System | Linux (Raspberry Pi dependent) | Linux (Raspberry Pi dependent) | -- | -- | Bare Metal MCU | Linux | -- | Bare Metal MCU | -- | Linux |
Bus/Interface | SMI (Raspberry Pi) | SMI (Raspberry Pi) | USB 2.0 | USB 3 | USB 2 | USB 2 | USB 3 | USB 2 | USB 3 | Gbit Ethernet and USB 2 |
GPS | Addon | Addon | No | No | No | No | No | No | No | FE + Add-on Sync |
IEEE-802.15.4 PHY cores | 2 | 2 | No | No | No | No | No | No | No | 2 |
Multi-Board Synchronization | Clock and Data | Clock and Data | No | Clock | External Coherent clock input, outputs | No | Clock | Clock | Clock and timestamps | Clock and data |
GPIO | Yes (8-bit PMOD) | Yes (8-bit PMOD) | No | Yes | Yes (18 pins) | No | Yes | Expansion Headers | Yes | Yes (24 pins) |
Portable | Yes (+RPi0) | Yes (+RPi0) | Yes (RPi) | Yes (with a strong PC) | Yes (with a strong PC) | No | No | No | No | No |
Area (Dimensions) | 1,950 mm² (65 x 30 mm) | 1,950 mm² (65 x 30 mm) | 1,863 mm² (69 x 27 mm) | 2,208 mm² (32 x 69 mm) | 1,600 mm² (64 x 25 mm) | 9,243 mm² (117 x 79 mm) | 6,000 mm² (60 x 100 mm) | 9,000 mm² (75 x 120 mm) | 11,397 mm² (87 x 131 mm) | 7,752 mm² (76 x 102 mm) |
Price | $140 | $72 | ~$25 | $199 | $169 | $199 | $299 | $299 | $420 | $599 |
Price Per Channel | $70 | $36 | ~$25 (Rx) | $199 | $169 (Rx) | $99.5 | $149.5 | $299 | $420 | ~$199.5 (2+1 ch) |
CaribouLite is extensively documented on GitHub:
You can also reach us at cariboulabs.co@gmail.com or using the Ask a technical question link below.
CaribouLite RPi HAT is part of Qorvo RF Accelerator
Produced by CaribouLabs in Haifa, Israel.
Sold and shipped by Crowd Supply.
A 6 GHz RaspberryPi SDR HAT, with two TX/RX Channels. Includes a pre-soldered female 40-pin header and a loose male PMOD header.
2.4-GHz + Sub 1-GHz RaspberryPi SDR HAT with two TX/RX Channels. Includes a pre-soldered female 40-pin header and a loose male PMOD header.
From the Raspberry Pi Zero project.
Half the size of a Model A+, with twice the utility, plus Wi-Fi and Bluetooth connectivity and pre-soldered pin headers.
A group of experienced electrical/software engineers and hardware hackers determined to make RF engineering and prototyping accessible, educational, and enjoyable.
A Software-Definable RF Front End Module for LimeSDR Platforms
A hardware-based USB 2.0 monitor & trigger platform, controlled from Python
Open source, programmable, eight-key keypad with backlighting, underlighting, and OLED screen