IIO Oscilloscope

Software architecture overview

https://media.githubusercontent.com/media/analogdevicesinc/system-level/main/docs/solutions/reference-designs/quadmxfe/images/quad_sw_bd.png

Tip

All programmable devices on the Quad MxFE platform are abstracted by IIO devices.

All these drivers feature a runtime API which can be controlled using IIO Oscilloscope, Libiio, etc. However some configuration is static and done inside the device tree. For Microblaze projects (VCU118) the device tree is built into the kernel image. Please see instructions on building custom kernel and devicetree images here:

IIO device axi-ad9081-rx-3 is special compared to the axi-ad9081-rx-[0..2], since it controls the transport layer and therefore features the IIO buffer. So all 16R data captures are controlled via this device, while the other similar devices are there, to control the device instance specific controls.

Also axi-ad9081-rx-3 aka. spi0.3 instantiates last, it therefore brings up the JESD204 multi-link.

ad9081 spi0.0: JESD RX (JTX) Link1 in DATA, SYNC asserted, PLL locked, PHASE established, MODE valid
ad9081 spi0.0: JESD TX (JRX) Link1 0x0 lanes in DATA
ad9081 spi0.0: AD9081 Rev. 1 Grade 10 (API 0.7.4) probed
ad9081 spi0.1: JESD RX (JTX) Link1 in DATA, SYNC deasserted, PLL locked, PHASE established, MODE valid
ad9081 spi0.1: JESD TX (JRX) Link1 0x0 lanes in DATA
ad9081 spi0.1: AD9081 Rev. 1 Grade 10 (API 0.7.4) probed
ad9081 spi0.2: JESD RX (JTX) Link1 in DATA, SYNC deasserted, PLL locked, PHASE established, MODE valid
ad9081 spi0.2: JESD TX (JRX) Link1 0x0 lanes in DATA
ad9081 spi0.2: AD9081 Rev. 1 Grade 10 (API 0.7.4) probed
ad9081 spi0.3: JESD RX (JTX) Link1 in DATA, SYNC deasserted, PLL locked, PHASE established, MODE valid
ad9081 spi0.3: JESD TX (JRX) Link1 0xF lanes in DATA
ad9081 spi0.3: AD9081 Rev. 1 Grade 10 (API 0.7.4) probed

It’s expected that JRX, JTX status information may contain error status until the last device probes and the Link is finally enabled. Device axi-ad9081-tx-3 purely controls the TX transport layer, it therefore doesn’t have any MxFE controls. Please use the iio_info command to get an overview on what controls and capabilities exists.

IIO Oscilloscope application

The ADI IIO Oscilloscope is a cross platform GUI application, which demonstrates how to interface different evaluation boards from within a Linux system. The application supports plotting of the captured data in four different modes (time domain, frequency domain, constellation and cross-correlation). The application also allows to view and modify several settings of the development platform’s devices.

Documentation can be found here:

The MxFE AD9081 plugin is included in the official OSC release, which can be downloaded from here:

Instructions and overview

  • Start OSC from your application launcher or type OSC.

  • Enter the target IP address under Remote Devices and press the Refresh followed by the Ok button.

https://media.githubusercontent.com/media/analogdevicesinc/system-level/main/docs/solutions/reference-designs/quadmxfe/images/microsoftteams-image_3_.png
  • The main capture window will appear

https://media.githubusercontent.com/media/analogdevicesinc/system-level/main/docs/solutions/reference-designs/quadmxfe/images/image2019-12-4_13-1-15.png
  • Use the scroll bar in the Plot Channel box to select the channels to display. The first eight channels correspond to the first device, second eight to the second device, etc.

Device to channel mapping (Rev. B/C platforms)

axi-ad9081-rx-0: spi.0.0 - MxFE U48
voltage0_i: (input, index: 0, format: le:S16/16>>0)
voltage0_q: (input, index: 1, format: le:S16/16>>0)
voltage1_i: (input, index: 2, format: le:S16/16>>0)
voltage1_q: (input, index: 3, format: le:S16/16>>0)
voltage2_i: (input, index: 4, format: le:S16/16>>0)
voltage2_q: (input, index: 5, format: le:S16/16>>0)
voltage3_i: (input, index: 6, format: le:S16/16>>0)
voltage3_q: (input, index: 7, format: le:S16/16>>0)

axi-ad9081-rx-1: spi.0.1 - MxFE U49
voltage4_i: (input, index: 8, format: le:S16/16>>0)
voltage4_q: (input, index: 9, format: le:S16/16>>0)
voltage5_i: (input, index: 10, format: le:S16/16>>0)
voltage5_q: (input, index: 11, format: le:S16/16>>0)
voltage6_i: (input, index: 12, format: le:S16/16>>0)
voltage6_q: (input, index: 13, format: le:S16/16>>0)
voltage7_i: (input, index: 14, format: le:S16/16>>0)
voltage7_q: (input, index: 15, format: le:S16/16>>0)

axi-ad9081-rx-2: spi.0.2 - MxFE U61
voltage8_i: (input, index: 16, format: le:S16/16>>0)
voltage8_q: (input, index: 17, format: le:S16/16>>0)
voltage9_i: (input, index: 18, format: le:S16/16>>0)
voltage9_q: (input, index: 19, format: le:S16/16>>0)
voltage10_i: (input, index: 20, format: le:S16/16>>0)
voltage10_q: (input, index: 21, format: le:S16/16>>0)
voltage11_i: (input, index: 22, format: le:S16/16>>0)
voltage11_q: (input, index: 23, format: le:S16/16>>0)

axi-ad9081-rx-3: spi.0.3 - MxFE U76
voltage12_i: (input, index: 24, format: le:S16/16>>0)
voltage12_q: (input, index: 25, format: le:S16/16>>0)
voltage13_i: (input, index: 26, format: le:S16/16>>0)
voltage13_q: (input, index: 27, format: le:S16/16>>0)
voltage14_i: (input, index: 28, format: le:S16/16>>0)
voltage14_q: (input, index: 29, format: le:S16/16>>0)
voltage15_i: (input, index: 30, format: le:S16/16>>0)
voltage15_q: (input, index: 31, format: le:S16/16>>0)

Important

In Frequency Domain view channels can be only enabled pairwise (I+Q).

And not more that 2 frequency plots can be enabled in the same window.

However multiple (independent) plot windows can be opened.

The plugin window

https://media.githubusercontent.com/media/analogdevicesinc/system-level/main/docs/solutions/reference-designs/quadmxfe/images/image2019-12-4_13-14-41.png

OSC will instantiate multiple notebook plugin tabs on the main window. One for each device AD9081-X with an additional Debug plugin.

AD9081-3 again is special since it also has the controls for the TX transport layer core (axi-ad9081-tx-3), and the HMC425 Digital Step Attenuator.

https://media.githubusercontent.com/media/analogdevicesinc/system-level/main/docs/solutions/reference-designs/quadmxfe/images/image2019-12-4_13-20-29.png

Loading custom waveform

https://media.githubusercontent.com/media/analogdevicesinc/system-level/main/docs/solutions/reference-designs/quadmxfe/images/image2019-12-4_13-24-46.png

Set DDS mode to DAC Buffer Output, select a file hit Load button.

Optionally set a scale, and select the channels.

Tip

Please be aware that due to DDR3 memory bandwidth limitations only 2 or 4 can be enabled simultaneously.

The Debug Plugin

https://media.githubusercontent.com/media/analogdevicesinc/system-level/main/docs/solutions/reference-designs/quadmxfe/images/image2019-12-4_13-29-56.png

Under Device Selection, select the IIO device which should be debugged/controlled.

In the IIO Device Attribute section, all device and channel attributes can be read or written, including all attributes which are not handled by the AD9081-X device plugin itself.

In the Register section select source SPI, check Detailed Register Map and AutoRead, this will enable a complete AD9081 register view with description bitfields and dropdown options if available.

IIO devices axi-ad9081-tx-3 and axi-ad9081-rx-3 are again special, since beside the SPI option they also can access the AXI_CORE register space of the transport layer core.

Useful IIO commands

https://media.githubusercontent.com/media/analogdevicesinc/system-level/main/docs/solutions/reference-designs/quadmxfe/images/image2019-12-4_12-23-20.png

There are a few command line tools that are included with libIIO:

  • iio_info : dump the IIO attributes

  • iio_attr : read and write IIO attributes

  • iio_readdev : read an IIO buffer device

  • iio_writedev : write an IIO buffer device

  • iio_reg : read or write SPI or I2C registers in an IIO device (useful to debug drivers)

Note

See Cmd Line for detailed usage.

Important

All of these commands can be used local or remote

When using remote backend please install libiio for your platform.

Windows example

Tip

unlike iio_info and iio_attr, iio_reg requires an environmental variable IIOD_REMOTE to be set with the target IP address.

The names of the iio devices can be obtained using iio_attr command.

https://media.githubusercontent.com/media/analogdevicesinc/system-level/main/docs/solutions/reference-designs/quadmxfe/images/image2019-12-4_10-58-4.png

Example: Change main NCO frequency

~$
iio_attr -u ip:10.44.3.56 -i -c axi-ad9081-rx-3 voltage0_i main_nco_frequency 1200000000
dev 'axi-ad9081-rx-3', channel 'voltage0_i' (input), attr 'main_nco_frequency', value '1000000000'

wrote 11 bytes to main_nco_frequency

dev 'axi-ad9081-rx-3', channel 'voltage0_i' (input), attr 'main_nco_frequency', value '1200000000'

Further information

Further information about libiio and its usage can be found here: