BladeRF 2.0 Micro full duplex in GNURadio

Discussions related to embedded firmware, driver, and user mode application software development
Post Reply
yakovdk
Posts: 1
Joined: Tue Nov 04, 2025 1:33 pm

BladeRF 2.0 Micro full duplex in GNURadio

Post by yakovdk »

I'm using the SoapySDR BladeRF source/sink in a GNURadio flowgraph. Starting the flowgraph, it opens the sink just fine, but exits with an error about permission denied and being unable to open the device for the source:

Code: Select all

[INFO] bladerf_open_with_devinfo()
[INFO] bladerf_get_serial() = 51768470750247babcf0ebf45561ad1f
[INFO] setSampleRate(Rx, 0, 4.000000 MHz), actual = 4.000000 MHz
[INFO] setSampleRate(Tx, 0, 4.000000 MHz), actual = 4.000000 MHz
[INFO] setSampleRate(Rx, 0, 0.768000 MHz), actual = 0.767999 MHz
[WARNING @ host/libraries/libbladeRF/src/backend/usb/libusb.c:345] Found a bladeRF via VID/PID, but could not open it due to insufficient permissions, or because the device is already open.
[INFO] bladerf_open_with_devinfo()
[WARNING @ host/libraries/libbladeRF/src/backend/usb/libusb.c:530] Found a bladeRF via VID/PID, but could not open it due to insufficient permissions.
[1m[31m[ERROR] bladerf_open_with_devinfo() returned -7 - No device(s) available[0m
Traceback (most recent call last):
  File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 226, in <module>
    main()
  File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 204, in main
    tb = top_block_cls()
         ^^^^^^^^^^^^^^^
  File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 96, in __init__
    self.soapy_bladerf_sink_0 = soapy.sink(dev, "fc32", 1, 'driver=bladerf,serial=51768470750247babcf0ebf45561ad1f',
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: bladerf_open_with_devinfo() failed -7 - No device(s) available
[INFO] bladerf_close()
What is the magic trick to get GNURadio to use the BladeRF in full duplex (in Windows here)?
funkotha
Posts: 1
Joined: Mon Dec 22, 2025 9:55 pm

Re: BladeRF 2.0 Micro full duplex in GNURadio

Post by funkotha »

yakovdk wrote: Tue Nov 04, 2025 1:40 pm I'm using the SoapySDR BladeRF source/sink in a GNURadio flowgraph. Starting the flowgraph, it opens the sink just fine, but exits with an error about permission denied and being unable to open the device for the source:
geometry dash

Code: Select all

[INFO] bladerf_open_with_devinfo()
[INFO] bladerf_get_serial() = 51768470750247babcf0ebf45561ad1f
[INFO] setSampleRate(Rx, 0, 4.000000 MHz), actual = 4.000000 MHz
[INFO] setSampleRate(Tx, 0, 4.000000 MHz), actual = 4.000000 MHz
[INFO] setSampleRate(Rx, 0, 0.768000 MHz), actual = 0.767999 MHz
[WARNING @ host/libraries/libbladeRF/src/backend/usb/libusb.c:345] Found a bladeRF via VID/PID, but could not open it due to insufficient permissions, or because the device is already open.
[INFO] bladerf_open_with_devinfo()
[WARNING @ host/libraries/libbladeRF/src/backend/usb/libusb.c:530] Found a bladeRF via VID/PID, but could not open it due to insufficient permissions.
[1m[31m[ERROR] bladerf_open_with_devinfo() returned -7 - No device(s) available[0m
Traceback (most recent call last):
  File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 226, in <module>
    main()
  File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 204, in main
    tb = top_block_cls()
         ^^^^^^^^^^^^^^^
  File "C:\Users\N5HXR\Documents\gnuradio\signal_source_gnuradio.py", line 96, in __init__
    self.soapy_bladerf_sink_0 = soapy.sink(dev, "fc32", 1, 'driver=bladerf,serial=51768470750247babcf0ebf45561ad1f',
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: bladerf_open_with_devinfo() failed -7 - No device(s) available
[INFO] bladerf_close()
What is the magic trick to get GNURadio to use the BladeRF in full duplex (in Windows here)?
If using two separate Source/Sink blocks still causes conflicts, you can create a small Python script (outside of GRC) to initialize a single Soapy device object, and then assign the Rx and Tx streams to that same object.

On Windows, BladeRF requires the libusb-win32 or WinUSB driver.
Open the Zadig tool.
Select

Code: Select all

Options
->

Code: Select all

List All Devices
Select BladeRF 2.0 Micro.
Ensure that the installed driver is libusb-win32 (v1.2.6.0). Some versions of GNURadio on Windows are extremely picky with WinUSB but work very smoothly with libusb-win32.
Post Reply