USRP Interfaces

From SpenchWiki
Jump to: navigation, search
VDL-2 bursts in HDSDR

If you are new to this...

To jump straight in on windows:

  1. Download the self-contained installer
  2. Install (enable HDSDR to be automatically installed too - no separate download necessary)
  3. Launch HDSDR
  4. Select "ExtIO_USRP.dll" to be used as the ExtIO (this will attempt to automatically connect to a USRP via UHD)
    • If you want to connect to another device (FUNcube Dongle, RTL2832-based USB DVB-T receiver), see Device Hint table below. For example:
      • For RTL2832: add RTL to the Device Hint in the "Device control" window
      • For FUNcube: add FCD, etc.
    • Click "Create" to create your newly specified device
  5. Lastly, in the main window, click "Start" and you're off!

You only have to do that once; for subsequent runs it'll auto-load everything.


Although USRP is mentioned everywhere, you should read this as USRP+FCD+RTL2832 (since all those devices are supported through the same interface).

  • BorIP - a network server that allows one to remotely control and stream baseband data from a USRP or FUNcube Dongle over a network to, for instance, ExtIO_USRP or a UDP Source block in GNU Radio/GRC.
  • gr-baz - Code and patches to enable seamless BorIP client support in GNU Radio (all your existing flowgraphs should work even when a remote USRP is used).


Device hint quick-start: this selects which hardware receiver to use.
"[" and "]" indicate OPTIONAL arguments, and should NOT be included when specifying the argument.
Device hint Selection
<none> [side:sub-device] First available USRP with UHD and WinUSB (libusb1)
<UHD device hint>[, side:sub-device] Specified USRP with UHD and WinUSB (libusb1)
<Legacy device index> [side:sub-device] USRP by device index with Legacy driver and libusb0 (use 0 to select first/only Legacy device)
FCD [<device index> [<I offset> [ [<gain adjust> [<phase adjust>]]]]] [mixergain={4,12}] [ifgain1={-3,6}] FUNcube Dongle by device index (or first/only if index not supplied). Key-value arguments can come anywhere after 'FCD'.
RTL (optional arguments continue...)

[vid=0x####] [pid=0x####]
[gainmode=<gain mode string in selected tuner's gain mode map> e.g. {linear,nominal,sensitive}]
[readlen=<USB bulk read length (bytes)>]
[bufmul=<buffer size multiplier>]
[buf=0 (disable buffering)]
[buflvl=<buffer to % level before streaming>]
[xtalfreq=<crystal frequency (Hz)>]
[timeout=<USB bulk read timeout (ms)>]

In BETA only: Realtek RTL2832U or similar DVB-T/DAB/FM USB receiver
ExtIO Help.png


  • There are many more options for each device/driver combination (e.g. daughterboard selection for USRP 1, firmware/FPGA image, FUNcube Dongle parameters). Please read the relevant section in either ExtIO_USRP or BorIP.
  • UHD and Legacy are mutually exclusive. UHD can only operate with WinUSB (libusb1), and Legacy only with libusb0.
  • RTL2832U requires libusb-1 ('WinUSB' driver from Zadig should be installed) - please see notes below!

For help on a specific interface, click one of the links above.

For help on installing USB drivers, read the instructions on using Zadig.


The following videos demonstrate the use of the ExtIO plugin. Even though one type of receiver is used in each, they serve as a general demonstration because the ExtIO allows operation of multiple devices in the same manner.

  • Basic ExtIO usage (USRP)
    Includes enabling the UDP Relay to send the baseband data over a network to the UDP Source block in GNU Radio, which allows for further analysis.
  • A detailed exploration of HF with ExtIO (USRP + HF transverter)
    Analysis of Whistlers, Ionosondes, Weather fax (WEFAX), Flight Information Service, Link 11 (TADIL A), RTTY, Over-the-Horizon RADAR, STANAG 4285, Sweepers, Unknown sweeping 'blocks', ACORN (Ocean RADAR), ALE (Automatic Link Establishment), OFDM (Orthogonal Frequency Division Multiplexing), and DRM (Digital Radio Mondiale).

External resources

For a complete list of external resources for RTL2832U-based devices, please see this page.



HDSDR and Winrad are (optionally) automatically downloaded by my installer below, so you do not have to download them separately.


No compilation necessary - just download, install and run! The installer will take care of:

  • (optionally) installing Winrad or HDSDR if you don't already have one,
  • USB drivers and Legacy/UHD firmware for your USRP, and
  • the Visual Studio runtime libraries.

If you only want to use a FUNcube Dongle, you do not need to install libusb.

Just so you know precisely what the installer is doing (i.e. no funny stuff), you can look at the NSIS script. For the code and patches required to enable BorIP support in GNU Radio, please see gr-baz.

If you have comments or feedback, please get in touch!


  • This release includes support for RTL2832 chips and associated tuners (see RTL device hint in table above).
  • Apart from RTL2832 support, the release also contains more minor fixes to the other hardware interfaces.
  • For GNU Radio: I have implemented full support for this hardware in GNU Radio as the baz.rtl_source_c source block found in my gr-baz module (the source code is on that page).
  • Information, and a simple Linux command-line capture utility, for the RTL2832 demodulator can be found at rtl-sdr on Osmocom. Thank you to Antti Palosaari for uncovering this capability of the chip, and Steve Markgraf for putting together rtl-sdr!


If you're using a DVB-T dongle, don't forget to supply "RTL" as the device hint to the ExtIO plugin, otherwise it will try to connect to a USRP using UHD! See Device Hint table above in Help section.

(The filename was but I dropped the BETA.)

Please see the version history for information on what has changed recently.

For installation instructions, please see the installation video and External Resources on the dedicated RTL2832U page.

Source code

  • The cross-platform source code for librtl2832++ can be found in gr-baz.
  • The ExtIO source resides in my SVN.

Please note that the ExtIO code initially grew from the need to use a USRP exclusively. Since then I have 'tacked on' support for BorIP, the FUNcube Dongle and RTL2832U-based device. It could do with some major refactoring! (Anyone?)

Feedback & Debug Output

If for some reason the program crashes, please try again but this time open the EXE of the host application with Dependency Walker, profile it and enable 'Log debug output messages' before clicking OK on the Profile Module dialog. Then please email me the log to help with diagnosis.

Version history

Version history for last release
Version Changelog
1.8 BETA 2
  • Handle bad packets when resuming N-series streaming
  • Allow for different devices' samples-per-packet (e.g. switching from N-series to B-series - HDSDR does not like this to change)
1.8 BETA 1
  • UHD 3.9.4 (release)
  • Added control for clock & time source to ExtIO & BorIP server
  • Allowing short packets from BorIP server
  • Fixes to overflow/network loss event counting
1.7 BETA 2
  • UHD 3.9 with B200mini support
1.7 BETA 1
  • UHD 3.9
1.6 BETA 3
  • See BETA notes below
  • Tuning > 2.4 GHz (64-bit tuning)
  • Latest UHD (3.7.1)
    • Vastly improved USRP B200/B210 (B2x0) support
    • USRP X300/X310 support
  • Latest Zadig
  • Removed unnecessary images to reduce installer size
  • Better UHD/RTL logging
  • Fixed samples per packet returning zero bug in UHD source
  • R820T tuner code actually works now (RTL2832U IF support)
  • Minor fix for detecting UHD overflows
  • Initial R820T tuner support for RTL2832U devices (doesn't actually work - see 1.5)
  • Added a few more RTL2832U devices
  • Fixes for better responsiveness under Wine
  • Using UHD RX streamer
  • UHD 003.005.000
  • 64-bit tuning
  • e4k tuner used by default
  • Provide default Device Hints in ComboBox
  • Fixed Device Hint ComboBox history storage
  • Correct 'adjusted' samples when relaying in Playback mode
  • New FCD capture code
  • Added mixergain and ifgain1 arguments to FCD device hint options
  • Add BorIP resettime command line argument to fix long-running FCD capture issue
  • Various minor fixes
  • UHD 003.003.001 (supports B100) and firmware for all USRP models
  • FUNcube Dongle support
  • Option to relay as BorIP packets
  • Compatibility for non-aligned buffers
  • Various bug-fixes
  • Much more informative error messages
  • Revised DEST command
  • Rrror messages passed through network layer
  • Firmware image option for Legacy device hint
  • Initial release


Update/version: (chronologically ascending - if there's a new point, the download has been updated and the BETA #<number> has been updated in the ZIP file's text comment)

Version 1.3

  1. Noxon adapters (with the Fitipower FC0013 tuner) are now supported! (Although I haven't actually tested the code as I don't have one with that tuner. If you have one and try this plugin, please let me know if it works!)
  2. Hama nano adapters should now work too.
  3. Relaxed locking so changing frequency and gain will happen seamlessly (no delay).
  4. Major fix to buffering code and performance improvements (should work well now, although I'm seeing that the adapter only really performs optimally at lower sample rates)
    • You may see high CPU usage. A quick check showed this was actually HDSDR, not my code. It might burning more cycles during resampling/rendering/etc with slightly odd device capture rates.
    • As you increase the capture rate, there is a subtle degradation in the signal from the device (I noted this with a constant tone from a signal generator). At higher sample rates, the internal buffering mechanism already greatly reduces this problem, but the issue is still there - perhaps it is indeed a limitation of the device. You can put readlen=<value> after the device hint, making value divisible by 512. The default (32768) is a good compromise between performance and responsiveness, but for a longer buffer try 524288.
    • If you change (increase) the readlen, you will probably have to restart HDSDR for it to take effect correctly (I believe this is actually an issue with HDSDR). For example:
    RTL readlen=524288
  5. RTL2832 now enabled in BorIP server too (there's still an issue - please don't use it until you see a new update about it)
  6. A number of fixes:
    • Corrected tuning bug with FC0013 (no more I2C failures)
    • Added support for Dexatek Technology dongle (1d19:1101)
    • Gain is clipped to range supported by tuner
  7. New device & BorIP fix:
    • NOXON version 2 (0ccd:00e0)
    • Fixed buffer overflow issue in BorIP Server. When using it for RTL, you MUST use:
    RTL readlen=8192
    (or a lower multiple of 512, that when multiplied by 4 + 4 <= max UDP packet size) to prevent packet truncation (my system reports 65507). I will solve this in the future by implementing automatic segmentation into multiple packets.
    • Un-install now removes all UHD firmware files
  8. Big update:
    • Added FC0012 & FC2580 support
    • Added many more devices to device table for automatic recognition
    • More device hint options so you can use custom devices and override tuner selection
    • Use of new 'librtl2832++.dll that abstracts hardware interface (source code is in msvc directory in gr-baz)
  9. More devices (DIKOM, Dexatek 3). Uses cross-platform librtl2832++ (same control code for Linux and Windows)
  10. BIG additions:
    • Auto-probe tuner!
    • Fixed FC0012 initialisation error
    • LO readout is only updated when actual tuning has taken place (e.g. FCD/RTL does not support sub-Hz tuning like the USRP)
    • More devices (Twintech, Genius TVGo, SVEON)
  11. Swapped auto-detection order of e4k and e4000. Added NOXON version 3' (0ccd:00d7).
  12. Coincides with release 1.4
    More devices:
    • Compro Videomate
    • Cinergy (rev 3)

Version 1.6

  1. New UHD with USRP B200/B210 support
    • When stopping streaming, or changing sample rate, a number of USB transfers will be reported can cancelled - this is OK and can be ignored
    • On USB 2, stopping and starting streaming, or changing sample rate, seems to work. On USB 3, sometimes there is an issue with the rate samples are received (it seems much lower), and so you'll notice the data being delivered to your SDR application occurs more slowly. To work around this, choose a higher rate, and/or Stop/Start streaming until it comes good (or press 'Create' in the Device Control dialog to create the device again).
  2. Updated to latest UHD, which has all my B2x0 improvements and includes host code for X300/X310 support
  3. Ability to tune > 2.4 GHz with compatible client software (e.g. HDSDR) that supports 64-bit tuning

Version 1.7

  1. Updates (see version history above)

Version 1.8

  1. Updates (see version history above)