Finally got on hold on Raspberry Pi to tinker with the CaribouLite. Got it kind-of working, but with the following caveats:
- There are occasional “FPGA programming failed” errors when initializing the radio after reboot.
- The SoapySDR driver seems to have the S1G and HiF channels swapped (I’ve created a pull-request for this).
- Seems that using frequency of the outside of the supported range on S1G is not handles gracefully, might require restarting the Soapy/SDR++ server.
-
cariboulite_test_app
Ch1 stream causes caribou_smi_read -> Timeout
right after reboot. Starting the stream again works around the problem.
- The
install.sh
script does not handle situation when multiple kernels are installed. It has been reported and it it something that needs to be watched out on DragonOS 3.1 as apt upgrade
installs a newer kernel.
Those errors seemed to be consistent across Raspbian OS Lite and Desktop, as well as DragonOS both 3.0 and 3.1.
The overall configuration I’ve used for the final testing:
- CaribouLite FULL
- Raspberry Pi 4 Model B - 8GB with CaribouLite SDR hat running in headless mode
- SDR++ GUI running on another computer (MacBook in my case, although, should not really matter)
2023-05-03-raspios-bullseye-arm64-lite.img
Hopefully this summary of quirks helps troubleshooting your setup!
Below are the detailed steps I’ve used to configure my system. Maybe it help someone.
Apologies for the lengthy message 
Preparation
sudo apt update
sudo api upgrade
sudo apt install mc vim git cmake gcc g++ soapysdr-tools
SDR++
This pretty much follows the SDR++ upstream steps from its rpi_install.sh
but
with the following modifications:
- Use
libvolk2-dev
instead of libvolk1-dev
(the latter one is not available on this platform)
- Install to
/opt/SDR++
instead of the default /usr/local/
Install the dependencies:
sudo apt install build-essential libfftw3-dev libglfw3-dev \
libvolk2-dev libzstd-dev libsoapysdr-dev libairspyhf-dev libairspy-dev \
libiio-dev libad9361-dev librtaudio-dev libhackrf-dev librtlsdr-dev \
libbladerf-dev liblimesuite-dev p7zip-full wget
Compile and install SDR++:
# Clone the sources:
mkdir -p ~/Developer
cd ~/Developer/
git clone https://github.com/AlexandreRouma/SDRPlusPlus
cd SDRPlusPlus
# Configure the build:
mkdir build
cd build
cmake .. -DOPT_BUILD_LIMESDR_SOURCE=ON -DCMAKE_INSTALL_PREFIX=/opt/SDR++
make -j4
# Install:
sudo make install
The SDR++ commit ff7ef78b8fd
was used when writing this note.
CaribouLite
Add the following line to the [all]
section of the /boot/config.txt
:
dtparam=i2c_vc=on
dtoverlay=spi1-3cs
Compile CaribouLite from sources:
mkdir -p ~/Developer
cd ~/Developer/
git clone https://github.com/cariboulabs/cariboulite
cd cariboulite
./install.sh
The CaribouLite commit 5840d627ce3
was used when writing this note.
Reboot the system to get the new kernel module and I2C-VC/SPI1-3CS configuration.
Running the radio
On the Raspberry Pi run: LD_LIBRARY_PATH=/opt/SDR++/lib /opt/SDR++/bin/sdrpp --server
On the desktop run SDR++, choose SDR++ Server
source and SoapySDR
as a remote source. The sample rate and bandwidth of 2 MHz is what seemed to work the most reliable so far.