MCUXpresso SDK Release Notes
Overview
These Release Notes are associated with MCUXpresso SDK supporting K32W148 devices and K32W148-EVK development boards. This is an early adopter release provided as preview for early development and should not be used for final product firmware.
The MCUXpresso SDK is a comprehensive software enablement package designed to simplify and accelerate application development with Arm Cortex-M-based devices from NXP, including its general purpose, crossover and Bluetooth-enabled MCUs. MCUXpresso SW and Tools for DSC further extends the SDK support to current 32-bit Digital Signal Controllers. The MCUXpresso SDK includes production-grade software with integrated RTOS (optional), integrated enabling software technologies (stacks and middleware), reference software, and more.
In addition to working seamlessly with the MCUXpresso IDE, the MCUXpresso SDK also supports and provides example projects for IAR. Support for the MCUXpresso Config Tools allows easy cloning of existing SDK examples and demos, allowing users to leverage the existing software examples provided by the SDK for their own projects.
Underscoring our commitment to high quality, the MCUXpresso SDK is MISRA compliant and checked with Coverity static analysis tools. For details on MCUXpresso SDK, see MCUXpresso-SDK: Software Development Kit for MCUXpresso.
MCUXpresso SDK
As part of the MCUXpresso software and tools, MCUXpresso SDK is the evolution of Kinetis SDK, includes support for LPC, DSC, and i.MX System-on-Chip (SoC). The same drivers, APIs, and middleware are still available with support for Kinetis, LPC, DSC, and i.MX silicon. The MCUXpresso SDK adds support for the MCUXpresso IDE, an Eclipse-based toolchain that works with all MCUXpresso SDKs. Easily import your SDK into the new toolchain to access to all of the available components, examples, and demos for your target silicon. In addition to the MCUXpresso IDE, support for the MCUXpresso Config Tools allows easy cloning of existing SDK examples and demos, allowing users to leverage the existing software examples provided by the SDK for their own projects.
In order to maintain compatibility with legacy Freescale code, the filenames and source code in MCUXpresso SDK containing the legacy Freescale prefix FSL has been left as is. The FSL prefix has been redefined as the NXP Foundation Software Library.
Development tools
The MCUXpresso SDK was compiled and tested using these development tools:
IAR Embedded Workbench for Arm version 9.60.3
MCUXpresso IDE 24.12.00
MCUXpresso for VS Code v24.12
GCC Arm Embedded Toolchain 13.2.1
Supported development systems
This release supports boards and devices listed in Table 1. The boards and devices in bold were tested in this release.
Development boards |
MCU devices |
---|---|
K32W148-EVK board |
K32W1480 |
MCUXpresso SDK release package
The MCUXpresso SDK release package content is aligned with the silicon subfamily it supports. This includes the boards, CMSIS, devices, documentation, middleware, and RTOS support.
Release contents
Table 1 provides an overview of the MCUXpresso SDK release package contents and locations.
Deliverable |
Location |
---|---|
Boards |
|
CMSIS Arm Cortex-M header files, DSP library source |
|
Demo applications |
|
Documentation |
|
Driver examples |
|
Driver, SoC header files, extension header files and feature header files, utilities |
|
Middleware, including wireless stacks |
|
Peripheral Drivers |
|
RTOS examples |
|
RTOS Kernel Code |
|
Tools |
|
Utilities such as debug console |
|
Wireless examples |
|
What is new
The following changes have been implemented compared to the previous SDK release version (25.03.00-pvw2).
Bluetooth LE host stack and applications
Changed
Updated FSCI XML file.
Updated Bluetooth LE Host Documentation.
Fixed
EAD - Updated advertising data length check to ensure encrypted data fits inside one AD.
Details can be found in CHANGELOG.md.
Bluetooth LE controller
PAwR, DBAF fixes and stability improvements.
Transceiver Drivers (XCVR)
Added API to control PA ramp type and duration
Connectivity framework
Minor Changes (no impact on application)
General
[General] Various MISRA/Coverity fixes in framework: NVM, RNG, LowPower, SecLib and platform files
Services
[SecLib_RNG] fix return status from RNG_GetTrueRandomNumber() function: return correctly gRngSuccess_d when RNG_entropy_func() function is successful
[SFC] Allow the application to override the trig sample number parameter
[Settings] Re-define the framework settings API name to avoid double definition when gSettingsRedefineApiName_c flag is defined
Platform specific
[wireless_mcu] fwk_platform_sensors update :
Enable temperature measurement over ADC ISR
Enable temperature handling requested by NBU
[wireless_mcu] fwk_platform_lcl coex config update for KW45
Note
[HwParameter] By default, hardware parameters are located in both main flash and IFR. Main flash and IFR needs to be erased if you want to erase the actual hardware parameters.
Details can be found in CHANGELOG.md
IEEE 802.15.4
API cleanup: remove unmaintained slotted support
support for MAC split architecture
fix condition to enter low power
minor fixes and stability improvements for connectivity_test example application
Zigbee
NCP Host Updates and fixes
R23 fixes
Device can’t establish a new TCLK through ZDO Start Key Update procedure
Security Start Key Update Request is not relayed to joining ZED in multi hop key negotiation
propagate APS ACK to end-user application
documentation updates
Release contents
Provides an overview of the MCUXpresso SDK release package contents and locations.
Deliverable |
Location |
---|---|
Boards |
INSTALL_DIR/boards |
Demo Applications |
INSTALL_DIR/boards/<board_name>/demo_apps |
Driver Examples |
INSTALL_DIR/boards/<board_name>/driver_examples |
eIQ examples |
INSTALL_DIR/boards/<board_name>/eiq_examples |
Board Project Template for MCUXpresso IDE NPW |
INSTALL_DIR/boards/<board_name>/project_template |
Driver, SoC header files, extension header files and feature header files, utilities |
INSTALL_DIR/devices/<device_name> |
CMSIS drivers |
INSTALL_DIR/devices/<device_name>/cmsis_drivers |
Peripheral drivers |
INSTALL_DIR/devices/<device_name>/drivers |
Toolchain linker files and startup code |
INSTALL_DIR/devices/<device_name>/<toolchain_name> |
Utilities such as debug console |
INSTALL_DIR/devices/<device_name>/utilities |
Device Project Template for MCUXpresso IDE NPW |
INSTALL_DIR/devices/<device_name>/project_template |
CMSIS Arm Cortex-M header files, DSP library source |
INSTALL_DIR/CMSIS |
Components and board device drivers |
INSTALL_DIR/components |
RTOS |
INSTALL_DIR/rtos |
Release Notes, Getting Started Document and other documents |
INSTALL_DIR/docs |
Tools such as shared cmake files |
INSTALL_DIR/tools |
Middleware |
INSTALL_DIR/middleware |
Annexure: Zigbee PRO 2023 dynamic link key negotiation
There are two types of DLK negotiations. When the requester of a new TCLK is not yet authorized in the network (does not have the network key), the process is called off-network DLK negotiation. This occurs after the parent replies with the Network Commissioning Response. Once a node is fully joined and authorized, it can request a new TCLK from the trust center. If both nodes, the TC and the requester, supports DLK, they shall use the on-network DLK Negotiation method instead of the Zigbee 3.0 Request Key method. The on-network DLK can be triggered using the Node Descriptor request from the initiator to the trust center. The stack appends the Supported Key Negotiation method TLV to the request and the response contains the Selected Key Negotiation method TLV. If the Trust Center approved the DLK, the stack of the initiator initiates the key negotiation process.
The coordinator R23 and Router R23 examples contain code which activates the DLK, off- and on-network. The code is provided for experimentation as the DLK feature set is not fully implemented nor tested. It is enabled by changing the following macro:
**\#ifdef** R23_UPDATES
/* Uncomment this to enable DLK with AES-128 */
//#define R23_DLK_AES128_ENABLE 1
**\#endif**
AIB attributes {#aibattributes .section}
The AIB attribute apsSupportedKeyNegotiationMethods
is a bit mask, which indicates the set of supported key negotiation methods by the local device. The set of valid values corresponds to the Supported Key Negotiation Methods Global TLV, which can be found in the ZigbeeCommon/Include/tlv.h
file. Only the Hash AES-MMO-128 method is supported in this experimental preview.
**\#define** ZPS_TLV_G_SUPPKEYNEGMETH_STATKEYREQ (1) /* Zigbee 3.0 Mechanism */
**\#define** ZPS_TLV_G_SUPPKEYNEGMETH_SPEKEAES128 (2) /* SPEKE using Curve25519 with Hash AES-MMO-128 */
**\#define** ZPS_TLV_G_SUPPKEYNEGMETH_SPEKESHA256 (4) /* SPEKE using Curve25519 with Hash SHA-256 */
At a minimum the device SHALL support one method, the key request method.
The AIB attribute u8SharedSecretsMask
is a bit mask which indicates the set of supported shared secrets by the local device. The set of valid values corresponds to the supported key negotiation methods global TLV, which can be found in the ZigbeeCommon/Include/tlv.h
file. Only the values (1) and (4) are supported, together with the default apscWellknownPSK
.
**\#define** ZPS_TLV_G_PSK_SYMMETRIC (1) /* Symmetric authentication token */
**\#define** ZPS_TLV_G_PSK_INSTALLCODE (2) /* Pre-configured link-ley derived from installation code */
**\#define** ZPS_TLV_G_PSK_PASSCODE (4) /* Variable-length pass code (for PAKE protocols) */
**\#define** ZPS_TLV_G_PSK_BASICAUTH (8) /* Basic Authorization Key */
**\#define** ZPS_TLV_G_PSK_ADMINAUTH (16) /* Administrative Authorization Key */
Setting these attributes in the AIB is done using the API ZPS_teStatus ZPS_eAplAibSetKeyNegotiationOptions(uint8 u8Methods, uint8 u8SharedSecrets)
. The return value is always ZPS_E_SUCCESS
.
Joiner TLVs
The device wanting to join an R23 network shall send the Network Commissioning Request command communicates information to the parent device with the Joiner TLVs directly in the message. The device shall include the Joiner Encapsulation Global TLV. In a multi-hop joining scenario the Trust Center and parent device will not be the same entity. Information about the sending device is communicated to the Trust Center through the Joiner Encapsulation Global TLV, which will be relayed in its entirety in the Update Device message. When a device creates the Joiner Encapsulation Global TLV it shall contain the following TLVs inside it:
Fragmentation Parameters Global TLV
If the device is not rejoining: Supported Key Negotiation Methods Global TLV
The Router R23 example contains the following code to set the Joiner TLVs before calling the stack initialization. These TLVs will be used by the stack as additional payload in the joining command. Their content is configured independently from the AIB attributes configuring the local node’s key negotiation options.
TLV_ENCAPS(g_sJoinerTlvs,
APP_SIZE_JOINREQ_TLV,
m_, tuTlvTestSpecific1,
m_, tuFragParams,
m_, tuSupportedKeyNegotiationMethods,
m_, tuTlvTestSpecific2) =
{
.u8Tag = ZPS_TLV_G_JOINERENCAPS, .u8Len = APP_SIZE_JOINREQ_TLV - 1,
/* This TLV is sent inside the Joiner Encapsulation */
{ .u16ZigbeeManufId = 0x1234, .au8Extra[0] = 0xAA, .au8Extra[1] = 0xBB,
.u8Tag = ZPS_TLV_G_MANUFSPEC, .u8Len = sizeof(tuTlvTestSpecific1) - 1 - ZPS_TLV_HDR_SIZE
},
{ .u16NodeId = 1, .u8FragOpt = 2, .u16InMaxLen = 10,
.u8Tag = ZPS_TLV_G_FRAGPARAMS, .u8Len = sizeof(tuFragParams) - 1 - ZPS_TLV_HDR_SIZE
},
{ .u8KeyNegotProtMask = ZPS_TLV_G_SUPPKEYNEGMETH_STATKEYREQ
| R23_DLK_KEY_PROTO_NEGOTIATION_MASK,
.u8SharedSecretsMask = R23_DLK_SHARED_SECRETS_MASK,
),