Check out my first novel, midnight's simulacra!

BladeRF: Difference between revisions

From dankwiki
No edit summary
No edit summary
 
(12 intermediate revisions by the same user not shown)
Line 15: Line 15:
|}
|}


The underlying FPGAs are not fully utilized by the radio software itself, and can thus be extended by the user.
The underlying FPGAs are not fully utilized by the radio software itself, and can thus be extended by the user. Additional products include the [https://www.nuand.com/product/hf-vhf-transverter/ XB-200] LF/MF/HF/VHF transverter for lower-range work, the [https://www.nuand.com/product/amplifier/ XB-300] amplifier/LNA, and the [https://www.nuand.com/product/xb-gpio-gpio-expansion-board/ XB-100] GPIO expansion board. These only work with the x115/x40.
 
The [https://github.com/Nuand/bladeRF libbladeRF] repository contains the sources necessary for working with bladeRF. Clone this repository with the <tt>--recursive</tt> option to acquire submodules. FPGA blobs can be acquired at [http://www.nuand.com/fpga_images/ Nuand's site] (copy them to <tt>/usr/local/etc/Nuand/bladeRF</tt> to have them autoloaded). No kernel driver is necessary; libbladeRF works directly with USB devices using libusb. The underlying [https://github.com/analogdevicesinc/libad9361-iio 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 <tt>bladeRF-cli</tt> REPL will confirm that no firmware is present:
<pre>
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>
</pre>
Load the appropriate FPGA bitstream with <tt>load fpga</tt> or <tt>bladeRF-cli -l</tt>:
<pre>
bladeRF> load fpga hostedxA4-latest.rbf
 
  Loading fpga from hostedxA4-latest.rbf...
  Done.
 
bladeRF>
</pre>
The load will require several seconds. Once done, all LEDs will come on, and the <tt>info</tt> command will function:
<pre>
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>
</pre>
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 <tt>bladerf-fpga-hostedxa4</tt> package. FX3 USB controller bitstreams are likewise available from Nuand, or from the Debian package <tt>bladerf-firmware-fx3</tt>. The FPGA must be loaded each time the device is powered up, but this can be [https://github.com/Nuand/bladeRF/wiki/FPGA-Autoloading performed automatically] by libbladeRF.
 
==Using the hardware==
<pre>
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>
</pre>
 
==Tips==
* With gqrx as of 2019-08, I couldn't initialize the BladeRF until I deleted <tt>~/.config/gqrx</tt>, even when selecting "initialize configuration file". It did finally work.
 
==Further Reading==
* My [[SDR]] page

Latest revision as of 17:52, 10 September 2019

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