Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
'no-OS',
'precision-converters-firmware',
'PrecisionToolbox',
'testbenches',
'adi_ros2/humble/adi_meta',
]

Expand Down
2 changes: 1 addition & 1 deletion docs/software/libiio/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
- :dokuwiki:`MATLAB and Simulink </libiio/clients/matlab_simulink>`
- :dokuwiki:`Visual Analog </libiio/clients/Visual Analog>`
- :ref:`iio-oscilloscope`
- :dokuwiki:`GNU Radio </resources/tools-software/linux-software/gnuradio>`
- :ref:`GNU Radio <software gnuradio>`
- :ref:`pyadi-iio: Device Specific Python Interfaces For IIO Drivers <pyadi-iio>`

Source code and releases
Expand Down Expand Up @@ -260,7 +260,7 @@

If you want to cross-compile libiio, you can do so by passing the corresponding
toolchain information file to cmake. Normally this is done by creating a
toolchain file, and passing this to Cmake with a

Check failure on line 263 in docs/software/libiio/index.rst

View workflow job for this annotation

GitHub Actions / check-doc

vale:Vale.Terms:37 Use 'CMake|cmake' instead of 'Cmake'.
``-DCMAKE_TOOLCHAIN_FILE=path/to/file`` option, the file will be loaded early to
set values for the compilers. This is described in the
`mainline cmake doc <https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling>`__.
Expand Down
6 changes: 3 additions & 3 deletions docs/solutions/reference-designs/ad-jupiter-ebz/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

.. _ad-jupiter-ebz:

AD-JUPITER-EBZ

Check failure on line 5 in docs/solutions/reference-designs/ad-jupiter-ebz/index.rst

View workflow job for this annotation

GitHub Actions / check-doc

vale:Vale.Terms:4 Use '[Jj]upiter' instead of 'JUPITER'.
==============

Software-Defined Radio Module.
Expand Down Expand Up @@ -96,11 +96,11 @@
- Software Solutions
#. :ref:`iio-oscilloscope`
#. :dokuwiki:`ADRV9001/2 IIO Scope View <resources/tools-software/linux-software/adrv9002_osc_main>`
#. :dokuwiki:`ADRV9001/2 Control IIO Scope Plugin <resources/tools-software/linux-software/adrv9002_plugin>`
#. :ref:`ADRV9001/2 Control IIO Scope Plugin <adrv9002-plugin>`
#. :dokuwiki:`ADRV9001/2 Profile Generator Plugin <resources/tools-software/linux-software/adrv9002_profile_generator_plugin>`
#. :external+scopy:ref:`adrv9002`
#. :ref:`matlab transceiver-toolbox`
#. :dokuwiki:`GNU Radio <resources/tools-software/linux-software/gnuradio>`
#. :ref:`GNU Radio <software gnuradio>`
#. :ref:`pyadi-iio`
#. :ref:`libiio cli`
- Embedded Resources
Expand All @@ -109,7 +109,7 @@
#. :external+linux:ref:`axi-dmac`
#. :external+linux:ref:`axi-adc-hdl`
#. :ref:`matlab transceiver-toolbox`
#. :dokuwiki:`GNU Radio <resources/tools-software/linux-software/gnuradio>`
#. :ref:`GNU Radio <software gnuradio>`
#. :ref:`pyadi-iio`
#. :ref:`libiio cli`
#. :external+no-OS:doc:`projects/rf-transceiver/adrv9001`
Expand All @@ -135,7 +135,7 @@
- For questions regarding the the ADI Linux distribution, the Linux drivers, or the device trees for the ADRV9001/2 based platforms, please use the
- :ez:`Linux Software Drivers <community/linux-device-drivers/linux-software-drivers>` sub-community.
- For questions regarding the no-OS drivers for ADRV9001/2, please use the
- :ez:`Microcontroller and No-OS Driver <community/linux-device-drivers/microcontroller-no-os-drivers>` sub-community.

Check failure on line 138 in docs/solutions/reference-designs/ad-jupiter-ebz/index.rst

View workflow job for this annotation

GitHub Actions / check-doc

vale:Vale.Terms:98 Use 'no-OS' instead of 'no-os'.

Check failure on line 138 in docs/solutions/reference-designs/ad-jupiter-ebz/index.rst

View workflow job for this annotation

GitHub Actions / check-doc

vale:Vale.Terms:37 Use 'no-OS' instead of 'No-OS'.
- :dokuwiki:`Additional Documentation about SDR Signal Chains - The math behind the RF <resources/eval/user-guides/ad-fmcomms1-ebz/math>`

.. toctree::
Expand All @@ -152,11 +152,11 @@
Downloads
---------

Osc for windows can be downloaded directly from Github. Go to to the following link and download the latest release.

Check failure on line 155 in docs/solutions/reference-designs/ad-jupiter-ebz/index.rst

View workflow job for this annotation

GitHub Actions / check-doc

vale:Vale.Terms:49 Use 'GitHub' instead of 'Github'.

- :git-iio-oscilloscope:`IIO-Scope <releases+>`

Scopy can be downloaded directly from Github. Go to the following link and download the latest release.

Check failure on line 159 in docs/solutions/reference-designs/ad-jupiter-ebz/index.rst

View workflow job for this annotation

GitHub Actions / check-doc

vale:Vale.Terms:39 Use 'GitHub' instead of 'Github'.

- :git-scopy:`Scopy <releases+>`

Expand All @@ -182,7 +182,7 @@
~~~~~~~~~~~~

- Four Quick Steps to Production: Using Model-Based Design for Software-Defined Radio
- :adi:`Part 1 - the Analog Devices/Xilinx SDR Rapid Prototyping Platform: Its Capabilities, Benefits, and Tools <library/analogDialogue/archives/49-09/four-step-sdr-01.html>`

Check warning on line 185 in docs/solutions/reference-designs/ad-jupiter-ebz/index.rst

View workflow job for this annotation

GitHub Actions / check-doc

vale:Enforcement.AMD-Xilinx:42 Use 'AMD Xilinx' instead of 'Xilinx'.
- :adi:`Part 2 - Mode S Detection and Decoding Using MATLAB and Simulink <library/analogDialogue/archives/49-10/four-step-sdr-02.html>`
- :adi:`Part 3 - Mode S Signals Decoding Algorithm Validation Using Hardware in the Loop <library/analogDialogue/archives/49-11/four-step-sdr-03.html>`
- :adi:`Part 4 - Rapid Prototyping Using the Zynq SDR Kit and Simulink Code Generation Workflow <library/analogDialogue/archives/49-12/four-step-sdr-04.html>`
Expand Down
336 changes: 336 additions & 0 deletions docs/solutions/reference-designs/adrv9002/adrv9002_plugin.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,336 @@
.. _adrv9002-plugin:

ADRV9002 Plugin Description
===============================================================================

The ADRV9002 plugin works with the :ref:`IIO Oscilloscope <iio-oscilloscope>`.
Always use the latest available version. Any field change is immediately written
to the ADRV9002 hardware and then read back to verify the setting is valid.
If a value you enter is changed by the GUI, it indicates either GUI rounding or
that the hardware (ADRV9002 or FPGA fabric) does not support that specific mode
or precision.

If you modify settings directly through ``/sys/bus/iio/devices/...`` outside of
the GUI, you can refresh the displayed values by clicking the
``Reload Settings`` button at the bottom of the GUI.

The ADRV9002 view is divided in four sections:

- **ADRV9002 Global Settings**
- **ADRV9002 Receive Chain**
- **ADRV9002 Transmit Chain**
- **FPGA Settings**

.. seealso::
For more information about anything discussed in the sections below, see the
:external+linux:doc:`ADRV9002 Linux Driver Documentation <drivers/iio-transceiver/adrv9002>`.

ADRV9002 Global Settings
--------------------------------------------------------------------------------

.. image:: images/ADRV9002_Global_Settings.png
:width: 600

**Load Profile**: Loads device configuration settings from a JSON file that sets
filters, clock rates, and signal paths.

**Load Stream**: Loads the stream binary file corresponding to the profile. Must
be loaded before loading the profile.

Loading Profile and Stream Files
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

To load the stream and profile configuration:

1. Click the folder icon next to **Load Stream** and **Load Profile**. Loading
these files will configure the IIO Oscilloscope automatically, eliminating
the need for manual setup.
2. Navigate to
``Program Files > IIO Oscilloscope > lib > osc > filters > adrv9002``
3. Select the appropriate profile and stream pair from this directory.

Receive Chain Configuration
--------------------------------------------------------------------------------

The Receive Chain section provides comprehensive control over the RX signal path
for both channels

.. image:: images/ADRV9002_ReciveChain.png
:width: 900

Signal Path Parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Bandwidth(MHz)**: Displays the Primary Signal Bandwidth of the currently
loaded profile. This parameter defines the usable signal bandwidth for the
receive path.

**Sampling Rate(MSPS)**:Shows the RX Sample Rate configured in the current
profile. This determines the digital sampling frequency for received signals.

Gain Control Settings
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Gain Control**:
- SPI: Manual gain control via software interface
- PIN: Hardware pin-controlled gain adjustment
- Automatic: Automatic gain control (AGC) mode

**Hardware Gain(dB)**: Controls the RX gain when in SPI or PIN mode. This
setting adjusts the analog gain in the receive signal path.

Signal Monitoring
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**RSSI(dB)**: Displays the Received Signal Strength Indicator, providing
real-time measurement of input signal level.

**Decimated Power**: Shows the decimated power measurement, useful for signal
analysis and monitoring.

Frequency Control
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Local Oscillator**: Controls the carrier frequency for the receive chain.
This sets the center frequency for signal reception.

.. warning::
If you made a physical loopback between the RX and TX channels, make sure
the Local Oscillator value is the same for both channels.

Channel Control
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Powerdown**: While off disables the receive channel.

**Dynamic ADC Switch**: Enables dynamic ADC switching functionality for
optimized power management and performance.

**ENSM (Enable State Machine)**:
Selects the operational mode for the Enable State Machine:
- Calibrated: Normal operation with calibrations enabled
- Primed: Standby mode ready for quick activation
- RF Enabled: Full RF operation mode

**Port Enable**:
Configures how the port can be enabled:
- SPI: Software-controlled port enable
- PIN: Hardware pin-controlled port enable

Digital Signal Processing
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Digital Gain Control**: Selects the digital gain control mode for fine-tuning
signal levels in the digital domain.

**Interface Gain (dB)**: Controls the Slicer block gain for digital signal
processing optimization.

**Tracking Calibrations**: Enable/disable various tracking calibration
algorithms:

- Quadrature FIC: Quadrature frequency image correction
- BBDC Rejection: Baseband DC offset rejection
- HD2: Second harmonic distortion correction
- AGC: Automatic gain control calibration
- Quadrature Poly: Quadrature polynomial correction
- RSSI: RSSI calibration
- RDFC: Receive data formatting correction

Transmit Chain Configuration
--------------------------------------------------------------------------------

.. image:: images/ADRV9002_Transmitionchain.png
:width: 900

The Transmit Chain section provides control over the TX signal path for both
channels.

Signal Path Parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Bandwidth (MHz)**: Displays the Primary Signal Bandwidth for the transmit path
as defined in the current profile.

**Sampling Rate (MSPS)**: Shows the TX Sample Rate configured in the current
profile, determining the digital sampling frequency for transmitted signals.

Power Control
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Attenuation (dB)**: Controls the TX output power attenuation. Higher values
reduce output power.

**Attenuation Control Mode**: Selects the attenuation control mechanism:

- SPI: Software-controlled attenuation
- PIN: Hardware pin-controlled attenuation
- Bypass: Bypass attenuation control

Channel Control
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Powerdown**: While off disables the transmit channel, stopping signal
transmission and reducing power consumption.

**ENSM (Enable State Machine)**: Configures the transmit channel operational
mode similar to the receive chain.

**Port Enable**: Selects port enable control method (SPI or PIN) for the
transmit channel.

Frequency Control
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

**Local Oscillator (MHz)**: Sets the carrier frequency for signal transmission.

.. warning::
If you made a physical loopback between the RX and TX channels, make sure
the Local Oscillator value is the same for both channels.

**Tracking Calibrations**:
Enable/disable transmit-specific calibration algorithms:
- Quadrature: Quadrature correction for TX path
- PA Correction: Power amplifier linearity correction
- LO Leakage: Local oscillator leakage correction
- Close Loop Gain: Closed-loop gain calibration
- Loopback Delay: Loopback delay calibration

FPGA Settings
--------------------------------------------------------------------------------

.. image:: images/ADRV9002_FPGASettings.png
:width: 900

Transmit/DDS
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The plugin provides several options on how the transmitted data is generated.

It is possible to either use the built-in two tone **Direct Digital Synthesizer
(DDS)** to transmit a bi-tonal signal on channels I and Q of the DAC. Or it is
possible to use the **Direct Memory Access (DMA) facility** to transmit custom
data that you have stored in a file.

This can be achieved by selecting one of the following options listed by the
**DDS Mode**:

One CW Tone
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. image:: images/adrv9002_one_cw_tone.png
:align: right

In **One CW Tone** mode one continuous wave (CW) tone will be outputted. The
plugin displays the controls to set the Frequency, Amplitude and Phase for just
one tone and makes sure that the amplitude of the other tone is set to 0. The
resulting signal will be outputted on the Channel I of the DAC and the exact
same signal but with a difference in phase of 90 degrees will be outputted on
the Channel Q of the DAC.

Two CW Tone
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. image:: images/adrv9002_two_cw_tones.png
:align: right

In **Two CW Tone** mode two continuous wave (CW) tones will be outputted.
The plugin displays the controls to set the frequencies F1 and F2,
amplitudes A1 and A2, phases P1 and P2 for the two tones. The resulting
signal will be outputted on the Channel I of the DAC and the exact same
signal but with a difference in phase of 90 degrees will be outputted on
the Channel Q of the DAC.

Independent I/Q Control
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. image:: images/adrv9002_iq_independent.png
:align: right

In **Independent I/Q Control** the plugin displays the controls to set the
frequencies, amplitudes and phases for the two tones that will be outputted on
channel I and additionally it allows for the two tones that will be outputted on
channel Q of the DAC to be configured independently.

.. note::

Note: The bi-tonal signal (T) is defined as the sum of two tones: T(t) = A1
\* sin(2 \* p \* F1 \* t + P1) + A2 \* sin(2 \* p \* F2 \* t + P2), where
A-amplitude, F-frequency, P-phase of a tone.

DAC Buffer Output
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. image:: images/adrv9002_dac_output_buffer_panel.png
:align: right

The file selector under the **File Selection** section is used to locate and
choose the desired data file. Under the **DAC Channels** section the enabled
channels will be used to transmit the data stored in the file. To finalize the
process, a click on the **Load** button is required.

**Restrictions:**

- There are two types of files than can be loaded: **.txt** or **.mat**. The
IIO-Oscilloscope comes with several :git-iio-oscilloscope:`data files <waveforms>`
that can be used. If you want to create your own data files please take a
look at the :ref:`Basic IQ Data Files <adrv9009 basic-iq-datafiles>` documentation first.
- Due to hardware limitation only specific combinations of enabled channels are
possible. You can enable a total of 1, 2, 4, etc. channels. If 1 channel is
enabled then it can be any of them. If two channels are enabled then channels
0, 1 or channels 2, 3 can be enabled and so on.

Disable
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In this mode both DDS and DMA are disabled causing the DAC channels to stop
transmitting any data.

.. note::

Upon pressing Reload Settings button the values will be reloaded with the
corresponding driver values. Useful in scenarios where the driver values get
changed outside this plugin and a refresh on plugin's values is needed.

.. hint::

Some plugin values will be rounded to the nearest value supported by the
hardware.

Profile Generator
--------------------------------------------------------------------------------

ADRV9002 device profiles configure the digital filters, analog filters, clock
rates, and signal paths. There are two ways to generate profiles:

Using TES (Transceiver Evaluation Software)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The
:adi:`Transceiver Evaluation Software (TES) <design-center/landing-pages/001/transceiver-evaluation-software.html>`
is a standalone Windows application from Analog Devices dedicated to generating
ADRV9002 profiles and stream files. It provides full control over all profile
parameters including signal type selection (LTE, DMR, etc.), interface rate
configuration, NCO frequency offset, antenna diversity, and frequency hopping
settings. TES is used exclusively for profile generation and does not provide
data acquisition or device control capabilities.

For a detailed guide, see :ref:`adrv9002 profile-generation`.

Using the Integrated Plugin Profile Generator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Both the :ref:`IIO Oscilloscope <iio-oscilloscope>` and
:external+scopy:doc:`Scopy <index>` ADRV9002 plugins include an integrated
Profile Generator tab that provides a graphical interface for creating and
managing device profiles. This approach allows profile generation within the same
tool used for device control and data acquisition.

.. warning::
The Profile Generator functionality requires the libadrv9002-iio library to
be installed. If this external tool is missing, the Profile Generator
functionality will be disabled. The library can be obtained from:
https://analogdevicesinc.github.io/libadrv9002-iio

More information about this topic can be found in the
:external+scopy:doc:`Scopy ADRV9002 Plugin Documentation <plugins/adrv9002/adrv9002>`.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading