UHD ships a suite of command-line utilities that cover the full device lifecycle — from initial discovery and capability inspection through FPGA image management, RF self-calibration, and live property control. Each tool accepts device address arguments viaDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/EttusResearch/uhd/llms.txt
Use this file to discover all available pages before exploring further.
--args using the same key/value format understood by the UHD API, so the filtering you learn in one tool carries over to all others.
std::clog). Standard output is reserved for structured results and is safe to redirect or pipe. No UHD tool prints log messages to stdout.Discovery and Inspection
uhd_find_devices — Enumerate attached USRPs
uhd_find_devices — Enumerate attached USRPs
uhd_find_devices scans all transport layers (USB, Ethernet, PCIe) for supported USRP hardware and prints a numbered list of discovered devices with their address parameters. It appends find_all=1 internally so that every reachable device is reported regardless of whether it is currently in use.Usage| Flag | Description |
|---|---|
--args | Key/value filter string; accepts any device address key (type, serial, addr, name, vid, pid) |
uhd_usrp_probe — Print device tree and capabilities
uhd_usrp_probe — Print device tree and capabilities
uhd_usrp_probe opens a live connection to the specified device and prints a formatted tree of its properties: motherboard EEPROM data, firmware/FPGA versions, time and clock source options, RX/TX frontends, frequency ranges, gain elements, available antennas, DSP blocks, and RFNoC block topology.Usage| Flag | Description |
|---|---|
--args | Device address and optional configuration key/value pairs |
--tree | Print the raw, complete UHD property tree instead of the formatted summary |
--string <path> | Query a single string value from the property tree |
--double <path> | Query a double-precision floating-point value from the property tree |
--int <path> | Query an integer value from the property tree |
--sensor <path> | Query a sensor value from the property tree |
--range <path> | Query a range (gain, bandwidth, frequency, …) from the property tree |
--version | Print the UHD version string and exit |
--init-only | Initialize the device without running any queries |
--interactive-reg-iface <block-id> | Open an interactive peek/poke shell for an RFNoC block’s registers |
usrpctl — Query and control device properties
usrpctl — Query and control device properties
usrpctl is a Python-based front-end that provides a unified subcommand interface for device control. It discovers devices using the same address-argument format as uhd_find_devices, then dispatches to a named subcommand. The -v flag increases the UHD log verbosity fed to the underlying tools.Usageid argument accepts any device address string (e.g. "addr=192.168.10.2" or "serial=31C5AB2"). When omitted, usrpctl operates on all discovered devices.Subcommands| Subcommand | Description |
|---|---|
find | List all devices matching the id filter — mirrors uhd_find_devices output |
probe | Run uhd_usrp_probe on the matched device; accepts -tree |
reset | Reset a subcomponent of the device; accepts -mpm to restart the MPM daemon |
usrpctl maps -v levels to UHD log levels by setting UHD_LOG_CONSOLE_LEVEL in the environment: one -v corresponds to warning, up to -vvvvv for trace.Image Management
uhd_images_downloader — Download FPGA and firmware images
uhd_images_downloader — Download FPGA and firmware images
uhd_images_downloader fetches pre-built FPGA bitfiles and firmware images from Ettus Research’s CDN and installs them into the UHD images directory. It uses a built-in manifest to select only the image packages that match the installed UHD version and records downloads in an inventory.json file to avoid re-downloading unchanged images.Usage| Flag | Description |
|---|---|
-t, --types <regex> | Download only image packages whose names match the given regular expression (e.g. x3.* or b2.*) |
-i, --install-location <path> | Override the default install directory (<prefix>/share/uhd/images) |
-l, --list-targets | Print all available image package names and exit |
-b, --base-url <url> | Override the download base URL (default: https://files.ettus.com/binaries/cache/) |
-y, --yes | Skip confirmation prompts |
-n, --dry-run | Show what would be downloaded without actually downloading |
--refetch | Re-download all images even if the inventory shows them as current |
-q, --quiet | Decrease output verbosity |
-v, --verbose | Increase output verbosity |
UHD_IMAGES_DIR environment variable can hold a colon-separated list of directories that UHD searches for image files at runtime. Set it if you install images to a non-default location and cannot modify the UHD prefix.uhd_image_loader — Program images onto a device
uhd_image_loader — Program images onto a device
uhd_image_loader writes FPGA bitfiles and/or firmware images directly onto a connected USRP device’s on-board storage. The --args string must include a type= key identifying the device family; without it the tool raises a runtime error. Interrupting a programming operation with Ctrl+C risks leaving the device in an unusable state — the tool warns on the first interrupt and provides recovery instructions if interrupted a second time.Usage| Flag | Description |
|---|---|
--args | Device address args; must include type=<device-type> |
--fw-path <path> | Path to a custom firmware image file (uses the UHD default if omitted) |
--fpga-path <path> | Path to a custom FPGA bitfile (uses the UHD default if omitted) |
--out-path <path> | Output path for a downloaded FPGA .bit file (used with --download) |
--no-fw | Skip firmware programming |
--no-fpga | Skip FPGA programming |
--download | Download the active FPGA image to a file rather than programming |
RF Self-Calibration
UHD includes three self-calibration utilities that sweep the LO frequency range and compute per-frequency correction tables for IQ imbalance and TX DC offset. Corrections are written as binary.cal files to the user’s home directory and are automatically applied at runtime whenever the LO is re-tuned.
The following daughterboards and devices support self-calibration:
Supported Daughterboards
Supported Motherboards
uhd_cal_* utilities. Use uhd_iq_dc_correction.py for IQ imbalance and DC offset correction on X420.| Platform | Default path |
|---|---|
| Linux | ${HOME}/.local/share/uhd/cal/ |
| Windows | %LOCALAPPDATA%\uhd\cal\ |
UHD_CAL_DATA_PATH to override the default directory.
uhd_cal_rx_iq_balance — RX IQ imbalance calibration
uhd_cal_rx_iq_balance — RX IQ imbalance calibration
A) and phase (B) correction values that reduce the IQ spur. Results are written to a .cal file and applied automatically on subsequent LO tunes.Usage| Flag | Description |
|---|---|
--verbose | Print per-frequency calibration progress |
--args | Device address args |
--subdev | Subdevice specification (default: first subdevice, often A) |
--freq_start | Start frequency for the sweep in Hz |
--freq_stop | Stop frequency for the sweep in Hz |
--freq_step | LO step size for the sweep in Hz |
--nsamps | Number of samples per data capture |
--precision | Target correction precision (default: 0.0001) |
uhd_cal_tx_dc_offset — TX DC offset calibration
uhd_cal_tx_dc_offset — TX DC offset calibration
D' that minimizes LO leakage for each frequency. The correction is implemented as a single complex adder in the FPGA signal path.Usage| Flag | Description |
|---|---|
--verbose | Print per-frequency calibration progress |
--args | Device address args |
--subdev | Subdevice specification |
--freq_start | Start frequency in Hz |
--freq_stop | Stop frequency in Hz |
--freq_step | LO step size in Hz |
--nsamps | Number of samples per data capture |
uhd_cal_tx_iq_balance — TX IQ imbalance calibration
uhd_cal_tx_iq_balance — TX IQ imbalance calibration
| Flag | Description |
|---|---|
--verbose | Print per-frequency calibration progress |
--args | Device address args |
--subdev | Subdevice specification |
--freq_start | Start frequency in Hz |
--freq_stop | Stop frequency in Hz |
--freq_step | LO step size in Hz |
--nsamps | Number of samples per data capture |
Running a Full Self-Calibration Sweep
Disconnect all RF cables
Verify that the daughterboard has a serial number
