I've been trying to get a bladeRF A9 to work with GNU Radio Companion / gr-osmosdr in a development VM.
The bladeRF-cli utility seems able to connect with the device, but gr-osmosdr always prints this GRC's text window:
gr-osmosdr 0.1.4 (0.1.4) gnuradio 3.7.11
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy airspyhf soapy redpitaya freesrp
Opening nuand bladeRF with device identifier string: "*:instance=0"
FATAL: [bladeRF source] Failed to open bladeRF device
I've tried following the wiki instructions for PPA install and the troubleshooting wiki, I've tried with and without udev rules added, I've tried with USB 2 and USB 3 speed, I've tried all of the above in both a VMWare Player VM and a Virtualbox VM. The GRC program is just a basic FM reciever as a hello world, which works (if very choppy) with an RTL SDR over a 2.0 hub. I've tried using osmocom_fft instead of GRC. I've tried running both GRC and osmocom_fft as root (a hail mary nuclear option, I know it isn't supposed to be run that way). Nothing seems to work. Any help would be appreciated.
Guest Machine setup:
Fresh install of Virtualbox Ubuntu 18.04 guest on Windows 10 host, with guest additions
4 cores (of host's 8)
8 GB RAM (of host's 16)
3.0 USB enabled on guest
BladeRF A9 is directly connected to a 3.0 physical port on the host.
RTL SDR is connected via a 2.0 USB hub on the host, because I ran out of ports on my host.
bidirectional copy-paste, drag-and-drop, and shared folder enabled
Other settings default
Code: Select all
PPA install:
sudo add-apt-repository ppa:bladerf/bladerf -y
sudo apt update
# add cli
sudo apt install bladerf libbladerf-dev libbladerf-doc -y
# add firmware and fpga images
sudo apt install bladerf-f* -y
# add gnuradio
# xterm added because GRC complains it can't find xterm at startup
sudo apt install gnuradio gr-osmosdr xterm -y
Code: Select all
# test that A9 is detected
bladeRF-cli -e print -e probe -e info
RX1 Bandwidth: 3000000 Hz (Range: [200000, 56000000])
RX2 Bandwidth: 3000000 Hz (Range: [200000, 56000000])
TX1 Bandwidth: 1500000 Hz (Range: [200000, 56000000])
TX2 Bandwidth: 1500000 Hz (Range: [200000, 56000000])
RX1 Frequency: 106700000 Hz (Range: [70000000, 6000000000])
RX2 Frequency: 106700000 Hz (Range: [70000000, 6000000000])
TX1 Frequency: 923999998 Hz (Range: [47000000, 6000000000])
TX2 Frequency: 923999998 Hz (Range: [47000000, 6000000000])
RX1 AGC: Enabled
RX2 AGC: Enabled
Clock reference: none
Clock input: Onboard VCTCXO
Clock output: Disabled
RX1 RSSI: preamble = -63 dB, symbol = -70 dB
RX2 RSSI: preamble = -64 dB, symbol = -84 dB
Loopback mode: none
RX mux: BASEBAND - Baseband samples
Gain RX1 overall: 60 dB (Range: [-16, 60])
Gain RX2 overall: 60 dB (Range: [-16, 60])
Gain TX1 overall: 56 dB (Range: [-23.75, 66])
Gain TX2 overall: 56 dB (Range: [-23.75, 66])
RX1 sample rate: 2000000 0/1 (Range: [520834, 61440000])
RX2 sample rate: 2000000 0/1 (Range: [520834, 61440000])
TX1 sample rate: 2000000 0/1 (Range: [520834, 61440000])
TX2 sample rate: 2000000 0/1 (Range: [520834, 61440000])
Bias Tee (RX1): off
Bias Tee (RX2): off
Bias Tee (TX1): off
Bias Tee (TX2): off
Current VCTCXO trim: 0x1fd5
Stored VCTCXO trim: 0x1fd5
Hardware status:
Power source: DC Barrel
Power monitor: 4.924 V, 0.67 A, 3.24 W
RF routing:
TX1: RFIC 0xff ((null) ) => SW 0x0 (OPEN )
TX2: RFIC 0xff ((null) ) => SW 0x0 (OPEN )
RX1: RFIC 0xff ((null) ) <= SW 0x0 (OPEN )
RX2: RFIC 0xff ((null) ) <= SW 0x0 (OPEN )
Description: Nuand bladeRF 2.0 (currently open)
Backend: libusb
Serial: [deleted by me]
USB Bus: 2
USB Address: 2
Board: Nuand bladeRF 2.0 (bladerf2)
Serial #: [deleted by me]
VCTCXO DAC calibration: 0x1fd5
FPGA size: 301 KLE
FPGA loaded: yes
Flash size: 128 Mbit
USB bus: 2
USB address: 2
USB speed: SuperSpeed
Backend: libusb
Instance: 0
This is the test circuit for bladeRF:
osmocom source (device argument: bladerf=0, sample rate: 2M, ch0 freq: 106.7M) -> low pass filter (decimation: 8, gain: 2, sample rate: 2M, cutoff: 200k, transition width: 10k) -> WBFM recieve (quadrature rate: 250k, audio decimation: 1) -> rational resamlper (interpolation: 24, decimation: 250) -> audio sink(sample rate: 24k)
The RTL test circuit is the exact same, except the osmocom source device argument is rtl=0 instead of bladerf=0
It doesn't matter if I have a bladeRF-cli interactive session running with an open bladeRF device in a separate terminal window or not.
It does not matter if I provide the osmocom source device argument as "bladerf=0", "bladerf=[serial number here]", or "bladerf" by itself.
The frequency 106.7MHz is used as a default because it's a heavy metal station where I live.
The bladeRF cli does not fail to open the device in interactive mode, it verifies "currently open" status with the probe command after opening, I've tested it with the following arguments:
open <no args>
open *:instance=0
open *:serial=[serial number from info command]
open *:device=2:2
Other bladeRF-cli interactive commands, like changing sample rates and rx frequencies works, as does loading a fresh FPGA image, flashing the autoloader with a fresh FPGA image, and flashing a new firmware for the controller. GRC / osmocom still are not able to open the device after reflashing every image on the A9.
I get the same error trying to run osmocom_fft with bladerf, but the rtl works fine:
osmocom_fft -f 106.7e6 -s 2e6 --peak-hold -a rtl=0
Code: Select all
linux; GNU C++ version 7.3.0; Boost_106501; UHD_003.010.003.000-0-unknown
gr-osmosdr 0.1.4 (0.1.4) gnuradio 3.7.11
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy airspyhf soapy redpitaya freesrp
Using device #0 Generic RTL2832U SN: 77771111153705700
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Exact sample rate is: 2000000.052982 Hz
[R82XX] PLL not locked!
Code: Select all
linux; GNU C++ version 7.3.0; Boost_106501; UHD_003.010.003.000-0-unknown
gr-osmosdr 0.1.4 (0.1.4) gnuradio 3.7.11
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy airspyhf soapy redpitaya freesrp
Opening nuand bladeRF with device identifier string: "*:instance=0"
FATAL: [bladeRF source] Failed to open bladeRF device *:instance=0
Trying to fill up 1 missing channel(s) with null source(s).
This is being done to prevent the application from crashing
due to gnuradio bug #528.
Source has no sample rates (wrong device arguments?).
Code: Select all
groups
sdr adm cdrom sudo dip plugdev lpadmin sambashare
Code: Select all
cat /etc/udev/rules.d/88-nuand-bladerf2.rules.in
# Nuand bladeRF 2.0 micro
ATTR{idVendor}=="2cf0", ATTR{idProduct}=="5250", MODE="660", GROUP="plugdev"