MCU-PLUS-SDK

From Variscite Wiki
Revision as of 10:53, 14 May 2023 by Francesco (talk | contribs)
VAR-SOM-AM62 - MCU-PLUS-SDK 08_06_00_18

Overview

MCU-PLUS-SDK 08_06_00_18 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 https://software-dl.ti.com/mcu-plus-sdk/esd/AM62X/08_06_00_18/exports/docs/api_guide_am62x/EXAMPLES.html

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

Documentation

MCU-PLUS-SDK

Available online from https://software-dl.ti.com/mcu-plus-sdk/esd/AM62X/08_06_00_18/exports/docs/api_guide_am62x/index.html

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

https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/08_06_00_42/exports/docs/linux/Foundational_Components/U-Boot/UG-General-Info.html#boot-flow
https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/08_06_00_42/exports/docs/linux/Foundational_Components_IPC62x.html

Prerequisites

Before starting, prepare a Yocto boot SD.

Installing required packages

Download and install TI CLANG Compiler Toolchain:

$ cd /tmp
$ wget https://dr-download.ti.com/software-development/ide-configuration-compiler-or-debugger/MD-ayxs93eZNN/2.1.2.LTS/ti_cgt_armllvm_2.1.2.LTS_linux-x64_installer.bin
$ chmod +x ti_cgt_armllvm_2.1.2.LTS_linux-x64_installer.bin
$ ./ti_cgt_armllvm_2.1.2.LTS_linux-x64_installer.bin and install to ~/ti/ti-cgt-armllvm_2.1.2.LTS
$ rm ti_cgt_armllvm_2.1.2.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_08_06_00_18_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

Don't use /dev/ttyS2 from linux while running M4F examples to avoid conflicts.

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
MCU_I2C0 SCL/SDA A8/D10 J1.146/J1.148 J13.22/J13.24 HDMI to header connector adapter is required

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 JJ3.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
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
WKUP_I2C0 SCL/SDA B9/A9 J1.140/J1.141 J3.15/J3.5 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}/var-som-am62/{cpu}_{os}/{compiler toolchain}

The available demos for VAR-SOM-AM62 are:

  • drivers/gpio/gpio_input_interrupt
  • drivers/gpio/gpio_led_blink
  • drivers/i2c/i2c_led_blink
  • drivers/i2c/i2c_read
  • drivers/i2c/i2c_temperature
  • 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/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/posix_demo
  • kernel/freertos/task_switch

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:

https://software-dl.ti.com/mcu-plus-sdk/esd/AM62X/08_06_00_18/exports/docs/api_guide_am62x/MAKEFILE_BUILD_PAGE.html
https://software-dl.ti.com/mcu-plus-sdk/esd/AM62X/08_06_00_18/exports/docs/api_guide_am62x/GETTING_STARTED_BUILD.html

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 -> /lib/firmware/pdk-ipc/ipc_echo_baremetal_test_mcu2_0_release_strip.xer5f

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/var-som-am62/m4fss0-0_freertos/ti-arm-clang/
$ make -s -C ${PROJDIR} clean
$ make -s -C ${PROJDIR}
This produces the M4F binary ${PROJDIR}/am62-mcu-m4f0_0-fw 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/var-som-am62/r5fss0-0_freertos/ti-arm-clang/
$ make -s -C ${PROJDIR} clean
$ make -s -C ${PROJDIR}
This produces the R5F binary ${PROJDIR}/am62-wkup-r5f0_0-fw 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.

Before to replace it with new M4F binary a copy is recommended:

root@am62x-var-som:~# cp /lib/firmware/pdk-ipc/ipc_echo_baremetal_test_mcu2_0_release_strip.xer5f /lib/firmware/pdk-ipc/ipc_echo_baremetal_test_mcu2_0_release_strip.xer5f.bk
$ cd ~/mcu-plus-sdk-am62x
$ scp ${PROJDIR}/am62-mcu-m4f0_0-fw root@<target ip>:/lib/firmware/
Run on the target:
$ echo stop > /sys/class/remoteproc/remoteproc0/state
$ echo start > /sys/class/remoteproc/remoteproc0/state

Flashing and running on R5F CPU

Attention!: Be very careful to use R5F for user app. It is recommended to use M4F instead.
Read TI discussion for more details
Note: As the wake-up R5F is the device manager, it needs to be started by the SBL. So it can not be loaded through linux user space using remoteproc.
It needs to be updated and started via SBL so buildong U-Boot is required.

Please referring to Yocto Build U-Boot from source code guide

$ cp ${PROJDIR}/am62-wkup-r5f0_0-fw  $DMFW_DIR/am62xx/ipc_echo_testb_mcu1_0_release_strip.xer5f
$ make -j8 ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu- ATF=$TFA_DIR/build/k3/lite/release/bl31.bin TEE=$OPTEE_DIR/out/arm-plat-k3/core/tee-pager_v2.bin DM=$DMFW_DIR/ipc_echo_testb_mcu1_0_release_strip.xer5f O=$UBOOT_DIR/out/a53
$ Update $UBOOT_DIR/out/a53/tispl.bin on running system