Check out my first novel, midnight's simulacra!

BladeRF: Difference between revisions

From dankwiki
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 17: Line 17:
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 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]. No kernel driver is necessary; libbladeRF works directly with USB devices using libusb.
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==
==Preparing the FPGA==
Line 68: Line 68:
</pre>
</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.
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