nanoDAC+ Console Application#
Supported Hardware#
Supported Devices:
AD5671r AD5672r AD5673r AD5674 AD5674r AD5675r AD5675 AD5676 AD5676r AD5677r AD5679 AD5679r AD5686 AD5684r AD5685r AD5686r AD5687 AD5687r AD5689r AD5697r AD5694 AD5694r AD5695r AD5696 AD5696r AD5681r AD5682r AD5683 AD5683r AD5691r AD5692r AD5693r AD5693
Supported Evaluation Boards:
EVAL-AD5676 EVAL-AD5677r EVAL-AD5679r EVAL-AD5686r EVAL-AD5684r EVAL-AD5686r EVAL-AD5694r EVAL-AD5696r EVAL-AD5683r EVAL-AD5693r
Supported Carrier Boards:
Introduction#
Analog Devices nanoDAC+® products are low power, single-channel, 16-/14-/12-bit buffered voltage output DACs. This page gives an overview of using the nanodac+® firmware example with SDP-K1 EVAL board, interfacing with various EVAL boards supporting nanodac+ family devices. The firmware example comprises 3 layers of software (from top to bottom): Console Application Layer, Device No-OS Layer and Platform Drivers (Mbed-OS) layer.
The application layer uses the ADI Console Libraries to create console based User Interactive (UI). The middle layer of No-OS device library have device specific APIs to interface with nanodac+ device. These APIs allows direct access to device register map in order to read/write device registers. The bottom layer of Platform Drivers is responsible for Low Level Interface. The platform drivers uses mbed-os libraries to access low level peripheral (like GPIOs, SPI, I2C, etc). The devices from nanodac+ family uses either SPI or I2C communication interface.
The nanoDac+ Mbed firmware example can be used as a starting point for developing your own code for Analog Devices nanoDAC+ products in your own environment utilizing the benefits of the Mbed platform. The Mbed Platform simplifies the overall software development process by providing the low level driver support. This reduces the hardware dependency as any Mbed enabled board can be used with same firmware with little modifications (precisely changing a pin mapping).
Interface Diagram#
The AD568xRSDZ(nanodac+)-EVAL board is connected to SDP-K1 through on-board default 120-pin SDP Connector. The nanodac+ EVAL board can be powered-up through a SDP-K1 USB supply or from external DC supply, depending on the power supply jumper settings. The settings can vary board to board and user must refer user manual of respective EVAL board for ensuring the proper connections. Apart from power supply selection option, the EVAL board does provide an options to select Vref level, Gain level, I2C slave address bits-2:1 (A0,A1 pins) and other options based on the EVAL board hardware configurations. The SDP-K1 is connected to PC through an USB cable. The firmware (binary executable) can be loaded into SDP-K1 board through this USB interface from the PC. The SDP-K1 acts as a Serial Device (UART) and firmware loaded into it interacts with any serial terminal (like Teraterm, Putty, Coolterm, etc) by configuring terminal for proper serial settings (COM Port, Baud Rate, data bits, etc).
Note
The firmware provides a basic user-interface for interacting with the evaluation-board. All the main functionality of the nanoDAC+ is provided in the application-code in abstracted form and the user is free to customize the software to suit their own needs for working with the nanoDAC+
Useful Links#
Note
Linux and HDL are not used in emebdded IIO firmware projects but they may be of interest if you require Linux and/or FPGA support.
Hardware Connections#
SDP-K1:
Connect the VIO_ADJUST jumper on the SDP-K1 board to 3.3V position to drive SDP-K1 GPIOs at 3.3V
EVAL-AD56x86RSDZ Board (AD5696R chip):
Connect REF connector to 2.5V position for Vref=2.5V.
Connect PWRSEL connector to USB_SUPP position to power-up device from the SDP-K1 USB.
Disconnect/Open the P1 jumper to open the connection of VDD and VLOGIC. Use this option when using the SDP board.
Note
The settings can vary board to board and user must refer user manual of respective EVAL board for ensuring the proper connections.
SDP-K1 is powered through USB connection from the PC. SDP-K1 acts as a Serial device when connected to PC, which creates a COM Port to connect to Serial Terminals like Teraterm, Putty, etc. The COM port assigned to a device can be seen through the device manager for windows based OS.
nanoDAC+ Mbed Firmware#
This section briefs on the usage of MBED firmware. This also explains the steps to compile and build the application using mbed and make based build.
The software execution sequence for the nanodac+ Firmware Example is shown below. This is a blocking application as it waits for user input over serial interface (UART). The input is scanned and processed through ‘adi console libraries’. The menu functionality is executed from nanodac_conole_app.c file. The application layer talks with No-OS layer for device registers and data access. The No-OS layer interfaces with Platform Drivers layer for accessing low level peripherals. As name suggests, this layer is platform dependent. nanodac+ firmware uses Mbed libraries within Platform Drivers layer.
Build Guide#
Build Prerequisites#
Prior to building a firmware project, it is required to set up an environment so that the build process may find the necessary tools (compiler, linker, SDK etc.). Use the following steps to prepare your environment for building firmware projects for respective platform.
Visit Arm Keil website to create an user account for accessing the web based Keil Studio IDE.
Open Keil Studio Web IDE with registered user account
Clone Precision Converters Firmware repository with the –recursive flag (not needed if building with web IDE for Mbed platform):
git clone --recursive https://github.com/analogdevicesinc/precision-converters-firmware
If however you’ve already cloned the repository without the –recursive flag, you may initialize all the submodules in an existing cloned repo with:
git submodule update --recursive --init
Install Make in the root of ‘C’ drive without any spaces in the installation path. The path must be C:\GnuWin32\…. Add this path into the system environmental path variable (as shown in below screenshot).
Install Git and add a path of C:\Program Files\Git\usr\bin\ directory into system environmental path variable (please verify your git installation path is correct).
Install Mbed CLI 1 as per guide here.
Install GNU Arm Embedded compiler (for the development, 9-2019-q4-major version is used) and add a path of GNU Arm Embedded Toolchain bin directory into the system environmental path variable (as shown in below screenshot).
Configure the compiler location with Mbed CLI. This can be carried out by running the mbed config -G GCC_ARM_PATH <path-to-your-gcc-compiler> in Command Prompt. For example you can run mbed config -G GCC_ARM_PATH “C:\Program Files (x86)\GNU Tools ARM Embedded\9 2019-q4-major\bin” in command prompt. It will set mentioned compiler path to all the Mbed Projects.
Install STM32CubeIDE
Install STM32CubeMX
Building a project#
Once the build enviornment is setup, follow the guide below to build your project and generate executable file (.bin/.hex)
Clone the Precision Converters Firmware repository into Keil Studio using “File->clone…” menu.
Once the project repository is imported, wait until all library dependencies are imported as shown in below screenshot. Now, open the ‘.medignore’ file present in the root directory of repository. Add comment syntax (two forward slashes) in front of the project name which you want to build. This will ignore all other projects and build only the comment syntax selected project.
Select the target device (default used for development is SDP-K1) and click on ‘Clean build’ option to build the project. After a successful build a binary will be downloaded to your computer- store this on your drive. Drag and drop this binary to the USB drive hosted by your controller board to flash the MCU.
Note
If you intend to build different project, then modify the .medignore file in the root directory as mentioned in step2 and clean build project as mentioned in step3
Open Git bash and change current directory to project directory (eg. precision-converters-firmware/projects/ad4130_iio directory) which you want to build.
Type make on the git bash command prompt to build a project.
After successful build, binary file will be created into the Project_Name/build directory.
If you want to clean build, type make reset on git bash command which deletes all generated build files for the given project.
Note
Default TARGET_BOARD is SDP_K1 and COMPILER is GCC_ARM. Current Make based build only support GCC_ARM Compiler.
By default project is built for “SDP_K1” Board and “GCC_ARM” Compiler. If you want to build for other Mbed Board, For example If you want to build the project for “DISCO_F769NI” Board then run make TARGET_BOARD=DISCO_F769NI command in git bash command prompt. If you want to clean build, run make reset TARGET_BOARD=DISCO_F769NI command to delete the generated build files for the given project.
Open the respective project directory by navigating into the “precision_converters_firmware/projects/” folder.
In the “STM32” folder present within the project directory, double click and open the .ioc file present within.
Click on the “Generate Code” option seen on the top right corner
Upon successful generation of drivers for the selected MCU, the autogenerated files would be seen in the same directory where the .ioc file was present. Double click and open the “.project” file seen in the list of files
After the project is loaded to the STM32CubeIDE, unfold the adxxxx_iio project seen in the project explorer, right click the “app” folder, select “Settings” under the “C/C++ Build” section on the left pane and un-check the “Exclude resources from build” checkbox. This would ensure that the project specific files are included by the build system
In order to choose STM32 platform in the firmware, select the “ACTIVE_PLATFORM” as “STM32_PLATFORM” in the app_config.h from the respective project. Alternately , add compiler flag “ACTIVE_PLATFORM=value of STM32_PLATFORM in app_config.h” for selecting stm32 platform.
Add compiler flags “-u _printf_float” to the project settings.
Program by clicking on the “Run adxxxx_iio” option seen or by performing a copy->paste option of the .hex file seen in the STM32/Debug folder
Running a project#
Once the firmware build is successful and binary file is generated, copy the generated binary into USB drive hosted by your MCU board (e.g. USB drive hosted by SDP-K1 board on windows). This will flash the binary file into MCU present on the controller board. Programming might vary based on the tools used for building a project. The ‘Project Build’ section above talks about this exception at the end of all build steps.
Quick Start#
If you have some familiarity with the Mbed platform, the following is a basic list of steps required to start running the code, see below for more detail:
Connect the nanodac+ EVAL-board to the SDP-K1 controller board.
Connect the SDP-K1 controller board to your computer over USB.
Follow the steps mentioned in the Build Guide section above.
- Start up a serial terminal emulator (e.g. Tera Term)
Find the com-port your controller board is connected on and select it.
Set the baud-rate for 230400
Reset the controller board and connect.
Use the menu provided over the terminal window to access the evaluation board.
Using the Firmware#
The nanodac+ firmware example is configured to have following serial settings:
Baud rate: 230400 Data bits: 8-bits Parity: None Stop bits: 1
Configure your serial terminal (Tera Term) for below settings:
The nanodac+ console main menu looks like below (with Tera Term):
The firmware is designed to be intuitive to use, and requires little explanation, simply enter a number corresponding to the required command and follow the on-screen prompts.
The firmware comes with an app_config.h file which (at the moment) serves two purposes. * Select the active device to test. * Configure the pins you want to use to connect the controller board to the evaluation board.
The firmware supports most products in nanoDAC+ family, change the #define DEV_ADxxxxx found in app_config.h to suit your selected device. The products supported are enumerated in the ad5686_type, which is an enum found in AD5686.h, the firmware defaults to the AD5686R device.
Support#
Feel free to ask questions in the EngineerZone