Check out my first novel, midnight's simulacra!
BladeRF
The FPGA-based bladeRF SDR is offered by Nuand of San Francisco. The line includes:
Model | Price |
---|---|
bladeRF 2.0 micro xA9 | $720 |
bladeRF 2.0 micro xA4 | $480 |
bladeRF x115 | $650 |
bladeRF x40 | $420 |
The underlying FPGAs are not fully utilized by the radio software itself, and can thus be extended by the user. Additional products include the XB-200 LF/MF/HF/VHF transverter for lower-range work, the XB-300 amplifier/LNA, and the XB-100 GPIO expansion board. These only work with the x115/x40.
The libbladeRF repository contains the sources necessary for working with bladeRF. Clone this repository with the --recursive option to acquire submodules. FPGA blobs can be acquired at Nuand's site (copy them to /usr/local/etc/Nuand/bladeRF to have them autoloaded). No kernel driver is necessary; libbladeRF works directly with USB devices using libusb. The underlying libad9361 from Analog Devices can be used to manipulate the AD9361 aboard the bladeRF 2.0.
Preparing the FPGA
Upon attaching a new bladeRF, only one LED will come on, and the bladeRF-cli REPL will confirm that no firmware is present:
bladeRF> version bladeRF-cli version: 1.7.1-git-896d2431 libbladeRF version: 2.2.0-git-896d2431 Firmware version: 2.3.2 FPGA version: Unknown (FPGA not loaded) bladeRF>
Load the appropriate FPGA bitstream with load fpga or bladeRF-cli -l:
bladeRF> load fpga hostedxA4-latest.rbf Loading fpga from hostedxA4-latest.rbf... Done. bladeRF>
The load will require several seconds. Once done, all LEDs will come on, and the info command will function:
bladeRF> version bladeRF-cli version: 1.7.1-git-896d2431 libbladeRF version: 2.2.0-git-896d2431 Firmware version: 2.3.2 FPGA version: 0.10.2 (configured by USB host) bladeRF> info Board: Nuand bladeRF 2.0 (bladerf2) Serial #: ****** 128-bit hex ****** VCTCXO DAC calibration: 0x1fff FPGA size: 49 KLE FPGA loaded: yes Flash size: 32 Mbit USB bus: 2 USB address: 2 USB speed: SuperSpeed Backend: libusb Instance: 0 bladeRF>
As noted above, the FPGA bitstreams can be downloaded from Nuand's website. On Debian-derived machines, they're also available via e.g. the bladerf-fpga-hostedxa4 package. FX3 USB controller bitstreams are likewise available from Nuand, or from the Debian package bladerf-firmware-fx3. The FPGA must be loaded each time the device is powered up, but this can be performed automatically by libbladeRF.
Using the hardware
bladeRF> print RX1 Bandwidth: 18000000 Hz (Range: [200000, 56000000]) RX2 Bandwidth: 18000000 Hz (Range: [200000, 56000000]) TX1 Bandwidth: 18000000 Hz (Range: [200000, 56000000]) TX2 Bandwidth: 18000000 Hz (Range: [200000, 56000000]) RX1 Frequency: 2400000000 Hz (Range: [70000000, 6000000000]) RX2 Frequency: 2400000000 Hz (Range: [70000000, 6000000000]) TX1 Frequency: 2400000000 Hz (Range: [47000000, 6000000000]) TX2 Frequency: 2400000000 Hz (Range: [47000000, 6000000000]) Tuning Mode: Host RX1 AGC: Disabled RX2 AGC: Disabled Clock reference: none Clock input: Onboard VCTCXO Clock output: Disabled RX1 RSSI: preamble = 0 dB, symbol = -51 dB RX2 RSSI: preamble = 0 dB, symbol = -51 dB Loopback mode: none RX mux: BASEBAND - Baseband samples RX FIR Filter: normal (default) TX FIR Filter: bypass (default) Gain RX1 overall: 60 dB (Range: [-15, 60]) full: 71 dB (Range: [-4, 71]) Gain RX2 overall: 60 dB (Range: [-15, 60]) full: 71 dB (Range: [-4, 71]) Gain TX1 overall: 56 dB (Range: [-23.75, 66]) dsa: -90 dB (Range: [-89.75, 0]) Gain TX2 overall: 56 dB (Range: [-23.75, 66]) dsa: -90 dB (Range: [-89.75, 0]) RX1 sample rate: 30720000 0/1 (Range: [520834, 61440000]) RX2 sample rate: 30720000 0/1 (Range: [520834, 61440000]) TX1 sample rate: 30720000 0/1 (Range: [520834, 61440000]) TX2 sample rate: 30720000 0/1 (Range: [520834, 61440000]) Bias Tee (RX1): off Bias Tee (RX2): off Bias Tee (TX1): off Bias Tee (TX2): off Current VCTCXO trim: 0x1fff Stored VCTCXO trim: 0x1fff Hardware status: RFIC status: Tuning Mode: Host Temperature: 26.3 degrees C CTRL_OUT: 0xf8 (0x035=0x00, 0x036=0xff) Power source: USB Bus Power monitor: 4.772 V, 0.55 A, 2.62 W RF routing: RX1: RFIC 0x0 (A_BAL ) <= SW 0x0 (OPEN ) RX2: RFIC 0x0 (A_BAL ) <= SW 0x0 (OPEN ) TX1: RFIC 0x0 (TXA ) => SW 0x0 (OPEN ) TX2: RFIC 0x0 (TXA ) => SW 0x0 (OPEN ) bladeRF>
Tips
- With gqrx as of 2019-08, I couldn't initialize the BladeRF until I deleted ~/.config/gqrx, even when selecting "initialize configuration file". It did finally work.