CaribouLite turns any 40-pin Raspberry-Pi into a Tx/Rx 6GHz SDR

Overview

CaribouLite

CaribouLite is an affordable, educational, open-source SDR platform that is also a HAT for the Raspberry-Pi family of boards (40-pin versions only). It is built for makers, hackers, and researchers and was designed to complement the SDR current eco-systems offering with a scalable, standalone dual-channel software-defined radio.

Top View
CaribouLite SDR mounted on a RPI-Zero

Unlike many other HAT projects, CaribouLite utilizes the SMI (Secondary Memory Interface) present on all the 40-pin RPI versions. This interface is not thoroughly documented by both Raspberry-Pi documentation and Broadcomm's reference manuals. An amazing work done by [https://iosoft.blog/2020/07/16/raspberry-pi-smi/] (code in [https://github.com/jbentham/rpi]) in hacking this interface contributes to CaribouLite's technical feasibility. A deeper overview of the interface is provided by G.J. Van Loo, 2017 [https://github.com/cariboulabs/cariboulite/blob/main/docs/Secondary%20Memory%20Interface.pdf]. The SMI interface allows exchanging up to ~500Mbit/s between the RPI and the HAT, and yet, the results vary between the different versions of RPI. The results further depend on the specific RPI version's DMA speeds.

In our application, each ADC sample contains 13 bit (I) and 13 bit (Q), that are streamed with a maximal sample rate of 4 MSPS from the AT86RF215 IC. This channel requires 4 bytes (samples padded to 32-bit) per sample (and I/Q pair) => 16 MBytes/sec which are 128 MBits/sec. In addition to the 13 bit for each of I/Q, the Tx/Rx streams of data contain flow control and configuration bits. The modem (AT86RF215) IC by Microchip contains two RX I/Q outputs from its ADCs (one for each physical channel - sub-1GHz and 2.4GHz), and a single TX I/Q intput directed to the DACs.

CaribouLite has been submitted to CrowdSupply and has been pre-launched! Visit our page

Hardware Revisions

A working prototype version of the board (REV1) has been produced and tested to meet product requirements. In the meantime, a second revision of the board is being produced with the following main updates (see picture below):

  1. Image rejection filtering improvement - U10 and U12 (HPF & LPF) - have been replaced by integrated LTCC filters by MiniCircuits
  2. Removing FPGA flash - redundant given the fact that the the RPI configures the FPGA in <1sec over SPI.
  3. Board layout improvements and overlays (silkscreen) beautification (including logo)
  4. More detailed changes in the schematics.

In CaribouLite-R2 the PCB design has been thoroughly re-thought to meet its educational needs. The RF path has been annotated with icons to ease the orientation in the schematics sheets, friendly silk writing was added describing system's components by their functionality rather than logical descriptors, and more.

Top View
Top & Bottom view, Production Rev2

Deeper project details will be published shortly in our Wiki pages.

Specifications

RF Channels:

  • Sub-1GHz: 389.5-510 MHz / 779-1020 MHz
  • Wide tuning channel: 30 MHz - 6 GHz (excluding 2398.5-2400 MHz and 2483.5-2485 MHz)
spectra
Applicable spectra, S1G - sub-1GHz, WB - Wide tuning channel
Note: The gaps are defined by the design constraints of the system and may not exist in real-life hardware. Actual modem synthesizer outputs test show wider margins at room temperature than those written in the datatsheet, but, as noted by Microchip, performance may suffer.

FPGA specifications:

  • 160 LABs / CLBs
  • 1280 Logic Elements / Cells
  • 65536 Total RAM bits
  • 67 I/Os, Temp: -40-100 degC

Applicable RPI models: RPI_1(B+/A+), RPI_2B, RPI_Zero(Zero/W/WH), RPI_3(B/A+/B+), RPI_4B

Parameter Sub-1GHz Wide Tuning Channel
Frequency tuner range 389.5-510 MHz / 779-1020 MHz 30 MHz - 6 GHz (excluding 2398.5-2400 MHz and 2483.5-2485 MHz)
Sample rate (ADC / DAC) 4 MSPS 4 MSPS
Analog bandwidth (Rx / Tx) <4 MHz <4 MHz
Max Transmit power 14.5 dBm >14 dBm @ 30-2400 MHz, >13 dBm @ 2400-6000 MHz
Receive noise figure <4.5 dB <4.5 dB @ 30-3500 MHz, <8 dB @ 3500-6000 MHz

Note: (1) Feature comparison table with other SDR devices will be published shortly (2) Some of the above specifications are simulated rather than tested (3) Analog bandwidth controlled by the modem

Board Layout

2d_nums

Description:

  1. Raspberry-Pi 40-pin connector
  2. A modem - AT86RF215
  3. TCXO - 0.5 ppm @ 26 MHz
  4. FPGA - ICE40LP series from Lattice Semi.
  5. A frequency mixer with integrated synthesizer - RFFC5072
  6. External reference clock connector (may be used to acheive coherence between many CaribouLite units.
  7. A PMOD connector for FPGA expantion
  8. RPI configuration EEPROM (following RPI-HAT specifications)
  9. RF front-end - switched, amplifiers, and filters.
  10. Reset switch
  11. User custom switch + RPI HAT EEPROM reconfiguration (write-enable) switch
  12. Wide band SMA connector
  13. Sub 1-GHz SMA connector

License

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Comments
  • Gerber files: Outline missing with some manufacturers

    Gerber files: Outline missing with some manufacturers

    OSH Park and Aisler can’t process the Gerber files propers because they report a missing outline. JLC PCB doesn’t have any problems with the files, though.

    Screenshot OSH Park. Screenshot Aisler.
    opened by kenokenobingo 4
  • Make compatible with kitspace.org

    Make compatible with kitspace.org

    Hey, thought this would be a neat project to include over on kitspace.org. All that's required is to add a kitspace.yml pointing at the right BOM. If you are happy to add it, simply merge this and I'll put it up. The page will continue to update with this repo as you make changes (thought the delay can be up to 24hrs).

    Here is a preview of what it will look like. The BOM could be improved a little, especially to add distributor numbers for the "Buy Parts" buttons to show up. I do have a project to help with that: bom-builder (more info). If you would like free access to a hosted version of that, shoot me an email: [email protected]

    opened by kasbah 4
  • Confused about some drilling files

    Confused about some drilling files

    Because of the limitation of the jlcpcb production process, the minimum drilling hole diameter is 0.2mm, but the drilling hole diameter used in the two drilling files TX1 and TX2 is 0.102mm, so it may not be approved.

    opened by Droid-MAX 2
  • docs: Fix a few typos

    docs: Fix a few typos

    There are small typos in:

    • hardware/README.md
    • software/libcariboulite/src/caribou_smi/caribou_smi.c
    • software/libcariboulite/src/caribou_smi/ref/rpi_dma_test.c
    • software/libcariboulite/src/caribou_smi/ref/rpi_dma_utils.h
    • software/libcariboulite/src/caribou_smi/register_utils.h
    • software/libcariboulite/src/io_utils/pigpio/command.c
    • software/libcariboulite/src/io_utils/pigpio/command.h
    • software/libcariboulite/src/io_utils/pigpio/pigpio.c
    • software/libcariboulite/src/io_utils/pigpio/pigpio.h

    Fixes:

    • Should read believe rather than belive.
    • Should read uncached rather than unchached.
    • Should read control rather than contol.
    • Should read uncached rather than unchahced.
    • Should read terminated rather than teminated.
    • Should read substantial rather than substancial.
    • Should read presumably rather than presumablly.

    Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    opened by timgates42 1
  • pcb project

    pcb project

    Hi,

    would like to know if you plan to share the project pcb file (in kicad would be great).

    I would like modify the design to make a more simple and cheapest project to evaluate the AT86RF215(maybe put more than one in one pcb or make them stackable for multiple channels) with the raspberry pi and most of the RF mixer part is not needed.

    P.D.

    From your bom the MAAM-011206-TR1000 RF amplifier is obsolete and the replace part MAAM-011206-TR3000 cost 11 euros in mouser and you use 2!! and total bom is almost 100€ on mouser(the best place i found they have all components).

    Thanks, your project is very promising, I hope you can make it to buy one.

    opened by fpgasdr 1
  • ADS-B with CaribouLite ISM?

    ADS-B with CaribouLite ISM?

    Hi, based on specifications ADS-B (1090 MHz) should be slightly outside CaribouLite ISM frequency range (1020 MHz max). But I also read that frequency ranges are somewhat conservative. Is the maximum tunable frequency of 1020 MHz a hardware limit in the sense that the modem can't be tuned at 1090 MHz? Or it will be some kind of software-based limit? So overall the question is if I could be able to receive ADS-B (1090 MHz) signals with CaribouLite ISM version, thank you.

    opened by Vinz87 0
  • SMI and samples loss

    SMI and samples loss

    Hi @meexmachina ,

    Lately, I have been reviewing your new SMI kernel modules and if I understand well you are restarting SMI and DMA transfers as soon as you copied samples into kfifo. So, I am wondering how you could avoid 100% of loss because this restart process (SMI and DMA) occurs in DMA ISR (and this ISR may have some significant latency depending on system load and this latency could be large enough to fill up the FPGA fifos ending up in samples loss.

    I have confirmed the above assumptions with a home made test bench using your drivers stressing a bit the system to simulate a decent user land application. From time to time I noticed some loss (more or less severe depending on the load). To detect such loss, I had to implement a transport protocol including sequence numbering and CRC otherwise it could be pretty difficult to detect some issues.

    So my questions are as follows:

    1. Do you still rely on DMA ISR to restart the whole SMI/DMA process?
    2. Do you experience samples loss when stressing the system?
    3. Did you find a way to configure SMI for endless transfer - one start, infinite length -?
    opened by hea-lab 0
  • potential asynchronous FIFO issues

    potential asynchronous FIFO issues

    First of all, many thanks for your contribution! This is a great foundation for tailor made SDR design. So, I could not wait for your delivery so I decided to review and play with your design (using verilog simulation first and lately using a home made board).

    Back to the issue, it seems you have built your own asynchronous FIFO from dual_clock_fifo module which looks suitable and you get rid of graycode handling (which is commonly used to address metastablity issues). Is there a reason for that?

    Furthermore, it seems that you should take into account address width when your compute full_o and empty_o, otherwise you may have overflow issues

    basically, I would expect something like full_o <= ((wr_addr + 2) & ((2**ADDR_WIDTH)-1)) == rd_addr; instead of full_o <= (wr_addr + 2) == rd_addr;

    https://github.com/cariboulabs/cariboulite/blob/main/firmware/complex_fifo.v#L30 https://github.com/cariboulabs/cariboulite/blob/main/firmware/complex_fifo.v#L34 https://github.com/cariboulabs/cariboulite/blob/main/firmware/complex_fifo.v#L49

    opened by hea-lab 2
  • Jetson support

    Jetson support

    Hi, Im looking forward to use this compact TRX SDR. By the way, caribou lite can be controlled by Jetson? If so , Jetson use GPGPU can process much IQ signals faster.

    opened by uecken 2
  • Adding connectors to bypass the RF switch?

    Adding connectors to bypass the RF switch?

    Hi, I stumbled across your impressive project. Do you plan on adding something like U.FL sockets on J1/J3 of the RF switch (U11) to bypass it in cases where a user wants a dedicated rx and tx connector for bands higher than 1GHz? Using a 0 ohm resistor one could choose between the different options? Regards

    opened by rfamp 2
Owner
CaribouLabs.co
Open-source RF tools
CaribouLabs.co
SDR++ is a cross-platform and open source SDR software with the aim of being bloat free and simple to use.

SDR++ is a cross-platform and open source SDR software with the aim of being bloat free and simple to use.

AlexandreRouma 2.2k Jan 7, 2023
Turns the button on the Lamy Pen into an eraser on the reMarkable.

RemarkableLamyEraser Standalone tool that turns the button on the Lamy Pen into an eraser on the reMarkable. Also confirmed to work with these other s

null 140 Dec 26, 2022
An open collection of tools and experiments for rendering wide-gamut scene-linear data into an image for an SDR or HDR display device.

Open Display Transform An open collection of tools and experiments for rendering wide-gamut scene-linear data into an image for an SDR or HDR display

Jed Smith 127 Dec 29, 2022
Automatically load dlls into any executables without replacing any files!

Automatically loaded dll using xinput9_1_0 proxy. Please put the modified xinput9_1_0.dll in the executable's directory.

null 14 Dec 24, 2022
A plug which auto turns off when it's Shabbos or Yom Tov.

Melacha Plug A Melacha aware plug which turns off when it's Shabbos or Yom Tov. This project is using ESPHome. Looking to disable a smart doorbell for

Chabad Source 7 Oct 23, 2022
OSC Calibrator and High Voltage Fuse Resetter for 8-Pin ATtinys

TinyCalibrator - OSC Calibrator and High-Voltage Fuse Resetter Because the 8-pin ATtinys only have a few GPIO pins available, they are usually operate

Stefan Wagner 41 Dec 30, 2022
An experimental dynamic malware unpacker based on Intel Pin and PE-sieve

Pin'n'Sieve A dynamic malware unpacker based on Intel Pin and PE-sieve (deploys PE-sieve scan on specific triggers). Caution: during the process the m

hasherezade 54 Dec 16, 2022
Seam is a pin-based node editor for OpenFrameworks that makes prototyping visual systems easier and faster.

seam Seam is a pin-based node editor for openFrameworks built using: openFrameworks Dear ImGui the node editor extension for ImGui It is heavily WIP,

Austin Clifton 2 Jan 2, 2022
EDACS trunk tracking using RTL2832. rtl_fm, sdr++, gqrx, or gnuradio.

EDACS-FM Florida Man Edition EDACS 9600 Trunk Tracking software for Linux, *Nix, BSD systems (and maybe others) using two RTL2838 dongles(or anything

null 6 Dec 27, 2022
Radiosonde decoder plugin for SDR++

Radiosonde decoder plugin for SDR++ Build instructions Download the SDR++ source code: git clone https://github.com/AlexandreRouma/SDRPlusPlus Open th

Davide Belloli 47 Jan 6, 2023
Prueba del Raspberry PI PICO con un display Raspberry PI TFT 3.5"

Raspberry-PI-PICO-display-RPI35 Prueba del Raspberry PI PICO con un display Raspberry PI TFT 3.5" Con ayuda de la libreria https://github.com/khoih-pr

null 1 Nov 10, 2021
Enable LoRaWAN communications on your Raspberry Pi Pico or any RP2040 based board. 📡

pico-lorawan Enable LoRaWAN communications on your Raspberry Pi Pico or any RP2040 based board using a Semtech SX1276 radio module. Based on the Semte

Sandeep Mistry 76 Dec 30, 2022
Capture audio from a microphone on your Raspberry Pi Pico or any RP2040 based board. 🎤

pico-microphone Capture audio from a microphone on your Raspberry Pi Pico or any RP2040 based board. ?? Hardware RP2040 board Raspberry Pi Pico Microp

Sandeep Mistry 132 Dec 27, 2022
Digital rain animation gif with glow squeezed into a raspberry pi pico and pimoroni pico-display

pico-display-matrix Digital rain animation gif with glow squeezed into a raspberry pi pico and pimoroni pico-display or how to actually use all Flash

null 32 Sep 10, 2022
Loads a signed kernel driver which allows you to map any driver to kernel mode without any traces of the signed / mapped driver.

CosMapper Loads a signed kernel driver (signed with leaked cert) which allows you to map any driver to kernel mode without any traces of the signed /

null 157 Jan 2, 2023
Create a calculator of any kind in any language, create a pr.

calculators Create a calculator of any kind in any language, create a pr. Create a calculator of any type using the programming language of your choic

Akshay Gautam 2 Oct 21, 2022
Inject a DLL into any program using this C++ program

DLL-Injection-Cpp Inject a DLL into any process using this C++ program Installation Go into a folder and open up Command Prompt. In command prompt run

n0 5 Sep 12, 2022
Embed read-only filesystems into any C++11 program w. a single header, zero dependencies and zero modifications to your code

c-embed Embed read-only filesystems into any C++11 program w. a single header, zero dependencies and zero modifications to your code. Usage c-embed al

Nick McDonald 9 Dec 29, 2022