BladeRF

From dankwiki

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.

Further Reading