Table of Contents

TQMa91xxLA - YOCTO Linux BSP documentation

Prerequisites

Prepare Linux Host

Ubuntu Packages

sudo apt update  
sudo apt install git python3-full python-is-python3 python3-pip

Download the Debian package from the Segger website https://www.segger.com/downloads/jlink/JLink_Linux_V762c_x86_64.deb and install the debian package afterwards.

cd ~/Downloads 
sudo dpkg -i JLink_Linux_V762c_x86_64.deb

SDK_MX93_3RDPARTY_Patch

    Patch required for Segger JLink is available on the NXP website [[https://www.nxp.com/webapp/sps/download/license.jsp?colCode=SDK_MX93_3RDPARTY_PATCH&appType=file1&DOWNLOAD_ID=null|https://www.nxp.com/webapp/sps/download/license.jsp?colCode=SDK_MX93_3RDPARTY_PATCH&appType=file1&DOWNLOAD_ID=null]] download and extract the archive e.g to the home folder. Afterwards the iMX93 folder has to be copied to the Segger JLink installation and a new device entry has to made in the JLinkDevices.xml.
mkdir -p ~/sdk_mx93_3rdparty_patch
unzip ~/Downloads/SDK_MX93_3RDPARTY_PATCH.zip -d ~/sdk_mx93_3rdparty_patch
unzip ~/sdk_mx93_3rdparty_patch/JLink.zip -d ~/sdk_mx93_3rdparty_patch/
sudo cp -r ~/sdk_mx93_3rdparty_patch/JLink/Devices/NXP/iMX93 /opt/SEGGER/JLink_V762c/Devices/NXP/
<!--  iMX9   -->
<!--         -->
<Device>
<ChipInfo Vendor="NXP" Name="MIMX9352_M33" Core="JLINK_CORE_CORTEX_M33" WorkRAMAddr="0xFFE0000" WorkRAMSize="0x00080000" JLinkScriptFile="Devices/NXP/iMX93/NXP_iMX93_Connect_CortexM33.JLinkScript" Aliases="MIMX9351_M33; MIMX9332_M33; MIMX9331_M33; MIMX9322_M33; MIMX9321_M33; MIMX9312_M33; MIMX9311_M33; MIMX9302_M33; MIMX9301_M33"/>
</Device>    

Example after adding new entry in JLinkDevices.xml

...
  <Device>
    <ChipInfo Vendor="NXP" Name="MIMX8ML8_M7" Core="JLINK_CORE_CORTEX_M7" JLinkScriptFile="Devices/NXP/iMX8ML/NXP_iMX8M_Connect_CortexM7.JLinkScript" />
  </Device>
<!--  iMX9   -->
<!--         -->
<Device>
<ChipInfo Vendor="NXP" Name="MIMX9352_M33" Core="JLINK_CORE_CORTEX_M33" WorkRAMAddr="0xFFE0000" WorkRAMSize="0x00080000" JLinkScriptFile="Devices/NXP/iMX93/NXP_iMX93_Connect_CortexM33.JLinkScript" Aliases="MIMX9351_M33; MIMX9332_M33; MIMX9331_M33; MIMX9322_M33; MIMX9321_M33; MIMX9312_M33; MIMX9311_M33; MIMX9302_M33; MIMX9301_M33"/>
</Device>    
  <!--                 -->
  <!-- NXP (iMXRT105x) -->
  <!--                 -->
...

ARM Toolchain

Download and install ARM toolchain

wget https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz
sudo tar --xz -xf arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz --directory /opt
rm arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz

Ninja build

wget https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-linux.zip
mkdir -p ~/bin
gunzip -c ninja-linux.zip > ~/bin/ninja
chmod +x ~/bin/ninja
rm ninja-linux.zip

Check PATH settings

Check that the following is available in the ~./profile

cat ~/.profile
# set PATH so it includes user's private bin if it exists
PATH="$HOME/bin:$PATH"
# set PATH so it includes user's private bin for python if it exists
PATH="$HOME/.local/bin:$PATH"

Prepare Build Environment

Export Toolchain Path

The toolchain path has to be exported everytime a new shell is opened.
export ARMGCC_DIR=/opt/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi

Install Python Modules

python -m venv .venv
source .venv/bin/activate
pip install west
pip install cmake

Download MCUXpresso SDK and Python SDK

Create new workspace folder and navigate to it.

mkdir ~/workspace
cd ~/workspace 
# Initialize west with the manifest repository
west init -m https://github.com/nxp-mcuxpresso/mcuxsdk-manifests/ mcuxpresso-sdk --mr v25.03.00
# Update the west projects
cd mcuxpresso-sdk
west update
cd mcuxsdk
pip install -r scripts/requirements.txt

Download and extract TQ patches

TQ provides a patch series to extend the MCUXpresso by the STKa93xx.

mkdir ~/tqma93xx-mcusdk-patches
wget https://support.tq-group.com/dl/tqma93-mcusdk-patches.tar.gz
tar xvzf tqma93-mcusdk-patches.tar.gz -C ~/tqma93xx-mcusdk-patches
cd ~/workspace/mcuxpresso-sdk/mcuxsdk/examples/ 
git am ~/tqma93xx-mcusdk-patches/0001-_boards-mcimx93evk-board_runner.cmake-use-SEGGER-ups.patch
git am ~/tqma93xx-mcusdk-patches/0002-demo_apps-hello_world-add-fallback-for-missing-BOARD.patch
git am ~/tqma93xx-mcusdk-patches/0003-demo_apps-hello_world-print-banner-using-BOARD_NAME.patch
git am ~/tqma93xx-mcusdk-patches/0004-_boards-add-tqma93xx-mba93xxca.patch
git am ~/tqma93xx-mcusdk-patches/0005-driver_examples-rgpio-improve-informal-output.patch
git am ~/tqma93xx-mcusdk-patches/0006-_boards-tqma93xx-mba93xxca-add-rpio-output-driver-de.patch
git am ~/tqma93xx-mcusdk-patches/0007-_boards-tqma93xx-mba93xxca-add-rgpio-driver-interrup.patch

Build Hello World Example

# list compatible boards for hello world build  
west list_project -p demo_apps/hello_world

#  prepare cmake for board / project / configuration / processor
west build -b tqma93xx-mba93xxca demo_apps/hello_world --config debug -Dcore_id=cm33 --cmake-only -p

# configure project 
west build -t menuconfig

# compile project
west build

Leave the terminal open, it will be used later to debug the application.

Debug Hello World Example

Connect Starterkit to Host as described in the STKa93xxLA Quickstart Guide and open a new terminal with second COM Port Device to receive the serial output from Cortex M33.

Start Debug Server

Open a new terminal to start the debug server and leave the terminal open after the server has been started.

source .venv/bin/activate
export ARMGCC_DIR=/opt/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi
cd ~/workspace/mcuxpresso-sdk/mcuxsdk
west debugserver -r jlink

Debug Hello World Application

Use the terminal which as been used to build the Hello World application and execute the commands below to start debugging it.

west debug -r jlink --tui
monitor reset
monitor halt
load
monitor go