Skip to main content

Documentation 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.

The USRP E3xx Series is Ettus Research’s family of self-contained, embedded software defined radios. All devices run a full OpenEmbedded Linux distribution on a Xilinx Zynq SoC and are managed through the MPM (Modular Peripheral Manager) daemon—the same architecture used by the N Series and X4xx Series. Two sub-families exist: the E310 family (E310, E312, E313), which is compact and battery-capable, and the E320, which is a higher-performance board-level product with SFP+ connectivity and an internal GPSDO.

Supported Models

E310

Original enclosed module with motherboard + daughterboard. Battery operation supported. Internal GPS and IMU. Xilinx Zynq XC7Z020 (Speed Grade 1 or 3). Two USB 2.0 host ports.

E312

Like the E310 with integrated LiIon battery pack support (Molex connector). Speed grade 3.

E313

Industrial-temperature variant of the E310 family.

E320

Monolithic board (OEM or enclosed). Xilinx Zynq XC7Z045. Single SFP+ (1 GigE or 10 GigE). Internal GPSDO. Fan connector (board-only version). Higher performance and larger FPGA.

Features

Common RF Capabilities

All E3xx devices are based on the Analog Devices AD9361 transceiver IC and provide:
  • TX band: 47 MHz – 6.0 GHz
  • RX band: 70 MHz – 6.0 GHz
  • Instantaneous bandwidth: 56 MHz
  • Channels: 2 TX/RX per device (MIMO capable)
  • 2 RX DDC chains and 2 TX DUC chains in FPGA
  • RFNoC capable

E310 / E312 / E313 Hardware

  • External PPS reference input (SYNC port)
  • 2 USB 2.0 host ports
  • Configurable clock rate
  • Internal IMU
  • Internal GPS (antenna input required for lock)
  • Internal GPIO connector with UHD API control (6 pins)
  • USB connection for JTAG debugger and serial console
  • Xilinx Zynq XC7Z020 (Speed Grade 1: 667 MHz; Speed Grade 3: 866 MHz)

E320 Hardware

  • Single SFP+ Transceiver (1 GigE, 10 GigE, or Aurora)
  • External PPS input
  • External 10 MHz reference input
  • Configurable clock rate
  • Internal IMU
  • Internal GPSDO (10 MHz + PPS reference)
  • External GPIO connector (8 pins via HDMI connector)
  • USB connection for JTAG and serial console
  • Fan connector (board-only variant)
  • Xilinx Zynq XC7Z045, clocked at 1 GHz (Speed Grade 3)

Software (Both Families)

  • Full Linux system on ARM Cortex-A9
  • Runs MPM (Modular Peripheral Manager)

Getting Started

Checklist

  1. Connect AC power (and optionally a battery for E312)
  2. Connect the RJ45 Ethernet port to a DHCP-capable network
  3. Review security settings (no root password is set by default)
  4. Connect clocking references if required

Updating the File System

Download the appropriate SD card image and flash it to the micro SD card. Download the image:
# E310/E312/E313
uhd_images_downloader -t e310 -t sdimg

# E320
uhd_images_downloader -t e320 -t sdimg
Flash on Linux:
sudo dd if=usrp_e310_fs.sdimg of=/dev/<YOUR_SD_CARD> bs=1M
The dd command can cause unrecoverable data loss if the wrong device is selected. Double-check your SD card device node before running.
Flash on Windows: Use Etcher to write the .sdimg file. Minimum SD card size: 8 GB (E310) or 16 GB (E320).

SSH Connection

The RJ45 port (eth0) uses DHCP by default:
ssh root@ni-e31x-<SERIAL>
# Or using mDNS:
ssh root@ni-e31x-<SERIAL>.local

# E320
ssh root@ni-e320-<SERIAL>
No root password is set by default. Run passwd on the device to secure it.

Serial Console

Connect via USB and use a terminal emulator at 115200 baud:
# E310
sudo screen /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_...-if00-port0 115200

# E320 (Linux shell)
sudo screen /dev/serial/by-id/usb-Silicon_Labs_CP2105_...-if01-port0 115200

# E320 (STM32 microcontroller)
sudo screen /dev/serial/by-id/usb-Silicon_Labs_CP2105_...-if00-port0 115200

Network Configuration

InterfaceDefaultNotes
eth0DHCPBoth E31x and E320
sfp0192.168.10.2/24 (MTU 9000)E320 only
Configuration files live at /data/network/<interface>.network. This directory persists across filesystem updates.

Network (Streaming) Mode

With UHD 4.0 and later, the RJ45 port can stream samples to/from a host:
DeviceMax RX Sample Rate (RJ45)Recommended Config
E31x4.4 MS/smaster_clock_rate=13.2e6, rx_rate=4.4e6
E3206.4 MS/smaster_clock_rate=19.6e6, rx_rate=6.4e6
For higher bandwidth, use the E320 SFP+ port or run processing directly on the embedded ARM using RFNoC.

E320 FPGA Image Flavors

FlavorSFP+ Interface
1G (default)1 GigE
XG10 GigE
AAAurora (BIST only)
Load a new FPGA image:
uhd_image_loader --args type=e3xx,addr=<IP Address>,fpga=XG

MPM Architecture

All E Series devices run MPM—a hardware daemon on the Linux ARM core that handles device initialization, FPGA loading, and the RPC interface that host UHD connects to. MPM starts automatically at boot. To skip boot-time initialization for faster boot:
; /etc/uhd/mpm.conf
[e3xx]
skip_boot_init=1

Using the E3xx from UHD

C++ Initialization

// Connect to any E3xx device
auto usrp = uhd::usrp::multi_usrp::make("type=e3xx");

// Connect by IP address
auto usrp = uhd::usrp::multi_usrp::make("type=e3xx,addr=192.168.10.2");

Subdev Specifications

All E3xx devices use the following subdev spec:
ChannelSubdev Spec
Channel 0A:0
Channel 1A:1

Device Arguments

KeyDescriptionExample
addrIPv4 address (SFP+ or RJ45)addr=192.168.10.2
master_clock_rateMaster clock rate in Hz (default 16 MHz)master_clock_rate=30.72e6
skip_initSkip device initializationskip_init=1
discovery_portOverride MPM discovery portdiscovery_port=49700
rpc_portOverride MPM RPC portrpc_port=49701
enable_gpsEnable/disable integrated GPSDO (E320 only)enable_gps=0
force_mtuManually set network MTUforce_mtu=8000

Clock and Time Synchronization

E310 / E312 / E313

The E31x does not have separate reference clock and PPS inputs. A single SYNC port accepts an external PPS signal, which disciplines the internal reference clock:
  • Set time_source=external to use an external PPS on the SYNC pin.
  • Set time_source=gpsdo to use the internal GPS PPS.
  • The only supported clock_source is internal.
auto usrp = uhd::usrp::multi_usrp::make(
    "type=e3xx,clock_source=internal,time_source=external");

E320

The E320 has independent inputs for clock and time reference, like most other USRPs. When clock_source is set to internal or gpsdo, the internal GPSDO is used:
// Use internal GPSDO as both clock and time reference
auto usrp = uhd::usrp::multi_usrp::make(
    "type=e3xx,clock_source=gpsdo,time_source=gpsdo");
To reduce phase noise when using an external reference, disable the GPSDO:
auto usrp = uhd::usrp::multi_usrp::make(
    "type=e3xx,addr=<IP>,enable_gps=0,clock_source=external,time_source=external");

GPIO

E31x (Internal GPIO Connector — 6 pins)

PinSignal
1+3.3V
2I2C SCL
4I2C SDA
3, 5–10Data[0]–Data[5]

E320 (Front-Panel HDMI GPIO — 8 pins)

GPIO pins are exposed through the HDMI Type-C (mini) or HDMI Type-A connector:
GPIOMini HDMI PinHDMI Pin
Data[0]87
Data[1]99
Data[2]1110
Data[3]1212
Data[4]1413
Data[5]1515
Data[6]1616
Data[7]1714
GPIO control example (same API as N Series):
auto usrp = uhd::usrp::multi_usrp::make("type=e3xx");
auto gpio_src = usrp->get_gpio_src("FP0");

// Pin 0 driven from Linux (PS); pins 1–2 from UHD channel 0
gpio_src[0] = "PS";
gpio_src[1] = "RFA";
gpio_src[2] = "RFA";
usrp->set_gpio_src("FP0", gpio_src);

// ATR mode: pin 1 goes high when receiving
usrp->set_gpio_attr("FP0A", "CTRL", 0x2, 0x6);
usrp->set_gpio_attr("FP0A", "DDR",  0x6, 0x6);
usrp->set_gpio_attr("FP0A", "ATR_RX", 0x2, 0x2);

E312 Battery Operation

The E312 (and E310 with firmware upgrade) supports LiIon battery packs connected via a Molex 53014-6310 connector. Battery status is exposed via sysfs:
cat /sys/class/power_supply/e31x-battery/status
The driver emits uevents on state changes. Example udev rule to shut down at 73°C:
SUBSYSTEM=="power_supply", ATTR{online}=="1", ATTR{temp}=="730", RUN+="/sbin/shutdown -h now"

Power LED Status (E312 / upgraded E310)

LED StateMeaning
OffDevice off, not charging
Slow blinking greenOff, charging
Fast blinking greenOn, charging
Solid greenOn (not charging)
Solid orangeOn, discharging
Fast blinking orangeOn, discharging, battery < 10%
Fast blinking redError code (1–12)

Remote Management

Mender (Remote Filesystem Updates)

Both E31x and E320 support Mender for over-the-network filesystem updates without physical access:
# Install a local artifact
mender install /path/to/latest.mender

# Install from remote server
mender install http://server.name/path/to/latest.mender

# After successful reboot, commit the update
mender commit
For E310, the SD cards shipped from the factory do not include MPM. Flash the SD card manually with UHD 3.15.0.0 or later before using Mender for subsequent updates.

E320 Built-in Self-Test

e320_bist -h           # List available tests
e320_bist gpsdo        # Test GPSDO
e320_bist standard     # Run standard set of tests

Available Sensors

E31x motherboard sensors:
  • temp_fpga — FPGA die temperature (°C)
  • temp_mb — Motherboard temperature (°C)
  • ref_locked — Reference clock lock status
E320 motherboard sensors:
  • temp_internal, temp_fpga, temp_rf_channelA, temp_rf_channelB, temp_main_power
  • gps_locked, gps_time, gps_tpv, gps_sky
  • ref_locked, fan (RPM)
All E3xx daughterboard sensors:
  • lo_locked — AD9361 LO lock status
  • ad9361_temperature — RFIC die temperature (°C)
  • rssi — Received signal strength (RX only)

Additional Resources

Build docs developers (and LLMs) love