Skip to content

MCU-PLUS-SDK 11_00_00_16

Overview

Release Notes

For full details about this release, refer to the Release Notes.

MCU-PLUS-SDK 11_00_00_16 for for AM62X

This SDK contains examples, libraries and tools to develop RTOS and no-RTOS based applications for ARM M4F CPU, ARM R5F CPU and related peripherals.

MCU-PLUS-SDK-block diagram am62x.png.png

The examples and demos supported from TI are arranged as below

~/mcu-plus-sdk-am62x/examples/{optional component or module}/{optional sub-module or sub-component}/{example name}/{board on which this example can run}/{cpu}_{os}/{compiler toolchain}

For example referring to ipc_rpmsg_echo_linux for VAR-SOM-AM62

{optional component or module}: e.g. driver
{optional sub-module or sub-component}: e.g. ipc
{example name}: e.g. ipc_rpmsg_echo_linux
{board on which this example can run}: var-som-am62
{cpu}_{os}: e.g. m4fss0-0_freertos
{compiler toolchain}: ti-arm-clang

For more details please see TI Examples and Demos

To see the examples supported by Variscite, please look at the table Available demos:

Documentation

MCU-PLUS-SDK

Available online from TI AM62x MCU+ SDK

Locally starting documentation server
 "cd ~/mcu-plus-sdk-am62x"
 "python3 -m http.server 8080 &"
 open web browser to "http://<ip where documentation server is running>:8080/docs/api_guide_am62x/index.html"

Other useful informations

Boot flow IPC62

Prerequisites

Before starting, prepare a Yocto boot SD card.

To allow Cortex M4F/R5F accessing shared resources without experiencing Linux kernel conflicts, a dedicated device tree must be loaded, containing m4 label in the name, using the fdtfile environment variable in U-Boot.

=> setenv fdtfile k3-am625-var-som-symphony-m4.dtb
=> saveenv
=> reset

This device tree disables some of the base device tree nodes in order to avoid conflicts between the main processor and Cortex M4F/R5F.

Installing required packages

Download and install Sysconfig:

$ cd /tmp
$ wget https://software-dl.ti.com/ccs/esd/sysconfig/sysconfig-1.23.0_4000-setup.run
$ chmod +x sysconfig-1.23.0_4000-setup.run
$ ./sysconfig-1.23.0_4000-setup.run and install to ~/ti/sysconfig_1.23.0
$ rm sysconfig-1.23.0_4000-setup.run

Download and install TI CLANG Compiler Toolchain:

$ cd /tmp
$ wget https://dr-download.ti.com/software-development/ide-configuration-compiler-or-debugger/MD-ayxs93eZNN/4.0.1.LTS/ti_cgt_armllvm_4.0.1.LTS_linux-x64_installer.bin
$ sudo chmod +x ti_cgt_armllvm_4.0.1.LTS_linux-x64_installer.bin
$ ./ti_cgt_armllvm_4.0.1.LTS_linux-x64_installer.bin and install to ~/ti/ti-cgt-armllvm_4.0.1.LTS
$ rm ti_cgt_armllvm_4.0.1.LTS_linux-x64_installer.bin

Download MCU-PLUS-SDK for the SOM:

$ mkdir ~/mcu-plus-sdk-am62x
$ cd ~/mcu-plus-sdk-am62x
$ git clone https://github.com/varigit/ti-mcu-plus-sdk -b mcu_plus_sdk_am62x_11_00_00_16_var01 ~/mcu-plus-sdk-am62x

Demos pins for M4F CPU

Default M4F pins used by the demos are:

Function SoC balls VAR-SOM-AM62 pins Symphony pins Notes
UART2 RXD/TXD R24/R25 J1.115/J1.171 J18.9 / J18.7 The UART2 is not an instance from the MCU domain so only the polling mode is supported.
To more details: Accessing main and wakeup domain peripherals from MCU domain
MCU_GPIO0_14 (Input) B3 J1.155 J13.16 (HDMI connector) HDMI to header connector adapter is required
MCU_GPIO0_13 (Output) D6 J1.157 J13.18 (HDMI connector) HDMI to header connector adapter is required
MCU_MCAN1 RX/TX D4/E5 J1.154/J1.156 J13.9/J13.11 (TTL levels, CAN transceiver not mounted!) HDMI to header connector adapter is required
MCU_SPI0 CLK/D0/D1/CS1 A7/D9/C9/B8 J1.150/J1.151/J1.152/J1.153 J13.17/J13.21/J13.15/J13.23 HDMI to header connector adapter is required
EHRPWM0_A E19 J1.39 J16.4

Demos pins for R5F CPU

Default R5F pins used by the demos are:

Function SoC balls VAR-SOM-AM62 pins Symphony pins Notes
WKUP_UART0 RXD/TXD B4/C5 J1.145/J1.147 J3.8/J3.9
MCU_GPIO0_14 (Input) B3 J1.155 J13.16 (HDMI connector) HDMI to header connector adapter is required
MCU_GPIO0_13 (Output) D6 J1.157 J13.18 (HDMI connector) HDMI to header connector adapter is required
GPIO1_7 (RTC GPIO Output) B19 J1.45 J16.8
MCAN0 RX/TX E15/C15 J1.46/J1.44 J16.18 / J16.20 (CANL/CANH levels, CAN transceiver mounted!)
MCU_SPI0 CLK/D0/D1/CS1 A7/D9/C9/B8 J1.150/J1.151/J1.152/J1.153 J13.17/J13.21/J13.15/J13.23 HDMI to header connector adapter is required

Available demos

All of the Variscite examples are located under the following folders

~/mcu-plus-sdk-am62x/examples/{component or module}/{optional sub-module or sub-component}/{example name}/am62x-var-som/{cpu}_{os}/{compiler toolchain}

The available demos for VAR-SOM-AM62 are:

  • drivers/ddr/ddr_perf
  • drivers/epwm/epwm_duty_cycle
  • drivers/gpio/gpio_input_interrupt
  • drivers/gpio/gpio_led_blink
  • drivers/ipc/ipc_notify_echo
  • drivers/ipc/ipc_rpmsg_echo
  • drivers/ipc/ipc_rpmsg_echo_linux
  • drivers/mcan/mcan_loopback_interrupt
  • drivers/mcan/mcan_loopback_polling
  • drivers/mcspi/mcspi_loopback
  • drivers/mcspi/mcspi_performance_32bit
  • drivers/mcspi/mcspi_performance_8bit
  • drivers/rtc/rtc_led_blink
  • drivers/sciclient/sciclient_get_version
  • drivers/uart/uart_echo
  • drivers/uart/uart_echo_low_latency_polling
  • drivers/udma/udma_chaining
  • drivers/udma/udma_memcpy_interrupt
  • drivers/udma/udma_memcpy_polling
  • drivers/udma/udma_sw_trigger
  • empty
  • hello_world
  • hello_world_cpp
  • kernel/dpl/dpl_demo
  • kernel/freertos/memcpy_benchmark
  • kernel/freertos/posix_demo
  • kernel/freertos/task_switch
  • security/fwl_exception_log
  • security/fwl_exception_trigger

The folders am62x-sk and am62x-sk-lp are related to the examples for TI Starter Kit.

You can build and run the demos following official TI documentation:

Using SDK with makefiles
Build Hello World example

Building a demo using makefiles

Note: The Linux SDK provide an pre-built example (ipc_rpmsg_echo_linux) that on a target file system is soft linked by am62-mcu-m4f0_0-fw.

root@am62x-var-som:~# ls -l /lib/firmware
lrwxrwxrwx 1 root root 72 May 3 2023 am62-mcu-m4f0_0-fw -> /usr/lib/firmware/ti-ipc/ipc_rpmsg_echo_linux.mcu-m4f0_0.release.strip.out

We will use ipc_rpmsg_echo_linux as example to explain building procedure.

Building ipc_rpmsg_echo_linux for M4F CPU

$ cd ~/mcu-plus-sdk-am62x
$ export PROJDIR=examples/drivers/ipc/ipc_rpmsg_echo_linux/am62x-var-som/m4fss0-0_freertos/ti-arm-clang/
$ make -s -C ${PROJDIR} clean
$ make -s -C ${PROJDIR}
This produces the M4F binary ${PROJDIR}/ipc_rpmsg_echo_linux.mcu-m4f0_0.release.strip.out for RTOS OS

Building ipc_rpmsg_echo_linux for R5F CPU

$ cd ~/mcu-plus-sdk-am62x
$ export PROJDIR=examples/drivers/ipc/ipc_rpmsg_echo_linux/am62x-var-som/r5fss0-0_freertos/ti-arm-clang/
$ make -s -C ${PROJDIR} clean
$ make -s -C ${PROJDIR}
This produces the R5F binary ${PROJDIR}/ipc_rpmsg_echo_linux.wkup-r5f0_0.release.strip.out for RTOS OS

Running a demo

Booting M4F CPU from linux user space using remoteproc

Note: The remoteproc driver is hard-coded to look for specific files (am62-mcu-m4f0_0-fw) when loading the M4F core.

The (am62-mcu-m4f0_0-fw) is a link to /usr/lib/firmware/ti-ipc/ipc_rpmsg_echo_linux.mcu-m4f0_0.release.strip.out.
The user can link (am62-mcu-m4f0_0-fw) to a new firmware that will be loaded and ran at boot.

However, to make it easier to run an example during the development without the need to restart the target:

$ cd ~/mcu-plus-sdk-am62x
$ scp ${PROJDIR}/ipc_rpmsg_echo_linux.mcu-m4f0_0.release.strip.out root@<target ip>:/lib/firmware
Run on the target:
$ echo stop > /sys/class/remoteproc/remoteproc0/state
$ echo ipc_rpmsg_echo_linux.mcu-m4f0_0.release.strip.out > /sys/class/remoteproc/remoteproc0/firmware
$ echo start > /sys/class/remoteproc/remoteproc0/state

Flashing and booting R5F CPU through SPL

Attention!: Be very careful to use R5F for user app. It is recommended to use M4F instead.
Read TI discussion for more details

Prerequisites

As the wake-up R5F is the device manager, it can not be loaded through linux user space using remoteproc.
Building U-Boot is required. Please referring to Yocto Build U-Boot from source code guide

Build tispl

$ export R5F_BIN_PATH=${PROJDIR}/ipc_rpmsg_echo_linux.wkup-r5f0_0.release.strip.out
$ make -j8 ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu- BL31=$TFA_DIR/build/k3/lite/release/bl31.bin TEE=$OPTEE_DIR/out/arm-plat-k3/core/tee-pager_v2.bin TI_DM=${R5F_BIN_PATH} O=$UBOOT_DIR/out/a53 BINMAN_INDIRS=$TI_LINUX_FW_DIR

Flashing R5F CPU

On uSD
$ cp $UBOOT_DIR/out/a53/tispl.bin /media/$USER/boot or scp $UBOOT_DIR/out/a53/tispl.bin root@<ip address>:/run/media/boot-mmcblk1p1
On eMMC
$ scp $UBOOT_DIR/out/a53/tispl.bin root@<ip address>:/run/media/boot-mmcblk0p1

Booting R5F-MCU

To boots the new flashed DM-R5F firmware rebooting the target is need
=> reset command from U-Boot prompt
press RST key
power off/on cycle