MCUXpresso VSCode extension
Overview
This guide demonstrates how to develop, cross compile and debug applications for the VAR-SOM-MX8M-NANO Cortex-m7 co-processor using NXP’s MCUXpresso for Visual Code extension.
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.
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: Symphony
Host Computer Environment Setup
Follow the steps below to prepare a fresh Ubuntu 22.04 installation for using the extension.
Install Dependencies
$ sudo apt-get -y update $ sudo apt-get -y install pip git
In order to access serial debugging ports your user must be in the ‘dialout’ group. To check this type:
$ groups
The above command will print all group memberships of the current user. If ‘dialout’ it is not printed, add your user to it:
$ sudo usermod -a -G dialout $USER
and restart your computer.
Download MCUXpresso SDK for the SOM:
$ mkdir -p ~/var-mcuxpresso/mcuxpresso-examples $ cd ~/var-mcuxpresso $ git clone https://github.com/varigit/freertos-variscite -b mcuxpresso_sdk_2.15.x-var01
Install VS Code
$ sudo snap install --classic code
Install MCUXpresso for VS Code Extension
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 MCUXpresso for VS Code extension:
Install MCUXpresso Dependencies
In the extension ‘Welcome' tab, click on ‘Check Tool Dependencies’, ‘Open Installer’ and then, on the bottom right notification, 'Download’:
Once the download finishes, the MCUXpresso Installer window will be displayed, showing multiple tools to install. For this guide we will install the following:
- MCUXpresso SDK Developer;
- SEGGER J-Link;
- Arm GNU Toolchain;
- Standalone Toolchain Add-ons.
Open a Demo in VS Code
After the dependencies are installed, close the MCUXpresso Installer and click on ‘Import Software Repositories’:
Go to the 'Local' tab, browse the previously git-cloned repository and import it:
Click on ‘Import Example from Repository’:
Build Demo using VS Code
If the build task completes successfully, the following output files will be generated:
~/var-mcuxpresso/freertos-variscite/boards/som_mx8mn/demo_apps/hello_world/armgcc/debug/hello_world.bin (for TCM target, load in U-Boot) ~/var-mcuxpresso/freertos-variscite/boards/som_mx8mn/demo_apps/hello_world/armgcc/debug/hello_world.elf (for TCM target, load using debugger or remoteproc) ~/var-mcuxpresso/freertos-variscite/boards/som_mx8mn/demo_apps/hello_world/armgcc/ddr_debug/hello_world.bin (for DDR target, load in U-Boot) ~/var-mcuxpresso/freertos-variscite/boards/som_mx8mn/demo_apps/hello_world/armgcc/ddr_debug/hello_world.elf (for DDR target, load using debugger or remoteproc)
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
Test Enviroment
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: Symphony
Software
You can see the Yocto release details at link:
https://variwiki.com/index.php?title=VAR-SOM-MX8M-NANO_Release_Notes&release=RELEASE_DUNFELL_V1.6_VAR-SOM-MX8M-NANO
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
Please visit Variscite's MCUXpresso Guide for instructions to load a dedicated device tree.
For this example we will use imx8mn-var-som-symphony-m7.dtb:
From U-Boot
=> setenv fdt_file imx8mn-var-som-symphony-m7.dtb => saveenv Saving Environment to MMC... Writing to MMC(1)... OK Power off / Power on the board
Or, from Linux
$ fw_setenv fdt_file imx8mn-var-som-symphony-m7.dtb $ reboot
Start Debugging
Open source code and add a breakpoint
Start Debugging
if everything worked well the program will stop at the configured breakpoint
Debug RPMSG demos
The RPMSG demos can be debugged only starting from U-Boot.
You need even to change M4 Kernel Device Tree enabling rpmsg node and disabling cortex-m node.
Change M4 Kernel Device Tree
Edit arch/arm64/boot/dts/freescale/imx8mn-var-som-symphony-m7.dtsi
imx8mm-cm4 { ... ... status = "disabled"; }; &rpmsg { ... ... status = "okay"; };
Save the changes.
Compile the device tree and update the SD card/eMMC.
For this example, we will debug pingpong demo mapped in DDR.
$ cd ~/var-mcuxpresso/freertos-variscite $ ./var_add_vscode_support.sh -b som_mx8mn -e boards/som_mx8mn/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote -t ddr -d /opt/SEGGER/JLink $ code ~/var-mcuxpresso/freertos-variscite/boards/som_mx8mn/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote/
You can use vTaskDelay() instead.
Build application following the guide at the Build Demo using VS Code section above:
Power on the Board and interrupt the boot in the U-Boot prompt.
From Visual Studio Code start Debugging.
From U-Boot prompt:
=> boot
Waiting for completed boot kernel
From Userspace prompt:
$ sysctl kernel.printk=7 $ modprobe imx_rpmsg_pingpong
If everything worked well the program will stop at the configured breakpoint: