You can return to Homepage here: AD9106 & AD9102 Evaluation Boards
Analog Devices is an Mbed Partner and develops code on the platform for multiple products. The AD9106 and AD9102 Mbed-enabled evaluation boards and example Mbed codes can be used as starting point for characterizing the high-speed waveform generator digital-to-analog converters before integrating them into specific applications.
This guide will focus on how AD9106-ARDZ-EBZ/AD9102-ARDZ-EBZ works with SDP-K1 controller board and example Mbed program developed by Analog Devices. Multichip synchronization evaluation using two AD910x-ARDZ-EBZ is also discussed. Users are not limited to using SDP-K1 for evaluation or prototyping. The evaluation boards and the example codes with minor changes can work with other ARM-based Mbed-enabled boards. User interface is text-based.
The evaluation setup can be powered by USB only and does not require a high-frequency waveform generator for clock input. The evaluation board has an on-board 156.25 MHz crystal oscillator. To evaluate multichip synchronization, however, a common external clock is needed. To fit the evaluation system in a small form factor and manage power consumption within USB specifications, AD9106 and AD9102 supply voltages AVDD, DVDD and CLKVDD are limited to 3.3V only.
Note: If the VIO is set to 1.8V, 0xFFFF will be read from all registers and any change in their data cannot be applied.
Note: DS1 in SDP-K1 will blink during the flashing process.
Figure 9a. EVAL-AD9106 Demo Program Menu (Single-Board) | Figure 9b. EVAL-AD9102 Demo Program Menu (Single-Board)
Figure 11a. AD9106 Example 3 out of RF transformers | Figure 11b. AD9106 Example 5 out of RF transformers
Figure 12a. AD9102 Example 3 out of an RF transformer | Figure 12b. AD9102 Example 5 out of an RF transformer
Figure 13a. Choosing another pattern (Single-Board Evaluation) | Figure 13b. Exiting the program (Single-Board Evaluation)
The technical article Unlocking the Potential of Open-Source Evaluation Platforms for Prototyping Ultrasound Transmit Subsystems describes how multichip synchronization can be evaluated using AD9106-ARDZ-EBZ boards. This section presents an outline of this procedure with a step-by-step guide that includes utilizing the AD910x Mbed codes in performing the evaluation with either two AD9106-ARDZ-EBZ or two AD9102-ARDZ-EBZ boards. For additional hardware needed, see Materials section of the technical article.
Note: DS1 in SDP-K1 will blink during the flashing process.
Figure 14a. EVAL-AD9106 Demo Program Menu (Multi-Board) | Figure 14b. EVAL-AD9102 Demo Program Menu (Multi-Board)
Figure 16a. Channel 1 Example 3 out of 2 AD9102 / 2 AD9106 | Figure 16b. Channel 1 Example 5 out of 2 AD9102 / 2 AD9106
Figure 17a. Choosing another pattern (Multi-Board Evaluation) | Figure 17b. Exiting the program (Multi-Board Evaluation)
The EVAL-AD910x Example Mbed Codes can be used as a starting point for developing firmware for targeted applications. The eval-ad910x codes in the ADI GitHub repository demonstrate how to set up SPI communication between the ARM-based Mbed-enabled hardware, SDP-K1, and the waveform generator DAC, AD9106/AD9102.
To import the codes to Keil Studio Cloud as discussed in the Quick Start Guide, the user should have an Arm or Mbed account and is logged on to https://studio.keil.arm.com/. After successful project import, the user is free to use and modify the codes as needed, in compliance with the terms and conditions outlined in the LICENSE file.
Each file and function has a short description/brief. This section focuses on how several files and functions can be modified using the Keil Studio Cloud.
Aside from choosing the active device as described in the Quick Start Guide, SPI protocol parameters -- particularly the clock frequency -- can be set at the application-level codes. Word length (WORD_LEN) and Polarity (POL) need not be changed and are already set for AD9106 and AD9102. Refer to Mbed OS 6 SPI Documentation for more information on these parameters.
Instructions on setting the SPI clock (SCLK) frequency are already provided in config.h as shown in Figure 18. The reason why SCLK can only be set to a number of fixed frequencies is discussed in this Mbed Wiki page: SPI output clock frequency. SPI lines out of the Arduino headers or SPI1 module of the SDP-K1 ARM processor uses a 100-MHz peripheral clock. Refer to these relevant source codes:
Figure 18. SPI protocol definitions, example SRAM vectors, and example SPI register configurations in config.h
Initialization of digital I/O pins connected to the DAC being evaluated, and declaration of SPI register addresses and device-specific functions are in ad910x.h. See Figure 19. The functions are implemented in ad910x.cpp. The Mbed platform drivers allow setup of 4-wire SPI interface. Refer to Mbed documentation for other configurations.
Figure 19. Device-specific I/O pins and functions declarations in ad910x.h
SRAM Vectors in config.h can be easily modified for a specific application. For both AD9106 and AD9102, there are 4096 addresses in the on-chip SRAM. Word length is 14 bits for AD9102, 12 bits for AD9106, and is left-justified. For AD9102, data should be written in bits [15:2] and for AD9106 in bits [15:4] of each SRAM address.
Although the SRAM vectors can be modified manually, it will be more convenient to create new vectors using DPG Lite or Vector Generator from Analysis | Control | Evaluation (ACE) Software.
When creating data vectors for AD9106 and AD9102, make sure to choose the proper DAC resolution and leave the Unsigned Data box unchecked. Shown in Figures 20a and 20b are the types of waveforms that can be generated using DPG Lite and ACE's Vector Generator, respectively, and Figures 21a and 21b are three vectors with a combined record length of 4096 generated using the same software programs which can be uploaded to the SRAM. These can be saved as text files and integrated into the source code.
Figure 20a. Waveforms that can be generated using DPG Lite | Figure 20b. Waveforms that can be generated using ACE's Vector Generator
Figure 21a. Generating waveform vectors using DPG Lite | Figure 21b. Generating waveform vectors using ACE's Vector Generator
It is not required to write to all 4096 addresses. Each DAC channel in a device can fetch data from a fixed SRAM address to another. The start and stop addresses can be set using the following registers:
SRAM data format or code follows two’s complement notation. Refer to Table 2 for the equivalent current output for an input code. 14-bit code should be shifted left by 2 bits before writing it to AD9102 SRAM while 12-bit code should be shifted left by 4 bits before writing it to AD9106 SRAM. Alternatively, 14-bit data shifted left by 2 bits can be written to AD9106 SRAM but the last two bits with be truncated. This is why in AD910x_update_sram() function in ad910x.cpp, SRAM data is by default shifted 2 bits to the left. Refer to Figure 22.
Figure 22. Function that writes to on-chip SRAM in ad910x.cpp
AD910x_print_sram() function is declared in ad910x.h and implemented in ad910x.cpp but is by default not called in the main program main.cpp. The function can be used to print in the console n number of data words from SRAM. This can be done by calling the function in main.cpp after AD910x_update_sram().
AD9106 and AD9102 have similar register maps. The latter only has less number of registers that affect device functionality because writing to registers for the three other DAC channels will only have an effect to AD9106. Nonetheless, the defined SPI registers address in ad910x.h will work for both devices.
The SPI register addresses were written as comment in config.h and aligned with example SPI register values for user’s convenience. Same as the SRAM vectors, these SPI register values can also be easily modified for specific applications. Refer to the device datasheets for the SPI register descriptions.
Other I/Os like the ones connected to the EN pin of the on-board oscillator supply, CVDDX, and to the SHDN_N pin of the on-board amplifier supply, LT3472, are defined in main.cpp.
As shown in Figure 23, if external or off-board clock source is chosen, en_cvddx = 0 and no power is supplied to CVDDX. If the on-board oscillator is chosen, en_cvddx = 1 and 3.3V is supplied to CVDDX.
Figure 23. Power supply enable/shutdown pins in main.cpp
If the user confirms that the DAC outputs are connected to the on-board amplifiers, shdn_n_lt3472 = 1 and 5.2V and -5.2V are supplied to the amplifiers provided a wall wart is connected to SDP-K1 or the evaluation board. Otherwise, shdn_n_lt3472 = 0 and the amplifiers are not powered up.