MCUXpresso VSCode extension: Difference between revisions

From Variscite Wiki
(Update 'Open a Demo in VS Code')
No edit summary
 
(7 intermediate revisions by 2 users not shown)
Line 80: Line 80:
=Hardware=
=Hardware=
  JTAG Debbugger: J-Link PLUS: https://www.segger.com/products/debug-probes/j-link/models/j-link-plus/
  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
  9-Pin Cortex-M Adapter: https://www.segger.com/products/debug-probes/j-link/accessories/adapters/9-pin-cortex-m-adapter/
  Variscite Board: {{#var:DEBUG_BOARD}}
  Variscite Board: {{#var:DEBUG_BOARD}}
=Host Computer Environment Setup=
=Host Computer Environment Setup=
Follow the steps below to prepare a fresh Ubuntu 22.04 installation for using the extension.
Follow the steps below to prepare a fresh Ubuntu 22.04 installation for using the extension.
Line 92: Line 93:
The above command will print all group memberships of the current user. If ‘dialout’ it is not printed, add your user to it:
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
  $ sudo usermod -a -G dialout $USER
and restart your computer.
and either logout or restart your computer for the changes to take effect.


Download MCUXpresso SDK for the SOM:
Download MCUXpresso SDK for the SOM:
Line 120: Line 121:
[[File:MCUXpresso-installer-window.png]]
[[File:MCUXpresso-installer-window.png]]


==Open a Demo in VS Code==
=Open a Demo in VS Code=
After the dependencies are installed, close the MCUXpresso Installer and click on ‘Import Software Repositories’:
After the dependencies are installed, close the MCUXpresso Installer and click on ‘Import Software Repositories’:


[[File:MCUXpresso-import-repository-1.png]]
[[File:MCUXpresso-import-repository-1.png]]


Go to the 'Local' tab, browse the previously git-cloned repository and import it:
Go to the 'Local' tab, browse the previously git-cloned repository and import it:
Line 133: Line 133:


[[File:MCUXpresso-import-example-1.png]]
[[File:MCUXpresso-import-example-1.png]]
Select the previously imported repository, the Arm GNU Toolchain (the Toolchain version might differ), the {{#var:HARDWARE_NAME}} board and the hello world demo. Use the previously created 'mcuxpresso-examples' directory for the 'Location':
[[File:MCUXpresso-import-example-2-rc.png]]
Click on 'Explorer' on the left upper corner to open the project source code:
[[File:MCUXpresso-hello-world-1-highlighted-rc.png]]


=Build Demo using VS Code=
=Build Demo using VS Code=
To build the project click on MCUXpresso for VS Code icon on the left and on 'Build Selected':
[[File:MCUXpresso-hello-world-2-highlighted-rc.png]]
If the build task completes successfully, a similar output as below should be generated:


[[File:Vscode_mcuxpresso_run_build_task.png]]
[[File:MCUXpresso-hello-world-3-rc.png]]


If the build task completes successfully, the following output files will be generated:
Please visit [https://variwiki.com/index.php?title=MCUXpresso&release={{#var:RELEASE_PARAM}}#Running_a_demo Variscite's MCUXpresso Guide] for instructions to run the demo using U-Boot or the Linux Remote Processor Framework.
{{#ifeq: {{#var:HARDWARE_NAME}} | VAR-SOM-MX8 |
{{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/demo_apps/hello_world/cm4_core0/armgcc/debug/hello_world_m40.bin  (for TCM target, load in U-Boot)
{{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/demo_apps/hello_world/cm4_core0/armgcc/debug/hello_world_m40.elf  (for TCM target, load using debugger or remoteproc)
{{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/demo_apps/hello_world/cm4_core0/armgcc/ddr_debug/hello_world_m40.bin  (for DDR target, load in U-Boot)
{{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/demo_apps/hello_world/cm4_core0/armgcc/ddr_debug/hello_world_m40.elf  (for DDR target, load using debugger or remoteproc)
|
{{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/demo_apps/hello_world/armgcc/debug/hello_world.bin  (for TCM target, load in U-Boot)
{{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/demo_apps/hello_world/armgcc/debug/hello_world.elf  (for TCM target, load using debugger or remoteproc)
{{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/demo_apps/hello_world/armgcc/ddr_debug/hello_world.bin  (for DDR target, load in U-Boot)
{{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/demo_apps/hello_world/armgcc/ddr_debug/hello_world.elf  (for DDR target, load using debugger or remoteproc)
}}
Please visit Variscite's {{Varlink|MCUXpresso#Running_a_demo|{{#var:RELEASE_LINK}}|MCUXpresso Guide}} for instructions to run the demo using U-Boot or the Linux Remote Processor Framework.


=Debugging with VS Code=
=Debugging with VS Code=


==Test Enviroment==
==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: {{#var:DEBUG_BOARD}}
Software<br>
You can see the Yocto release details at link:<br>
{{#var:YOCTO_RELEASE_NOTES_LINK}}<br>


==Connect Hardware==
==Connect Hardware==
Line 202: Line 196:


==Start Debugging==
==Start Debugging==
Open source code and add a breakpoint
Make sure the Debug Probe is correctly identified by the extension:
 
[[File:MCUXpresso-debug-probe-rc.png]]


[[File:Vscode_MCUXpresso_SettingBreakPoint.png]]
If it is not, check your connections and restart VS Code.


Start Debugging
Open source code and add a breakpoint:


[[File:Vscode_MCUXpresso_StartDebugging.png]]
[[File:MCUXpresso-hello-world-4-rc.png]]


if everything worked well the program will stop at the configured breakpoint
Open the serial debugging port by clicking ‘View' → ‘Output’ → ‘…’ → 'Serial Monitor’:


[[File:Vscode_MCUXpresso_StoppedAtBreakPoint.png]]
[[File:MCUXpresso-hello-world-5-rc.png]]


==Debug RPMSG demos==
[[File:MCUXpresso-hello-world-6-rc.png]]
The RPMSG demos can be debugged only starting from U-Boot.<br>
You need even to change M4 Kernel Device Tree enabling rpmsg node and disabling cortex-m node.<br>


==Change M4 Kernel Device Tree==
Select the appropriate serial port (it is usually /dev/ttyUSBx) and click on 'Start Monitoring':
Edit arch/arm64/boot/dts/freescale/{{#var:DTB_RPMSG}}<br>
 
<pre>
[[File:MCUXpresso-hello-world-7-hightlighted-rc.png]]
imx8mm-cm4 {
 
    ...
Click on 'Debug' to start debugging:
    ...
 
    status = "disabled";
[[File:MCUXpresso-hello-world-8-hightlighted-rc.png]]
};
 
Click on 'Continue' (or press F5) until the breakpoint is reached:


&rpmsg {
[[File:MCUXpresso-hello-world-9-highlighted-rc.png]]
    ...
    ...
    status = "okay";
};
</pre>
Save the changes.<br>
Compile the device tree and update the SD card/eMMC.<br>
{{Note|'''Note:''' If rpmsg node is missing in the arch/arm64/boot/dts/freescale/{{#var:DTB_RPMSG}} file discard the [[#Debug RPMSG demos|Change M4 Kernel Device Tree]] section above}}
{{#ifeq: {{#var:HARDWARE_NAME}} | DART-MX8M |
For this example, we will debug pingpong demo mapped in TCM.
{{Note|'''Note:''' rpmsg demos mapped in DDR can't be debugged due to the disabled lmem caches need to have the demo working}}
$ cd ~/var-mcuxpresso/freertos-variscite
$ ./var_add_vscode_support.sh -b {{#var:BOARD_SDK}} -e {{#var:BOARD_FOLDER}}/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote -t tcm -d /opt/SEGGER/JLink
$ code {{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote/
|
For this example, we will debug pingpong demo mapped in DDR.
{{#varexists:DEACTIVATE_LMEM_CACHE_PATCH |
<br>
$ cd ~/var-mcuxpresso/freertos-variscite
$ git apply patches/{{#var:DEACTIVATE_LMEM_CACHE_PATCH}}
$ ./var_add_vscode_support.sh -b {{#var:BOARD_SDK}} -e {{#var:BOARD_FOLDER}}/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote -t ddr -d /opt/SEGGER/JLink
$ code {{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote/
|
<br>
$ cd ~/var-mcuxpresso/freertos-variscite
$ ./var_add_vscode_support.sh -b {{#var:BOARD_SDK}} -e {{#var:BOARD_FOLDER}}/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote -t ddr -d /opt/SEGGER/JLink
$ code {{#var:SDK_PATH}}/freertos-variscite/{{#var:BOARD_FOLDER}}/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote/
}}
}}
{{Note|'''Note:''' Debugging applications mapped in the DDR, the use of SDK_DelayAtLeastUs function is not recommended because it produces a long delay time.<br>
You can use vTaskDelay() instead.<br>
}}


[[File:Vscode_MCUXpresso_SDK_DelayAtLeastUs_Replaced.png]]
After reaching the breakpoint, click on 'Step Over' (or press F10) to go line by line:


Build application following the guide at the [[#Build_Demo_using_VS_Code|Build Demo using VS Code]] section above:<br>
[[File:MCUXpresso-hello-world-10-hightlighted-rc.png]]


Power on the Board and interrupt the boot in the U-Boot prompt.<br>
Right after stepping over the PRINTF line, a 'hello world' string should be printed on the serial monitor:
From Visual Studio Code start Debugging.<br>
From U-Boot prompt:<br>
=> boot
Waiting for completed boot kernel<br>
From Userspace prompt:<br>
$ sysctl kernel.printk=7
$ modprobe imx_rpmsg_pingpong


If everything worked well the program will stop at the configured breakpoint:<br>
[[File:MCUXpresso-hello-world-11-hightlighted-rc.png]]


[[File:Vscode_MCUXpresso_RPMSG_StoppedAtBreakPoint.png]]
To end the debugging session, press the ‘Stop’ button:  


{{Note|'''Note:''' Debugging RPMSG demos be careful to set breakpoint or debug step by step because when the M core is stopped even A core is blocked}}
[[File:MCUXpresso-hello-world-12-hightlighted-rc.png]]

Latest revision as of 17:20, 13 May 2024

VAR-SOM-MX8M-NANO - MCUXpresso 2.15.0 Development using MCUXpresso for VS Code 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/
9-Pin Cortex-M Adapter: https://www.segger.com/products/debug-probes/j-link/accessories/adapters/9-pin-cortex-m-adapter/
Variscite Board: Symphony

Host Computer Environment Setup

Follow the steps below to prepare a fresh Ubuntu 22.04 installation for using the extension.

Note: cmake 3.20.5 is the required minimum version supported by MCUXpresso for VS Code extension and it is not supported by older Ubuntu versions.

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 either logout or restart your computer for the changes to take effect.

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:

MCUXpresso-extension.png

Install MCUXpresso Dependencies

In the extension ‘Welcome' tab, click on ‘Check Tool Dependencies’, ‘Open Installer’ and then, on the bottom right notification, 'Download’:

MCUXpresso-installer-download-highlight.png

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.

MCUXpresso-installer-window.png

Open a Demo in VS Code

After the dependencies are installed, close the MCUXpresso Installer and click on ‘Import Software Repositories’:

MCUXpresso-import-repository-1.png

Go to the 'Local' tab, browse the previously git-cloned repository and import it:

MCUXpresso-import-repository-2.png

Click on ‘Import Example from Repository’:

MCUXpresso-import-example-1.png

Select the previously imported repository, the Arm GNU Toolchain (the Toolchain version might differ), the VAR-SOM-MX8M-NANO board and the hello world demo. Use the previously created 'mcuxpresso-examples' directory for the 'Location':

MCUXpresso-import-example-2-rc.png

Click on 'Explorer' on the left upper corner to open the project source code:

MCUXpresso-hello-world-1-highlighted-rc.png

Build Demo using VS Code

To build the project click on MCUXpresso for VS Code icon on the left and on 'Build Selected':

MCUXpresso-hello-world-2-highlighted-rc.png

If the build task completes successfully, a similar output as below should be generated:

MCUXpresso-hello-world-3-rc.png

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

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

Make sure the Debug Probe is correctly identified by the extension:

MCUXpresso-debug-probe-rc.png

If it is not, check your connections and restart VS Code.

Open source code and add a breakpoint:

MCUXpresso-hello-world-4-rc.png

Open the serial debugging port by clicking ‘View' → ‘Output’ → ‘…’ → 'Serial Monitor’:

MCUXpresso-hello-world-5-rc.png

MCUXpresso-hello-world-6-rc.png

Select the appropriate serial port (it is usually /dev/ttyUSBx) and click on 'Start Monitoring':

MCUXpresso-hello-world-7-hightlighted-rc.png

Click on 'Debug' to start debugging:

MCUXpresso-hello-world-8-hightlighted-rc.png

Click on 'Continue' (or press F5) until the breakpoint is reached:

MCUXpresso-hello-world-9-highlighted-rc.png

After reaching the breakpoint, click on 'Step Over' (or press F10) to go line by line:

MCUXpresso-hello-world-10-hightlighted-rc.png

Right after stepping over the PRINTF line, a 'hello world' string should be printed on the serial monitor:

MCUXpresso-hello-world-11-hightlighted-rc.png

To end the debugging session, press the ‘Stop’ button:

MCUXpresso-hello-world-12-hightlighted-rc.png