|
|
# Nuand bladeRF
|
|
|
# Nuand bladeRF 2.0 micro
|
|
|
|
|
|
The bladeRF 2.0 micro is the second generation of highly capable SDRs produced by Nuand, LLC. The key component on the board is an Analog Devices AD9361 wideband transceiver which is also found in many other common SDRs (Ettus USRP B series and ADALM-PLUTOs).
|
|
|
|
|
|
The following is a list of useful references for understanding and using the bladeRF. The bladeRF wiki is the best place to start.
|
|
|
|
|
|
- [bladeRF 2.0 micro](https://www.nuand.com/bladerf-2-0-micro/)
|
|
|
- [bladeRF wiki](https://github.com/Nuand/bladeRF/wiki)
|
|
|
- [libbladeRF documentation](https://nuand.com/bladeRF-doc/libbladeRF/v2.2.1/)
|
|
|
- [bladeRF source code](https://github.com/Nuand/bladeRF)
|
|
|
- [bladeRF 2.0 Schematic](datasheets/bladeRF-micro.pdf)
|
|
|
|
|
|
To use the bladeRF within our Ubuntu environment, it first must be connected to the VM by selecting: *Devices > USB > Nuand bladeRF 2.0*
|
|
|
|
|
|
In CDC we will use the *xA9* version of the board, where board versions vary only in the size of the onboard FPGA.
|
|
|
|
|
|
| Version | Logic Elements |
|
|
|
| ------- | -------------- |
|
|
|
| xA4 | 49k |
|
|
|
| xA5 | 77k |
|
|
|
| xA9 | 301k |
|
|
|
|
|
|
## Command line interface
|
|
|
|
|
|
The `bladeRF-cli` command line utility can be used to verify device connectivity as well as query and set device parameters. For complete information, see the following references.
|
|
|
|
|
|
- [Verifying Basic Device Operation](https://github.com/Nuand/bladeRF/wiki/Getting-Started%3A-Verifying-Basic-Device-Operation)
|
|
|
- [bladeRF CLI Tips and Tricks](https://github.com/Nuand/bladeRF/wiki/bladeRF-CLI-Tips-and-Tricks)
|
|
|
|
|
|
For our purposes, we will only use `bladeRF-cli` to verify connectivity and not to set device parameters. To ensure the bladeRF is correctly attached, the probe command can be used.
|
|
|
|
|
|
```
|
|
|
$ bladeRF-cli -p # probe for connected bladeRF devices
|
|
|
|
|
|
Description: Nuand bladeRF 2.0
|
|
|
Backend: libusb
|
|
|
Serial: 991431a963384f8289baea2ba586720d
|
|
|
USB Bus: 2
|
|
|
USB Address: 2
|
|
|
```
|
|
|
|
|
|
Additional information can be inspected by first entering the command's interactive mode.
|
|
|
|
|
|
```
|
|
|
$ bladeRF-cli -i # enter interactive mode
|
|
|
```
|
|
|
|
|
|
Within the interactive mode you can check the bladeRF driver, device firmware, and FPGA versions currently loaded.
|
|
|
|
|
|
```
|
|
|
bladeRF> version
|
|
|
|
|
|
bladeRF-cli version: 1.8.0-0.2019.07.rbuild1
|
|
|
libbladeRF version: 2.2.1-0.2019.07-4build1
|
|
|
|
|
|
Firmware version: 2.3.2
|
|
|
FPGA version: 0.11.0 (configured by USB)
|
|
|
```
|
|
|
|
|
|
|
|
|
```
|
|
|
bladeRF> info
|
|
|
|
|
|
Board: Nuand bladeRF 2.0 (bladerf2)
|
|
|
Serial #: 991431a963384f8289baea2ba586720d
|
|
|
VCTCXO DAC calibration: 0x1d11
|
|
|
FPGA size: 301 KLE
|
|
|
FPGA loaded: yes
|
|
|
Flash size: 128 Mbit
|
|
|
USB bus: 2
|
|
|
USB address: 2
|
|
|
USB speed: SuperSpeed
|
|
|
Backend: libusb
|
|
|
Instance: 0
|
|
|
```
|
|
|
|
|
|
See `bladeRF --help` for a full list of possible commands.
|
|
|
|
|
|
## gr-bladeRF
|
|
|
|
|
|
To integrate the bladeRF into our GNU Radio applications we will use a version of the gr-bladeRF out-of-tree (OOT) module customized for CDC.
|
|
|
|
|
|
- [gr-bladeRF](TBD)
|
|
|
|
|
|
This fork of the Nuand [gr-bladeRF](https://github.com/Nuand/gr-bladeRF) adds additional message passing and stream tagging configuration interfaces that should be useful in completing the CDC design project.
|
|
|
|
|
|
### Block Configuration
|
|
|
|
|
|
To include the bladeRF in a flowgraph we use either the *bladeRF Sink* or *bladeRF Source* blocks.
|
|
|
|
|
|
 
|
|
|
|
|
|
These blocks and configuration
|
|
|
Device parameters (frequency, sample rate, gain, etc.) can be changed during runtime by using *QT GUI Widgets*.
|
|
|
|
|
|
The following is a list of configurable parameters under the *General*.
|
|
|
|
|
|
| Parameter | Description |
|
|
|
| ----------------- | ----------- |
|
|
|
| metadata | Provide metadata with samples. **Enable metadata to use message and stream tag interfaces.** |
|
|
|
| device | Device serial id. If 'device' is not specified, the first available device is used. |
|
|
|
| Num channels | Selects the total number of channels in this multi-device configuration. Required when specifying multiple device arguments. |
|
|
|
| Verbosity | Sets the filter level for displayed log messages. |
|
|
|
| Sample Rate (sps) | The sample rate is the number of samples per second produced (source) or consumed (sink) by this block on each channel. |
|
|
|
| Reference clock | Value of reference clock. **Set to 0 for automatic clock selection.** |
|
|
|
| Frequency (Hz) | The center frequency is the frequency the RF chain is tuned to. |
|
|
|
| Bandwidth (Hz) | Set the bandpass filter on the radio frontend. **To use the default (automatic) bandwidth filter setting, this should be zero.** |
|
|
|
|
|
|
The following is a list of configurable parameters under each *Channel N* tab.
|
|
|
|
|
|
| Parameter | Description |
|
|
|
| --------- | ----------- |
|
|
|
| DC Offset Mode | Controls the behavior of hardware DC offset corrrection. Off: Disable correction algorithm (pass through). Manual: Keep last estimated correction when switched from Automatic to Manual. Automatic: Periodicallly find the best solution to compensate for DC offset. |
|
|
|
| IQ Balance Mode | Controls the behavior of software IQ imbalance corrrection. Off: Disable correction algorithm (pass through). Manual: Keep last estimated correction when switched from Automatic to Manual. Automatic: Periodicallly find the best solution to compensate for image signals.
|
|
|
| AGC | Chooses between the manual (False) and automatic (True) gain mode where appropriate. To allow manual control of RF/IF gain stages, manual gain mode must be configured. |
|
|
|
| RF Gain | Overall RF gain of the device. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Message Port Interface
|
|
|
|
|
|
Customized to include command port
|
|
|
|
|
|
Pass as a PMT dictionary, e.g., in python
|
|
|
|
|
|
```python
|
|
|
cmd = pmt.dict()
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
| Command | Descrpiption |
|
|
|
| ------- | ------------ |
|
|
|
| tx_time | |
|
|
|
| freq | |
|
|
|
| rate | |
|
|
|
| gain | |
|
|
|
|
|
|
|
|
|
Tx underrun indication
|
|
|
|
|
|
|
|
|
### Stream Tag Interface
|
|
|
|
|
|
Tags in receive stream
|
|
|
|
|
|
rx_time
|
|
|
rx_rate
|
|
|
rx_freq
|
|
|
|
|
|
|
|
|
Timestamp
|
|
|
|
|
|
Tags in transmit stream
|
|
|
|
|
|
Burst streaming
|
|
|
|
|
|
## libbladeRF
|
|
|
|
|
|
The blocks of gr-bladeRF utilize the API provided by libbladeRF for configuring and streaming data to/from bladeRF devices.
|
|
|
|
|
|
directly in Python or in C/C++ programs without the use of
|
|
|
|
|
|
- [libbladeRF documentation](https://nuand.com/bladeRF-doc/libbladeRF/v2.2.1/)
|
|
|
|
|
|
There are good examples of
|
|
|
|
|
|
## Performance
|
|
|
|
|
|
Metrics:
|
|
|
- Noise figure/floor
|
|
|
- Frequency Stability
|
|
|
- DC offset
|
|
|
- IQ imbalance |