Wiki

This version (06 Apr 2021 09:01) was approved by Darius B.The Previously approved version (17 Mar 2021 14:01) is available.Diff

NO-OS Overview

NO-OS is a software framework by Analog Devices Inc for systems without OS, otherwise known as baremetal. This framework defines a common interface (API) for accessing typical baremetal peripherals such as GPIO, SPI, I2C, RTC, Timer, Interrupt Controller. This common API may be then used to initialize and control these peripherals in a common way across multiple microcontroller platforms. Currently supported platforms are Intel and Xilinx microprocessors and SoC's as well as Analog Devices' own precision microcontrollers and STMicroelectronics' STM32.

By using this common driver API, the NO-OS is able to provide reference projects for Analog Devices Inc evaluation boards running on various underlying hardware.

NO-OS is an open-source software, and its official repository is NO-OS Github Repository. You are free to use and distribute NO-OS, provided that you comply with the license.

Microcontroller no-OS Drivers

The majority of ADI's products are peripherals to a non-ADI digital engine (FPGA, microprocessor, or microcontroller). While there is major work underway on FPGAs (Xilinx and Altera) and microprocessors (running an operating system like Linux), the efforts on microcontrollers are fragmented due to the diverse nature of the microcontroller market. The goal of these projects (microcontroller/no-OS) is to be able to provide reference projects for lower end processors, which can't run Linux or aren't running a specific operating system, to help customers using microcontrollers with ADI parts.

Drivers List

Accelerometers

Amplifiers

Analog to Digital Converters

Analog Front End

Capacitive to Digital & Touch Screen Controllers

D/A Converters (DAC)

Clock Generation Devices

Gyroscopes

Impedance Analyzer

Mobile I/O Expander & Keypad Controller

Multiplexers

Optical

Digital Potentiometers

RF Transceivers

Digital Temperature Sensors

20 Jan 2012 14:20 · Andrei Cozma

NO-OS Projects

The following list compiles all the projects that the NO-OS has support for. You may find the source code for each project at NO-OS's github repository.

  • ad5758-sdz
  • ad400x-fmcz
  • ad469x_fmcz
  • ad5766-sdz
  • ad6676-ebz
  • ad7124-4sdz
  • ad7124-8pmdz
  • ad713x_fmcz
  • ad738x_fmcz
  • ad7616-sdz
  • ad7689-ebz
  • ad7768-1fmcz
  • ad7768-evb
  • ad9081
  • ad9083
  • ad9172
  • ad9208
  • ad9265-fmc-125ebz
  • ad9434-fmc-500ebz
  • ad9467
  • ad9656_fmc
  • ad9739a-fmc-ebz
  • adaq7980_sdz
  • aducm_blinky_example
  • adv7511
  • adxrs290-pmdz
  • cn0531
  • fmcadc5
  • helloworld
  • iio_aducm3029
  • iio_demo
17 Mar 2021 12:51 · Darius B

NO-OS Project 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

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)

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 SDK is installed at this path:

/path/to/xilinx
└── Xilinx
    ├── DocNav
    ├── Downloads
    ├── SDK
    │   ├── 2017.4
    │   └── 2018.3
    ├── Vivado
    │   ├── 2017.4
    │   └── 2018.3
    └── xic

Run:

$ source /path/to/xilinx/Xilinx/SDK/2018.3/settings64.sh

For more information, consult the support/answers/47821.html.

STM32 (Click to expand)

STM32 (Click to expand)

Download your relevant STM32Cube package by cloning from STMicroelectronics github repo:

$ cd /path/to/stm32cube
$ git clone https://github.com/STMicroelectronics/STM32CubeF4.git
$ tree .
/path/to/stm32cube
├── STM32CubeF0
├── STM32CubeF4
├── STM32CubeL0
└── STM32CubeL1

Run:

$ export STM32CUBE=/path/to/stm32cube

ADuCM3029 (Click to expand)

ADuCM3029 (Click to expand)

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.9.2

Windows (Click to expand)

Windows (Click to expand)

Intel (Click to expand)

Intel (Click to expand)

Assuming the SDK is installed at this path:

C:\
└── intelFPGA
    └── 18.1

Run:

> .\no-OS\tools\scripts\platform\altera\environment.bat C:\intelFpga 18.1

Xilinx (Click to expand)

Xilinx (Click to expand)

Assuming the SDK is installed at this path:

C:\
└── Xilinx
    ├── DocNav
    ├── Downloads
    ├── SDK
    │   ├── 2017.4
    │   └── 2018.3
    ├── Vivado
    │   ├── 2017.4
    │   └── 2018.3
    └── xic

Run:

> C:\Xilinx\SDK\2018.3\settings64.bat

For more information, consult the Xilinx support support/answers/47821.html.

Note that Xilinx SDK versions 2018.3 or earlier don't properly set up the Windows PATH so that you may use make command provided with the SDK from the shell.

If this is the case, please manually add the following to your Windows PATH or install make for Windows of your choice:

C:\Xilinx\SDK\2018.3\gnuwin\bin

ADuCM3029 (Click to expand)

ADuCM3029 (Click to expand)

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 set CCES_HOME=c:\Analog Devices\CrossCore Embedded Studio 2.8.0
If using PowerShell instead of cmd, open another shell instance after running the above scripts.

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 .hdf in the project folder.

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

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

STM32 (Click to expand)

STM32 (Click to expand)

$ make PLATFORM=stm32

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)

CMD needs to be run with administrative privileges to create a project.

If this is not possible, check the standalone section.

> 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

Intel (Click to expand)

Intel (Click to expand)

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

.\no-OS\projects\adrv9009\
├── Makefile
├── profiles
├── src
├── src.mk
├── system_bd.sopcinfo
└── adrv9009_a10gx.sof

> make

Xilinx (Click to expand)

Xilinx (Click to expand)

Copy the .hdf to the project folder and run:

.\no-OS\projects\adrv9009\
├── Makefile
├── profiles
├── src
├── src.mk
└── system_top.hdf

> make

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

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

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

Debugging/Running

Once the .elf or .hex 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

However, debugging interface might be different across platforms and the specifics are documented below.

Linux (Click to expand)

Linux (Click to expand)

Xilinx (Click to expand)

Xilinx (Click to expand)

Use the following command to launch XSDK to be able to debug graphically by clicking the debug button.

$ make develop

A debug configuration is created automatically, debugging should work out of the box.

ADuCM3029 (Click to expand)

ADuCM3029 (Click to expand)

Use the following command to launch CCES to be able to debug graphically by clicking the debug button.

$ make develop

However, a debug configuration must be created first by following the debug session configuration section of this guide.

STM32 (Click to expand)

STM32 (Click to expand)

In order to run/debug on STM32 from command line, the makefile targets make use of the STM32CubeIDE modified version of openocd and a stock arm-none-eabi-gdb. Make sure you have them installed.

Assuming you've installed the STM32CubeIDE to /opt/stm32cubeide directory, use (and possibly adapt) the following commands:

$ export OPENOCD_BIN=/opt/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.openocd.linux64_1.5.0.202011040924/tools/bin
$ export OPENOCD_SCRIPTS=/opt/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.debug.openocd_1.5.0.202011091203/resources/openocd/st_scripts

Now you may run/debug with:

$ make PLATFORM=stm32 run
$ make PLATFORM=stm32 debug
17 Mar 2021 10:27 · Darius B
resources/no-os/overview.txt · Last modified: 06 Apr 2021 09:01 by Darius B