Use this file to discover all available pages before exploring further.
Several USRP product families support multi-device operation: multiple physical units can be combined into a single uhd::usrp::multi_usrp instance, letting your application treat them as one larger radio. Channels from every device appear in a flat, ordered channel list, and sample alignment between devices is handled automatically when you request a multi-channel streamer. Only devices of the same type can be combined, and all must share a common time and frequency reference for accurate MIMO operation.
The subdev spec controls which daughterboard slots are active and in what order they appear in the channel list. Call set_rx_subdev_spec() without a device index to apply the same spec to all devices—this is strongly recommended:
// Apply identical spec to all devices (recommended)usrp->set_rx_subdev_spec("A:0 B:0");
You can also set per-device specs, but this requires careful bookkeeping:
// Per-device specs: use with caution, document thoroughlyusrp->set_rx_subdev_spec("A:0 B:0", 0); // Device 0: two channels, A then Busrp->set_rx_subdev_spec("A:0", 1); // Device 1: one channel, slot A onlyusrp->set_rx_subdev_spec("B:0 A:0", 2); // Device 2: two channels, B then A (reversed)
With this configuration across three devices the total channel count is 5 and the mapping becomes:
Channel
Physical Location
0
Slot A, Device 0
1
Slot B, Device 0
2
Slot A, Device 1
3
Slot B, Device 2 (B:0 is first in B:0 A:0 spec)
4
Slot A, Device 2
Per-device subdev specs that differ in slot order are valid but easily misread. Unless you have a specific reason to reorder slots, always use the same spec across all devices.
When you create a multi-channel streamer from a multi-device multi_usrp, UHD automatically enables MIMO mode and aligns samples across all channels using their timestamps.
// Request all 4 channels from a 2x X310 setupuhd::stream_args_t stream_args("fc32", "sc16");stream_args.channels = {0, 1, 2, 3};uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args);// Issue a timed stream command so all channels start togetheruhd::stream_cmd_t cmd(uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS);cmd.stream_now = false;cmd.time_spec = usrp->get_time_now() + 0.1; // start 100 ms from nowrx_stream->issue_stream_cmd(cmd);
For reliable alignment the first stream command should always use stream_now = false with a time slightly in the future. This gives all devices time to receive the command before execution begins.
X310 and X410 devices can be daisy-chained using their REF IN / REF OUT connectors. This works for a small number of devices (typically 2–4) without external hardware.
MIMO cable (N2x0 only, 2 devices)
The N200/N210 MIMO cable carries both the 10 MHz reference and the PPS signal between exactly two devices. It is the simplest option when you have exactly two N2x0 units.
OctoClock (any device family)
The OctoClock distributes a 10 MHz reference and PPS signal to up to 8 devices simultaneously. It is the recommended approach for arrays of three or more devices, and for mixing devices that lack a direct daisy-chain path.