Check out my first novel, midnight's simulacra!
BladeRF: Difference between revisions
No edit summary |
No edit summary |
||
(8 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== | ||
Upon attaching a new bladeRF, the <tt>bladeRF-cli</tt> REPL will confirm that no firmware is present: | 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> | <pre> | ||
bladeRF> version | bladeRF> version | ||
Line 32: | Line 32: | ||
bladeRF> | bladeRF> | ||
</pre> | </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
- My SDR page