Wiki

This version is outdated by a newer approved version.DiffThis version (19 Mar 2021 12:16) was approved by Darius B.The Previously approved version (02 Oct 2019 13:52) is available.Diff

This is an old revision of the document!


ADRV9009/ADRV9008 No-OS System Level Design Setup

Supported devices

Supported evaluation boards

Supported carriers

Project layout

The project is located under no-OS/projects/adrv9009 and has the following layout, with source code under the src subdirectory and reference profiles obtained with TES software under profiles subdirectory.

$ tree
no-OS/projects/adrv9009
├── Makefile
├── profiles
│   ├── tx_bw100_ir122p88_rx_bw100_or122p88_orx_bw100_or122p88_dc122p88
│   │   ├── talise_config_ad9528.h
│   │   ├── talise_config.c
│   │   └── talise_config.h
│   ├── tx_bw200_ir245p76_rx_bw200_or245p76_orx_bw200_or245p76_dc245p76
│   │   ├── talise_config_ad9528.h
│   │   ├── talise_config.c
│   │   └── talise_config.h
│   └── tx_bw400_ir491p52_rx_bw200_or245p76_orx_bw400_or491p52_dc245p76
│       ├── talise_config_ad9528.h
│       ├── talise_config.c
│       └── talise_config.h
├── src
│   ├── app
│   │   ├── app_clocking.c
│   │   ├── app_clocking.h
│   │   ├── app_config.h
│   │   ├── app_jesd.c
│   │   ├── app_jesd.h
│   │   ├── app_talise.c
│   │   ├── app_talise.h
│   │   ├── app_transceiver.c
│   │   ├── app_transceiver.h
│   │   └── headless.c
│   ├── devices
│   │   └── adi_hal
│   │       ├── adi_hal.h
│   │       ├── common.h
│   │       ├── LICENSE.txt
│   │       ├── no_os_hal.c
│   │       └── parameters.h
│   └── README
└── src.mk

The ADRV9009 driver may be found under no-OS/drivers/rf-transceiver/talise/api and the firmware files under no-OS/drivers/rf-transceiver/talise/firmware.

TES artefacts

You may use the TES software to generate profiles and corresponding Stream Binary by graphically selecting Tools → Create Script → Init .c Files. This will generate a directory containing the following files:

├── headless.c
├── headless.h
├── talise_config_ad9528.h
├── talise_config.c
├── talise_config.h
└── TaliseStream.bin

Profiles

Using the new profile can be achieved by creating a new directory under no-OS/adrv9009/profiles directory and copying the 3 talise_config* files to it and selecting it in the build system.

Let's say our profile directory is called new_profile, we may select it for build by making sure the PROFILE make variable in src.mk file points to it:

PROFILE = new_profile

Stream binary

After obtaining a TaliseStream.bin file from the TES GUI, this can be converted to a header file via this Linux command.

$ xxd -i TaliseStream.bin > talise_stream_binary.h

Should you want to use this generated file, replace no-OS/drivers/rf-transceiver/talise/firmware/talise_stream_binary.h with it.

Build

No-OS Build Guide

NOTE: This build guide is valid for the projects found in the no-OS/projects folder. If your project resides elsewhere under the no-OS repository tree, it is a legacy project. A build guide for legacy projects can be found Build no-OS with GNU make.

Clone NO-OS with the --recursive flag:

git clone --recursive https://github.com/analogdevicesinc/no-OS

If however you've already cloned NO-OS without the --recursive flag, you may initialize all the submodules in an existing NO-OS clone with:

git submodule update --recursive --init

Build Prerequisites

Prior to building a no-OS project, it is required to set up some environment variables so that the build process may find the necessary tools (compiler, linker, SDK etc.).

Use the following commands to prepare your environment for building no-OS projects:

Linux (Click to expand)

Linux (Click to expand)

Make sure the GNU Make version you are using is >= 4.2.

Intel (Click to expand)

Intel (Click to expand)

Assuming the SDK is installed at this path:

/path/to/intel
└── intelFPGA
    └── 18.1

Run:

$ source no-OS/tools/scripts/platform/intel/environment.sh /path/to/intel/intelFPGA 18.1

Xilinx (Click to expand)

Xilinx (Click to expand)

Assuming the Vitis 2022.2 is installed at this path:

/path/to/xilinx
├── DocNav
├── Downloads
└── Vitis
    └── 2022.2

Run:

$ source /path/to/xilinx/Vitis/2022.2/settings64.sh

STM32 (Click to expand)

STM32 (Click to expand)

  • Install stm32cubeide to default location /opt/stm32cubeide. If you'd rather install it at a different location, run export STM32CUBEIDE=/path/to/your/stm32cubeide in the terminal used for building.
  • Install stm32cubemx to default location /opt/stm32cubemx. If you'd rather install it at a different location, run export STM32CUBEMX=/path/to/your/stm32cubemx in the terminal used for building.
  • Currently we are testing projects with CubeMx Version 6.5.0, but other versions should work as well.
  • Install java (openjdk-17), sed and head (if not already present, they normally are).
  • Install python (if not already present) and make sure python command executes Python3 (not Python2). This can be easily achieved by running the following command sudo apt install python-is-python3.

Maxim (Click to expand)

Maxim (Click to expand)

  • Install the Maxim Micros SDK.
  • Set the MAXIM_LIBRARIES environment variable to the MaximSDK/Libraries path (the default should be ~/MaximSDK/Libraries).
  • For visual debugging and building, install Visual Studio Code, and the Cortex-Debug extension.

Mbed (Click to expand)

Mbed (Click to expand)

  • Install Mbed CLI 1 as per guide here: https://os.mbed.com/docs/mbed-os/v6.15/build-tools/install-and-set-up.html .Usually the following steps should be sufficient: sudo apt install python3 python3-pip git mercurial gcc-arm-none-eabi and sudo python3 -m pip install mbed-cli pyelftools==0.29.
  • 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.

Pico (Click to expand)

Pico (Click to expand)

  • Set the PICO_SDK_PATH environment variable to the pico-sdk cloned repository path.
  • Install the J-Link software
  • Set the JLINK_SERVER_PATH environment variable to the JLinkGDBServerCLExe path (the default path should be /opt/SEGGER/JLink/JLinkGDBServerCLExe).
  • For visual debugging and building, install Visual Studio Code, and the Cortex-Debug extension.

ADuCM3029 (Click to expand)

ADuCM3029 (Click to expand)

Please install all the necessary packs locally and then manually import them in CrossCore

Common Issues with environment setup:

  • Makefiles searches for the CCES_HOME in its default installation directory. It may happen that multiple version are installed and may not work. To select a CCES_HOME run export CCES_HOME=/opt/analog/cces/2.10.0

Windows (Click to expand)

Windows (Click to expand)

Open up a Git Bash as Administrator once and run the tools/scripts/git-bash.sh script. Close the window. You only need to do this once per Git Bash installation.
Use Git Bash (unelevated) for the rest of your development.

Xilinx (Click to expand)

Xilinx (Click to expand)

Assuming the Vitis 2022.2 is installed at this path:

C:\Xilinx
├── DocNav
├── Downloads
└── Vitis
    └── 2022.2

Run:

$ export PATH=/c/Xilinx/Vitis/2022.2/bin:/c/Xilinx/Vitis/2022.2/gnu/aarch64/nt/aarch64-none/bin/:$PATH

Maxim (Click to expand)

Maxim (Click to expand)

  • Install the Maxim Micros SDK to a path without whitespaces like C:\MaximSDK.
  • Set the MAXIM_LIBRARIES environment variable by running: export MAXIM_LIBRARIES=/c/MaximSDK/Libraries.
  • (Optional) For visual debugging and building, install Visual Studio Code, and the Cortex-Debug extension.

ADuCM3029 (Click to expand)

ADuCM3029 (Click to expand)

Building a project

Go in the project directory that should be built.

Linux (Click to expand)

Linux (Click to expand)

$ cd no-OS/projects/project_name/
$ tree
.
├── builds.json
├── Makefile
├── src
└── src.mk

Intel (Click to expand)

Intel (Click to expand)

Copy the .sof and .sopcinfo to the project folder.

$ ls
Makefile  profiles  src  src.mk  system_bd.sopcinfo  adrv9009_a10gx.sof	
$ make

# Alternatively you may select a .sopcinfo file explicitly by:
$ make HARDWARE=path/to/system_bd.sopcinfo

Xilinx (Click to expand)

Xilinx (Click to expand)

Copy the .xsa in the project folder.

$ ls
Makefile  profiles  src  src.mk system_top.xsa
$ make

# Alternatively you may select an .xsa file explicitly by:
$ make HARDWARE=path/to/file.xsa

Maxim (Click to expand)

Maxim (Click to expand)

To build a project, type:

make PLATFORM=maxim TARGET=...

The TARGET specifies the chip for which the project is built. If it is missing, max32660 will be used. At the moment, the available targets are: max32650, max32655, max32660, max32665, max32670, max32690 and max78000.

Mbed (Click to expand)

Mbed (Click to expand)

To build a project, type:

make PLATFORM=mbed

Pico (Click to expand)

Pico (Click to expand)

To build a project, type:

make PLATFORM=pico

STM32 (Click to expand)

STM32 (Click to expand)

Make sure you have the .ioc file in the project directory, then type:

$ make PLATFORM=stm32

If during the project generation you get a dialog saying that you are using an .ioc file generated with an old CubeMX version, click Continue. Migrate is also a valid option but only if you know what you are doing.

If you're trying to use an .ioc file generated with a newer CubeMX than the one installed on your machine, you will get a prompt that asks you to upgrade your installation to the new version, there is no other choice than to click OK and then manually upgrade.

ADuCM3029 (Click to expand)

ADuCM3029 (Click to expand)

The ADuCM3029 projects also contain a pinmux_config.c file which contains pin configuration instructions.

# build an ADuCM3029-only project
$ make

# if the platform autodetection picks the wrong platform, explicitly specify the PLATFORM
$ make PLATFORM=aducm3029

Windows (Click to expand)

Windows (Click to expand)

Use Git Bash to run these commands.
$ cd no-OS/projects/project_name

It should contain make-related files and source files:

./no-OS/projects/project_name
├── builds.json
├── Makefile
├── src
└── src.mk

Xilinx (Click to expand)

Xilinx (Click to expand)

Copy the .xsa to the project folder and run:

./no-OS/projects/adrv9009
├── Makefile
├── profiles
├── src
├── src.mk
└── system_top.xsa

$ make

Maxim (Click to expand)

Maxim (Click to expand)

To build a project, type:

$ make PLATFORM=maxim TARGET=...

The TARGET specifies the chip for which the project is built. If it is missing, max32660 will be used. At the moment, the available targets are: max32650, max32655, max32660, max32665, max32670, max32690 and max78000.

ADuCM3029 (Click to expand)

ADuCM3029 (Click to expand)

$ export PLATFORM=aducm3029
$ make

The build process creates a build directory in the project folder:

build
├── app
├── bsp
├── obj
├── project_name.elf
└── tmp

Running/Debugging

Once the .elf, .hex or .bin file has been generated, make sure the board is powered on, JTAG cable connected and use the following commands to upload the program to the board or debug.

Uploading the binary to target is generically achieved with:

$ make run

Xilinx (Click to expand)

Xilinx (Click to expand)

For Xilinx project you can flash the board connected to a remote host. On the remote host make sure to start `hw_server`. On your development environment run

$ export XSCT_REMOTE_HOST=<remote host ip>
$ export XSCT_REMOTE_PORT=<remote host hw_server port>
$ make run

By default the `hw_server` port should be 3121.

Use the following command to launch the SDK associated to the used platform in order to be able to debug graphically by clicking the debug button:

$ make sdkopen

Fore more details about the available make rules, check out this page.

Running/Debugging in WSL

17 Mar 2021 10:27 · Darius B

Build Switches

The project builds by default for ADRV9009-W/PCBZ with whatever carrier is specified in the hardware files (.hdf or .sopcinfo/.sof).

AD-FMCOMMS8-EBZ support on ZCU102 may be enabled by adding -DFMCOMMS8_ZCU102 compiler flag or uncommenting the define in src/app/app_config.h.

ADRV9009-ZU11EG support on ADRV2CRR-FMC may be enabled by adding -DZU11EG compiler flag or uncommenting the define in src/app/app_config.h.

Legacy build instructions

We strongly recommend you use the command line build instructions above but if you would like to perform a manual and graphical project configuration, you may follow the following legacy build guides for Intel platforms or Xilinx platforms.

Demo Applications

DMA_EXAMPLE demo

DMA_EXAMPLE is a standard example that sends a sinewave on Tx channels using DMA from a lookup table. If you physically loopback a Tx channel to an Rx channel via an electrical wire, you may run the DMA_EXAMPLE and read the received data at Rx from particular memory address.

To build the DMA_EXAMPLE demo, edit the Makefile and add -DDMA_EXAMPLE to CFLAGS and rebuild. Alternatively, you may simply add a #define DMA_EXAMPLE in a suitable place in code and rebuild.

To run the DMA_EXAMPLE, you simply need to run the application as usual by:

  • making sure it was built with the DMA_EXAMPLE flag, as already mentioned
  • monitoring the serial terminal for messages printed by the application

The application will eventually print something like this:

DMA_EXAMPLE: address=0x7f170 samples=65536 channels=4 bits=16

This means that the memory address where the data at Rx is stored is 0x7f170, there are in total 65536 samples, 16-bit wide across 4 channels, which is equivalent to 16384, 16-bit samples per channel.

At this point you may use a Tcl script to retrieve data from memory and store it into .csv files for processing. In the terminal where you built the project, run the following command while being in the no-OS/projects/project_name folder

for Zynq-7000:
xsct ../../tools/scripts/platform/xilinx/capture.tcl ZYNQ_PS7 0x7f170 65536 4 16

for ZynqMP:
xsct ../../tools/scripts/platform/xilinx/capture.tcl ZYNQ_PSU 0x7f170 65536 4 16

for Versal:
xsct ../../tools/scripts/platform/xilinx/capture.tcl VERSAL 0x7f170 65536 4 16

After running the xsct command, some .csv files will be created in your directory. Now you need to run the Python script for plotting, specifying the number of channels you want to plot, like this:

python3 ../../tools/scripts/platform/xilinx/plot.py 4

and a plot window will open showing the Rx channels.

18 Mar 2021 08:51 · Darius B
 
resources/eval/user-guides/adrv9009/no-os-setup.1616152594.txt.gz · Last modified: 19 Mar 2021 12:16 by Darius B