MCUXpresso VSCode Helper Script

From Variscite Wiki
DART-MX8M-MINI - MCUXpresso 2.10.0 Development with VS Code

Overview

This guide demonstrates how to develop and cross compile applications for the DART-MX8M-MINI Cortex-m4 co-processor using Microsoft Visual Studio Code.

Please visit Variscite's MCUXpresso Guide for additional information about manually building demos, integration with Yocto, running applications from U-Boot and Linux, and JTAG debugging.

Setup Host Computer Environment

Follow the steps below to prepare a fresh Ubuntu 20.04 installation for VS Code debugging:

Install Dependencies

$ sudo apt-get -y update
$ sudo apt-get -y install build-essential gdb gdb-multiarch git cmake

Install VS Code

$ sudo snap install --classic code

Install VS Code Extensions

VS Code has a graphical interface for installing and managing extensions. To learn more, please see Using extensions in Visual Studio Code

For this guide, we will install the required extensions using the command line:

$ code --install-extension ms-vscode.cpptools
$ code --install-extension marus25.cortex-debug
$ code --install-extension dan-c-underwood.arm

Install Segger JLink

$ Download JLink_Linux_V760b_x86_64.deb from https://www.segger.com/downloads/jlink/
$ sudo dpkg -i JLink_Linux_V760b_x86_64.deb

The software will be installed in /opt/SEGGER folder

Install MCUXpresso Toolchain and SDK

Download and install GNU-ARM bare-metal toolchain:

$ mkdir ~/var-mcuxpresso
$ cd ~/var-mcuxpresso
$ wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
$ tar xvf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2

Download MCUXpresso SDK for the SOM:

$ cd ~/var-mcuxpresso
$ git clone https://github.com/varigit/freertos-variscite -b mcuxpresso_sdk_2.10.x-var01
$ cd freertos-variscite

Add Visual Studio Code support to the Variscite examples

Available Demos

All of the Variscite examples are located under the following folder.

~/var-mcuxpresso/freertos-variscite/boards/dart_mx8mm

Variscite provides a script to simplify the Project Configuration

Configure a single Project

For this example, we will configure the hello_world demo. However, the process is the same for all demos.

$ ./var_add_vscode_support.sh -b dart_mx8mm -e boards/dart_mx8mm/demo_apps/hello_world -t tcm -d /opt/SEGGER/JLink  (for TCM target)
$ ./var_add_vscode_support.sh -b dart_mx8mm -e boards/dart_mx8mm/demo_apps/hello_world -t ddr -d /opt/SEGGER/JLink  (for DDR target)

Configure all Projects

$ ./var_add_vscode_support.sh -b dart_mx8mm -e all -t tcm -d /opt/SEGGER/JLink  (for TCM target)
$ ./var_add_vscode_support.sh -b dart_mx8mm -e all -t ddr -d /opt/SEGGER/JLink  (for DDR target)

Disable LMEM caches to debug demos mapped in DDR

Note: to debug applications mapped in DDR, is mandatory to deactivate the LMEM caches
$ cd ~/var-mcuxpresso/freertos-variscite
$ git apply patches/0001-iMX8M-MINI-deactivated-the-LMEM-caches-to-debug-in-e.patch

Please visit the SEGGER forum to additional information
https://forum.segger.com/index.php/Thread/2948-SOLVED-DEBUGGING-doesn-t-work-in-external-RAM-but-in-internal-RAM/?postIDEQUAL11144&highlightEQUALLMEM#post11144

Open a Demo in VS Code

For this example, we will use the hello_world demo. However, the process is the same for all demos. From a terminal, launch VS Code and open the hello_world demo directory:

$ code ~/var-mcuxpresso/freertos-variscite/boards/dart_mx8mm/demo_apps/hello_world/

VS Code should open and look similiar too:

Vscode mcuxpresso.png

Build Demo using VS Code

Vscode mcuxpresso run build task.png

If the build task completes successfully, the following output files will be generated:

~/var-mcuxpresso/freertos-variscite/boards/dart_mx8mm/demo_apps/hello_world/armgcc/debug/hello_world.bin  (for TCM target)
~/var-mcuxpresso/freertos-variscite/boards/dart_mx8mm/demo_apps/hello_world/armgcc/debug/hello_world.elf  (for TCM target)
~/var-mcuxpresso/freertos-variscite/boards/dart_mx8mm/demo_apps/hello_world/armgcc/ddr_debug/hello_world.bin  (for DDR target)
~/var-mcuxpresso/freertos-variscite/boards/dart_mx8mm/demo_apps/hello_world/armgcc/ddr_debug/hello_world.elf  (for DDR target)

Please visit Variscite's MCUXpresso Guide for instructions to run the demo using U-Boot or the Linux Remote Processor Framework.

Debugging with VS Code

Used Hardware

JTAG Debbugger: J-Link PLUS: https://www.segger.com/products/debug-probes/j-link/models/j-link-plus/
ARM-JTAG-20-10 adapter: https://www.digikey.it/it/products/detail/olimex-ltd/ARM-JTAG-20-10/3471401
Variscite Board: VAR-DT8MCutomBoard

Connect Hardware

Connect J-Link PLUS to JTAG connector of Variscite board
Connect J-Link PLUS to Development PC via USB cable

Load dedicated device tree file

Please visit Variscite's MCUXpresso Guide for instructions to load a dedicated device tree
For this example we will use :

From U-Boot

 $ setenv fdt_file imx8mm-var-dart-dt8mcustomboard-m4.dtb
 $ saveenv
 Saving Environment to MMC... Writing to MMC(1)... OK
 Power off / Power on the board

From Linux

 $ fw_setenv fdt_file imx8mm-var-dart-dt8mcustomboard-m4.dtb
 $ reboot

Start Debugging

Add Breakpoint opening source code page

Vscode MCUXpresso SettingBreakPoint.png

Start Debugging

Vscode MCUXpresso StartDebugging.png

if everything worked well the program will stop at the configured breakpoint

Vscode MCUXpresso StoppedAtBreakPoint.png