Wiki

This version (14 Sep 2020 14:40) was approved by mhennerich.The Previously approved version (04 Sep 2020 15:46) is available.Diff

AD9081 MxFE Linux Driver

:!: This page is under construction

Supported Devices

Supported Boards

Supported HDL Cores

Description

The mixed signal front end (MxFE®) is a high integration devicewith a 16-bit, 12 GSPS maximum sample rate radio frequency (RF) digital-to-analog converter (DAC) core and a 12-bit, 4 GSPS rate RF analog-to-digital converter (ADC) core. The AD9081 features a 16-lane, 24.75 Gbps JESD204C or 15.5 Gbps JESD204B data transceiver port, an on-chip clock multiplier, and digital signal processing capability targeted at single-and dual-band direct-to-RF radio applications.

The AD9081 supports four transmitter channels and four receiver channels with a 4D4A configuration. The receiver ADC channels can be shared with observation channels in time division duplex(TDD) operating mode. The AD9081 directly addresses the emerging base station applications with high integration and common platform requirements. The device has flexible inter-polation/decimation configurations that enable direct-to-RF multiband radio applications. AD9081 supports a complex transmit input data rate up to 6 GSPS and a receive output data rate in single-channel mode up to 4 GSPS. The maximum radio band spacing supported in multichannel modes is 1.2 GHz. AD9081 features a bypassable interpolator and decimator for achieving ultra wideband capability with low latency loop back and frequency hopping modes targeted at phase array radar system and electronic warfare jammer applications.

For more information about the AD9081, contact Analog Devices, Inc., at: MxFEsupport [at] analog [dot] com.

Source Code

Status

Source Mainlined?
drivers/iio/adc/ad9081.c No

Files

Interrelated Device Drivers

Transport Layer Receive AXI-ADC driver

Transport Layer Transmit AXI-DAC / DDS driver

PHY Layer AXI JESD204B GT (Gigabit Tranceiver) HDL driver (XILINX/ALTERA-INTEL)

Function File
driver drivers/iio/jesd204/axi_adxcvr.c

Enabling Linux driver support

Configure kernel with “make menuconfig” (alternatively use “make xconfig” or “make qconfig”)

The ADRV9009 driver depends on CONFIG_SPI

Adding Linux driver support

Configure kernel with “make menuconfig” (alternatively use “make xconfig” or “make qconfig”)

Linux Kernel Configuration
	Device Drivers  --->
        <*> JESD204 High-Speed Serial Interface Framework
	<*>     Industrial I/O support --->
	    --- Industrial I/O support
	    -*-   Enable ring buffer support within IIO
	    -*-     Industrial I/O lock free software ring
	    -*-   Enable triggered sampling support

	          *** Analog to digital converters ***
	    [--snip--]

		-*- Analog Devices High-Speed AXI ADC driver core
                <*> Analog Devices AD9081 and similar Mixed Signal Front End (MxFE)
                < > Analog Devices AD9208 and similar high speed ADCs  
                < > Analog Devices AD9361, AD9364 RF Agile Transceiver driver
		< > Analog Devices AD9371 RF Transceiver driver
		< > Analog Devices ADRV9009/ADRV9008 RF Transceiver driver
		< > Analog Devices AD6676 Wideband IF Receiver driver
		< > Analog Devices AD9467, AD9680, etc. high speed ADCs

	    [--snip--]
	    

	Frequency Synthesizers DDS/PLL  --->
    		Direct Digital Synthesis  --->
	 		<*> Analog Devices CoreFPGA AXI DDS driver
		Clock Generator/Distribution  --->	
			< > Analog Devices AD9508 Clock Fanout Buffer                 
			< > Analog Devices AD9523 Low Jitter Clock Generator          
			< > Analog Devices AD9528 Low Jitter Clock Generator          
			< > Analog Devices AD9548 Network Clock Generator/Synchronizer
			< > Analog Devices AD9517 12-Output Clock Generator 
                        <*> Analog Devices HMC7044, HMC7043 Clock Jitter Attenuator with JESD204B
                        < > Analog Devices LTC6952 Clock Ultralow Jitter with JESD204B/C

	<*>   JESD204 High-Speed Serial Interface Support  --->
		--- JESD204 High-Speed Serial Interface Support  
		< >   Altera Arria10 JESD204 PHY Support         
		<*>   Analog Devices AXI ADXCVR PHY Support      
		< >   Generic AXI JESD204B configuration driver  
		<*>   Analog Devices AXI JESD204B TX Support     
		<*>   Analog Devices AXI JESD204B RX Support  
			
	

General IIO and driver conventions

Controlling the MxFE is done via the IIO sysfs interface. For convenience users can use libiio and its various programming langue bindings. The MxFE IIO device under /sys/bus/iio/devices/iio:deviceX features a set of channels and device attributes, which are explained here. Some basic, but important concepts are explained in the bullet list below:

  • Channels prefixed with in_voltageX apply to Receive (RX) ADC data paths.
  • Channels prefixed with out_voltageX apply to Transmit (TX) DAC data paths.
  • Each channel has a complex modifier in_voltageX_i and in_voltageX_q or out_voltageX_i and out_voltageX_q. Controlling a channel attribute for the i modified channel will simultaneously control the q modified channel and vice versa. So, writing/reading only needs to happen once, since they are mirrored. The complex IQ modifiers are only important for the data buffers, sine I & Q are individual data components.
  • IIO channels [in|out]_voltageXapply to the channelizer data paths (Fine DDC/DUC).
    • Each IIO channel has some [in|out]_voltageX_[i|q]_channel_[attributes]
  • Each channelizer data path (FDDC, FDUC) connects at least to one Coarse DDC/DUC (CDDC/CDUC), which maps then to one or more ADCs/DACs depending on configuration. These are called main data paths and are controlled via the [in|out]_voltageX_[i|q]_main_[attributes] attributes.
    • Be aware, since multiple channels can map to the same main data path (CDDC/CDUC), changing a main attribute of one channel will also update same attribute of any other channel that maps to the same main data path (CDDC/CDUC).
    • The crossbar mapping between Fine and Coarse Digital Up/Down Converters, ADCs/DACs is defined in the device tree.
  • Device attributes (without in_voltageXor out_voltageX prefix) apply to the entire device.

This specifies any shell prompt running on the target

root:/> cd /sys/bus/iio/devices/
root:/sys/bus/iio/devices> ls
iio:device0  iio:device3  iio:device2

root:/sys/bus/iio/devices> cd iio:device2

root@analog:/sys/bus/iio/devices/iio:device2# ls -al
total 0
drwxr-xr-x    4 root root       0 Jan  1 00:00 .
drwxr-xr-x    4 root root       0 Jan  1 00:00 ..
-rw-r--r--    1 root root    4096 Jan  1 00:00 adc_clk_powerdown
drwxr-xr-x    2 root root       0 Jan  1 00:00 buffer
-r--r--r--    1 root root    4096 Jan  1 00:00 dev
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_temp0_input
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage0_i_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage0_i_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:04 in_voltage0_i_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage0_i_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage0_q_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage0_q_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage0_q_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage0_q_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage1_i_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage1_i_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:04 in_voltage1_i_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage1_i_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage1_q_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage1_q_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage1_q_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage1_q_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage2_i_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage2_i_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:04 in_voltage2_i_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage2_i_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage2_q_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage2_q_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage2_q_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage2_q_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage3_i_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage3_i_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:04 in_voltage3_i_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage3_i_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage3_q_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage3_q_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage3_q_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage3_q_main_nco_phase
-r--r--r--    1 root root    4096 Jan  1 00:00 in_voltage_adc_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage_nyquist_zone
-r--r--r--    1 root root    4096 Jan  1 00:00 in_voltage_nyquist_zone_available
-rw-r--r--    1 root root    4096 Jan  1 00:00 in_voltage_sampling_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:06 in_voltage_test_mode
-r--r--r--    1 root root    4096 Jan  1 00:00 in_voltage_test_mode_available
-rw-r--r--    1 root root    4096 Jan  1 00:00 loopback_mode
-rw-r--r--    1 root root    4096 Jan  1 00:00 multichip_sync
-r--r--r--    1 root root    4096 Jan  1 00:00 name
lrwxrwxrwx    1 root root       0 Jan  1 00:00 of_node -> ../../../../../firmware/devicetree/base/amba_pl/axi-ad9081-rx-hpc@44a10000
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_i_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:04 out_voltage0_i_channel_nco_gain_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_i_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_i_channel_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_i_channel_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_i_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_i_main_nco_ffh_select
-rw-r--r--    1 root root    4096 Jan  1 00:04 out_voltage0_i_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_i_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_i_main_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_i_main_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_channel_nco_gain_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_channel_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_channel_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_main_nco_ffh_select
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_main_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage0_q_main_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_i_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:04 out_voltage1_i_channel_nco_gain_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_i_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_i_channel_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_i_channel_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_i_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_i_main_nco_ffh_select
-rw-r--r--    1 root root    4096 Jan  1 00:04 out_voltage1_i_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_i_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_i_main_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_i_main_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_channel_nco_gain_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_channel_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_channel_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_main_nco_ffh_select
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_main_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage1_q_main_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_i_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:04 out_voltage2_i_channel_nco_gain_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_i_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_i_channel_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_i_channel_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_i_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_i_main_nco_ffh_select
-rw-r--r--    1 root root    4096 Jan  1 00:04 out_voltage2_i_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_i_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_i_main_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_i_main_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_channel_nco_gain_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_channel_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_channel_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_main_nco_ffh_select
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_main_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage2_q_main_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_i_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:04 out_voltage3_i_channel_nco_gain_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_i_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_i_channel_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_i_channel_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_i_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_i_main_nco_ffh_select
-rw-r--r--    1 root root    4096 Jan  1 00:04 out_voltage3_i_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_i_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_i_main_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_i_main_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_channel_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_channel_nco_gain_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_channel_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_channel_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_channel_nco_test_tone_scale
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_main_nco_ffh_select
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_main_nco_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_main_nco_phase
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_main_nco_test_tone_en
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage3_q_main_nco_test_tone_scale
-r--r--r--    1 root root    4096 Jan  1 00:00 out_voltage_dac_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage_main_ffh_frequency
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage_main_ffh_index
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage_main_ffh_mode
-rw-r--r--    1 root root    4096 Jan  1 00:00 out_voltage_sampling_frequency
drwxr-xr-x    2 root root       0 Jan  1 00:00 scan_elements
lrwxrwxrwx    1 root root       0 Jan  1 00:00 subsystem -> ../../../../../bus/iio
-rw-r--r--    1 root root    4096 Jan  1 00:00 uevent

root@analog:/sys/bus/iio/devices/iio:device2#

Show device name

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device2> cat name
axi-ad9081-rx-hpc

ADC Rate

What: in_voltage_adc_frequency

Read only attribute which returns the RX ADC rate Hz.

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device2> cat in_voltage_adc_frequency 
4000000000

RX Sample Rate

What: in_voltage_sampling_frequency

Read only attribute which returns the RX digital IQ base-band rate in Hz. This must not be confused with the ADC rate, which is (MAIN_decimation * CHANNEL_decimation) time higher. MAIN_decimation, CHANNEL_decimation are defined in the device tree.

in_voltage_sampling_frequency = in_voltage_adc_frequency / (MAIN_decimation * CHANNEL_decimation)

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device2> cat in_voltage_sampling_frequency 
250000000

DAC Rate

What: out_voltage_dac_frequency

Read only attribute which returns the TX DAC rate Hz.

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device2> cat out_voltage_dac_frequency 
12000000000

TX Sample Rate

What: out_voltage_sampling_frequency

Read only attribute which returns the TX digital IQ base-band rate in Hz. This must not be confused with the DAC rate, which is (MAIN_interpolation * CHANNEL_interpolation) time higher. MAIN_interpolation, CHANNEL_interpolation are defined in the device tree.

out_voltage_sampling_frequency = fDAC / (MAIN_interpolation * CHANNEL_interpolation)

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device2> cat out_voltage_sampling_frequency 
250000000

ADC Nyquist Zone Control

What: in_voltage_nyquist_zone
What: in_voltage_nyquist_zone_available

Calibration is used to reduce residual spurious artifacts that are common among interleaving ADC architectures because of sub ADC timing, gain, and offsets mismatches. The ADCs are initially factory calibrated, and background calibration is also employed to further improve and maintain the performance across device operating conditions.

One background calibration algorithm employed adjusts the interleaving timing mismatches and depends on the knowledge of the Nyquist zone being odd or even, which depends on the ADC input frequency (fIN), and sample rate (fADC), as defined in the following equation:

Nyquist Zone = ROUNDDOWN × (fIN/(fADC/2)) + 1 (Please see: Calibration and Specifying Nyquist Zone in UG-1578)

The current Nyquist Zone can be queried and controlled via the in_voltage_nyquist_zone attribute.

This specifies any shell prompt running on the target

root:/sys/bus/iio/devices/iio:device2> cat in_voltage_nyquist_zone_available
odd even
root:/sys/bus/iio/devices/iio:device2> echo even > cat in_voltage_nyquist_zone
root:/sys/bus/iio/devices/iio:device2> cat cat in_voltage_nyquist_zone
even

NCO Frequency Control

Main Data Path

What: [in|out]_voltageX_[i|q]_main_nco_frequency

Sets the main data path (CDDC/CDUC) NCO frequency (fCARRIER) in Hz

out_voltageX_i_main_nco_frequency Range is: −fDAC/2 ≤ fCARRIER < +fDAC/2
in_voltageX_i_main_nco_frequency Range is: −fADC/2 ≤ fCARRIER < +fADC/2

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device2# echo 1000000000 > out_voltage0_i_main_nco_frequency 
root@analog:/sys/bus/iio/devices/iio:device2# cat out_voltage0_i_main_nco_frequency 
1000000000

root@analog:/sys/bus/iio/devices/iio:device2# echo 300000000 > in_voltage0_i_main_nco_frequency 
root@analog:/sys/bus/iio/devices/iio:device2# cat in_voltage0_i_main_nco_frequency 
300000000 

Channel Data Path

What: [in|out]_voltageX_[i|q]_channel_nco_frequency

Sets the channel data path (FDDC/FDUC) NCO frequency (fCARRIER) in Hz

out_voltageX_i_channel_nco_frequency Range is: −(fDAC/MAIN_interpolation)/2 ≤ fCARRIER < +(fDAC/MAIN_interpolation)/2
in_voltageX_i_channel_nco_frequency Range is: −(fADC/MAIN_decimation)/2 ≤ fCARRIER < +(fADC/MAIN_decimation)/2

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device2# echo 1000000000 > out_voltage0_i_channel_nco_frequency 
root@analog:/sys/bus/iio/devices/iio:device2# cat out_voltage0_i_channel_nco_frequency
1000000000

root@analog:/sys/bus/iio/devices/iio:device2# echo 300000000 > out_voltage0_i_channel_nco_frequency 
root@analog:/sys/bus/iio/devices/iio:device2# cat out_voltage0_i_channel_nco_frequency
300000000 

NCO Phase Control

Main Data Path

What: [in|out]_voltageX_[i|q]_main_nco_phase

Sets the main data path (CDDC/CDUC) NCO phase offset in milli degrees

Range is: −180° ≤ Degrees Offset ≤ +180° (Values are in milli degrees.)

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device2# echo 66000 > out_voltage0_i_main_nco_phase 
root@analog:/sys/bus/iio/devices/iio:device2# cat out_voltage0_i_main_nco_phase 
66000

root@analog:/sys/bus/iio/devices/iio:device2# echo -42000 > in_voltage0_i_main_nco_phase 
root@analog:/sys/bus/iio/devices/iio:device2# cat in_voltage0_i_main_nco_phase 
-42000 

Channel Data Path

What: [in|out]_voltageX_[i|q]_channel_nco_phase

Sets the channel data path (FDDC/FDUC) NCO phase offset in milli degrees

Range is: −180° ≤ Degrees Offset ≤ +180° (Values are in milli degrees.)

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device2# echo 13123 > out_voltage0_i_channel_nco_phase 
root@analog:/sys/bus/iio/devices/iio:device2# cat out_voltage0_i_channel_nco_phase
13123

root@analog:/sys/bus/iio/devices/iio:device2# echo 13123 > out_voltage0_i_channel_nco_phase 
root@analog:/sys/bus/iio/devices/iio:device2# cat out_voltage0_i_channel_nco_phase
13123 

TX NCO Channel Digital Gain

What: out_voltageX_[i|q]_channel_nco_gain_scale

The input data into each channelizer stage can be rescaled prior to additional processing. This feature is useful in multiband applications to prevent digital clipping when the outputs of two or more channelizer stages are summed in the main datapath to produce a multiband band signal. The gain/scale is set via out_voltageX_[i|q]_channel_nco_gain_scale attribute.

Range is: 0 ≤ Gain ≤ 1.999 (−∞ dB < dBGain ≤ +6.018 dB)

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device2# echo 0.707 > out_voltage0_i_channel_nco_gain_scale

TX NCO Test Tone Modes

What: out_voltageX_[i|q]_[channel|main]_nco_test_tone_en
What: out_voltageX_[i|q]_[channel|main]_nco_test_tone_scale

The Test Tone Mode can be enabled using the out_voltageX_[i|q]_[channel|main]_nco_test_tone_en attributes in order to provide a complex, single-tone output. The tone is generated using a programmable internal dc amplitude level that is injected into the complex modulator input to generate an unmodulated single tone. The dc amplitude level is controlled by the out_voltageX_[i|q]_[channel|main]_nco_test_tone_scale attributes which corresponds to a full-scale tone.

Range is: 0 ≤ Scale ≤ 0.9999.

Please see also NCO Frequency Control section.

The out_voltageX_[i|q]_channel_nco_test_tone_en mode is most useful for applications that require multiple single-tone signals of varying frequency and amplitude, while applications that only require a single tone can use the same feature available on the main datapath NCOs. out_voltageX_[i|q]_main_nco_test_tone_en

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device2# echo 0.25 > out_voltage0_i_channel_nco_test_tone_scale
root@analog:/sys/bus/iio/devices/iio:device2# echo 1 > out_voltage0_i_channel_nco_test_tone_en

Fast Frequency Hopping Control

The complex NCOs used in both the transmit and receive datapaths support FFH mode. In the transmit datapath, each main datapath NCO consists of a bank of 31 NCOs. In the receive main and channelizer datapaths, each NCO consists of a bank of 16 NCOs. The transmit and receive hop sequence can be independently controlled via GPIOx pins or the SPI register (IIO sysfs attributes). Asynchronous trigger hop mode is an additional mode only supported on the receive path.

Transmit Main Path FFH NCO Mode

What: out_voltage_main_ffh_frequency
What: out_voltage_main_ffh_index
What: out_voltage_main_ffh_mode
What: out_voltageX_[i|q]_main_nco_ffh_select

The FFH NCO associated with each main datapath is implemented with 31 additional 32-bit NCOs. Each NCO can be configured with a unique FTWx where x is a value between 1 and 31. These FTWs can be preloaded into the hopping frequency register bank using the out_voltage_main_ffh_index and out_voltage_main_ffh_frequency attributes.

The user first addresses hopping frequency register bank by setting its index using out_voltage_main_ffh_index, followed by setting the frequency using out_voltage_main_ffh_frequency. The user repeats these steps until all required FTWs are programmed. Once this is done, the pre-configured FTW can be called via the channels out_voltageX_[i|q]_main_nco_ffh_select attribute, which accepts values between 0..31

On-Die Temperature Reading

What: in_temp0_input

The device contains a Temperature Monitoring Unit (TMU) that functions as a digital thermometer. The TMU is comprised of four sensors placed at different chip locations. The on-die temperature value is measured and digitized through an ADC. At any given time, the temperature in signed milli-degrees Celsius, from the sensor with the highest temperature can be read from the in_temp0_input attribute.

This specifies any shell prompt running on the target

root@analog:/sys/bus/iio/devices/iio:device2# cat in_temp0_input
86120

resources/tools-software/linux-drivers/iio-mxfe/ad9081.txt · Last modified: 14 Sep 2020 14:38 by mhennerich