This version (02 Apr 2018 19:40) was approved by Robin Getz.The Previously approved version (06 Sep 2017 12:48) is available.Diff

Production testing of the AD-FMCOMMS2 / AD-FMCOMMS3 / AD-FMCOMMS4 / AD-FMCOMMS5 / ADRV9363


The production testing is quite simple. Since each board has been completely characterized, and we know the layout is good, we can just look for gross errors.

There are multiple test files for the different boards. (all in github).

  • FMComms1_test.ini : used to test AD-FMCOMMS1-EBZ
  • FMComms2_test.ini : used to test AD-FMCOMMS2-EBZ and AD-FMCOMMS3-EBZ
  • FMComms4_test.ini : used to test AD-FMCOMMS4-EBZ
  • FMComms5_test.ini : used to test AD-FMCOMMS5-EBZ
  • ADRV9363_test.ini : used to test ADRV9363-PCBZ

The tests and test parameters are in in the ./iio-oscilloscope/profiles/FMComms2_test.ini file. This is broken down into the following sections:


<source master/profiles/FMComms2_test.ini:/temp/-/^$/ shell iio-oscilloscope>

The ad7291.in_temp0_raw is the raw results from the AD7291 - which is 0.25°C. 80 refers to 80 steps of 0.25°C or 20°C, and 160 refers to 40°C. This allows the tests to be done in a normal lab setting. While the AD9361 & speced over the full industrial temperature range (−40°C to +85°C), the typical numbers in the datasheets are provided at a TA of 25°C, and this is where the test numbers come from.


<source master/profiles/FMComms2_test.ini:/number/-2/^$/ shell iio-oscilloscope>

This section needs a quick peek at the schematics. Sheet 3 shows how the AD7291 is connected. 1% resistors connect various voltages, and things are divided down to ensure that the voltage levels don't exceed full scale.

Since VDDA_GPO should be between 1.8 and 3.3V (according to the datasheet, and comes from 3P3V (on the schematic), which is the 3.3V pins on the FMC connector (which is spec'ed to ±5% in the FMC spec), we can assume that things will be 3.3V ± 5%, or 3.135V to 3.465V. This 3.135V to 3.465V translates to 1.929231 to 2.132308V (due to the 16k/(16k+10k) voltage divisor). Now that all that is left to do is determine the raw converter code values. To do this, it's just a simple matter of determining the LSB of the converters (in the AD7291 datasheet) - 12 bits, 2.5V full scale reference, or 2.5V / 2 12 or 0.0006103515625V per LSB. This means that 3161 and 3494 are the actual 12 bit codes that we should be comparing against.

These codes do not accounts for the ±1% resistors, and ±0.3% reference inside the AD7291, and the ±4.5 LSB (for worse case Offset Error from the AD7291).

Input channel Description Nominal Voltage Tolerance VHIGH VLOW
Voltage (16kΩ+1%)/(16kΩ+1%+10kΩ-1%) Codes 1) Voltage (16kΩ-1%)/(16kΩ-1%+10kΩ+1%) Codes 2)
0 VDDA_GPO 3.3V ±5% 3.465V 2.148672V 3629 3.135V 1.914356V 3045
1 3P3V 3.3V ±5% 3.465V 2.148672V 3629 3.135V 1.914356V 3045
2 3.3VAUX 3.3V ±5% 3.465V 2.148672V 3629 3.135V 1.914356V 3045
3 1P3_SUPPLY_A 1.3V 1.33V 0.824743V 1393 1.267V 0.773681V 1231
4 VDD_INTERFACE 1.8-2.5V ±5% 2.625V 1.627782V 2749 1.71V 1.044194V 1661
5 1P3_SUPPLY_B 1.3V 1.33V 0.824743V 1393 1.267V 0.773681V 1231

Other boards (like FMCOMMS5) need to monitor other voltages, but use the same scheme.

Description Nominal Voltage Tolerance VHIGH VLOW
Voltage (16kΩ+1%)/(16kΩ+1%+10kΩ-1%) Codes 3) Voltage (16kΩ-1%)/(16kΩ-1%+10kΩ+1%) Codes 4)
1P8V 1.8V ±5% 1.89V 1.172003V 1980 1.71V 1.044194V 1661
5V5) 5.0V ±5% 5.25V 2.359288V 3985 4.75V 2.087680V 3321

It's just a matter of determining what the voltage should be (by following it back on the schematic), and doing a few simple calculations.


<source master/profiles/FMComms2_test.ini:/channels/-5/^$/ shell iio-oscilloscope>

This sets and checks various RF settings - it should be mostly human readable. If it's not, please ask.


For the FMCOMMS2/3/4, where the AD9361/64 are tied to a crystal, there is the ability to “tune” the crystal by making micro adjustments to the frequency in order to ensure that it matches its target station. This is calibrated during the tests using a frequency counter that continuously seeks towards the reference clock frequency while adjusting coarse and fine registers. Once it's as close as possible to the reference clock, the coarse and fine tuning values are stored as ASCII into the FRU EEPROM in the “Tuning” field using a command similar to the following:

# fru_dump -i /sys/bus/i2c/devices/0-0051/eeprom -o /sys/bus/i2c/devices/0-0051/eeprom -t 0c0bb8

Note that the value passed to the tuning option consists of two hex bytes for the coarse value followed by 4 hex bytes for the fine value, i.e. coarse = 12 and fine = 3000 in the command above

For the FMCOMMS5, only the current value of the reference clock is measured and saved since it doesn't support the coarse/fine tuning mechanism.

Creating an SD test card

First, write the latest available SD card image found at to a spare card and prepare the card to boot into Linux as detailed on that page for the target FMCOMMS and carrier boards (copy the right BOOT.BIN and devicetree.dtb files into the base directory of the SD card's boot partition).

Then the card needs to be modified to run the tests automatically on boot. Test scripts are provided in that automate initializing osc with the correct profile and environment.

Note that different boards use different tests scripts as seen in the following mapping:

  • : used to test AD-FMCOMMS2-EBZ and AD-FMCOMMS3-EBZ
  • : used to test AD-FMCOMMS4-EBZ
  • : used to test AD-FMCOMMS5-EBZ
  • : used to test ADRV9363-PCBZ

Select the correct script above for target test setup and alter the launcher for osc to run that test script instead of a regular osc instance. See the following example diff for required changes to the launcher to run the FMCOMMS2/3 tests on boot:

--- ./.config/autostart/config_autostart_osc.desktop	2013-12-09 15:55:41.774730469 -0500
+++ ./.config/autostart/config_autostart_osc.desktop	1969-12-31 19:20:18.000000000 -0500
@@ -1,11 +1,11 @@
 [Desktop Entry]
+Exec=sudo /usr/local/bin/

Required hardware

  • Zynq ZC706 (FMCOMMS5) or a ZedBoard (FMCOMMS2/3/4)
  • Avnet AES-FMC-EXT-G (FMC Extender Board) - we permanently plug this into the above development board, and then plug the board under test into this. This way - this Extender board fails, not the expensive carrier.
  • RF loopback cables (2x for FMCOMMS2/3/4, 4x for FMCOMMS5)
  • External monitor connected to the carrier via HDMI
  • Keyboard and mouse (with USB hub if they aren't part of a combo device)
  • USB OTG adapter (to plug in the keyboard/mouse)
  • Ethernet cable (needs to be plugged into the internet)
  • For the FMCOMMS2/3/4: Frequency counter with a USB-GPIB port (tested with an Agilent 53131A and Prologix GPIB-USB controller) with a probe and grounding clip attachment

Required setup

  • Plug in the external monitor and connect it via HDMI to the carrier board.
  • Connect the USB OTG adapter (and USB hub if needed) to the USB port on the carrier, then plug in the keyboard and mouse as well.
  • Plug in the carrier board, insert the SD card for running the tests, and confirm that the carrier board is set to boot from SD (TODO: insert image).
  • Attach the carrier board via the Ethernet cable to a network connection with Internet accessibility (used for time syncing).
  • For the FMCOMMS2/3/4, plug in and turn on the frequency counter. Make sure the probe cable is attached to channel 1 and place the probes similarly to following image: Specifically the probe should go into the CLK_OUT through-hole on the FMCOMMS board and the clip should be grounded. In addition, make sure the frequency counter is set to use a GPIB address of 16. On the Agilent 53131A, the current GPIB address is shown on the screen in the form of a message similar to “GPIB AT 16” soon after power on. To set it, see section 3-4 “Configuring the GPIB” in the Agilent 53131A user guide.

Test process

  1. Attach the RF loopback cables to the card. See the images at the bottom of the page for correct placement for each type of board.
  2. Plug the card into the carrier board.
  3. Power on the carrier board.
  4. When prompted with a window similar to the following image (TODO: insert image), enter the serial number found on the board and select the correct EEPROM file to write to the card.
  5. When tests pass, the following window should be shown (TODO: insert image) and if tests fail, a window similar to the following image should be shown (TODO: insert image). In either case, hit the OK button to halt Linux and after several seconds power off the carrier board via the physical switch.
  6. Remove the FMCOMMS card and return to step 1 to continue with the next board.
RF loopback cable placement
1) , 3)
Comes from 2.5V-0.3% / 4096 code + 4.5 LSB
2) , 4)
Comes from 2.5V+0.3% / 4096 code - 4.5 LSB
uses different resistors
resources/eval/user-guides/ad-fmcomms2-ebz/testing.txt · Last modified: 02 Apr 2018 19:40 by Robin Getz