Novena-RF Driver

About
The Novena-RF radio module is supported through a permissively licensed driver, available via GitHub. This document describes the driver and its installation.

Configurable sample rates

 * Maximum rate: 15.36 Msps
 * Decimations: 1, 2, 4, 8, 16
 * Interpolations: 1, 2, 4, 8, 16

Selectable TX antenna switches
The names for these switches can be used in the setAntenna API call.
 * "HB" - High band output (1500 - 3800 MHz)
 * "BB" - Broad band output

Selectable RX antenna switches
The names for these switches can be used in the setAntenna API call.
 * "LB" - Low band input (300 - 2200 MHz)
 * "HB" - High band input (1500 - 3800MHz)
 * "BB" - Broadband input

TX and RX Baseband filters

 * 1.5 MHz to 28.0 MHz

Adjustable transmit gain
The names for these gain elements can be used in the setGain API call.
 * Overall: 0.0 to 56.0 dB
 * "VGA1": -35.0 to -4.0 dB
 * "VGA2": 0.0 to 25.0 dB

Adjustable receive gain
The names for these gain elements can be used in the setGain API call.
 * Overall: 0.0 to 36.0 dB
 * "VGA2": 0.0 to 30.0 dB
 * "VGA1": 0.0 to 30.0 dB
 * "LNA": 0.0 to 6.0 dB

Driver installations
The following instructions allow one to build the driver for the Novena-RF. The instructions are intended for building locally on the device.

Dependencies
Install the dependencies for the build and installation process, and fix a potential build issue, with the following two commands: sudo apt-get install cmake g++ libusb-1.0-0-dev git sudo apt-get remove libi2c-dev #fixes build issue

Build the host driver
SoapySDR is a modular library and API for SDR devices. First install the SoapySDR library. Then build and install the Novena RF support module: git clone https://github.com/myriadrf/Novena-RF.git cd Novena-RF/driver/host mkdir build cd build cmake ../ make sudo make install sudo ldconfig

Set-up permissions and resources
There is a compiled FPGA image and kernel module in the binary/ folder. To install the files and to set the system permissions: cd Novena-RF/driver/binary sudo ./prepare_novena_rf.sh Note: this script must be run after each reboot to set permissions and to load the module.

Testing the driver
Check that the installation detects NovenaRF support: SoapySDRUtil --make="driver=novena"

Pothos
Use the NovenaRF through Pothos SDR source and sink blocks which support advanced timed streaming and burst controls. Install SoapySDR first before following the Pothos build guide.

osmo-trx
There is a branch of osmo-trx with novena support available via GitHub.

Building the FPGA image
Build the FPGA image with Xilinx ISE 14.*. The project is fpga/novena_rf/novena_rf.xise

Building the kernel module
This is an out of tree kernel module, it requires a cross ARM toolchain and a build of the Linux kernel. Download one of the available ARM toolchains.

Cloning the Linux kernel branch for Novena
git clone https://github.com/xobs/novena-linux.git cd novena-linux git checkout v3.19-novena

Building the kernel
Instructions for building the kernel, taken from Boundary Devices: export PATH=/opt/toolchains/gcc-linaro-arm-linux-gnueabi-2012.04-20120426_linux/bin/:$PATH export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- make novena_defconfig make zImage modules

Building the kernel module
cd kernel make ARCH=arm KDIR=path/to/novena-linux ls novena_rf.ko #output

Licensing
The FPGA RTL, kernel source, and host wrapper are licensed under the Apache License, Version 2.0. However, please note that this does not extend to any files provided with the Xilinx design tools and see the relevant files for the associated terms and conditions.