ADRV9009 no-OS Example Project

See projects/adrv9009 (doxygen) for the Doxygen documentation.

Supported Evaluation Boards

Overview

The ADRV9009-W/PCBZ is an FMC radio module designed for evaluating the ADRV9009, a highly integrated RF transceiver offering wideband transmit, receive, and observation receiver functionality. The board interfaces with FPGA carrier boards via the FMC connector and enables developers to evaluate and prototype RF signal chains for a variety of applications.

The ADRV9009 features dual transmitters, dual receivers, and dual observation receivers covering a frequency range of 75 MHz to 6 GHz. It integrates a JESD204B interface for high-speed digital data transfer, on-chip DPD (digital pre-distortion) support, and ARM Cortex-M3 based firmware for device control. The device operates on multiple RF profiles configurable through the Talise Evaluation Software (TES).

Applications

  • 3G, 4G, and 5G TDD macrocell base stations

  • TDD active antenna systems

  • Massive multiple input, multiple output (MIMO)

  • Phased array radar

  • Electronic warfare

  • Military communications

  • Portable test equipment

Hardware Specifications

Power Supply Requirements

The ADRV9009-W/PCBZ evaluation board receives power through the FMC connector from the attached FPGA carrier board. On-board regulators generate the required voltage domains for the ADRV9009 transceiver.

No-OS Supported Examples

The initialization data used in the examples is taken from the Project Common Data Path.

For full system-level design setup, visit: ADRV9009/ADRV9008 No-OS System Level Design Setup

Demo Example

The demo example (variant demo) is the default build which initializes the ADRV9009 device, configures the clocking, JESD204B links, and RF signal paths. It performs device calibrations and verifies link status.

ADRV9008-1 Example

The ADRV9008-1 example (variant adrv9008-1) targets the ADRV9008-1, the TX-only sub-variant of the ADRV9009 family. This variant activates the TX-only code paths in headless_arm.c.

ADRV9008-2 Example

The ADRV9008-2 example (variant adrv9008-2) targets the ADRV9008-2, the RX-only sub-variant of the ADRV9009 family. This variant activates the RX-only code paths in headless_arm.c.

DMA Example

The DMA example (variant dma_example) demonstrates direct memory access data transfer for the ADRV9009. It initializes the JESD204B links, DMA controllers, and data converter cores, then exercises the ADC/DAC data paths for test and verification.

IIO Example

The IIO example (variant iio) is an IIOD demo for the ADRV9009 evaluation board. The project launches the IIOD server on the board so that the user may connect to it via an IIO client application. Using IIO-Oscilloscope, the user can configure and stream data from the device.

If you are not familiar with ADI IIO Application, please take a look at: IIO No-OS

If you are not familiar with ADI IIO-Oscilloscope Client, please take a look at: IIO Oscilloscope

No-OS Supported Platforms

Xilinx

Used Hardware

Connections

Connect the ADRV9009-W/PCBZ to the ZC706 or ZCU102 using the FMC HPC connector. The JESD204B serial lanes interface with the FPGA transceivers via the FMC connector. The ADRV9009 is configured over SPI from the FPGA. Connect a USB cable to the carrier board USB-UART port and the host PC for serial console access at 115200 baud, 8N1.

Build Command

The Xilinx platform uses the CMake/Ninja build system via the no_os_build.py helper script. Available variants: demo, dma_example, iio, adrv9008-1, adrv9008-2. Available boards: zc706, zcu102.

A Xilinx XSA hardware description file is required. The HDL design name is adrv9009; the hardware name is composed as adrv9009_<board> (e.g. adrv9009_zcu102).

For toolchain setup and prerequisites, see the Xilinx CMake build guide.

# Source the Vitis toolchain environment
source ~/.xilinx/2025.1/Vitis/settings64.sh
# PowerShell (Windows) equivalent:
#   & "$env:USERPROFILE\.xilinx\2025.1\Vitis\settings64.bat"

cd no-OS

# Build the demo example for ZCU102
python tools/scripts/no_os_build.py build \
    --project adrv9009 --variant demo --board zcu102 \
    --hardware /path/to/adrv9009_zcu102/system_top.xsa

# Build and flash via JTAG
python tools/scripts/no_os_build.py build \
    --project adrv9009 --variant demo --board zcu102 \
    --hardware /path/to/adrv9009_zcu102/system_top.xsa \
    --probe openocd --flash

# Build the demo example for ZC706
python tools/scripts/no_os_build.py build \
    --project adrv9009 --variant demo --board zc706 \
    --hardware /path/to/adrv9009_zc706/system_top.xsa

# Build the DMA example for ZCU102
python tools/scripts/no_os_build.py build \
    --project adrv9009 --variant dma_example --board zcu102 \
    --hardware /path/to/adrv9009_zcu102/system_top.xsa

# Build the IIO example for ZCU102
python tools/scripts/no_os_build.py build \
    --project adrv9009 --variant iio --board zcu102 \
    --hardware /path/to/adrv9009_zcu102/system_top.xsa