MCUXpresso Community Articles - Page 2

cancel
Showing results for 
Search instead for 
Did you mean: 

MCUXpresso Community Articles - Page 2

petrstruzka
NXP Employee
NXP Employee

We are pleased to announce that MCUXpresso Config Tools v7 are now available.

 

MCUXpresso Configuration Tools is a product with set of tools that help users of all levels with a Cortex-M-based MCU solution.

Features

  • Available as Web, Desktop application and MCUXpresso IDE plug-ins
  • MCUXpresso SDK v2 support
  • Multicore support
  • GUI localized for English and Simplified Chinese
  • On-Demand device data download for latest features and support
  • Integrated directly within MCUXpresso IDE, standalone version supports other compilers and IDEs
  • Currently there are the following tools available: 

MCUXConfigTools_BD.jpg

Downloads

 

Revision History

7.0.1

  • Mac OS X 10.15 operating system support added.

  • TEE tool: Displays correctly inaccessible regions in "Memory attribution map" view.7.0

7.0

  • Added "Help | Kit/Board Information" option that displays information about currently used kit or board.
  • Clickable Part number, Board and Kit name supported. It displays information about currently used processor, board and kit.
  • Data Manager - supports clearing locally cached processors, boards, kit and components content.
  • Configuration Preferences - supports custom copyright in generated sources
  • TEE tool: Memory map is now interactive, cell double click opens its configuration.
  • TEE tool: Memory map now displays peripherals space details.
  • TEE tool: Added possibility to import memory configuration from MCUXpresso IDE project(s).
  • TEE tool: Memory regions in Access overview are now grouped by memory type; all memory region aliases are displayed in a single row.
  • TEE tool: Pins table now contains pin labels from the Pins tool.
  • TEE tool: Additional validations and security setting recommendations.
  • Peripherals tool: Tool can now generate binary output files.
  • Peripherals tool: Component name is derived from the selected peripheral by default. It can be overwritten by a user.
  • Peripherals tool: Documentation view improvements related to navigation added two new features - header with links in documentation content and selection box in header of view.
  • Peripherals tool: Deprecated components have "(deprecated)" suffix in the add component dialog if there are still other instances of this type in configuration.
  • Pins tool: Added automatic routing feature which can be used for conflict resolution in the current functional group.
  • (MCUXpresso Config Tools only): Preferences - Added Dark theme support
  • (MCUXpresso IDE only): Added SEMC/SDRAM stress tests, with RT support.
  • (MCUXpresso IDE only): Added FlexSPI/NOR Validation tool, with RT support.


Community

MCUXpresso Config Tools

 

 

MCUXpresso Config Tools Data

The Data for MCUXpresso Config Tools v7 was successfully deployed on the production system.

 

What’s new in data

The Data for MCUXpresso Config Tools v7 release provides following updates:

  • 330 Kinetis, LPC and i.MX processors and 229 boards supported in total.
  • Updated code generated by Pins, Clocks and Peripherals tool to support SDK v2.7 API.
  • Peripherals tool support added for LPC8N04, KV11/4x/5x, KExx, KV3x and K22 (FN1M0 and FX512 memory variants only) processors. 200 processors supported by Peripherals tool in total - all processors in SDK v2.7 are supported by Peripherals tool now.
  • Added 21 new Peripherals tool components for various Kinetis, LPC and i.MX RT processors. 103 components are available now in total.
  • Improved DMA support in Peripherals tool - edma and lpc_dma components updated to support transactional and non-transactional modes, improved support of DMA request settings in other Peripherals tool components.
  • Improved interrupt settings in Peripherals tool components, added default interrupt subroutine snippets.
  • Added new Audio 1.0 and Device Firmware Update classes to USB Peripherals tool component, supported suspend/resume/remote wake-up feature, improved PHDC class support and USB endpoint settings.
  • Added support of Memory validation for i.MX8MM processors, maintenance update of Memory validation/DDR tool supporting RT1020, RT1050, RT1060, RT1064 and i.MX8MM processors.
  • Updated TEE tool for LPC55S6x processors.
  • Various other small improvements and bug fixes of Pins, Clocks and Peripherals tool. 

Supported processors, boards, kits and components

 

i.MX

Kinetis

LPC

QN

imx7ulp-14x14-arm2

imx7ulp-evk

imx7ulp-evk-emmc

imx7ulp-evk-emmc-qspi

imx7ulp-evk-ft5416

imx7ulp-evk-lpuart

imx7ulp-evk-mipi

imx7ulp-evk-qspi

imx7ulp-evk-sd1

imx7ulp-evk-sensors-to-i2c5

imx7ulp-evk-wm8960

IMXRT1050-EVKB

MCIMX7ULP-EVK-REV-B

MIMX8M-EVK-REV-B

MIMX8MM-EVK-REV-C

MIMX8MN-EVK-REV-A

MIMX8QM-MEK-REV-B

MIMX8QX-MEK-REV-B

MIMXRT1010-EVK

MIMXRT1015-EVK

MIMXRT1020-EVK

MIMXRT1060-EVK

MIMXRT1064-EVK

FRDM-K32L3A6

FRDM-K32L2B

FRDM-K22F

FRDM-K28F

FRDM-K28FA

FRDM-K64F

FRDM-K66F

FRDM-K82F

FRDM-KE02Z40M

FRDM-KE04Z

FRDM-KE06Z

FRDM-KE15Z

FRDM-KE16Z

FRDM-KL02Z

FRDM-KL03Z

FRDM-KL25Z

FRDM-KL26Z

FRDM-KL27Z

FRDM-KL28Z

FRDM-KL43Z

FRDM-KL46Z

FRDM-KL82Z

FRDM-KV10Z

TWR-KV58F220M

TWR-KW24D512

USB-KW24D512

USB-KW41Z

FRDM-KV11Z

FRDM-KV31F

FRDM-KW24

FRDM-KW36

FRDM-KW41Z

HEXIWEAR

HVP-KE18F

HVP-KV11Z75M

HVP-KV31F120M

HVP-KV46F150M

HVP-KV58F

MAPS-KS22

TWR-K21D50M

TWR-K21F120M

TWR-K22F120M

TWR-K24F120M

TWR-K60D100M

TWR-K64F120M

TWR-K65F180M

TWR-K80F150M

TWR-KE18F

TWR-KL28Z72M

TWR-KL43Z48M

TWR-KL82Z72M

TWR-KM34Z75M

TWR-KV10Z32

TWR-KV11Z75M

TWR-KV31F120M

TWR-KV46F150M

LPC54018-IoT-Module

LPC54S018-IoT-Module

LPC8N04DevBoard

LPCXpresso51U68

LPCXpresso54018

LPCXpresso54018M

LPCXpresso54102

LPCXpresso54114

LPCXpresso54608

LPCXpresso54618

LPCXpresso54628

LPCXpresso54S018

LPCXpresso54S018M

LPCXpresso802

LPCXpresso804

LPCXpresso812

LPCXpresso824

LPCXpresso845

LPC845BREAKOUT

LPCXpresso55S28

LPCXpresso55S69

QN908XCDK

Processors:

i.MX

Kinetis

LPC

MCIMX7U3xxxxx

MCIMX7U5xxxxx

MIMX8MD6xxxHZ

MIMX8MD6xxxJZ

MIMX8MD7xxxHZ

MIMX8MD7xxxJZ

MIMX8MM1xxxKZ

MIMX8MM1xxxLZ

MIMX8MM2xxxKZ

MIMX8MM2xxxLZ

MIMX8MM3xxxKZ

MIMX8MM3xxxLZ

MIMX8MM4xxxKZ

MIMX8MM4xxxLZ

MIMX8MM5xxxKZ

MIMX8MM5xxxLZ

MIMX8MM6xxxKZ

MIMX8MM6xxxLZ

MIMX8MN1xxxIZ

MIMX8MN1xxxJZ

MIMX8MN2xxxIZ

MIMX8MN2xxxJZ

MIMX8MN3xxxIZ

MIMX8MN3xxxJZ

MIMX8MN4xxxIZ

MIMX8MN4xxxJZ

MIMX8MN5xxxIZ

MIMX8MN5xxxJZ

MIMX8MN6xxxIZ

MIMX8MN6xxxJZ

MIMX8MQ5xxxHZ

MIMX8MQ5xxxJZ

MIMX8MQ6xxxHZ

MIMX8MQ6xxxJZ

MIMX8MQ7xxxHZ

MIMX8MQ7xxxJZ

MIMX8QM6xxxFF

MIMX8QX2xxxFZ

MIMX8QX6xxxFZ

MIMXRT1011xxxxx

MIMXRT1015xxxxx

MIMXRT1021xxxxx

MIMXRT1051xxxxB

MIMXRT1052xxxxB

MIMXRT1061xxxxA

MIMXRT1062xxxxA

MIMXRT1064xxxxA

 

K32L3A60xxx

K32L2B11xxxxA

K32L2B21xxxxA

K32L2B31xxxxA

MK02FN128xxx10

MK02FN64xxx10

MK10DN512xxx10

MK10DX128xxx10

MK10DX256xxx10

MK11DN512Axxx5

MK11DN512xxx5

MK11DX128Axxx5

MK11DX128xxx5

MK11DX256Axxx5

MK11DX256xxx5

MK12DN512xxx5

MK12DX128xxx5

MK12DX256xxx5

MK20DN512xxx10

MK20DX128xxx10

MK20DX256xxx10

MK21DN512Axxx5

MK21DN512xxx5

MK21DX128Axxx5

MK21DX128xxx5

MK21DX256Axxx5

MK21DX256xxx5

MK21FN1M0Axxx12

MK21FN1M0xxx12

MK21FX512Axxx12

MK21FX512xxx12

MK22DN512xxx5

MK22DX128xxx5

MK22DX256xxx5

MK22FN128xxx10

MK22FN128xxx12

MK22FN1M0Axxx12

MK22FN1M0xxx12

MK22FN256xxx12

MK22FN512xxx12

MK22FX512Axxx12

MK22FX512xxx12

MK24FN1M0xxx12

MK24FN256xxx12

MK26FN2M0xxx18

MK27FN2M0Axxx15

MK27FN2M0xxx15

MK28FN2M0Axxx15

MK28FN2M0xxx15

MK30DN512xxx10

MK30DX128xxx10

MK30DX256xxx10

MK40DN512xxx10

MK40DX128xxx10

MK40DX256xxx10

MK50DN512xxx10

MK50DX256xxx10

MK51DN256xxx10

MK51DN512xxx10

MK51DX256xxx10

MK52DN512xxx10

MK53DN512xxx10

MK53DX256xxx10

MK60DN256xxx10

MK60DN512xxx10

MK60DX256xxx10

MK63FN1M0xxx12

MK64FN1M0xxx12

MK64FX512xxx12

MK65FN2M0xxx18

MK65FX1M0xxx18

MK66FN2M0xxx18

MK66FX1M0xxx18

MK80FN256xxx15

MK82FN256xxx15

MKE02Z16xxx4

MKE02Z32xxx4

MKE02Z64xxx4

MKE04Z128xxx4

MKE04Z64xxx4

MKE04Z8xxx4

MKE06Z128xxx4

MKE06Z64xxx4

MKE14F256xxx16

MKE14F512xxx16

MKE14Z128xxx7

MKE14Z256xxx7

MKE14Z32xxx4

MKE14Z64xxx4

MKE15Z128xxx7

MKE15Z256xxx7

MKE15Z32xxx4

MKE15Z64xxx4

MKE16F256xxx16

MKE16F512xxx16

MKE16Z32xxx4

MKE16Z64xxx4

MKE18F256xxx16

MKE18F512xxx16

MKL02Z16xxx4

MKL02Z32xxx4

MKL02Z8xxx4

MKL03Z16xxx4

MKL03Z32xxx4

MKL03Z8xxx4

MKL13Z32xxx4

MKL13Z64xxx4

MKL14Z32xxx4

MKL14Z64xxx4

MKL15Z128xxx4

MKL15Z32xxx4

MKL15Z64xxx4

MKL16Z128xxx4

MKL16Z256xxx4

MKL16Z32xxx4

MKL16Z64xxx4

MKL17Z128xxx4

MKL17Z256xxx4

MKL17Z32xxx4

MKL17Z64xxx4

MKL24Z32xxx4

MKL24Z64xxx4

MKL25Z128xxx4

MKL25Z32xxx4

MKL25Z64xxx4

MKL26Z128xxx4

MKL26Z256xxx4

MKL26Z32xxx4

MKL26Z64xxx4

MKL27Z128xxx4

MKL27Z256xxx4

MKL27Z32xxx4

MKL27Z64xxx4

MKL28Z512xxx7

MKL33Z128xxx4

MKL33Z256xxx4

MKL33Z32xxx4

MKL33Z64xxx4

MKL34Z64xxx4

MKL36Z128xxx4

MKL36Z256xxx4

MKL36Z64xxx4

MKL43Z128xxx4

MKL43Z256xxx4

MKL46Z128xxx4

MKL46Z256xxx4

MKL82Z128xxx7

MKM34Z256xxx7

MKS20FN128xxx12

MKS20FN256xxx12

MKS22FN128xxx12

MKS22FN256xxx12

MKV10Z128xxx7

MKV10Z16xxx7

MKV10Z32xxx7

MKV10Z64xxx7

MKV11Z128xxx7

MKV11Z64xxx7

MKV30F128xxx10

MKV30F64xxx10

MKV31F128xxx10

MKV31F256xxx12

MKV31F512xxx12

MKV42F128xxx16

MKV42F256xxx16

MKV42F64xxx16

MKV44F128xxx16

MKV44F256xxx16

MKV44F64xxx16

MKV46F128xxx16

MKV46F256xxx16

MKV56F1M0xxx24

MKV56F512xxx24

MKV58F1M0xxx24

MKV58F512xxx24

MKW21D256xxx5

MKW21D512xxx5

MKW21Z256xxx4

MKW21Z512xxx4

MKW22D512xxx5

MKW24D512xxx5

MKW31Z256xxx4

MKW31Z512xxx4

MKW35A512xxx4

MKW35Z512xxx4

MKW36A512xxx4

MKW36Z512xxx4

MKW41Z256xxx4

MKW41Z512xxx4

LPC51U68

LPC54005

LPC54016

LPC54018

LPC54101J256

LPC54101J512

LPC54102J256

LPC54102J512

LPC54113J128

LPC54113J256

LPC54114J256

LPC54605J256

LPC54605J512

LPC54606J256

LPC54606J512

LPC54607J256

LPC54607J512

LPC54608J512

LPC54616J256

LPC54616J512

LPC54618J512

LPC54628J512

LPC54S005

LPC54S016

LPC54S018

LPC54018M

LPC54S018M

LPC802

LPC804

LPC810

LPC811

LPC812

LPC822

LPC824

LPC832

LPC834

LPC844

LPC845

LPC8N04

LPC5526

LPC5528

LPC55S26

LPC55S28

LPC55S66

LPC55S69

QN

QN908XC

Components:

Components

acmp

adc12

adc16

adc_12b1msps_sar

adc_etc

aoi

capt

cmp_1

cmp

cmt

cop

crc

csi

ctimer

dac

dcp

dma

dmic

dspi

edma

eeprom

elcdif

enc

ewm

flexbus

flexcan

flexcomm_i2c

flexcomm_i2s

flexcomm_spi

flexcomm_usart

flexio_i2c_master

flexio_i2s

flexio_spi

flexio_uart

flexspi

ftm

gint

gpio

gpt

hashcrypt

i2c

igpio

kpp

llwu

lpadc

lpc_acomp

lpc_adc

lpc_crc

lpc_dac

lpc_dma

lpc_gpio_1

lpc_gpio

lpc_i2c_1

lpc_i2c

lpc_lcdc

lpc_minispi

lpc_miniusart

lpc_rtc_1

lpc_rtc

lpc_spi_ssp

lpi2c

lpit

lpsci

lpspi

lptmr

lpuart

mcan

mrt

msg

nfc

ostimer

pdb

pint

pit

plu

pwm

qtmr

rit

rnga

rtc

rtwdog

sai

sctimer

semc

sha

snvs_hp

snvs_lp

spdif

spi

system

tempmon

tpm

trng

tsens

uart

usb

utick

vref

vspi

vusart

wdog01

wdog32

wdog

wdt

wkt

wwdt

More
0 0 811
lpcxpresso_supp
NXP Employee
NXP Employee

We are pleased to announce that MCUXpresso IDE v11.1.0 (build 3209) is now available. This is a major new version of the IDE, and contains many new features and enhancements over the previous MCUXpresso IDE v11.0.1 and earlier releases.

Overview Presentation

The attached presentation, recommended viewing for all users (new or experienced), provides an overview of many of the major changes, as well as things to be aware of when upgrading from an earlier release:

This complements the information provided in the IDE's release notes (also included at the end of this post).

Installer Downloads

To download the installers for all platforms, please login to our download site via: 

 

Documentation

Additional information can be found in the updated User Guide and other documentation, which can be accessed from the built in help system available via IDE's Help menu and in PDF form from within the installation directory or downloaded from:

 

Notification of future releases

To receive notifications about future releases, please follow : MCUXpresso IDE - Release History 

Summary of Changes - version 11.1.0 - December 2019

  • Upgraded underlying Eclipse Framework to 4.12.0.v201906 / CDT9.8.1
  • Upgraded supplied GNU ARM Embedded Toolchain to GCC8-2019q3-update
  • Added support for MCUXpresso SDK v2.7
  • Upgraded integrated version of MCUXpresso Config Tools to v7
  • New Welcome View, providing an improved out-of-box experience for new users. The IDE now also opens for the first time at a larger default window size, improving usability without the need for resizing
  • New "plugin SDK" system provides an easy-to-use mechanism for simplified installation and management of MCUXpresso SDKs
  • Reduced code size of debug builds of SDK projects by decreasing the overhead of the assert() function, which is commonly called by SDK functions. This has been done by the addition of "-fmerge-constants" and "-fmacro-prefix-map" compiler options to project compiler optimization settings
  • Added support for more complex specification of dependencies between SDK components. This allows some components (in particular, middleware ones) that previously could only be accessed through SDK examples, to now be added to projects and configured, either as they are created by the new project wizard, or for existing projects via "Manage SDK Components". Note that this functionality requires SDK 2.7
  • Various enhancements to "Installed SDKs" View, including:
    • New tabs provide easy access to the list of boards and devices that are installed into IDE, in addition to the actual SDKs.
    • Right click menu on a board or device also allows new project wizard (and, for boards, import example wizard) to be run
    • Detailed information on contents of selected SDK is now displayed in Outline View
    • Improved loading of SDKs, including refreshing, improving performance and fixing memory leaks
    • Copy/paste of SDKs now allowed between View and OS filer, as well as between different IDE instances
  • Fixed an issue with sorting of boards in SDK wizards
  • Fixed an issue with handling of combined secure / non-secure with multicore projects
  • Fixed issue with "Manage SDK Components" removing &quot from C++ Symbols in .cproject file
  • Various fixes and enhancements to SDK Editor / Creator, to support "user board SDKs" to act as an extension to a standard MCUXpresso SDK
  • Various fixes and enhancements to Image Info View. In particular:
    • Further improvements to load times
    • Added ability to double-click on memory region in Memory Usage tab and jump to that region in the Memory Contents tab
    • "Load" from project button now provides a drop-down to allow direct loading of info from multiple build configurations into multiple Image Info Views
    • Regular expressions now supported in "Search..." box
    • "Open 'main' symbol" button implemented on toolbar
    • Improved support for projects outside the workspace
  • Various improvements and fixes to map file awareness, including:
    • Improved handling of C++ projects
    • Fixed an issue with handling expressions containing parentheses
  • Various improvements and fixes to linker script file awareness, including improved handling of libraries specified in script
  • Various improvements to the managed linker script system:
    • Standardized set of symbols now generated for sections
    • Fixed an issue with LMA being incorrectly set in some circumstances for sections that do not have a real load address (e.g. .bss). Although this did not prevent the generated image from working, it could cause, for example, erroneous information in Image Info View
    • Plain load image functionality now supported for RT6xx devices
    • LinkServer FreeRTOS debug config rodata now placed by script, when appropriate
  • Increased default java memory settings (-Xms, -Xmx) in mcuxpressoide.ini file. This means the IDE may now use up to 2GB by default
  • Windows build tools now provide 'mv' command
  • Added MCUXpresso Dark Theme, providing better support for IDE's tailored set of Views being used in dark mode
  • * Improved organization of MCUXpresso IDE preferences, in
    particular Debug related ones
  • Project decorators implemented in Project Explorer View to indicate Master/Slave and Secure/Non-secure projects
  • Standardized graphing technology used by SWO Interrupt trace and by Global Variables View
  • Improvements to LinkServer flash driver performance for many devices. In particular, most flash drivers now implement a
    "verify-same" hashing mechanism to remove the need to erase/reprogram when the memory being programmed already has the required content. This can provide a noticeable improvement in debug startup time, particularly when repeatably debugging large, non-changing images
  • Required debug probe can now be selected by double-clicking on it in the "Probes discovered" dialog
  • Global Variables View now uses a check-box system to select variables to be displayed in graphs within the details pane
  • Improved handling of certain variable types, along with signed versus unsigned variables, within the Global Variables View
  • Fixed an issue with display of large arrays in Global Variables View with SEGGER and P&E Micro debug connections, when Live variables are enabled
  • Various fixes and enhancements to the Peripherals View, in particularly some registers being marked as inaccessible when single stepping
  • Fixed an issue with Disassembly View going blank after Restart, with LinkServer debug connections
  • Fixed an issue with flash programming with P&E Micro probes when filename or path contains a space
  • Fixed various memory leaks triggered during debugging
  • Fixed an issue with decoding correct stack pointer to be used in Faults View
  • When debugging secure / non-secure projects, you can now set breakpoints in CMSE functions and view source when breakpoints hit
  • Reduced the RAM footprint of the FTFA_1K.cfx LinkServer flash driver, to prevent issues on some smaller RAM devices that make use of this driver (e.g. MKE14Z32)
  • Additional and improved Linkserver connect scripts for RT10xx devices, which in particular reset the FlexRAM sizes to default. Note that for some devices, these will only be picked up by default if you are using an appropriate SDK 2.7
  • Fixed an issue that could prevent LinkServer SWO trace and power measurement from working on Linux platforms in some circumstances
  • Fixed an issue with setting wirespeed in LinkServer launch configurations
  • Cleaned up various layout issues with launch configuration editor
  • Updates to product and installer to allow better compatibility with newer versions of Ubuntu. Note that our supported Linux platforms remain Ubuntu 16.04 LTS and 18.04 LTS
  • Updates to support new devices, including LPC551x, K32L2A and K32L2B families
  • NXP LPC-LINK2 CMSIS-DAP firmware soft-loaded by IDE updated to v5.361
  • Upgraded to a later version of the P&E Micro plugin (v4.4.1)
  • Upgraded to a later version of the SEGGER J-Link software (v6.54c)

More
2 0 1,747
addiyi
NXP Employee
NXP Employee

Memory validation extends Peripherals tool with the capability to validate different types of memories. For now, it supports RT10xx CPUs family with SEMC/SDRAM and FlexSPI/NOR (starting with MCUXpresso v11.1.0/Config tools v7) devices. 

The SEMC is a multi-standard memory controller optimized for both high-performance and low pin-count. It can support multiple external memories in the same application with shared address and data pins. The interface supported includes SDRAM.

 

FlexSPI is a flexible SPI (Serial Peripheral Interface) host controller which supports two SPI channels and up to 4 external devices. Each channel supports Single/Dual/Quad/ Octal mode data transfer (1/2/4/8 bidirectional data lines).

 

For developing hardware with SDRAM memory connected to SEMC controller or with NOR memory connected to FlexSPI controller, the validation of memories settings can be done with the new introduced validation tool. The tool is available for SEMC and FLEXSPI peripherals and can be used after selecting the SEMC or FLEXSPI peripheral from the list in the Peripherals view.

Note:

  • This document assumes the use of MCUXpresso IDE v11.0.0 (or later).
  • An MCUXpresso SDK for RT10xx CPUs family will also be required
  • This must be “SDK Version: 2.5.0 (released 2019-02-25)” or later – which can be obtained from https://mcuxpresso.nxp.com
  • Installation of Python 2.7 is required (Install the latest of Python 2.7 version available on  https://www.python.org/downloads). If you see connection errors, make sure arm-none-eabi-gdb-py (can be found in \MCUXpressoIDE_11.1.0\ide\plugins\com.nxp.mcuxpresso.tools.win32\tools\bin\) is starting without error. Also, on Windows it is possible that python27.dll to be required and must be placed in Python27 installation folder. 
  • Once the SDK is imported into MCUXpresso IDE and a project including SEMC or FlexSPI driver is created, the settings can be tuned and validated following the next steps

Example below is for SEMC with SDRAM:

  1. Select the project and open the Peripherals tool pastedImage_13.png
  2. Select the SEMC componentpastedImage_14.png
  3. Configure the SDRAM parameters using the UI
  4. Click on Validation View icon to open SEMC Validation tool viewpastedImage_35.png
  5. From Validation view can be selected validation scenarios and tests. Available tests are DMA,
    Write-Read-Compare, Walking Ones, Walking Zeros. Also Stress test scenario (starting with MCUXpresso v11.1.0/Config tools v7) is available for SDRAM.
    DMA test will transfer data from a source address to a destination address in SDRAM. The size of the data transferred is configurable. The source region is filled with a repeating pattern. After DMA finished the transfer, the test is reading back the data from the destination and compares it with the source data. The test fails at the first mismatch found.
    Write-Read-Compare test checks SDRAM reads versus writes. Sequentially writes into a SDRAM area a pattern, until area is fully covered. Then reads back from the same SDRAM area and compare with what has been written. User can set the start and size of SDRAM area and pattern to be used. The test fails after the first identified memory mismatch.
    Walking Ones test writes a bit pattern that gradually sets [to 1] bits from LSB to MSB. Each byte is written multiple times depending on the selected access size, until each of the contained bits gets set, while the other ones are cleared. For each bit pattern, a write/read/compare sequence is performed. The test is repeated for each of the access size selected using the corresponding access size.
    Walking Zeros test writes a bit pattern that gradually clears [to 0] bits from LSB to MSB. Each byte is written multiple times depending on the selected access size, until each of the contained bits gets set, while the other ones are cleared. For each bit pattern, a write/read/compare sequence is performed. The test is repeated for each of the access size selected using the corresponding access size.
    Stress test is a suite of tests meant to verify the performance and stability of the memory in a non-OS environment.pastedImage_4.png
  6. To set the test parameters and the number of repetitions go to Choose Tests tabpastedImage_8.png
  7. Once the test parameters are set and the scenario is selected, validation can be started by clicking on Start Validation buttonpastedImage_31.png
  8. Status of the test will be displayed in Test Results viewpastedImage_32.png
  9. In Logs view Simple or Real time log can be displayed for each test pastedImage_36.pngpastedImage_37.png
  10. For SDRAM once the validation tests succeeded, there are two options to set the target with the new SDRAM settings
    1. C code generation. Necessary C code for setting the SDRAM is generated in peripherals.c/.h files and will be deployed into the project by pressing Update Code button. Also, a preview of the code is available in Code Preview tabpastedImage_39.png
    2. Create a DCD C array or binary with the SDRAM settings by using the Apply to DCD option.
      First is necessary that the SEMC component mode to the switched to DCD. This way only DCD component will be updated with the SEMC settings and not the peripherals.c/.h files.pastedImage_40.png 
      1. After pressing Apply to DCD button, open DCD tool to view the SDRAM initialization pastedImage_16.png
      2. SDRAM configuration generated into DCD is supposed to be used to update the existing configuration. We are not expected the board to boot with this configuration alone.
  11. Once the validation process is done and the SDRAM settings were applied using one of the above options, project can be rebuilt with the validated SDRAM settings

More
2 0 565
lpcxpresso_supp
NXP Employee
NXP Employee

MCUXpresso IDE is currently supported on macOS 10.12 to 10.14.

In macOS 10.15 (Catalina), Apple have introduced a new additional "signing" mechanism for software that is download outside of the Apple App Store, know as "Notarization". Currently MCUXpresso IDE for macOS is signed using NXP's Apple Developer ID, but has not yet gone through Apple's notarization process. This means that by default you will not be able to install if you are running macOS 10.15.

Therefore we currently do not claim to officially support MCUXpresso IDE on macOS 10.15. We expect to make a version of MCUXpresso IDE that has been notarized during 2q2020. However in the meantime, you may be still be able to install and use current IDE releases using the following instructions.

When you first try to install MCUXpresso IDE on macOS 10.15, you will see a error dialog :pastedImage_3.jpg

which is because the IDE installer is not notarized. Now open up "System Preferences" and select the "Security and Privacy" option:

pastedImage_4.jpg

and select the "Open Anyway" option for the MCUXpresso IDE installation pkg file.

If you now try to run the installer again, you will again receive a dialog warning that it is not notarized, but this time you can now select the "Open" option:
pastedImage_5.jpg
The IDE installer will now be run and install the tools, in the same way as on earlier versions of macOS.


For more information...

More
0 0 784
lpcxpresso_supp
NXP Employee
NXP Employee

Background

As part of the MCUXpresso IDE v11.0.1 release, we had to make some major changes to our LinkServer debugging mechanism to support the latest silicon revision of the LPC55xx family of devices (revision 1B) and the more secure debug request mechanism required by these parts. Such silicon is supplied on LPC55S69-EVK boards marked Revision A2 (or later) on the board silkscreen.

It has been found since the MCUXpresso IDE v11.0.1 release that these changes to LinkServer can, in certain circumstances, provoke problems when starting debug sessions to the earlier revision 0A production silicon. Such silicon is supplied on LPC55S69-EVK boards marked Revision A1 on the board silkscreen. Boards received before November 2019 are very likely to be this revision. Such issues will often manifest as various error popups being displayed by the IDE and the LinkServer flash driver failing to run to completion during the debug startup sequence, meaning that the debug session fails.

This has been resolved in the MCUXpresso IDE v11.1.0 release, but if you are still using v11.0.1, then the issue can be avoided using the supplied updated LinkServer debug configuration script.

NOTE 1: This updated script is only needed if debugging revision 0A silicon, but should not cause issues if used with revision 1B. It is also only needed if debugging using a LinkServer debug connection (typically CMSIS-DAP).

NOTE 2: Boards marked as LPC55S69-EVK Revision 1, 2 or A are fitted with pre-production silicon and not supported by the latest tools (including those from 3rd party partners) and should no longer be used. Note that if you purchased your board from NXP or one of our distributors it will not be Revision 1, 2 or A. Contact your NXP representative to arrange for a replacement unit if using one of these boards.

Installation Instructions

Note: This patch is suitable for use with MCUXpresso IDE v11.0.1. It should not be used with MCUXpresso v11.1.0 (or later).

To install this updated script file:

  • Unzip the attached ZIP file to a temporary location.

  • Ensure that MCUXpresso IDE v11.0.1 is not running.

  • If you are running on Windows and you have MCUXpresso IDE v11.0.1 installed into the standard installation directory (C:\nxp\MCUXpressoIDE_11.0.1_2563), then you install the patch into your IDE installation by simply running the supplied "install.bat" batch file by either:
    • Double clicking on the batch file in Windows Explorer, or
    • Running the batch file from a Command Prompt Window opened onto the directory containing the unzipped patch files.

  • If you are running on Mac OS / Ubuntu, or on Windows with a non-standard IDE installation location:
    • Navigate to the following subdirectory within your IDE v11.0.1 installation folder

.../ide/binaries/ToolScripts

  • Rename the existing file "LS_preconnect_LPC55xx.scp" to "LS_preconnect_LPC55xx.scp.bak".
  • Now copy the supplied new version of the "LS_preconnect_LPC55xx.scp" file into the ToolScripts folder.

Now restart the IDE, and click on the "Clean up Debug" button on the main toolbar, to ensure that no debug process have been left running from any previous failed debug attempts.

You should now be able to debug successfully. If further problems are seen, please delete any .launch files within your project, along with the build directories (typically "Debug" and/or "Release") before trying again.

More
0 0 790
martinformanek-
NXP Employee
NXP Employee

Dear MCUXpresso user,

 

We have decided to remove “Configurations” page from MCUXpresso SDK Builder website (http://mcuxpresso.nxp.com) with the December update this year.

Details are summarized below about the existing Configurations page and how page’s functionality will replaced.

 

Please be aware that the desktop versions of the MCUXpresso Config Tools are not impacted and do not require use of a MEX file from the online tools.  The primary purpose for downloading the online MEX file is to allow initial work completed using the online MCUXpresso Config Tools to be continued directly within the desktop MCUXpresso Config Tools (either the version integrated directly within MCUXpresso IDE or the standalone tools).

  

What is the “Configurations” page and how it is used?

  • The Configurations page is currently located within MCUXpresso SDK Builder page under user icon at the top right corner.pastedImage_64.png
  • The Configurations page has primarily been used as an overview of a user’s configurations created within MCUXpresso SDK Builder.
  • The ability to download MEX configuration files was added later as an additional feature (aligned with MEX file configuration support within MCUXpresso Config Tools).
 

What is the MEX file (*.mex)

  • Contains the user’s configuration (Pin and Clock) for use with the MCUXpresso Config Tools application
  • Downloaded MEX files can be opened within MCUXpresso Config Tools (desktop or online) application

 

pastedImage_65.png

 

 

How can MCUXpresso Web users download the MEX file after “Configurations" page removal?

  • The MCUXpresso users will not lose the ability to download MEX files.
  • It will still be possible to download MEX files directly from the online MCUXpresso Config Tools.
 

Want to try it now? Let’s go for it!

  • The functionality to download MEX file is already available within the MCUXpresso Config Tools online application.
  • Please follow the step by step guide:
    • Downloading MEX file for MCUXpresso Config Tools - Temporary configuration option (user does not have SDK package already in user’s Dashboard yet)
      • Go on Select Board page
      • Search the HW platform you are looking for
      • Select the HW platform by clicking on it
      • After clicking at selected HW platform, the right side will populate with more options
      • Select the option to ‘Explore selection with Pins tool’ or ‘Explore selection with Clocks tool’
pastedImage_66.png

  • The selected MCUXpresso Config Tools application will load
  • There you can make any changes (if needed) within your configuration selected.
  • From the left side top tools’ menu (Pins/Clocks), select “Export” option.
pastedImage_67.png
  • Select ‘Export Source Files’ option from the resulting dialog window, then click on the ‘Next’ button.
pastedImage_68.png
  • Here you can specify the name your configuration if needed and click ‘Finish’ button at the bottom.
pastedImage_69.png
  • The resulting archive will include your MEX configuration.pastedImage_70.png

  • Downloading MEX file configuration for SDK package – (User has already a SDK Packages in User’s Dashboard)
    • Go to your Dashboard page
    • Look for the SDK package with a configuration you would like to download
    • Click on MCUXpresso Config Tools icon, a dialog with MCUXpresso Config Tools options appears. Select the desired option to launch one of the respective online applications.pastedImage_71.png
 
  • The selected MCUXpresso Config Tools application will load
  • There you can make any changes (if needed) within your configuration selected.
  • From the left side top tools’ menu (Pins/Clocks), select “Export” option.
pastedImage_72.png
  • Select ‘Export Source Files’ option from the resulting dialog window, then click on the ‘Next’ button.
pastedImage_73.png
  • Here you can specify the name your configuration if needed and click ‘Finish’ button at the bottom.
pastedImage_74.png
  • The resulting archive will include your MEX configuration.pastedImage_75.png

When will “Configurations” page will be removed?

  • The “Configurations” page will be removed from MCUXpresso SDK Builder website with the December update this year.
  • After the update, users will be only be able to download MEX file from the online MCUXpresso Config Tools.
  • The desktop versions of the MCUXpresso Config Tools will not be impacted and do not require use of a MEX file from the online tools.

More
1 0 1,600
lpcxpresso_supp
NXP Employee
NXP Employee

Problem

An issue has been identified that impacts the debugging of older LPC devices using SEGGER Jlink via the version of MCUXpresso IDE v11.0.1 released on 4th September 2019.

This issue will be seen only when debugging an LPC device that use the IDE's Preinstalled part support i.e. parts that do not require an SDK - a debug operation via SEGGER Jlink will lead to an error as below:

pastedImage_1.png

In this instance, the reported error does not accurately identify the cause of this problem.

Note: This problem does not impact version 11.0.0 of MCUXpresso IDE. Also, this update is of no benefit for version 11.0.1 users of MCUXpresso IDE unless they are debugging LPC parts via SEGGER JLink and experience the above error.

Solution

The IDE team have made a fix for this issue which is now available via the standard Eclipse update mechanism. However, this fix is not suitable (or required) for the previous version of MCUXpresso IDE (version 11.0.0). Therefore a dedicated Update Site has been created for MCUXpresso IDE v11.0.1 users to deliver this 'hotfix'.

To access this new update site, a small edit should be made to the MCUXpresso IDE Update Site path held within the IDE's preferences. To locate the Preferences dialogue from the IDE:

On Windows and Linux: Window -> Preferences

On Mac: MCUXpresso IDE -> Preferences

The change can then be made as follows:

  • Enter 'update' into the filter field and locate 'Available Software Sites'
  • Select the MCUXpresso IDE Update Site line and click Edit
  • Add the text '_1' to the version making the complete version 'v11_0_1/'
    • the new path will be: 'http://www.nxp.com/lgfiles/updates/Eclipse/mcuxpressoide/v11_0_1/'
  • Click 'Apply and Close'
    • the graphic below shows the updated dialogue

pastedImage_1.png

Note: this hotfix will be located more quickly if only the MCUXpresso IDE Update site is ticked in the Available Software Sites (above)

To locate and apply this update from within the IDE, select: Help -> Check for Updates (as below)

pastedImage_8.png

This will launch a dialogue as below and all selected update locations will be checked for new features:

pastedImage_9.png

After a short while, the hotfix update will be found (as below):

pastedImage_1.png

Click Next and you will be presented with a License dialogue (as below):

pastedImage_3.png

To progress, you must click to accept the license agreement and click Finish. Finally, you will see an installation warning as below:

pastedImage_2.png

This update is a .jar and currently individual .jar files are not signed, hence you can click 'Install anyway' and accept the option to Restart the IDE.

pastedImage_4.png

Once the IDE has restarted, you can view that this hotfix update has been performed. From the IDE select Help -> About -> Installation Details and see the dialogue as below:

pastedImage_5.png

You should now see the Third-party debug solution support plugin is version 11.0.2... and the hotfix has been applied successfully.

More
2 0 1,333
lpcxpresso_supp
NXP Employee
NXP Employee

We are pleased to announce that MCUXpresso IDE v11.0.1 (build 2563) is now available.

 

This is a maintenance release that builds upon the previous MCUXpresso IDE v11.0.0 release, and we recommend that all existing users download and install this new version. It also incorporates a minor update to the integrated MCUXpresso Config Tools.

 

To download the installers for all platforms, please login to our download site via:

IMPORTANT NOTE 1 : An issue has been identified with MCUXpresso IDE v11.0.1 that impacts the debugging of older LPC devices using SEGGER J-Link. This issue will be seen only when debugging an LPC device that uses the IDE's preinstalled part support i.e. parts that do not require an SDK. For more details, along with a hotfix patch to resolve this issue, please see:

IMPORTANT NOTE 2 : An issue has been identified with MCUXpresso IDE v11.0.1 that impacts the debugging of LPC55S6x Revision 0A silicon devices (as found on LPCXpresso55S69 Revision A1 boards) in some circumstances via LinkServer debug connections (typically CMSIS-DAP). For more details, along with a hotfix patch, please see:

Summary of Changes - version 11.0.1 - September 2019

  • Updates to allow LinkServer debug connections (ie CMSIS-DAP) to LPC55S6x "rev 1B" silicon and other devices that implement "debug mailbox request" mechanism. Note that these changes mean that some pre-production LPC55S6x silicon can no longer be supported
  • Updates to support new devices, including K32L3A and i.MX RT1010 families
  • Link to https://mcuxpresso.nxp.com now provided in New Project and Import SDK example(s) wizards, improving accessibility for downloading additional SDKs
  • Updates to map file awareness, including improvements to loading speed
  • Fixed various issues with Image Info view
  • Fixed issue with floating point options being incorrectly set for SDK example projects with C++ nature in some circumstances
  • Extended "include paths" indexer fix implemented in IDE v11.0.0 to also work with library projects
  • Fixed issue with SDK multicore examples importing with managed linker script settings not being configured correctly in some circumstances
  • Fixed memory leak in Installed SDKs view when regeneration of part support info triggered
  • Managed linker script mechanism now generates references to "CodeQuickAccess"", "DataQuickAccess" and "RamFunction" input sections (required by some SDK examples/ drivers) in default .data output section
  • Fixed issue with Debug Shortcuts in QuickStart Panel incorrectly selecting attach/debug option in some circumstances
  • Fixed various minor issues with GUI Flash Tool
  • Fixed issue with Global Variables view slowing down debug launches with C++ projects
  • Fixed addresses > 0x80000000 issue with Heap and Stack Usage view
  • Fixed issue with Global Variables view graphs updating when target suspended
  • Fixed issue with Peripherals View with LPC17xx devices, particularly effecting display of certain enumerations
  • Fixed issue with Peripherals View refresh. This could cause some registers to sometimes be erroneously displayed as unavailable
  • Fixed issue with LinkServer launch configuration wirespeed setting being ignored in some circumstances
  • Updated the way the IDE autodetects installed SEGGER software. This is required due to changes SEGGER have made to the default options of their Windows installer in v6.46 and later of their software
  • Fixed issue with P&E and SEGGER implementations of live variables service (required to support live update of globals in Global Variables view). This issue could provoke problems in some circumstances when debugging via these probes including slow debug performance and failure to display locals inside the Variables view
  • Fixed issue with display of large arrays when using P&E or SEGGER debug connections
  • Fixed issue which could trigger error when manually creating a J-Link launch configuration
  • Upgraded to a later version of the P&E Micro plugin (v4.2.5)
  • Upgraded to a later version of the SEGGER J-Link software (v6.46k)
  • Fixed build issue with MCUXpresso IDE v11.0.0 User Guide which caused last chapter ("Appendix – Additional Hints and Tips") to be merged into the previous chapter ("Multicore Projects") as section 19.6 onwards. Actual content of manuals provided with IDE v11.0.1 otherwise unchanged from v11.0.0 manuals

More
0 0 1,991
KATE_WANG
NXP Employee
NXP Employee

Dear sdk developers,

 

During our development, more and more components are joining our sdk. It is necessary for the component sections recorded in yml data to follow a simple and effective naming convention, so that they can be well organized, identified and processed.

Here we provide the doc of Yml Data Record Component Naming Conventions, please kindly review and follow the rules in your future development.

 

A pull request is created to fix some nonstandard namings in our current yml records which are stored in mainline

Briefly, in this pull request, these modifications of the middleware naming have been made:

1. middleware.amazon_freertos.freertos => middleware.amazon_freertos, and middleware.amazon_freertos.aws_iot => middleware.amazon_freertos_aws_iot

2. middleware.tfm_s => middleware.tfm.s, middleware.tfm_ns => middleware.tfm.ns

3. middleware.mmcau_cm4_cm7 => middleware.mmcau.cm4_cm7, and middleware.mmcau_cm0p => middleware.mmcau.cm0p

4. middleware.tcpip.lwip => middleware.tcpip_lwip

5. middleware.usb.pd => middleware.usb_pd

6. middleware. template_application .<main-category> => middleware.<main-category>.template_application

For those whose components are affected, please kindly review and give your comments if necessary: PULL REQUEST.

More
0 0 54
lpcxpresso_supp
NXP Employee
NXP Employee

The Windows installer for SEGGER J-Link has changed behaviour for version after V6.44 i.e. after the version installed with V11.0.0 of the IDE. Previously each SEGGER installation was located in a versioned directory e.g. JLink_V644g, now each new installation will by default, write to C:\Program Files (x86)\SEGGER\JLink.

This change will only impact Windows users who manually install a later version of SEGGER J-Link for use within MCUXpresso IDE.

For reference, please also see the MCUXpresso IDE User Guide v11.0.0 section 5.8.1 'SEGGER software installation' which details the handling of SEGGER installations within the IDE.

There are two scenarios where problems may be seen and these are discussed below:

A user installs and wishes to use a newer version of SEGGER J-Link with MCUXpresso IDE

Previously, when a new workspace was created, the newest SEGGER installation would automatically be selected for use. Alternatively, Windows -> Preferences -> MCUXpresso IDE -> J-Link Options -> Restore Defaults could be used to automatically search for the latest installation and update the path to the required server.

Now to use the new install the user must manually browse to the new server location via the preference at:  Windows -> Preferences -> MCUXpresso IDE -> J-Link Option and select:

C:\Program Files (x86)\SEGGER\JLink\JLinkGDBServerCL.exe

pastedImage_1.png

This must be done for any existing workspace or when a new workspace is chosen, otherwise the most recent install using the old scheme will be selected for use.

All existing SEGGER J-Link installations have been uninstalled and a new installation has been performed

Previously, the IDE would have recognised that its SEGGER path information was incorrect and automatically searched for a latest install. However, this mechanism will not find an installation using the new default location. Therefore the user must manually browse to select the Server as described above.

Note: this issue will be addressed in the next update to MCUXpresso IDE later this year.

More
2 0 922
kuruibonny
Contributor III

I think this might be late since I was using Ubuntu 18.04 until recently when I upgraded to latest version 19.04

Tried to install Mcuxpresso IDE I encountered some dependency errors but managed to solved it. I had already replied to question about it but decided #to write main post about it.

This is what I did (installed the dependencies)

(my laptop is 64 bit)

sudo apt install libusb-1.0-0-dev

sudo apt install dfu-util

download  amd64 build of icu 60.1-1 

install the package (open terminal from the file location)

sudo dpkg -i libicu60_60.1-1ubuntu2_amd64.deb

download libjavascriptcoregtk-1.0-0_2.4.11-4

and install

sudo dpkg -i libjavascriptcoregtk-1.0-0_2.4.11-4_amd64.deb

download libwebkitgtk-1.0-0_2.4.11-4

and install

sudo dpkg -i  libwebkitgIDEIDEtk-1.0-0_2.4.11-4_amd64.deb

install IDE(open terminal from file location)

install.....

sudo chmod  +x ./mcuxpressoide-11.0.0_2516.x86_64.deb.bin

sudo ./mcuxpressoide-11.0.0_2516.x86_64.deb.bin

After this you should home and dry  :smileycool:

Screenshot from 2019-07-02 20-29-13.png

Everything worked well.

If you have any problem you can reply to this post.

More
0 0 750
CJarvis
NXP Employee
NXP Employee

In March of 2017, NXP released the debut version of the MCUXpresso SDK along with an IDE and set of Config Tools under the same MCUXpresso name.  Since that time we have seen an amazing response from developers downloading and using this suite of software and tools.  The number of MCUXpresso SDK downloads recently surpassed 100,000 unique downloads.

 

As the NXP and former Freescale microcontrollers were unified under one company, we knew we needed to provide a consistent and efficient software development platform – one that would allow you  the flexibility to develop on a wide range on NXP microcontrollers without the need to relearn a new software architecture or re-invent basic enablement functionality.

 

The MCUXpresso SDK takes its development roots from the previous Kinetis SDK.  It is, in fact, the same code base that was once the Kinetis SDK v2.0.  Since its initial release the SDK has grown to include additional NXP portfolios, firstly LPC and now also the i.MX RT crossover processors, to provide broad support to our MCU family.  The SDK has also evolved to incorporated a number of key middleware and software components from NXP software partners, market-leading open source providers, and NXP software development teams.  Yet, despite the growth of supported hardware and software, the APIs for the SDK have remained consistent and backwards-compatible – a key pillar of the SDK architecture philosophy. 

 

Closely paired with the success of the MCUXpresso SDK are the accompanying development tools – the MCUXpresso IDE and the MCUXpresso Config Tools.  These tools have been a key part of the success of the MCUXpresso software and tools suite.  The aim of these tools, along with the SDK, is to make you, the developer, as efficient as you can be.  We develop these tools to ensure you have full control over your development experience, to provide the right set of features, and to improve the efficiency of your development.  We want you to develop in a way that is most comfortable to you, while ensuring that common bottlenecks and pain-points are eliminated.

 

The 100K downloads of MCUXpresso SDK is a milestone that inspires us, as the providers of the SDK.  It is truly a reflection of our users’ ability to successfully develop with the provided software drivers, integrated middleware, and library of examples.

 

We are excited to continue the development of the MCUXpresso software suite for many more years to come.  For us the future holds many exciting possibilities, including more connectivity options, increased security focus, additional integrated middleware, and higher level software, both from NXP and from our ecosystem partners.

 

We want to sincerely thank you for your response to the MCUXpresso SDK and its rapid growth.  We would like to encourage your participation in a brief survey that will help us refine the features to best serve your needs. As a token of our appreciation, we will be giving away 100 free boards at random to survey participants.

Link to feedback survey

More
0 0 449
nxf39066
NXP Employee
NXP Employee

If you need to create you own SuperSet, following steps should help you.

First of all you need mcu-sdk-2.0 repository with current submodules. Then you need to create some release config e.g. release_config.yml on you disk. Release config format can be found here. Devices, boards or kits names referenced in release config are case sensitive!

The last step is running SDK generator, this can be done with command: ruby2.4 mcu-sdk-2.0/bin/generator/sdk_generator/src/sdk_generator.rb --config /path/to/release_config.yml

After generating is finished, result can be find in location specified in release config.

More
2 1 133
nxf47831
NXP Employee
NXP Employee

New features update:

  •  SDKGEN-982Support adding all folder content recursively

        Generator now supports adding all files and all files of its subfolders under some directory recursively with wildcard.

        How to use:

              source: middleware/lwip/contrib/apps/LwipMibCompiler/**
        The other supported wildcard usages:

source: middleware/lwip/contrib/apps/LwipMibCompiler/*.*
Means all files with extension under middleware/lwip/contrib/apps/LwipMibCompiler will be added.

source: middleware/lwip/contrib/apps/LwipMibCompiler/*
Means all files without extension under middleware/lwip/contrib/apps/LwipMibCompiler will be added.

source: middleware/lwip/contrib/apps/LwipMibCompiler/*.txt
Means all files with .txt extension under middleware/lwip/contrib/apps/LwipMibCompiler will be added.

         Related description can also be found in section wildcard in Yml data record guide.md

  •  SDKGEN-1053Enable "Update Target before Debugging" option for mdk

        The "Update Target Before Debugging" option downloads your program to target hardware only when your project          changes. This option does not run initialization script files until after your target program downloads.
        To enable or disable this option, a tag named update-before-debug should be set in yml.
        Besides, to make this setting effective, .uvoptx template file must be provided.
        Here is a yml example:

                   1.png

        And this setting will show as below:
1.png

  •  SDKGEN-1004Support to configure preprocessed linker scripts for mcux

        For mcux, generator support to configure user specific linker scripts which is generated by prebuild command.
        To use the feature, a tag named "preprocessed" need to be added for source file, which means the file generated            after being preprocessed.
        Here is an example:

1.png

       And this setting will show as below:

1.png

More
1 0 63
petrstruzka
NXP Employee
NXP Employee

We are pleased to announce that MCUXpresso Config Tools v6 are now available.

 

MCUXpresso Configuration Tools is a product with set of tools that help users of all levels with a Cortex-M-based MCU solution.

Features

  • Available as Web, Desktop application and MCUXpresso IDE plug-ins
  • MCUXpresso SDK v2 support
  • Multicore support
  • GUI localized for English and Simplified Chinese
  • Mostly Connected: On-Demand device data download
  • Integrates with any compiler and IDE
  • Currently there are the following tools available: 

    MCUXConfigTools_BD.jpg

Downloads

 

Overview of Changes - version 6

  • Only 64bit operating systems supported.
  • 'Update Code' now possible without an assigned toolchain project.
  • Removed dialog reporting changes between MEX and YAML in source code. The changes can be reviewed using Update Code DIFF.
  • Added "Help | Processor Information" menu option displays information about currently used processor.
  • Added Device Configuration tool, supports DCD (Device Configuration Data) commands configuration.
  • Added Trusted Execution Environment (TEE) tool.
  • Highlight changes implemented in generated code in Code preview view.
  • (MCUXpresso IDE only): Added Dark theme support
  • (MCUXpresso IDE only): Added SEMC (SDRAM) Validation tool, with RT1020 and RT1050 support.
  • Project Cloner in New Configuration Wizard: Added support for MCUxpresso SDK v2.6.x
  • Clocks tool: Run Mode and MCG Mode selection have been moved to Clocks Diagram and Clocks Table views.
  • Clocks tool: Added support for search by label in Clocks Diagram.
  • Peripherals tool: Added Support for 64bit (and more) values from user.
  • Peripherals tool: User can now migrate settings values from component already added to a configuration to another component, if mutually compatible (component redesigned etc.).
  • Peripherals tool: Documentation view history can now be navigated.
  • (MCUXpresso Config Tools only): Added Overview dialog on opening configuration for the first time 


Community

MCUXpresso Config Tools

 

 

MCUXpresso Config Tools Data

The Data for MCUXpresso Config Tools v6 was successfully deployed on the production system.

 

What’s new in data

The Data for MCUXpresso Config Tools v6 release provides following updates:

  1. Update of all supported processors data to support new features introduced in MCUXpresso Config Tools v6
  2. Update of Peripherals tool components to support SDK Release 10
  3. Various bug fixes and improvements

 

Supported processors, boards, kits and components

 

Processors:

KinetisKinetis2LPCi.MXOther
MK02FN128xxx10MKE18F256xxx16LPC51U68MCIMX7U3xxxxxGenericMQX
MK02FN64xxx10MKE18F512xxx16LPC54005MCIMX7U5xxxxxQN908XC
MK10DN512xxx10MKL02Z16xxx4LPC54016MIMX8MD6xxxHZ
MK10DX128xxx10MKL02Z32xxx4LPC54018MIMX8MD6xxxJZ
MK10DX256xxx10MKL02Z8xxx4LPC54101J256MIMX8MD7xxxHZ
MK11DN512Axxx5MKL03Z16xxx4LPC54101J512MIMX8MD7xxxJZ
MK11DN512xxx5MKL03Z32xxx4LPC54102J256MIMX8MM1xxxKZ
MK11DX128Axxx5MKL03Z8xxx4LPC54102J512MIMX8MM1xxxLZ
MK11DX128xxx5MKL13Z32xxx4LPC54113J128MIMX8MM2xxxKZ
MK11DX256Axxx5MKL13Z64xxx4LPC54113J256MIMX8MM2xxxLZ
MK11DX256xxx5MKL14Z32xxx4LPC54114J256MIMX8MM3xxxKZ
MK12DN512xxx5MKL14Z64xxx4LPC54605J256MIMX8MM3xxxLZ
MK12DX128xxx5MKL15Z128xxx4LPC54605J512MIMX8MM4xxxKZ
MK12DX256xxx5MKL15Z32xxx4LPC54606J256MIMX8MM4xxxLZ
MK20DN512xxx10MKL15Z64xxx4LPC54606J512MIMX8MM5xxxKZ
MK20DX128xxx10MKL16Z128xxx4LPC54607J256MIMX8MM5xxxLZ
MK20DX256xxx10MKL16Z256xxx4LPC54607J512MIMX8MM6xxxKZ
MK21DN512Axxx5MKL16Z32xxx4LPC54608J512MIMX8MM6xxxLZ
MK21DN512xxx5MKL16Z64xxx4LPC54616J256MIMX8MQ5xxxHZ
MK21DX128Axxx5MKL17Z128xxx4LPC54616J512MIMX8MQ5xxxJZ
MK21DX128xxx5MKL17Z256xxx4LPC54618J512MIMX8MQ6xxxHZ
MK21DX256Axxx5MKL17Z32xxx4LPC54628J512MIMX8MQ6xxxJZ
MK21DX256xxx5MKL17Z64xxx4LPC54S005MIMX8MQ7xxxHZ
MK21FN1M0Axxx12MKL24Z32xxx4LPC54S016MIMX8MQ7xxxJZ
MK21FN1M0xxx12MKL24Z64xxx4LPC54S018MIMXRT1015xxxxx
MK21FX512Axxx12MKL25Z128xxx4LPC55S66MIMXRT1021xxxxx
MK21FX512xxx12MKL25Z32xxx4LPC55S69MIMXRT1051xxxxB
MK22DN512xxx5MKL25Z64xxx4LPC802MIMXRT1052xxxxB
MK22DX128xxx5MKL26Z128xxx4LPC804MIMXRT1061xxxxA
MK22DX256xxx5MKL26Z256xxx4LPC810MIMXRT1062xxxxA
MK22FN128xxx10MKL26Z32xxx4LPC811MIMXRT1064xxxxA
MK22FN128xxx12MKL26Z64xxx4LPC812
MK22FN1M0Axxx12MKL27Z128xxx4LPC822
MK22FN1M0xxx12MKL27Z256xxx4LPC824
MK22FN256xxx12MKL27Z32xxx4LPC832
MK22FN512xxx12MKL27Z64xxx4LPC834
MK22FX512Axxx12MKL28Z512xxx7LPC844
MK22FX512xxx12MKL33Z128xxx4LPC845
MK24FN1M0xxx12MKL33Z256xxx4LPC8N04
MK24FN256xxx12MKL33Z32xxx4
MK26FN2M0xxx18MKL33Z64xxx4
MK27FN2M0Axxx15MKL34Z64xxx4
MK27FN2M0xxx15MKL36Z128xxx4
MK28FN2M0Axxx15MKL36Z256xxx4
MK28FN2M0xxx15MKL36Z64xxx4
MK30DN512xxx10MKL43Z128xxx4
MK30DX128xxx10MKL43Z256xxx4
MK30DX256xxx10MKL46Z128xxx4
MK40DN512xxx10MKL46Z256xxx4
MK40DX128xxx10MKL82Z128xxx7
MK40DX256xxx10MKM34Z256xxx7
MK50DN512xxx10MKS20FN128xxx12
MK50DX256xxx10MKS20FN256xxx12
MK51DN256xxx10MKS22FN128xxx12
MK51DN512xxx10MKS22FN256xxx12
MK51DX256xxx10MKV10Z128xxx7
MK52DN512xxx10MKV10Z16xxx7
MK53DN512xxx10MKV10Z32xxx7
MK53DX256xxx10MKV10Z64xxx7
MK60DN256xxx10MKV11Z128xxx7
MK60DN512xxx10MKV11Z64xxx7
MK60DX256xxx10MKV30F128xxx10
MK63FN1M0xxx12MKV30F64xxx10
MK64FN1M0xxx12MKV31F128xxx10
MK64FX512xxx12MKV31F256xxx12
MK65FN2M0xxx18MKV31F512xxx12
MK65FX1M0xxx18MKV42F128xxx16
MK66FN2M0xxx18MKV42F256xxx16
MK66FX1M0xxx18MKV42F64xxx16
MK80FN256xxx15MKV44F128xxx16
MK82FN256xxx15MKV44F256xxx16
MKE02Z16xxx4MKV44F64xxx16
MKE02Z32xxx4MKV46F128xxx16
MKE02Z64xxx4MKV46F256xxx16
MKE04Z128xxx4MKV56F1M0xxx24
MKE04Z64xxx4MKV56F512xxx24
MKE04Z8xxx4MKV58F1M0xxx24
MKE06Z128xxx4MKV58F512xxx24
MKE06Z64xxx4MKW21D256xxx5
MKE14F256xxx16MKW21D512xxx5
MKE14F512xxx16MKW21Z256xxx4
MKE14Z128xxx7MKW21Z512xxx4
MKE14Z256xxx7MKW22D512xxx5
MKE14Z32xxx4MKW24D512xxx5
MKE14Z64xxx4MKW31Z256xxx4
MKE15Z128xxx7MKW31Z512xxx4
MKE15Z256xxx7MKW35A512xxx4
MKE15Z32xxx4MKW35Z512xxx4
MKE15Z64xxx4MKW36A512xxx4
MKE16F256xxx16MKW36Z512xxx4
MKE16F512xxx16MKW41Z256xxx4
MKE16Z32xxx4MKW41Z512xxx4
MKE16Z64xxx4

 

Boards
FRDM-K22FHVP-KV11Z75MMIMX8QM-MEK-REV-B
FRDM-K28FHVP-KV31F120MMIMX8QX-MEK-REV-B
FRDM-K28FAHVP-KV46F150MMIMXRT1015-EVK
FRDM-K64FHVP-KV58FMIMXRT1020-EVK
FRDM-K66FIMXRT1050-EVKBMIMXRT1060-EVK
FRDM-K82FLPC54018-IoT-ModuleMIMXRT1064-EVK
FRDM-KE02Z40MLPC54S018-IoT-ModuleQN908XCDK
FRDM-KE04ZLPC845BREAKOUTTWR-K21D50M
FRDM-KE06ZLPC8N04DevBoardTWR-K21F120M
FRDM-KE15ZLPCXpresso51U68TWR-K22F120M
FRDM-KE16ZLPCXpresso54018TWR-K24F120M
FRDM-KL02ZLPCXpresso54102TWR-K60D100M
FRDM-KL03ZLPCXpresso54114TWR-K64F120M
FRDM-KL25ZLPCXpresso54608TWR-K65F180M
FRDM-KL26ZLPCXpresso54618TWR-K80F150M
FRDM-KL27ZLPCXpresso54628TWR-KE18F
FRDM-KL28ZLPCXpresso54S018TWR-KL28Z72M
FRDM-KL43ZLPCXpresso55S69TWR-KL43Z48M
FRDM-KL46ZLPCXpresso802TWR-KL82Z72M
FRDM-KL82ZLPCXpresso804TWR-KM34Z75M
FRDM-KV10ZLPCXpresso812TWR-KV10Z32
FRDM-KV11ZLPCXpresso824TWR-KV11Z75M
FRDM-KV31FLPCXpresso845TWR-KV31F120M
FRDM-KW24MAPS-KS22TWR-KV46F150M
FRDM-KW36MCIMX6ULL-EVK-REV-A-6ULZTWR-KV58F220M
FRDM-KW41ZMCIMX7ULP-EVK-REV-BTWR-KW24D512
HEXIWEARMIMX8M-EVK-REV-BUSB-KW24D512
HVP-KE18FMIMX8MM-EVK-REV-CUSB-KW41Z

Components
adc_12b1mspsflexio_i2spit
adc_etcflexio_spiqtmr
adc12flexio_uartrit
adc16ftmrnga
aoigintrtc
cmpgpiortwdog
cmtgptsai
copi2csctimer
crcigpiosemc
csikppsha
ctimerllwusnvs_hp
daclpadcsnvs_lp
dcplpc_adcspdif
dmalpc_crcspi
dmiclpc_dmasystem
dspilpc_gpiotempmon
edmalpc_i2ctpm
eepromlpc_lcdctrng
elcdiflpc_rtcuart
enclpi2cusb
ewmlpsciutick
flexbuslpspivref
flexcanlptmrvspi
flexcomm_i2clpuartvusart
flexcomm_i2smcanwdog
flexcomm_spimrtwdog01
flexcomm_usartpdbwwdt
flexio_i2cpint 

More
1 0 508
nxf46154
NXP Employee
NXP Employee

New versions of MCUXpresso SDK, IDE, and Configuration Tools are now available. In addition to new product support, you will find these updates and enhanced features in the new releases:

MCUXpresso SDK v2.6.0

  • Updated peripheral drivers to v2.6.0 SDK code base for all included boards and devices
  • Updated to latest GNU Arm Embedded Toolchain to GCC8 (2018-q4-major)
  • Expanded device and board support for Cypress Wi-Fi, nghttp2 (HTTP/2)
  • Inclusion of MQX v5.x Application Builder
  • Updated included middleware –
    • Amazon FreeRTOS Kernel v1.4.7+
    • Arm Mbed TLS v2.13.1
    • IwIP v2.1.2
    • Microsoft Azure Cloud Connectivity SDK v1.2.13
    • TensorFlow Lite and ARM CMSIS-NN (eIQ™ ML Software)
    • Segger emWin 5.48r
  • Updates to NXP developed middleware - USB Stack

MCUXpresso IDE v11.0.0

  • Improved support for Cortex-M33 secure / non-secure projects
  • Updated underlying Eclipse Framework to 4.10.0v201812 / CDT 9.6.0
  • New “Heap and Stack Usage” view provides ability to track heap and stack usage during debug of baremetal projects
  • Implemented “editor awareness” for linker map files, linker scripts and linker script templates, providing syntax coloring as well as navigation of file contents
  • New “Image Info” view gives a breakdown analysis of a project build, including overall memory usage, content of memory regions and static call graph (including stack usage information)
  • FreeRTOS Task Aware Debugging functionality now directly implemented within the IDE

   Learn more by reading this IDE Blog Article.

MCUXpresso Config Tools v6.0

  • Addition of Trusted Execution Environment (TEE) tool supporting Cortex-M33 TrustZone
  • Addition of Device Configuration tool, supports Device Configuration Data (DCD) commands configuration
  • Code changes are graphically tracked in real-time within the code preview window
  • Project Cloner in New Configuration Wizard: Added support for MCUXpresso SDK v2.6
  • Peripherals Tool: Documentation view history can now be navigated
  • ‘Update Code’ now possible without an assigned toolchain project

More
0 2 1,282
lpcxpresso_supp
NXP Employee
NXP Employee

We are pleased to announce that MCUXpresso IDE v11.0.0 (build 2516) is now available.

 

This is a major new version of the IDE, and contains many new features and enhancements over the previous MCUXpresso IDE v10.3.1 and earlier releases. The attached presentation, recommended viewing for all users (new or experienced), provides an overview of many of the major changes, as well as things to be aware of when upgrading from an earlier release:

To download the installers for all platforms, please login to our download site via: 

 

Additional information can be found in the updated User Guide and other documentation, which can be accessed from the built in help system available via IDE's Help menu and in PDF form from within the installation directory or downloaded from:

Summary of Changes - version 11.0.0 - June 2019

  • Upgraded underlying Eclipse Framework to 4.10.0v201812 / CDT 9.6.0

  • Upgraded supplied GNU ARM Embedded Toolchain to GCC8 (2018q4-major)

  • Windows version of product now only runs on Win64 (IDE v10.3.1 and earlier ran on Win32 & Win64 platforms). Note that this change has been driven by the fact that Eclipse framework is now 64-bit only. [ Ubuntu and MacOS versions of product already only ran on 64-bit platforms.]

  • Updated version of "busybox", used on Windows to provide a Unix-like layer for GCC tools to run under, to "GNU MCU Eclipse Windows Build Tools" v2.12 (64bit)

  • Added support for MCUXpresso SDK v2.6

  • Upgraded integrated version of MCUXpresso Config Tools to v6

  • Revamped Develop Perspective with some new and additional views shown by default. Also decluttered by removal of some less commonly used views. Most of the removed views can be added back via the new 'Analysis' menu

  • New "Image Info" View improves and extends on the functionality previously provided by the “Symbols Browser” view, giving the following analysis of a project build:

    • Overall memory usage
    • Content of memory regions

    • Static call graph, including stack usage information

  • New "Heap and Stack Usage" view provides ability to track heap and stack usage during debug of baremetal projects

  • Implemented "editor awareness" for linker map files, linker scripts and linker script templates, providing syntax coloring as well as navigation of file contents via the Outline view

  • Improved display of components in New Project Wizard and Managed Components dialog. Display of different component types is now tabbed, with an additional summary of the components selected

  • The New Project Wizard will now open the main source file in the Editor view after project creation

  • When importing a single SDK example, the wizard will now attempt to open the main source file in the Editor view after project creation. This functionality can also be enabled when importing multiple examples through a workspace preference

  • Improved support for Cortex-M33 Secure / Non-Secure projects. Improvements include :

    • Secure and Non-Secure projects more closely linked from build / project configuration point of view
    • Debugging Secure project will automatically build Non-Secure project and program it into flash, before launching Secure project debug session
    • Symbols for Non-Secure project automatically loaded into debug session to allow user to step from Secure world into Non-Secure (with source code visibility)

Note that these improvements also require SDK v2.6 for the MCU being targeted

  • Improved Launch Configurations for LinkServer. Main user impact is that this allows a more friendly way of editing launch configuration settings. Some launch configuration functionality now also provided in “standard” Eclipse/CDT tabs rather than in LinkServer specific manner. LinkServer Launch configurations from older IDE versions will be automatically converted to the new format
  • New launch configuration tab (for all debug probe types) to allow loading of debug symbols from additional images (in addition to the ones from the main image being debugged)

  • Improvements to performance of single stepping for LinkServer debug connections

  • Implemented support for SWO Trace on Cortex-M33 based MCUs

  • "Live Variables" functionality inside the Global Variables view now supported using SEGGER J-Link and P&E Micro debug probes (in addition to LinkServer debug connections)

  • FreeRTOS TAD functionality now directly implemented within the IDE, rather than being a separate plugin

    • Improved look and feel to better match rest of IDE
    • Timeout period for FreeRTOS TAD increased, to help prevent reading of data failing on slow debug connections. IDE preference also added to allow timeout period to be changed
    • Fixed issue with Runtime not showing when compiler optimizations turned on
    • Fixed issue with Timer List with FreeRTOS 10.2 release
  • Fixed issue with IDE losing C library include paths. This did not prevent projects from building but meant that indexer-related functionality reliant on these paths would not work correctly (for instance trying to open a C library include file from the editor). This issue could also cause Newlib projects to sometimes appear to be using Redlib include files.

Note: Existing projects can be "fixed" using Tools->Fixup Parsers option on the Project Properties view's context sensitive menu

  • New projects now compile with the --fstack-usage option by default (needed for callgraph functionality in the "Image Info" view)

  • Quickstart Panel - Quick Settings menu can now indicate current value for Debug Console, Floating Point and Library settings for current build configuration of selected project

  • New projects now link with --cref option by default (increasing level of information provided in linker map files)

  • Improved performance of installing/loading SDKs, largely by re-architecting the way that SVD peripheral definition files from the SDK are processed

  • Installed SDKs view updated so that detailed information on contents of selected SDK is hidden by default, but with new Hide/Show button to display when required

  • SDK default folder mechanism updated to install SDKs into an "02" subdirectory by default. This means that SDKs installed by IDE v11.0.0 will not be visible to older versions of the IDE

  • Improved ability to select debug console type (semihosting vs UART vs any preference specified by example definition) when importing SDK examples. This is particularly useful when multiple projects are selected for importing at the same time

  • Tweaked code generated for main() by New Project Wizard for SDK projects such that the infinite loop at the end of the function can be successfully single stepped at the source level

  • Fixed issue with default compiler options set by SDK New Project wizard when creating C++ projects. Such projects now also created with "cpp_config.cpp" file containing minimal implementations of the new/delete operators and the verbose terminate handler for exceptions suitable for embedded use. This brings SDK C++ projects inline with C++ projects created with the New Project Wizard for preinstalled parts

  • Some performance improvements when making a board selection in New Project Wizard and Import SDK example(s) wizard

  • Fixed issue with IDE incorrectly warning about overlapping memory regions when importing some SDK examples, when the memory regions are actually just adjacent

  • Fixed issue with IDE being unable to show the context sensitive menu in the Project Properties view for makefile projects in some circumstances

  • Fixed issue with handling of part support information for MCUs which are supported by internal part support, but for which an SDK exists and has been installed into the IDE

  • Various updates and clean up of icons. In particular, new icon for "LinkServer" now used in various places instead of general MCUXpresso IDE one

  • Fixed issue with various tables displayed by IDE failing to display "..." to indicate truncation, when amount of text to
    display exceeds space currently available in column

  • Various fixes to SDK Editor / Creator

  • Fixed issue with managed linker script mechanism when building master projects linking in slave projects containing data with larger than normal alignment

  • Fixed issue with managed linker script mechanism which was causing some sections (such as .bss) to be erroneously assigned unnecessary load addresses

  • Fixed issue with section name wildcards used in managed linker script mechanism , which could prevent __BSS/__DATA macros from working as expected in some circumstances

  • On Managed Linker Script page of Project Properties, IDE now autoconverts any "\" directory separators entered into "Script path" to Unix style "/" expected by the linker

  • Added implementations of inverse hypobolic functions to Redlib (acosh/acoshf, asinh/asinhf and atanh/atanhf)

  • Improved Redlib definition of HUGE_VAL (and other related defines) in math.h. Also updated way float_t defined

  • arm_acle.h header file now on the search path for projects linking against Redlib (providing various ARM C language extension intrinsics). Previously this was only available for Newlib linked projects

  • IDE now prioritizes use of IDE supplied LinkServer flash drivers over any contained in installed SDKs (rather than the other way around). This behaviour can be reverted if necessary using an IDE workspace preference

  • Fixed various issues with creation of multiple launch configurations for a particular build configuration in a project

  • Fixed issue with creation of launch configurations if previous attempt was cancelled

  • "Attach-only" debug sessions no longer trigger a build before starting the debug connection (as long as image has already built)

  • Improved size and layout of Launch Configuration Selection Dialog (displayed when project contains launch configurations for multiple probe types)

  • Fixed issue with display of cycle counters in Registers View

  • Fixed issue with GUI Flash Tool via LinkServer with LPC51U68 and KL28 MCUs

  • Fixed issue with debug restart with QN9080 via LinkServer

  • Fixed issue with LinkServer FreeRTOS thread awareness with Cortex-M33 based MCUs (and CM33 aware versions of FreeRTOS)

  • Implemented preliminary support for carrying out SWO Trace using CMSIS-DAP probes that implement "CMSIS-SWO commands" (as opposed to the bespoke SWO support implemented by NXP's LPC-Link2 CMSIS-DAP firmware). This has currently only received limited tested using ULINKplus probes with CMSIS-DAP v1.x.x firmware.
    Note : MCUXpresso IDE does not support the use of WinUSB endpoints as provided by CMSIS-DAP v2.x.x firmware

  • New IDE workspace preference to allow debug launch configurations for SEGGER J-Link probes to be created with FreeRTOS thread awareness already enabled (off by default)

  • Upgraded to a later version of the P&E Micro plugin (v4.1.3)

  • Upgraded to a later version of the SEGGER software (v6.44i)

More
5 0 2,323
lpcxpresso_supp
NXP Employee
NXP Employee

This article discusses the use of SDK Trustzone example (Hello World) for the LPC55S69 MCU within MCUXpresso IDE.

The following are required to follow this blog post:

  1. MCUXpresso IDE Version 11.0.x
  2. LPCXpresso 55S69 EVK development board
  3. LPCXpresso 55S69 EVK version 2.6 SDK

Older version of MCUXpresso IDE and/or SDK will have different and inferior performance when used with Trustzone examples and are therefore not recommended.

A conceptual understanding of Arm Trustzone will also help understand the features shown in this article. Please also see the community article on Trustzone on the LPC55S6x.

Finally, a familiarity with the use of MCUXpresso IDE and SDK installation is assumed.


Overview

In essence, MCUs incorporating Arm Trustzone technology are able to provide system wide isolation between Secure (S) and Non Secure (NS) worlds. Within the Non Secure environment, access to certain operations, peripherals etc. are controlled from the Secure world. This behaviour is delivered by a single CPU with execution time being shared between these two worlds.

Developing for systems using Trustzone features presents a number of challenges in particular providing Secure World services for Non Secure application developers, debugging of both Secure and Non Secure code (projects) and delivering a usage model within the IDE that can be easily used and understood.

The examples supplied with the SDK contain both Secure and Non Secure linked projects and are configured within the IDE to demonstrate development from the point of view of both Secure and Non Secure development.

However, a more typical 'real world' situation may be for developers working on Non Secure project development and treating the Secure world as a 'Black Box' (or Bootloader) that provides a number of explicit secure operations. This use case will be discussed in a subsequent article.

Note: the LPC55S69 is a multicore MCU as in it contains two physical CPUs - numbered 0 and 1. In these examples all code is targeted at CPU 0, and the use of CPU 1 is outside the scope of this article.

Importing (Linked) Example Project

First, ensure you have installed version SDK version 2.6 for the LPCXpresso55S69 EVK board into MCUXpresso IDE. Once installed it will be visible within the Installed SDKs view and its version shown as below:

InstalledSDKs.png

From the Quickstart view, launch the 'Import SDK example(s)' Wizard, then select the LPCXpresso55S69 board and click <next>

ImportWizard1.png

Expand the trustzone examples and click either of the Hello World projects. Since these projects are linked, both the Secure (_s) and Non Secure (_ns) examples will be selected. Click <finish> to start the import.

Note: Linked projects are coloured yellow within the wizard. This project linkage is set because the Non Secure project relies on Secure project for access to allowed Secure operations (calls). Where as the Secure project references the Non Secure project for debug operations (flash programming).

importWizard2.png

Once imported, you will see the Project Explorer view contains the projects as expected.

ProjectExplorer.png

Project Settings Exploration

Memory Configuration

The memory allocation of each project can be seen in the Project Explorer view by opening the Project Settings Node and then the Memory Node. From here you can see the input memory ranges set for the managed linker script mechanism (for each project):

Apart from the veneer table, these projects can be considered as separate entities and must have non overlapping memory regions.

Secure: A feature of the address space security is that the setting of address bit 28 signifies a secure location (odd numbers in the most significant nibble).

MemoryUsageSecure.png

The flash region PROGRAM_FLASH at 0x10000000 specifies the secure LinkServer flash driver LPC55xx_S.cfx.

The SG_veneer_table block at 0x1000FE00 is used for code to provide a gateway to (certain) secure functions and inherits the same flash driver. Note: the name SG_veneer_table is a 'magic' string recognised by the IDE as an option for veneer placement (see later)

Non Secure: For these addresses, bit 28 is not set signifying non secure locations (even numbers in the most significant nibble)

MemoryUsageNonSecure.png

The flash region PROGRAM_FLASH at 0x10000 specifies the non secure LinkServer flash driver LPC55xx.cfx.

Project Properties

Trustzone capable MCUs have a number of dedicated Project Properties primarily addressing linkage and debug.

A project set to be Secure will have further options available, including a setting for the location of the Secure veneer table, and check box to cause the generation of the Import Library. An additional Secure Gateway Import Library can also be specified.

Secure: Below is shown the MCU Linker -> Trustzone properties dialogue.

Note the Secure Gateway Placement (Secure veneers to shared secure operations) is set to use the 'magic' flash memory region (mentioned in the previous section) for placement.

ProjectPropertiesSecure.png

Also observe the MCU Debugger -> Trustzone option. If used (as in this example), this takes the name of the associated non secure project which will then automatically be (built and) programmed when the Secure project debug operation is performed. In addition the symbols for this associated project will be added to allow source level debugging of both projects.

When selected, it will look like below:

ProjectPropertiesSecureDebug.png

Non Secure: Below is shown the MCU Linker -> Trustzone properties dialogue: Note the Secure Gateway Import Library references the Secure projects generated library location.

ProjectPropertiesNonSecure.png

Building the Example Projects

Building the examples is as simple selecting the project and clicking Build in the Quickstart panel. Be aware that building the Non Secure project will force the Secure project to build first to provide linkage to the Secure Gateway library. 

Assuming neither project has been built before, building the Non Secure Hello World project will result in the generation of both Secure and Non Secure .axf(s) and generate the output as below:

Memory region         Used Size  Region Size  %age Used
   PROGRAM_FLASH:       16872 B      65024 B     25.95%
 SG_veneer_table:          32 B        512 B      6.25%
            Ram0:        4388 B        32 KB     13.39%
Finished building target: lpcxpresso55s69_hello_world_s.axf

Memory region         Used Size  Region Size  %age Used
   PROGRAM_FLASH:        7372 B       456 KB      1.58%
            Ram0:        8448 B       172 KB      4.80%            
Finished building target: lpcxpresso55s69_hello_world_ns.axf

Note: building the Secure project does not force a build of the Non Secure since there are no build dependencies in this direction.


Debugging the Example Projects

As already mentioned, these examples demonstrate development from the point of view of both Secure and Non Secure projects. Hence the initial flow is intended to show startup within a the Secure world and then the migration to the Non Secure where a secure operation will be performed.

Therefore, begin by selecting the Secure Project in the Project Explorer view and clicking Debug in the Quickstart Panel. Since we have the option set to enable the pre-programming of the Non Secure binary there will be two stages to this debug operation.

Note: If this is the first time this project has been debugged, you will be presented with the option to select a debug probe. Then, since this is a MultiCore MCU, you must also select the core to use (be sure that this is set to Core 0).

First, the Non Secure binary will be programmed into flash memory - this automatic step will proceed like a normal binary programming operation and generate a log associated with Non Secure project, a fragment shown below:

Flash variant 'LPC55xx (608KB)' detected (608KB = 19*32K at 0x0)
Writing 7372 bytes to address 0x00010000 in Flash
1 of 1 (  0) Writing pages 2-2 at 0x00010000 with 7372 bytes
(  0) at 00010000: 0 bytes - 0/7372
(100) at 00010000: 8192 bytes - 8192/7372
Erased/Wrote sector  2-2 with 7372 bytes in 122msec
Closing flash driver LPC55xx.cfx
(100) Finished writing Flash successfully.
Flash Write Done
Loaded 0x1CCC bytes in 417ms (about 17kB/s)

Secondly, the Secure project will then be programmed in the normal way, this will generate a standard debug log associated with the Secure project, a fragment is shown below: 

Note: again if this is the first time, the debug probe and MCU core must be selected. For subsequent debug operations, these options will be remembered.

Flash variant 'LPC55xx (608KB) (Secure)' detected (608KB = 19*32K at 0x10000000)
Writing 32 bytes to address 0x1000FE00 in Flash
1000A000 done  25% (8192 out of 32288)
1000C000 done  50% (16384 out of 32288)
1000E000 done  76% (24576 out of 32288)
10010000 done 100% (32768 out of 32288)
Erased/Wrote sector  1-1 with 32 bytes in 709msec
Closing flash driver LPC55xx_S.cfx
Flash Write Done
Flash Program Summary: 16904 bytes in 1.00 seconds (16.59 KB/sec)
Starting execution using system reset and halt target with a stall address
Retask read watchpoint 1 at 0x50000040 for boot ROM stall
Restore internally retasked watch #1 no type address 0x0 (unused)
Note - system reset leaves VTOR at 0x13000000 (not 0x10000000 which a booted image might assume)
Stopped (Was Reset)  [Reset from Unknown]
Stopped: Breakpoint #2

Once programming is complete, you should arrive at the default Breakpoint on main within the Secure world as below:

SecureDebug.png

Click Run and this project will first perform some board/MCU initialisation, print a greeting (as below), then setup the environment for the Non Secure project to execute.

Note: this step is necessary because the non secure project is not run from reset, so cannot rely on the default hardware behaviour for initialisation of Stack, Interrupt handlers etc. This is essentially the same operation that a bootloader would perform.

SecureConsole.png

Next, a jump will be made to the Non Secure world.

Note: since the non secure project is not debugged directly, it will have no default breakpoint on its main function. To explore the execution, it is recommended to open the Non Secure projects Source -> hello_world_ns.c and manually set a breakpoint as shown below:

NonSecureDebug.png

Reminder, since we have the option set to enable the pre-programming of the Non Secure binary this also enabled the loading of Non Secure symbols (which can be observed in the Secure projects debug launch configuration (shown below). It is the loading of these symbols which enables source level debug of the Non Secure project while we are actually debugging the Secure project.

 

SecureLaunchSymbols.png

Finally, click Run to run this example to termination and observe the output.

SecureConsole1.png

Note: the significance of this example is that the String Compare operation was supplied to the Non Secure project by the Secure project and accessed securely via the Non Secure Entry (NSE).

This step concludes the expected use of this example.

Another mode of operation is to perform a Debug operation directly on the Non Secure project. This is a perfectly valid operation provided the Secure project has first been programmed into flash. If so the Non Secure project will behave like a standard project and arrive the breakpoint on main ()... However, if the Secure Project has not been pre-loaded, the debug operation will fail.

If Debug operations fail...

It is possible to program an image into flash that when run prevents further debug operations succeeding. Should this occur, please follow the steps below:

  • Click on the "Clean Up debug" button on the main IDE toolbar - this kills any stale low level debug operations
  • Disconnect the USB cable from your board to remove power
  • Place a jumper on the ISP header (J10) - this will prevent the board booting the image in flash by forcing the MCU to enter ISP mode
  • Now reconnect the USB cable to Debug Link connector (P6)
  • Now select a project in the Project Explorer view, and then click on the GUI Flash Tool on the main IDE toolbar - and use this to mass erase the flash. [More details on using the GUI Flash Tools can be found inside the supplied IDE v11.0 User Guide]

If this succeeds, then:

  • Disconnect the USB cable from your board
  • Remove the jumper on the ISP header (J10)
  • Now reconnect the USB cable to Debug Link connector (P6)

 

Now try starting a debug session for your project again using the Quickstart Panel's Debug button. If this problem occurs as part of application development, try programming a known working example to ensure there are no underlying problems.

More
0 0 1,607
lpcxpresso_supp
NXP Employee
NXP Employee

When using the QN9080 with SDK v2.2 2019-01-29, or earlier, there is an issue in the SDK internal data which can lead to MCUXpresso IDE v11.0.0 failing to set consistent floating point options when importing multiple examples. This issue can lead to linker errors when example projects are built relating to "VFP register arguments": 

pastedImage_1.png

This issue will be resolved in a future release of the QN9080 SDK. But with the current QN9080 SDK, then to avoid this issue, you can:

  • Import example projects individually, or
  • Before importing the projects, go to:
    • Window -> Preferences -> MCUXpresso IDE -> SDK Handling -> Misc

and untick the "Enable SDK options check" option:

pastedImage_1.png

Notes :  

  • Turning this option off is not generally recommended.
  • On macOS, the Preferences dialog is available from the "MCUXpresso IDE" menu entry rather than "Window".

Alternatively to fix projects that you have already imported that are generating linker errors relating to "VFP register arguments", then

  • Select the project(s) in the Project Explorer View
  • Then select Quickstart Panel -> Quick Settings -> Set Floating Point type -> FPv4-SP (Hard ABI)

pastedImage_2.png

More
1 0 207
BlackNight
NXP Employee
NXP Employee

With the cost of an single pin, many ARM Cortex-M boards including the NXP i.MX RT1064 can produde SWO data: think about a pin able to stream data out of the chip in realtime. For example interrupt activity which otherwise might be hard to capture:

SWO Interrupt Trace

SWO Interrupt Trace

Outline

This article describes how to enable and use the SWO (Single Wire Output) of the ARM Cortex-M7 present in the NXP i.MX RT1064 device.

i.MX RT1064-EVK Board

i.MX RT1064-EVK Board

While this is a very valuable feature, not every development tool supports capturing SWO data. And not every board has the SWO pin routed to the debug header which is a prerequisite to get the data.

JTAG TDO Pin

JTAG TDO Pin (Source: NXP i.MX RT1064 Schematics)

The pin is connected to the AD_B0_10 pin of the i.MX RT1064 device.

Software and tools used:

  • Eclipse: NXP MCUXpresso IDE 10.3.1
  • SDK: NXP MCUXpresso SDK 2.4.1 for i.MX RT1064-EVK

Check SDK Manifest File

To use SWO, it has to be enabled in the SDK manifest file. So let’s check this first.

In the IDE, open the location where the SDK zip files are installed:

Open Location

Open Location

 Best to close the IDE now, as we might need to change the content on disk.

Open the archive:

Open SDK zip file

Open SDK zip file

Locate the manifest XML file:

SDK Manifest File

SDK Manifest File

To check/edit the manifext XML file I can use an external editor or the IDE:

Using the IDE

I can use the IDE to edit the XML (this is useful if I want to change the SDK sources).

To check/edit the file in the IDE workspace preferences, disable the ‘Selected files from SDK View open in read-only mode:

Selected Files Open Option

Selected Files Open Option

Open with the context menu the XML description:

Show XML Description

Show XML Description

In the XML editor, click on the ‘Source’ tab. Search for internal.has_swo:

XML Source tab

XML Source tab

Verify that it has a ‘true’ value. If not, change it to true and save the file.

Using external editor

Below are the steps using an external editor.

Open the file with a text editor and search for ‘internal_has_swo’ and check if it has a ‘true’ value. If not: change the value to true:

internal_has_swo

internal_has_swo

If that change is needed: update the zip file with the new content/file.

 if that setting is set to false, the IDE does not offer the SWO feature and buttons/views will be grayed out/disabled.

Now I can start the IDE again. If I had to modify the XML file, best to recreate the part information in the IDE:

Recreate Part Information

Recreate Part Information

Muxing SWO Pin

Locate the file ‘pin_mux.c’ and add the following lines to BOARD_InitPins():

1
2
3
4
IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_B0_10_ARM_CM7_TRACE_SWO,     /* GPIO_AD_B0_10 is configured as ARM_TRACE_SWO */
      0U);                                        /* Software Input On Field: Input Path is determined by functionality */
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_10_ARM_CM7_TRACE_SWO,0x00F9u);
BOARD_InitPins

BOARD_InitPins

Open ‘clock_config.c’ and search for the following inside the function BOARD_BootClockRUN():

1
2
3
4
/* Set TRACE_PODF. */
CLOCK_SetDiv(kCLOCK_TraceDiv, 2);
/* Set Trace clock source. */
CLOCK_SetMux(kCLOCK_TraceMux, 2);

and change it to

1
2
3
4
/* Set TRACE_PODF. */
CLOCK_SetDiv(kCLOCK_TraceDiv, 0);
/* Set Trace clock source. */
CLOCK_SetMux(kCLOCK_TraceMux, 3);
clock div and mux

clock div and mux

Finally, add the following to the end of the function BOARD_BootClockRUN(), or add it to main() after the clocks have been initialized.

1
2
3
4
#if 1 /* enable SWO */
CLOCK_EnableClock(kCLOCK_Trace);
#endif

Debugging

The onboard DAPLink debug probe does *not* support SWO, so I’m using an external debug probe (LPC-Link2). Alternatively, the EVK board can be loaded with a LPC-Link2 firmware.

Debugging i.MX RT1064 Board with LPCLink2

Debugging i.MX RT1064 Board with LPC-Link2

In the SWO Trace Config view, the ‘change’ button shall now be enabled:

SWO Trace Config

SWO Trace Config

Use the ‘Detect’ button to detect the SWO speed (note that for the application shall have already passed the clock configuration code):

Detect SWO speed

Detect SWO speed

SWO Views

After this, I can open the various SWO views:

Open SWO views

Open SWO views

The views have a green ‘start’ button to start data collection from SWO:

start button

start button

SWO Counters view:

SWO counters

SWO counters

SWO statistical profiling:

SWO Profile View

SWO Profile View

SWO Data Trace:

SWO Data Trace

SWO Data Trace

Text output with SWO:

ITM Text Output

ITM Text Output

SWO Interrupt Trace:

SWO Interrupt Trace

SWO Interrupt Trace

 The IDE reveference manual/online help describes the views in more detail.

Summary

SWO on the i.MX RT1064 board is a fine thing: it requires some setup and a SWO capable debug probe. But with that extra ARM SWO pin I get extended debug views and data which are very valuable.

I have put an example project on GitHub (see Links section).

Happy SWOing 

Links

- - -

Originally published on June 3, 2019 by Erich Styger

More
2 0 1,040
nxf47831
NXP Employee
NXP Employee

New features update:

  •  SDKGEN-967Support to automatically hide doc files in Xtensa workspace

         Previously for Xtensa toolchain, developers need to use "hidden: true" in yml to hide documentation files in the                 workspace.
         Now generator can filter files by type attribute to bypass doc type file for Xtensa, which means files with .txt .rtf                 .html .htm .readme .pdf .Doxyfile .xls .css extensions will not be added into the Xtensa workspace.

  •  SDKGEN-927Regard "hidden: true" in yml as "exclude: true" in <example>.xml as a workaround

         The Manifest and Mcuxpresso IDE don't support source level "hidden: true" now. SDK generator uses "exclude:               true" to represent "hidden: true" as a workaround.
         In manifest 3.6, the source level "hidden: true" will be formally supported, see KEX-5920.

More
1 0 68
BlackNight
NXP Employee
NXP Employee

In my previous articles I have used the command line on Linux to build and debug NXP MCUXpresso SDK applications. In this article I'm running code on NXP i.MX RT1064 in RAM or FLASH.

i.MXRT1064 board with LPC845-BRK as debug probe

i.MXRT1064 board with LPC845-BRK as debug probe

Outline

In this tutorial I'm going to run code in RAM and FLASH (XiP, eXecute in Place) on the i.MX RT1064. For getting started with the MCUXpresso SDK on Linux I recommend to have a read at my previous articles:

I'm using the command line on purpose in this article. The MCUXpresso IDE is available on Linux too and is usually a better and easier starting point for development.

I'm using Linux in a Oracle VM (Ubuntu) with the NXP MCUXpresso SDK for the i.MX RT1064 EVK board (see First Steps with the NXP i.MX RT1064-EVK Board).

NXP i.MX RT1064 Board

The board has the different memory areas available:

  1. internal ITC SRAM, base address: 0x0000'0000, size 0x2'0000 (128 KByte)
  2. internal DTC SRAM, base address: 0x2000'0000, size 0x2'0000 (128 KByte)
  3. internal OC SRAM, base address: 0x2020'0000, size 0xC'0000 (768 KByte)
  4. internal SPI FLASH: base address: 0x7000’0000, size: 0x40’0000 (4 MByte)
  5. external SDRAM,base address 0x8000'0000, size 0x200'0000 (32 MByte)

There is an extra 64 MByte Hyperflash available on the board, but this requires adding/removing resistors on the backside of the board.

i.MX RT1064-EVK Board

i.MX RT1064-EVK Board


Running from FLASH (XiP)

The i.MX RT does not have FLASH memory integrated with the MCU as it is the case for most microcontrollers. Instead it uses serial (SPI) FLASH memory which usually is an external memory chip. In the case of the i.MX RT1064 there are 4 MByte FLASH wired to the device internally. Technically it is the same as having it externally, except that the needed board space is smaller. Because the CPU does not know about the FLASH, the FLASH need a special header programmed at the start of the memory which is read by the CPU. For this the following defines need to be turned on:

XIP_EXTERNAL_FLASH=1 XIP_BOOT_HEADER_ENABLE=1

The SPI FLASH memory is not used for data as it usually is used on microcontrollers. Instead the processor can execute code in it, which is called XiP or 'eXecute in Place'.

The next thing is the linker file: The following file places that header, code, constants and vector table into the external FLASH starting at address 0x7000'0000. The Data-Tightly-Coupled (DTC) RAM is used for the heap and stack.

GROUP (
"libcr_nohost_nf.a"
"libcr_c.a"
"libcr_eabihelpers.a"
"libgcc.a"
)

MEMORY
{
/* Define each memory region */
PROGRAM_FLASH (rx) : ORIGIN = 0x70000000, LENGTH = 0x400000 /* 4M bytes (alias Flash) */
SRAM_DTC (rwx) : ORIGIN = 0x20000000, LENGTH = 0x20000 /* 128K bytes (alias RAM) */
SRAM_ITC (rwx) : ORIGIN = 0x0, LENGTH = 0x20000 /* 128K bytes (alias RAM2) */
SRAM_OC (rwx) : ORIGIN = 0x20200000, LENGTH = 0xc0000 /* 768K bytes (alias RAM3) */
BOARD_SDRAM (rwx) : ORIGIN = 0x80000000, LENGTH = 0x2000000 /* 32M bytes (alias RAM4) */
}

ENTRY(ResetISR)

SECTIONS
{
/* Image Vector Table and Boot Data for booting from external flash */
.boot_hdr : ALIGN(4)
{
FILL(0xff)
__boot_hdr_start__ = ABSOLUTE(.) ;
KEEP(*(.boot_hdr.conf))
. = 0x1000 ;
KEEP(*(.boot_hdr.ivt))
. = 0x1020 ;
KEEP(*(.boot_hdr.boot_data))
. = 0x1030 ;
KEEP(*(.boot_hdr.dcd_data))
__boot_hdr_end__ = ABSOLUTE(.) ;
. = 0x2000 ;
} >PROGRAM_FLASH

/* MAIN TEXT SECTION */
.text : ALIGN(4)
{
FILL(0xff)
__vectors_start__ = ABSOLUTE(.) ;
KEEP(*(.isr_vector))
/* Global Section Table */
. = ALIGN(4) ;
__section_table_start = .;
__data_section_table = .;
LONG(LOADADDR(.data));
LONG( ADDR(.data));
LONG( SIZEOF(.data));
LONG(LOADADDR(.data_RAM2));
LONG( ADDR(.data_RAM2));
LONG( SIZEOF(.data_RAM2));
LONG(LOADADDR(.data_RAM3));
LONG( ADDR(.data_RAM3));
LONG( SIZEOF(.data_RAM3));
LONG(LOADADDR(.data_RAM4));
LONG( ADDR(.data_RAM4));
LONG( SIZEOF(.data_RAM4));
__data_section_table_end = .;
__bss_section_table = .;
LONG( ADDR(.bss));
LONG( SIZEOF(.bss));
LONG( ADDR(.bss_RAM2));
LONG( SIZEOF(.bss_RAM2));
LONG( ADDR(.bss_RAM3));
LONG( SIZEOF(.bss_RAM3));
LONG( ADDR(.bss_RAM4));
LONG( SIZEOF(.bss_RAM4));
__bss_section_table_end = .;
__section_table_end = . ;
/* End of Global Section Table */

*(.after_vectors*)

} > PROGRAM_FLASH

.text : ALIGN(4)
{
*(.text*)
*(.rodata .rodata.* .constdata .constdata.*)
. = ALIGN(4);
} > PROGRAM_FLASH
/*
* for exception handling/unwind - some Newlib functions (in common
* with C++ and STDC++) use this.
*/
.ARM.extab : ALIGN(4)
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > PROGRAM_FLASH

__exidx_start = .;

.ARM.exidx : ALIGN(4)
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > PROGRAM_FLASH
__exidx_end = .;

_etext = .;

/* DATA section for SRAM_ITC */

.data_RAM2 : ALIGN(4)
{
FILL(0xff)
PROVIDE(__start_data_RAM2 = .) ;
*(.ramfunc.$RAM2)
*(.ramfunc.$SRAM_ITC)
*(.data.$RAM2*)
*(.data.$SRAM_ITC*)
. = ALIGN(4) ;
PROVIDE(__end_data_RAM2 = .) ;
} > SRAM_ITC AT>PROGRAM_FLASH
/* DATA section for SRAM_OC */

.data_RAM3 : ALIGN(4)
{
FILL(0xff)
PROVIDE(__start_data_RAM3 = .) ;
*(.ramfunc.$RAM3)
*(.ramfunc.$SRAM_OC)
*(.data.$RAM3*)
*(.data.$SRAM_OC*)
. = ALIGN(4) ;
PROVIDE(__end_data_RAM3 = .) ;
} > SRAM_OC AT>PROGRAM_FLASH
/* DATA section for BOARD_SDRAM */

.data_RAM4 : ALIGN(4)
{
FILL(0xff)
PROVIDE(__start_data_RAM4 = .) ;
*(.ramfunc.$RAM4)
*(.ramfunc.$BOARD_SDRAM)
*(.data.$RAM4*)
*(.data.$BOARD_SDRAM*)
. = ALIGN(4) ;
PROVIDE(__end_data_RAM4 = .) ;
} > BOARD_SDRAM AT>PROGRAM_FLASH
/* MAIN DATA SECTION */
.uninit_RESERVED : ALIGN(4)
{
KEEP(*(.bss.$RESERVED*))
. = ALIGN(4) ;
_end_uninit_RESERVED = .;
} > SRAM_DTC

/* Main DATA section (SRAM_DTC) */
.data : ALIGN(4)
{
FILL(0xff)
_data = . ;
*(vtable)
*(.ramfunc*)
*(NonCacheable.init)
*(.data*)
. = ALIGN(4) ;
_edata = . ;
} > SRAM_DTC AT>PROGRAM_FLASH

/* BSS section for SRAM_ITC */
.bss_RAM2 : ALIGN(4)
{
PROVIDE(__start_bss_RAM2 = .) ;
*(.bss.$RAM2*)
*(.bss.$SRAM_ITC*)
. = ALIGN (. != 0 ? 4 : 1) ; /* avoid empty segment */
PROVIDE(__end_bss_RAM2 = .) ;
} > SRAM_ITC

/* BSS section for SRAM_OC */
.bss_RAM3 : ALIGN(4)
{
PROVIDE(__start_bss_RAM3 = .) ;
*(.bss.$RAM3*)
*(.bss.$SRAM_OC*)
. = ALIGN (. != 0 ? 4 : 1) ; /* avoid empty segment */
PROVIDE(__end_bss_RAM3 = .) ;
} > SRAM_OC

/* BSS section for BOARD_SDRAM */
.bss_RAM4 : ALIGN(4)
{
PROVIDE(__start_bss_RAM4 = .) ;
*(.bss.$RAM4*)
*(.bss.$BOARD_SDRAM*)
. = ALIGN (. != 0 ? 4 : 1) ; /* avoid empty segment */
PROVIDE(__end_bss_RAM4 = .) ;
} > BOARD_SDRAM

/* MAIN BSS SECTION */
.bss : ALIGN(4)
{
_bss = .;
*(NonCacheable)
*(.bss*)
*(COMMON)
. = ALIGN(4) ;
_ebss = .;
PROVIDE(end = .);
} > SRAM_DTC

/* NOINIT section for SRAM_ITC */
.noinit_RAM2 (NOLOAD) : ALIGN(4)
{
*(.noinit.$RAM2*)
*(.noinit.$SRAM_ITC*)
. = ALIGN(4) ;
} > SRAM_ITC

/* NOINIT section for SRAM_OC */
.noinit_RAM3 (NOLOAD) : ALIGN(4)
{
*(.noinit.$RAM3*)
*(.noinit.$SRAM_OC*)
. = ALIGN(4) ;
} > SRAM_OC

/* NOINIT section for BOARD_SDRAM */
.noinit_RAM4 (NOLOAD) : ALIGN(4)
{
*(.noinit.$RAM4*)
*(.noinit.$BOARD_SDRAM*)
. = ALIGN(4) ;
} > BOARD_SDRAM

/* DEFAULT NOINIT SECTION */
.noinit (NOLOAD): ALIGN(4)
{
_noinit = .;
*(.noinit*)
. = ALIGN(4) ;
_end_noinit = .;
} > SRAM_DTC

/* Reserve and place Heap within memory map */
_HeapSize = 0x1000;
.heap : ALIGN(4)
{
_pvHeapStart = .;
. += _HeapSize;
. = ALIGN(4);
_pvHeapLimit = .;
} > SRAM_DTC

_StackSize = 0x1000;
/* Reserve space in memory for Stack */
.heap2stackfill :
{
. += _StackSize;
} > SRAM_DTC
/* Locate actual Stack in memory map */
.stack ORIGIN(SRAM_DTC) + LENGTH(SRAM_DTC) - _StackSize - 0: ALIGN(4)
{
_vStackBase = .;
. = ALIGN(4);
_vStackTop = . + _StackSize;
} > SRAM_DTC

/* Provide basic symbols giving location and size of main text
* block, including initial values of RW data sections. Note that
* these will need extending to give a complete picture with
* complex images (e.g multiple Flash banks).
*/
_image_start = LOADADDR(.text);
_image_end = LOADADDR(.data) + SIZEOF(.data);
_image_size = _image_end - _image_start;
}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Running from OC (On-Chip) RAM

It is possible to avoid external FLASH with linking things to the different RAM sections of the device. The following linker file runs everything from RAM:

GROUP (
"libcr_nohost_nf.a"
"libcr_c.a"
"libcr_eabihelpers.a"
"libgcc.a"
)

MEMORY
{
/* Define each memory region */
PROGRAM_FLASH (rx) : ORIGIN = 0x70000000, LENGTH = 0x400000 /* 4M bytes (alias Flash) */
SRAM_OC (rwx) : ORIGIN = 0x20200000, LENGTH = 0xc0000 /* 768K bytes (alias RAM) */
SRAM_ITC (rwx) : ORIGIN = 0x0, LENGTH = 0x20000 /* 128K bytes (alias RAM2) */
SRAM_DTC (rwx) : ORIGIN = 0x20000000, LENGTH = 0x20000 /* 128K bytes (alias RAM3) */
BOARD_SDRAM (rwx) : ORIGIN = 0x80000000, LENGTH = 0x2000000 /* 32M bytes (alias RAM4) */
}

/* Define a symbol for the top of each memory region */
__base_PROGRAM_FLASH = 0x70000000 ; /* PROGRAM_FLASH */
__base_Flash = 0x70000000 ; /* Flash */
__top_PROGRAM_FLASH = 0x70000000 + 0x400000 ; /* 4M bytes */
__top_Flash = 0x70000000 + 0x400000 ; /* 4M bytes */
__base_SRAM_OC = 0x20200000 ; /* SRAM_OC */
__base_RAM = 0x20200000 ; /* RAM */
__top_SRAM_OC = 0x20200000 + 0xc0000 ; /* 768K bytes */
__top_RAM = 0x20200000 + 0xc0000 ; /* 768K bytes */
__base_SRAM_ITC = 0x0 ; /* SRAM_ITC */
__base_RAM2 = 0x0 ; /* RAM2 */
__top_SRAM_ITC = 0x0 + 0x20000 ; /* 128K bytes */
__top_RAM2 = 0x0 + 0x20000 ; /* 128K bytes */
__base_SRAM_DTC = 0x20000000 ; /* SRAM_DTC */
__base_RAM3 = 0x20000000 ; /* RAM3 */
__top_SRAM_DTC = 0x20000000 + 0x20000 ; /* 128K bytes */
__top_RAM3 = 0x20000000 + 0x20000 ; /* 128K bytes */
__base_BOARD_SDRAM = 0x80000000 ; /* BOARD_SDRAM */
__base_RAM4 = 0x80000000 ; /* RAM4 */
__top_BOARD_SDRAM = 0x80000000 + 0x2000000 ; /* 32M bytes */
__top_RAM4 = 0x80000000 + 0x2000000 ; /* 32M bytes */

ENTRY(ResetISR)

SECTIONS
{
/* MAIN TEXT SECTION */
.text : ALIGN(4)
{
FILL(0xff)
__vectors_start__ = ABSOLUTE(.) ;
KEEP(*(.isr_vector))
/* Global Section Table */
. = ALIGN(4) ;
__section_table_start = .;
__data_section_table = .;
LONG(LOADADDR(.data));
LONG( ADDR(.data));
LONG( SIZEOF(.data));
LONG(LOADADDR(.data_RAM2));
LONG( ADDR(.data_RAM2));
LONG( SIZEOF(.data_RAM2));
LONG(LOADADDR(.data_RAM3));
LONG( ADDR(.data_RAM3));
LONG( SIZEOF(.data_RAM3));
LONG(LOADADDR(.data_RAM4));
LONG( ADDR(.data_RAM4));
LONG( SIZEOF(.data_RAM4));
__data_section_table_end = .;
__bss_section_table = .;
LONG( ADDR(.bss));
LONG( SIZEOF(.bss));
LONG( ADDR(.bss_RAM2));
LONG( SIZEOF(.bss_RAM2));
LONG( ADDR(.bss_RAM3));
LONG( SIZEOF(.bss_RAM3));
LONG( ADDR(.bss_RAM4));
LONG( SIZEOF(.bss_RAM4));
__bss_section_table_end = .;
__section_table_end = . ;
/* End of Global Section Table */

*(.after_vectors*)

} > SRAM_OC

.text : ALIGN(4)
{
*(.text*)
*(.rodata .rodata.* .constdata .constdata.*)
. = ALIGN(4);
} > SRAM_OC
/*
* for exception handling/unwind - some Newlib functions (in common
* with C++ and STDC++) use this.
*/
.ARM.extab : ALIGN(4)
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > SRAM_OC

__exidx_start = .;

.ARM.exidx : ALIGN(4)
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > SRAM_OC
__exidx_end = .;

_etext = .;

/* DATA section for SRAM_ITC */

.data_RAM2 : ALIGN(4)
{
FILL(0xff)
PROVIDE(__start_data_RAM2 = .) ;
*(.ramfunc.$RAM2)
*(.ramfunc.$SRAM_ITC)
*(.data.$RAM2*)
*(.data.$SRAM_ITC*)
. = ALIGN(4) ;
PROVIDE(__end_data_RAM2 = .) ;
} > SRAM_ITC AT>SRAM_OC
/* DATA section for SRAM_DTC */

.data_RAM3 : ALIGN(4)
{
FILL(0xff)
PROVIDE(__start_data_RAM3 = .) ;
*(.ramfunc.$RAM3)
*(.ramfunc.$SRAM_DTC)
*(.data.$RAM3*)
*(.data.$SRAM_DTC*)
. = ALIGN(4) ;
PROVIDE(__end_data_RAM3 = .) ;
} > SRAM_DTC AT>SRAM_OC
/* DATA section for BOARD_SDRAM */

.data_RAM4 : ALIGN(4)
{
FILL(0xff)
PROVIDE(__start_data_RAM4 = .) ;
*(.ramfunc.$RAM4)
*(.ramfunc.$BOARD_SDRAM)
*(.data.$RAM4*)
*(.data.$BOARD_SDRAM*)
. = ALIGN(4) ;
PROVIDE(__end_data_RAM4 = .) ;
} > BOARD_SDRAM AT>SRAM_OC
/* MAIN DATA SECTION */
.uninit_RESERVED : ALIGN(4)
{
KEEP(*(.bss.$RESERVED*))
. = ALIGN(4) ;
_end_uninit_RESERVED = .;
} > SRAM_OC

/* Main DATA section (SRAM_OC) */
.data : ALIGN(4)
{
FILL(0xff)
_data = . ;
*(vtable)
*(.ramfunc*)
*(.data*)
. = ALIGN(4) ;
_edata = . ;
} > SRAM_OC AT>SRAM_OC

/* BSS section for SRAM_ITC */
.bss_RAM2 : ALIGN(4)
{
PROVIDE(__start_bss_RAM2 = .) ;
*(.bss.$RAM2*)
*(.bss.$SRAM_ITC*)
. = ALIGN (. != 0 ? 4 : 1) ; /* avoid empty segment */
PROVIDE(__end_bss_RAM2 = .) ;
} > SRAM_ITC

/* BSS section for SRAM_DTC */
.bss_RAM3 : ALIGN(4)
{
PROVIDE(__start_bss_RAM3 = .) ;
*(.bss.$RAM3*)
*(.bss.$SRAM_DTC*)
. = ALIGN (. != 0 ? 4 : 1) ; /* avoid empty segment */
PROVIDE(__end_bss_RAM3 = .) ;
} > SRAM_DTC

/* BSS section for BOARD_SDRAM */
.bss_RAM4 : ALIGN(4)
{
PROVIDE(__start_bss_RAM4 = .) ;
*(.bss.$RAM4*)
*(.bss.$BOARD_SDRAM*)
. = ALIGN (. != 0 ? 4 : 1) ; /* avoid empty segment */
PROVIDE(__end_bss_RAM4 = .) ;
} > BOARD_SDRAM

/* MAIN BSS SECTION */
.bss : ALIGN(4)
{
_bss = .;
*(.bss*)
*(COMMON)
. = ALIGN(4) ;
_ebss = .;
PROVIDE(end = .);
} > SRAM_OC

/* NOINIT section for SRAM_ITC */
.noinit_RAM2 (NOLOAD) : ALIGN(4)
{
*(.noinit.$RAM2*)
*(.noinit.$SRAM_ITC*)
. = ALIGN(4) ;
} > SRAM_ITC

/* NOINIT section for SRAM_DTC */
.noinit_RAM3 (NOLOAD) : ALIGN(4)
{
*(.noinit.$RAM3*)
*(.noinit.$SRAM_DTC*)
. = ALIGN(4) ;
} > SRAM_DTC

/* NOINIT section for BOARD_SDRAM */
.noinit_RAM4 (NOLOAD) : ALIGN(4)
{
*(.noinit.$RAM4*)
*(.noinit.$BOARD_SDRAM*)
. = ALIGN(4) ;
} > BOARD_SDRAM

/* DEFAULT NOINIT SECTION */
.noinit (NOLOAD): ALIGN(4)
{
_noinit = .;
*(.noinit*)
. = ALIGN(4) ;
_end_noinit = .;
} > SRAM_OC

/* Reserve and place Heap within memory map */
_HeapSize = 0x1000;
.heap : ALIGN(4)
{
_pvHeapStart = .;
. += _HeapSize;
. = ALIGN(4);
_pvHeapLimit = .;
} > SRAM_OC

_StackSize = 0x1000;
/* Reserve space in memory for Stack */
.heap2stackfill :
{
. += _StackSize;
} > SRAM_OC
/* Locate actual Stack in memory map */
.stack ORIGIN(SRAM_OC) + LENGTH(SRAM_OC) - _StackSize - 0: ALIGN(4)
{
_vStackBase = .;
. = ALIGN(4);
_vStackTop = . + _StackSize;
} > SRAM_OC

/* Provide basic symbols giving location and size of main text
* block, including initial values of RW data sections. Note that
* these will need extending to give a complete picture with
* complex images (e.g multiple Flash banks).
*/
_image_start = LOADADDR(.text);
_image_end = LOADADDR(.data) + SIZEOF(.data);
_image_size = _image_end - _image_start;
}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Mixing RAM and FLASH

Running code from RAM has a performance benefit. So it makes sense to run 'slower' parts in normal XiP FLASH, but run code in RAM where higher performance is needed.

To place a function into RAM, I add an attribute with the desired section name:

static void __attribute__((section (".ramfunc"))) blinkRAM(void) {
if (g_pinSet) {
GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 0U);
g_pinSet = false;
} else {
GPIO_PinWrite(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, 1U);
g_pinSet = true;
}
}‍‍‍‍‍‍‍‍‍

With this, the function gets copied and placed in RAM. One thing to note is that depending on the call distance a veneer function might be used to reach the RAM address where the function is placed. More details on this topic in Execute-Only Code with GNU and gcc which covers that topic from a different angle.

Summary

It is possible to place code and data either in FLASH or in RAM. All what is needed is the correct linker file for it. The placement is controlled by the linker file, and with using __attribute__ parts of the application can be in FLASH or RAM. If you are not familiar with the GNU linker file syntax, I recommend you start with the MCUXpresso IDE because it provides projects with working linker files.

Happy XiPing :-)


Links

- - -

Originally published on May 19, 2019 by Erich Styger

More
1 0 813
PetrKraus
NXP Employee
NXP Employee

davidjurajda‌:

Hi Team,

 

I would like to share python script for yml verification. It compares yml record with content of physical component folder. Provided information is:

 

  • Print list of components in yml.
  • Show which files are in yml, but not on disk.
  • Show which files are on disk, but not in yml.

 

I will be glad for any kind of feedback.

 

https://bitbucket.sw.nxp.com/users/nxa07326/repos/david_sdk_scripts/browse/yml_verificator

 

Examples output for fatfs:

 

=== Component list ===

middleware.template_application.fatfs

middleware.fatfs.common

middleware.fatfs.mmc

middleware.fatfs.ram

middleware.fatfs.sd

middleware.fatfs.sdspi

middleware.fatfs.usb_bm

middleware.fatfs.usb_freertos

middleware.fatfs.nand

middleware.fatfs.unused_files

middleware.fatfs.ui_control

bundles.fatfs

 

==== Source comparison: ====

=== Files in yml, but not on disk: ===

 

=== Files on disk, but not in yml: ===

c:\GIT\mcu-sdk-2.0_bug_fixing\middleware\fatfs\fatfs.readme

c:\GIT\mcu-sdk-2.0_bug_fixing\middleware\fatfs\FatFs_for_Kinetis_SDK_v2.0_readme.txt

c:\GIT\mcu-sdk-2.0_bug_fixing\middleware\fatfs\LICENSE.txt

More
1 0 50
PetrKraus
NXP Employee
NXP Employee

Comprehensive information about SDK SW components and SDK release describing YML can be found in the Yml data record guide here:

http://10.193.108.154:4000/mcu-sdk-generator/doc/Yml%20data%20record%20guide.html#add-a-middleware-y...

Example

We need to build a dependency from the eIQ component to the CMSIS DSK Library component.

pastedImage_1.png

It is needed to add the dependency definition into the __requires__ section of the dependent component into YML:

middleware.eiq.cmsis_nn:

  section-type: component

  __requires__:

    - middleware.eiq.ui_control

      CMSIS_DSP_Lib.arm_cortexM7lfdp_math

  contents:

    cc-include:

      - path: middleware/eiq/cmsis-nn/Include

    files:

...

Such dependency will be reflected on the MCUXpresso website and also in the SDK manifest file:

    <component id="middleware.eiq.cmsis_nn.MIMXRT1052" name="CMSIS-NN" brief="CMSIS-NN library" version="1.0.0" full_name="CMSIS-NN library" devices="MIMXRT1052xxxxB" dependency="platform.CMSIS_DSP_Lib.arm_cortexM7lfdp_math.MIMXRT1052" category="Machine Learning/eIQ" user_visible="true" type="middleware">

      <source path="middleware/eiq/cmsis-nn/Include" target_path="CMSIS/NN/Include" type="c_include">

        <files mask="arm_nnfunctions.h"/>

        <files mask="arm_nnsupportfunctions.h"/>

        <files mask="arm_nn_tables.h"/>

      </source>

How to verify that the dependency has been correctly described it will really work in the SW tools?

  1. You can generate an SDK package with this component and check the behavior in the MCUX IDE.
  2. You can check SDK release data tables - output of the first two stages of the SDK Generator, where the component dependencies are resolved:
    1. Run “ruby all_evkxxx.rb -a eiq -c superset -o target_dir“, in the target_dir/devices/<xxxx>/<xxxx>.yml, you can check under your middleware.eiq.ui_control, it should have the “CMSIS_DSP_Lib.ui_control” in the “web_requires”, like

      middleware.eiq.ui_control:

        section-type: component_support

        __requires__:

          - board.evkbimxrt1050

          - board.evkmimxrt1060

        component_info:

          common:

            ui_name: eIQ

            ui_description: eIQ machine learning

            ui_category: Middleware

            ui_control: 'True'

            ui_control_default: 'False'

            ui_release_specific: 'True'

            full_name: eIQ

            class: Machine Learning

            version: 1.0

            description: eIQ machine learning

        web_requires:

          - CMSIS_DSP_Lib.ui_control

  3. You can ask the SWPE team to deploy your experimental SDK release superset with this change on an MCUX sandbox website - follow instructions described here: https://confluence.sw.nxp.com/display/MCUXSDKB/Deployment+of+an+experimental+SDK+release+image+on+th...

More
2 0 68
nxf47831
NXP Employee
NXP Employee

New features update:

  •  SDKGEN-924Support to automatically link secure and non-secure projects in Mcuxpresso IDE

        This feature supports to link trustzone projects. In MCUXpresso IDE, if you select a secure project or non-secure         project, the other trustzone paired project will be selected automatically.
        In order to enable the feature, "linked_project" need to be set for both projects.

        Here is an demo example:

                                   1.png

        For more detailed trustzone settings, please refer to yml data record guide doc. 

  •  SDKGEN-915Support to add preprocess cmd in cmakelist

        There is a requirement which needs to preprocess the original linker file with commands. For this reason, the         CMakeLists needs to call preprocesser.

        To add preprocess cmd in cmakelist file, need to add 2 flags in yml: 

           ○ preprocessed: give the path of preprocessed linker file
           ○ Prebuild: give commands to preprocess linker file
        Here is an example:

                        1.png

                        1.png

More
1 0 60
BlackNight
NXP Employee
NXP Employee

In “Tutorial: MCUXpresso SDK with Linux, Part 1: Installation and Build with Maked” I used cmake and make to build the SDK application. In this part I’m going to use the command line gdb to debug the application on the board.

Cross-Debugging with GDB

Cross-Debugging with GDB

List of this multi-part tutorial:

Outline

In this tutorial I’m going through the steps to install and use the GNU debugger (gdb) from the console to debug the application on the board. I’m running the Ubuntu Linux in a VM on Windows. I’m using the NXP FRDM-K64F board, but the steps are applicable to any other board.

MQTT running on NXP FRDM-K64F

NXP FRDM-K64F

While this tutorial is using gdb and the command line, the Eclipse based MCUXpresso IDE can be used instead too: this way might be easier for most developers as with using Eclipse things are handled automatically.

For an earlier overview about command line debugging with GDB, see “Command Line Programming and Debugging with GDB“.

GDB Debugging Chain

GDB Debugging Chain

Debug Connections

The board I’m using has a on-board debug circuit (OpenSDA) which can used either as a CMSIS-DAP (with a LPC-Link2), SEGGER J-Link or P&E Multilink. The board has a standard 10pin SWD debug header, so an external debug probe can used too:

Debugging FreeRTOS on NXP FRDM-K64F with P&E Multilink Universal

Debugging FreeRTOS on NXP FRDM-K64F with P&E Multilink Universal

LPC-Link2 debugging FRDM-K64F

LPC-Link2 debugging FRDM-K64F

J-Link Hooked Up to recover the K64F

J-Link Hooked Up to recover the K64F

GDB Client

GDB is using a client-server connection: the GDB client is rather generic, while the server part is making the connection to the target and/or implements the connection to the board.

In the case of using Eclipse, the GDB client is integrated with Eclipse:

GDB with GDB Server

GDB with GDB Server

But the gdb client in fact is a command line tool like the compiler, and it can be started on the command line too:

$ ~/opt/gcc-arm-none-eabi-8-2018-q4-major/bin/arm-none-eabi-gdb

See “Tutorial: MCUXpresso SDK with Linux, Part 1: Installation and Build with Make” about the GNU and gdb tool installation.

This launches the GDB client which then waits for commands:

Launched GDB

Launched GDB

I prefer to run the gdb client in one console window. So for the next parts (server for P&E and SEGGER) I use a different console.

SEGGER J-Link GDB Server

To work with the board using a SEGGER probe, I have to install the J-Link software first. The download is available from https://www.segger.com/downloads/jlink/#J- LinkSoftwareAndDocumentationPack

For my environment I have downloaded the JLink_Linux_V644g_x86_64.deb file. For a RedHat system the .rpm would be the choice to use. To install it:

$ sudo apt install ./JLink_Linux_V644g_x86_64.deb

The files get installed into \opt\bin. I can verify that it works properly with calling the GDB server:

$ /usr/bin/JLinkGDBServer

Which produces something like this:

SEGGER J-Link GDB Server V6.44g Command Line Version JLinkARM.dll V6.44g (DLL compiled Apr 18 2019 17:15:02) -----GDB Server start settings----- GDBInit file: none GDB Server Listening port: 2331 SWO raw output listening port: 2332 Terminal I/O port: 2333 Accept remote connection: yes Generate logfile: off Verify download: off Init regs on start: off Silent mode: off Single run mode: off Target connection timeout: 0 ms ------J-Link related settings------ J-Link Host interface: USB J-Link script: none J-Link settings file: none ------Target related settings------ Target device: Unspecified Target interface: JTAG Target interface speed: 4000kHz Target endian: little Connecting to J-Link... Connecting to J-Link failed. Connected correctly? GDBServer will be closed... Shutting down... Could not connect to J-Link.

For how the GDB client and server connection works, see “GDB Client and Server: Unlocking GDB“.

The above output is produced with no J-Link debug probe attached. If using a USB based probe with the VM, make sure the USB port is available to the VM:

Using USB in VirtualBox

With this, the probe is detected:

SEGGER J-Link GDB Server V6.44g Command Line Version JLinkARM.dll V6.44g (DLL compiled Apr 18 2019 17:15:02) -----GDB Server start settings----- GDBInit file: none GDB Server Listening port: 2331 SWO raw output listening port: 2332 Terminal I/O port: 2333 Accept remote connection: yes Generate logfile: off Verify download: off Init regs on start: off Silent mode: off Single run mode: off Target connection timeout: 0 ms ------J-Link related settings------ J-Link Host interface: USB J-Link script: none J-Link settings file: none ------Target related settings------ Target device: Unspecified Target interface: JTAG Target interface speed: 4000kHz Target endian: little Connecting to J-Link... J-Link is connected. Failed to set device (Unspecified). Unknown device selected?ERROR : Failed to set device. Firmware: J-Link OpenSDA 2 compiled Jun 28 2018 09:44:47 Hardware: V1.00 S/N: 621000000 Checking target voltage... Target voltage: 3.30 V Listening on TCP/IP port 2331 Connecting to target...ERROR: Debugger tries to select target interface JTAG. This interface is not supported by the connected emulator. Selection will be ignored by the DLL. ERROR: No CPU core or target device has been selected. Please make sure at least the core J-Link shall connect to, is selected. ERROR: Could not connect to target. Target connection failed. GDBServer will be closed...Restoring target state and closing J-Link connection... Shutting down... Could not connect to target.

The end of the message indicates that we are trying to connect to a JTAG interface which is not supported. Indeed, the OpenSDA circuit on the FRDM-K64F board only supports SWD. To use SWD, the -if swd option has to be added:

$ /usr/bin/JLinkGDBServer -if swd

In addition to that, the device has to be selected using the -device option:

$ /usr/bin/JLinkGDBServer -if swd -device MK64FN1M0xxx12

The list of devices are available from https://www.segger.com/downloads/supported-devices.php

With this, the SEGGER gdb server waits for the client connection:

SEGGER J-Link GDB Server V6.44g Command Line Version JLinkARM.dll V6.44g (DLL compiled Apr 18 2019 17:15:02) Command line: -if swd -device MK64FN1M0xxx12 -----GDB Server start settings----- GDBInit file: none GDB Server Listening port: 2331 SWO raw output listening port: 2332 Terminal I/O port: 2333 Accept remote connection: yes Generate logfile: off Verify download: off Init regs on start: off Silent mode: off Single run mode: off Target connection timeout: 0 ms ------J-Link related settings------ J-Link Host interface: USB J-Link script: none J-Link settings file: none ------Target related settings------ Target device: MK64FN1M0xxx12 Target interface: SWD Target interface speed: 4000kHz Target endian: little Connecting to J-Link... J-Link is connected. Firmware: J-Link OpenSDA 2 compiled Jun 28 2018 09:44:47 Hardware: V1.00 S/N: 621000000 Checking target voltage... Target voltage: 3.30 V Listening on TCP/IP port 2331 Connecting to target...Connected to target Waiting for GDB connection...

The SEGGER server is listening on port 2331, so I connect to that port from the gdb client:

(gdb) target remote localhost:2331
GDB Client and Server

GDB Client and Server

From the client, I can reset the target:

(gdb) monitor reset
monitor reset

monitor reset

To load the binary, I use

(gdb) load debug/led_blinky.elf
load binary

load binary

followed by loading the symbols (debug information):

(gdb) file debug/led_blinky.elf
loaded symbols

loaded symbols

To set a breakpoint on main:

(gdb) b main

and to continue execution:

(gdb) c

This will hit the breakpoint on main:

Hit breakpoint on main

Hit breakpoint on main

GDB has many commands, for example check the following cheat sheets:

To quit the gdb debug session:

(gdb) q

PEMicro (P&E)

Everyting said above applies to the P&E (PEMICRO) debug connection too. The P&E debug probes (e.g. Multilink) use their own GDB. That GDB Serve and drivers are integrated in Eclipse (e.g. NXP MCUXpresso IDE)

I recommend to download and install the MCUXpresso IDE for Linux as it comes with the latest P&E plugins and drivers.  That way the USB drivers and GDB server don’t need to be installed manually as described below.

Download the P&E Linux drivers from http://www.pemicro.com/opensda/ and unzip the file:

$ gunzip pemicro-other-20181128.zip.tar.gz

untar the archive:

$ tar -xvf pemicro-other-20181128.zip.tar
$ cd pemicro-other-20181128/drivers/libusb_64_32/

untar the drivers:

$ tar -xvf linux_drivers_64bit_58_b181128.tar.gz

Install the drivers

$ cd libusb_64_32 $ sudo ./setup.sh

Now with the USB drivers installed, we need the P&E GDB Server which is inside the P&E Eclipse plugin. The Eclipse plugin is available as direct download from

https://www.pemicro.com/products/product_viewDetails.cfm?product_id=15320151&productTab=1

Again: I recommend to download and install the MCUXpresso IDE for Linux as it comes with the latest P&E plugins.

unzip the jar file (replace the file name with the one you have downloaded):

$ unzip com.pemicro.debug.gdbjtag.pne_3.0.9.201707131553.jar -d pnegdbserver

make the gdb server executable:

$ cd pnegdbserver $ chmod +x pegdbserver_console

Make sure the P&E Device and driver is available for the Linux VM:

PEMicro USB

PEMicro USB

The list of supported devices can be displayed with

$ ./pegdbserver_console -devicelist

Then launch the server. Specify -startserver and the -device used. For FRDM-K64F I use

$ ./pegdbserver_console -startserver -device=NXP_K6x_K64FN1M0M12

With this I have the server running:

P&E GDB Server for Arm(R) devices, Version 6.45.00.00 Copyright 2014, P&E Microcomputer Systems Inc, All rights reserved Loading library /home/erich/MCUXpresso/pemicro/pnegdbserver/lin/gdi/unit_ngs_arm_internal.so ... Done. Command line arguments: -startserver -device=NXP_K6x_K64FN1M0M12 Device selected is NXP_K6x_K64FN1M0M12 HW Auto-Selected : Interface=USBMULTILINK Port=PEM6B012B ; USB1 : Multilink Universal FX Rev C (PEM6B012B) Connecting to target. P&E Interface detected - Flash Version 10.15 Device is NXP_K6x_K64FN1M0M12. Mode is In-Circuit Debug. (C)opyright 2012, P&E Microcomputer Systems, Inc. (www.pemicro.com) API version is 101 Creating kernel driver for freertos Server 1 running on 127.0.0.1:7224 Server 2 running on 127.0.0.1:7226 Server 3 running on 127.0.0.1:7228 Server 4 running on 127.0.0.1:7230 Server 5 running on 127.0.0.1:7232 Server 6 running on 127.0.0.1:7234 All Servers Running

Start the gdb client in a different console:

$ ~/opt/gcc-arm-none-eabi-8-2018-q4-major/bin/arm-none-eabi-gdb

The P&E GDB server is listening on port 7224, so I use the following in the gdb client:

(gdb) target remote localhost:7224

From now on, I can use gdb to talk to the target. To reset the target:

(gdb) monitor reset

to load the binary and the symbols, setting a breakpoint on main and run:

(gdb) load debug/led_blinky.elf (gdb) file debug/led_blinky.elf (gdb) b main (gdb) c
Debugging with P&E gdbserver

Debugging with P&E gdbserver

To terminate the debug session:

(gdb) q

Automation

Instead using the gdb client in interactive mode, I can script it for example to program the application. For example create following script file:

set pagination off target remote localhost:2331 monitor reset load debug/led_blinky.elf quit gdb script file

Then launch the script file with

$ ~/opt/gcc-arm-none-eabi-8-2018-q4-major/bin/arm-none-eabi-gdb -x gdb_flash.script

Summary

It is possible to use gdb in command line mode on Linux with the NXP MCUXpresso SDK, so this is applicable for a very small setup. It works well for the SEGGER and PEMICRO debug connections, as their driver/installer cares about the USB connection, so using that is fairly easy. Using the gdb command line is very powerful, but is for sure not as intuitive as using an Eclipse IDE as the MCUXpresso IDE, but certainly doable. Using gdb in command line mode on the other side is a good option to do automated testing at least.

Happy debugging  :-)

Links

- - -

Originally published on April 20, 2019 by Erich Styger

More
0 0 1,024
BlackNight
NXP Employee
NXP Employee

I admit: my work laptop machine is running a Windows 10 OS by default. But this does not prevent me running Linux in a Virtual Machine (VM). Each host platform has its benefits, and I don’t feel biased to one or the other, but I have started using Ubuntu more and more, simply because I have worked more on Embedded Linux projects. While I have used mostly Windows with Eclipse for NXP LPC, Kinetis and i.MX platforms in the past, I started using Ubuntu too from last year with the NXP MCUXpresso SDK. I did not find much documentation about this on the web, so I thought it might be a good idea to write a tutorial about it. So here we go…

Outline

This tutorial shows how to install and develop on Linux with the NXP MCUXpresso SDK. It goes through the steps all the needed pieces and to build one of the SDK example projects.

If you want to develop the easy way with MCUXpesso SDK using a GUI: The MCUXpresso IDE (Eclipse based) runs on Ubuntu (and Windows and Mac) too. This article uses make files and no GUI for a ‘headless’ or ‘GUI-less’ environment.

This is what I’m using in this tutorial:

Blinky on FRDM-K64F Board

Blinky on FRDM-K64F Board

Linux Host

I recommend using Ubuntu Linux. I’m using it in a VM (Virtual Machine) on Windows 10 with the Oracle VirtualBox. There are plenty of tutorials available on the internet about installing Ubuntu on VirtualBox if you are not familiar with it.

NXP MCUXpresso SDK

Select and configure the SDK on https://mcuxpresso.nxp.com. The important part is to select Linux as Host OS and GCC ARM Embedded as toolchain:

MCUXpresso SDK

MCUXpresso SDK

Then click on ‘Download SDK’ and download the archive to the user home directory and extract it there in a subdirectory:

$ cd ~ $ mkdir MCUXpresso $ cd MCUXpresso $ mkdir SDK_2.5.0_FRDM-K64F $ cd SDK_2.5.0_FRDM-K64F

Place the SDK .tar.gz file into that created folder. Unzip the downloaded SDK file:

$ gunzip SDK_2.5.0_FRDM-K64F.tar.gz

Then untar the archive:

tar -xvf SDK_2.5.0_FRDM-K64F.tar

Extraced SDK Files

Installing CMake

By default the SDK is using CMake and not directly normal make files. As CMake is not installed by default in my Ubuntu distribution, I have to add it:

$ sudo apt install cmake

CMake is a cross-platform make file *generator*. As with the make file syntax, it takes some time to learn using. To learn more about CMake: there are plenty of resources available online, a good starting point is https://cmake.org/.

I’m using cmake 3.10.2. The SDK documentation recommends using an older version 3.0.x. Using the 3.10 version will show warnings like ‘The CMAKE_FORCE_C_COMPILER macro is deprecated.  Instead just set CMAKE_C_COMPILER and allow CMake to identify the compiler.’ because the SDK cmake files are not compatible with newer cmake versions. The warnings are annoying, but do not affect the functionality so they can be ignored.

Installing GNU ARM Toolchain for Embedded

To develop with the SDK, I have to install a cross toolchain, available from https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-...

I don’t want to have the toolchain installed for everyone on my Linux, so I install it locally into a ‘opt’ folder inside my user home directory:

The reason for this is to separate different GNU ARM Embedded Toolchains for different projects. If I would add it to the global path/system, separation would be very difficult.

$ mkdir ~/opt $ cd ~/opt

The current release is gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz which I download with

$ wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2018q4/gcc-arm-none-eabi-8-2018-q4-major-...

unzip the archive:

$ tar xjf gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2

Finally change the permissions to read-only:

$ chmod -R -w "${HOME}"/opt/gcc-arm-none-eabi-7-2017-q4-major

Verify that the compiler is working:

$ ~/opt/gcc-arm-none-eabi-8-2018-q4-major/bin/arm-none-eabi-gcc --version

which returns the following:

arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 8-2018-q4-major) 8.2.1 20181213 (release) [gcc-8-branch revision 267074] Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

CMake Environment

CMake needs a variable set to find the compiler. This can be done with

$ export ARMGCC_DIR=~/opt/gcc-arm-none-eabi-8-2018-q4-major

To make it permanent for the user, it can be added to the ~/.bashrc file:

$ nano ~/.bashrc

And then add it to the file which gets executed every time I log in as this user.

Setting Environment

Setting Environment

Use CTRL+X to exit nano and to save the file.

Building Example SDK Projects

In the next step I’m going to build one of the example projects: the LED Blinky one:

$ cd ~/MCUXpresso/SDK_2.5.0_FRDM-K64F/boards/frdmk64f/demo_apps/led_blinky/armgcc
LED Blinky Example Projects

LED Blinky Example Projects

This folder contains several *.bat files (left-over from the Windows world?). Relevant are the Shell script *.sh script files:

  • clean.sh: used to clean the build files
  • build_release.sh: generate make file for a release build
  • build_debug.sh: generate make file for a debug build
  • build_all.sh: build a make file for release and debug build

The shell script to generate the make file are using cmake (see above) with all the necessary information for cmake in the CMakeLists.txt file.

To build a make file for both debug version:

$ ./build_debug.sh
Running build_debug.sh

Running build_debug.sh

Beside of generating the make file, it generates the binary too in the ‘debug’ output folder:

Generated Files

Generated Files

With the ‘file’ command I can verify that indeed the correct binary has been produced:

$ file debug/led_blinky.elf
ELF 32-bit Executable

ELF 32-bit Executable

Because CMake has generated all the needed make files, I can now build the project with

$ make

To clean it I can use

$ make clean

that’s it 

Summary

With this tutorial I showed the installation of the necessary tools (SDK, cmake, GNU ARM for Embedded toolchain) and how to build example projects.

In a next part I’ll touch on the debugging part with gdb. Until then, I hope you find this one useful.

Happy Linuxing :-)

Links

- - -

Originally published on April 14, 2019 by Erich Styger

More
1 0 1,514
PetrKraus
NXP Employee
NXP Employee

If you need to create of modify YML files describing SDK release and included SW components, you can get detailed information about a format of those YML files here:

https://bitbucket.sw.nxp.com/projects/MCUCORE/repos/mcu-sdk-generator/browse/doc/Yml%20data%20record...

More
2 0 54
nxf47831
NXP Employee
NXP Employee

New features update:

  •  SDKGEN-865Support IAR compiler optimization strategy flag for library projects

        Compiler Optimization flags are supported for IAR application and library projects:

        1. -On / -Ol / -Om / -Oh / -Oh -Ssize / -Oh -Sspeed / -Oh -Sbalance / --no_size_contraints

              1.png

         2. Enabled transformations checkbox items in Optimization tab are enabled by default, each item could be disabled by adding cx-flags settings in yml:

             --no_cse / --no_unroll / --no_inline / --no_code_motion / --no_tbaa / --no_clustering / --no_scheduling

             Note: Vectorization setting is to enhance DSP performance for Arm Cortex-A NEON units, not supported now.

  •  SDKGEN-876Support merge-to-wirelessconfig tag in generator release action

        The usage is same with existing merge-to-freertosconfig. For more details, please review Release Actions of Generator in SDK 2.x.

        Here is an example:

         mcux-undefine tag has been enabled in yml setting for Mcuxpresso IDE.
         For example:
         In yml file:

    1.png

         And this macro will show in Undefined symbols:

   1.png

  •  SDKGEN-906 Improve the warning level for 'category' tag check
    • When production is true, project yml setting missing "category" will stop the whole generator running.
    • when production is false, project missing "category" will only lead to this project itself generated failed with error message, but not block other projects with correct setting.

More
1 0 56
PetrKraus
NXP Employee
NXP Employee

Non-production mode (debug mode - without the production flag):

  • Returns 0 if everything is ok
  • Returns 1 if there are major cases failed, anyway the process will passed.
  • Returns 2 if there are critical cases failed, process aborts

Production mode (with the Production flag):

  • Returns 0 if everything is ok
  • Returns 2 if there are major/critical cases failed, process aborts

Related Jira ticket: SDKGEN-863

More
0 0 49
Labels