Migration notes for nRF Connect SDK v3.3.0
This document describes the changes required or recommended when migrating your application from nRF Connect SDK v3.2.x to nRF Connect SDK v3.3.0.
Required changes
The following changes are mandatory to make your application work in the same way as in previous releases.
Partition Manager deprecation
The Partition Manager is a component in the nRF Connect SDK and is responsible for handling the memory partitioning at build time.
This functionality is in the process of being deprecated and replaced by Zephyr’s default devicetree-based memory partitioning. It is recommended that all new designs using Nordic devices, excluding the nRF91 Series devices, are built with DTS instead of Partition Manager. Partition Manager will be removed from the nRF Connect SDK by the end of 2026 from the main branch.
For more information on how to configure partitions using DTS and how to migrate your existing configuration to DTS, see the Migrating partition configuration from Partition Manager to devicetree (DTS) page.
Build system
The nRF Connect SDK-specific mechanism for creating variant images is replaced with the Zephyr-provided
ExternalZephyrVariantProject_Add(..)function. The new function is defined and maintained in the Zephyr repository, providing a very similar API and functionality. The old function,ExternalNcsVariantProject_Add(..), is deprecated and kept for backward compatibility, but it will be removed in the future. To migrate your project, replace all instances ofExternalNcsVariantProject_Add(..)withExternalZephyrVariantProject_Add(..).For example, the following code snippet:
ExternalNcsVariantProject_Add( APPLICATION <src_image> VARIANT <variant_image> )
Should be modified as follows:
ExternalZephyrVariantProject_Add( SOURCE_APP <src_image> APPLICATION <variant_image> SNIPPET secondary-app-partition )
Samples and applications
This section describes the changes related to samples and applications.
nRF5340 Audio
When preparing the JSON file, the sirk field sets the Set Identity Resolving Key (SIRK) for the device set, which is used in the unicast applications.
The SIRK must be 16 characters long and cannot be the default SIRK defined in the Kconfig file (NRF5340_TWS_DEMO).
Fast Pair Locator Tag sample
The battery measurement configuration for the
thingy53/nrf5340/cpuappboard target has changed. The battery level is now measured and calculated by the Fuel Gauge library instead of direct ADC read and linear approximation of charge level. This change requires the following configuration updates:Define fuel gauge device in the DTS along with its source. In case of the
thingy53/nrf5340/cpuappboard target, the fuel gauge device is already defined in the board DTS asfuel_gaugewith the source set to the voltage dividervbatt. Enable the fuel gauge and source devices as follows:vbatt { status = "okay"; }; fuel_gauge { status = "okay"; };
Add the following entries to the Kconfig configuration:
CONFIG_FUEL_GAUGE=y CONFIG_FUEL_GAUGE_COMPOSITE=y CONFIG_VOLTAGE_DIVIDER=y
Alias the fuel gauge device to the
battery-fuel-gaugename in the DTS:aliases { battery-fuel-gauge = &fuel_gauge; };
Additionally, you can configure the Power Management module to decrease the power consumption of the voltage divider:
Add the
zephyr,pm-device-runtime-auto;property to the voltage divider and the fuel gauge device in the DTS.Add the following entries to the Kconfig configuration:
CONFIG_PM_DEVICE=y CONFIG_PM_DEVICE_RUNTIME=y
Matter
Changed partitions mapping for the nRF7002 DK in the Matter samples and applications. This change breaks the DFU between the previous nRF Connect SDK versions and the upcoming release. Ensure that you have valid partition mappings for the nRF7002 DK in your project to perform the DFU.
Removed the application-specific snippets from the Matter samples. Snippets are available now in the global
snippets/matterdirectory in the nRF Connect SDK root. To see the snippets documentation, refer to the Matter snippet collection page.Refer to the following list of changes for more information:
-
Removed the
lit_icdsnippet and enabled LIT ICD configuration by default.
-
Removed the
schedulessnippet. Use theschedules.confconfiguration overlay file instead.For example:
west build -b nrf54l15dk_nrf54l15_cpuapp -p -- -DEXTRA_CONF_FILE=schedules.conf
-
Removed the
onoff_plugsnippet. Use theonoff_plug.confconfiguration overlay file instead.For example:
west build -b nrf54l15dk_nrf54l15_cpuapp -p -- -DEXTRA_CONF_FILE=onoff_plug.conf
Renamed the
diagnostic-logssnippet tomatter-diagnostic-logs.
-
Thread
Removed all application-specific snippets from the Thread samples. New snippets are available now in the global
snippetsdirectory in the nRF Connect SDK root. Sample-specific configurations were converted to extra configuration files in each sample’sextra_conf/directory. To see the snippets documentation, refer to the OpenThread snippet collection page.Refer to the following table for the list of changes:
Thread samples — snippet and extra configuration file migration Sample
Removed snippet
Replacement
ci,ci_l2,debug,logging,usb,diag_gpioUse global snippets
ot-ci,ot-debug,ot-usb,ot-diag-gpiologging_l2Use extra configuration file:
extra_conf/l2_logging.conflow_powerUse extra configuration file:
extra_conf/low_power.confand extra Devicetree overlay file:extra_conf/low_power.overlaymultiprotocolUse extra configuration file:
extra_conf/multiprotocol.conftcat,tcpUse extra configuration files:
extra_conf/tcat.conf,extra_conf/tcp.confci,debug,loggingUse global snippets
ot-ci,ot-debug.mtdUse extra configuration file:
extra_conf/mtd.confmultiprotocol_bleUse extra configuration file:
extra_conf/multiprotocol_ble.confci,debug,l2,logging,logging_l2Use global snippets
ot-ci,ot-debug,ot-zephyr-l2.ci,debug,logging,usbUse global snippets
ot-ci,ot-debug,ot-usb.hciUse extra configuration file:
extra_conf/rcp_hci.confand extra Devicetree overlay file:extra_conf/rcp_hci.overlayvendor_hookSet the
CONFIG_OPENTHREAD_COPROCESSOR_VENDOR_HOOK_SOURCEKconfig option to the path to the vendor hook source file. The default one issrc/user_vendor_hook.cpp.Example for building with a global snippet and an overlay (CLI sample):
west build -b nrf54l15dk_nrf54l15_cpuapp -p -- -DSNIPPET=ot-debug -DEXTRA_CONF_FILE=extra_conf/tcp.conf
Libraries
This section describes the changes related to libraries.
LTE link control library:
The functions
lte_lc_modem_events_enable()andlte_lc_modem_events_disable()have been removed. Instead, use theCONFIG_LTE_LC_MODEM_EVENTS_MODULEKconfig option to enable modem events.
nRF Security library:
Removed:
The
CONFIG_PSA_WANT_KEY_TYPE_WPA3_SAE_PTKconfig option and replaced it withCONFIG_PSA_WANT_KEY_TYPE_WPA3_SAE.The
CONFIG_PSA_WANT_ALG_WPA3_SAEKconfig option and replaced it withCONFIG_PSA_WANT_ALG_WPA3_SAE_FIXEDandCONFIG_PSA_WANT_ALG_WPA3_SAE_GDH.The
CONFIG_MBEDTLS_PSA_STATIC_KEY_SLOT_BUFFER_SIZEKconfig option. The PSA Crypto API is able to infer the key slot buffer size based on the keys enabled in the build, so there is no need to define it manually.The
CONFIG_MBEDTLS_MAC_SHA256_ENABLEDKconfig option.
FTP client library:
The library has been moved to the Zephyr repository. Along with the transition, the following API changes were introduced:
You need to define the
ftp_clientinstance at application level instead of defining it internally within the library to allow to multiple instances of the library.All FTP client API functions now require an additional
struct ftp_client *clientparameter (using the client instance defined in the application). For example:int ftp_mkd(const char *folder);
Became:
int ftp_mkd(struct ftp_client *client, const char *folder);
All
ftp_reply_codereply code names have been extended with additional information, for exampleFTP_CODE_150becameFTP_CODE_150_FILE_STATUS_OK.All FTP client API functions now return
0on success instead of function-specific reply code.
Trusted Firmware-M
The default TF-M profile has changed. It is now
CONFIG_TFM_PROFILE_TYPE_NOT_SETin all cases except for the Thingy:91 and Thingy:91 X board targets, on which it is stillCONFIG_TFM_PROFILE_TYPE_MINIMAL. If your build is using the minimal TF-M profile, make sure to explicitly enableCONFIG_TFM_PROFILE_TYPE_MINIMAL. See Building and configuring TF-M for more information on the TF-M profiles.For the nRF91 Series board targets that have MCUboot and a TF-M profile other than minimal enabled, the default TF-M partition size (as configured with
CONFIG_PM_PARTITION_SIZE_TFM) has been reduced. In cases where it would previously be0x3FE00, it is now0x17E00. If your build was using the default value of0x3FE00and your TF-M flash usage is higher than the new value, make sure to explicitly set it to more than0x17E00to avoid flash overflow issues.
Recommended changes
The following changes are recommended for your application to work optimally after the migration.
Samples and applications
This section describes the changes related to samples and applications.
MCUboot
The
SB_CONFIG_MCUBOOT_GENERATE_DEFAULT_KMU_KEYFILEKconfig option has been deprecated. Replace it withSB_CONFIG_MCUBOOT_GENERATE_DEFAULT_KEY_FILEin your sysbuild configuration files.UUID configuration for MCUboot images has been moved from Kconfig options to Devicetree. For information about enabling this feature using Devicetree overlay files, see MCUboot devicetree configuration.
Libraries
This section describes the changes related to libraries.
Google Fast Pair
For applications and samples using the Google Fast Pair Service (GFPS) library:
The Fast Pair public headers have been relocated from
include/bluetooth/services/fast_pair/toinclude/bluetooth/fast_pair/. The Fast Pair implementation has been relocated fromsubsys/bluetooth/services/fast_pair/tosubsys/bluetooth/fast_pair/.The old header paths still work through deprecated forwarding headers, but they will emit a compiler warning. To avoid these warnings, update all Fast Pair includes in your application from the old paths to the new paths:
/* Old (deprecated) */ #include <bluetooth/services/fast_pair/adv_manager.h> #include <bluetooth/services/fast_pair/fast_pair.h> #include <bluetooth/services/fast_pair/fmdn.h> #include <bluetooth/services/fast_pair/uuid.h> /* New */ #include <bluetooth/fast_pair/adv_manager.h> #include <bluetooth/fast_pair/fast_pair.h> #include <bluetooth/fast_pair/fhn/fhn.h> #include <bluetooth/fast_pair/uuid.h>
The FMDN API header (
fmdn.h) has been additionally renamed to FHN (fhn/fhn.h). See the next point for details on the FMDN to FHN rename and further migration steps.If your project references the Fast Pair source directory directly (for example, in test
CMakeLists.txtfiles), update the path fromsubsys/bluetooth/services/fast_pairtosubsys/bluetooth/fast_pair.The Find My Device Network (FMDN) extension has been renamed to Find Hub Network (FHN), aligning with the updated Fast Pair Find Hub Network extension specification from Google.
The API elements have been renamed:
Types and functions: from
bt_fast_pair_fmdn_*tobt_fast_pair_fhn_*.Macros and enum values: from
BT_FAST_PAIR_FMDN_*toBT_FAST_PAIR_FHN_*.
Update API usage in your application code:
/* Old (deprecated) */ #include <bluetooth/services/fast_pair/fmdn.h> err = bt_fast_pair_fmdn_id_set(bt_id); provisioned = bt_fast_pair_fmdn_is_provisioned(); /* New */ #include <bluetooth/fast_pair/fhn/fhn.h> err = bt_fast_pair_fhn_id_set(bt_id); provisioned = bt_fast_pair_fhn_is_provisioned();
The deprecated FMDN API symbols are still available through the
include/bluetooth/services/fast_pair/fmdn.hheader and will trigger compiler deprecation warnings.The Kconfig options have been renamed from
CONFIG_BT_FAST_PAIR_FMDN_*toCONFIG_BT_FAST_PAIR_FHN_*. The deprecatedCONFIG_BT_FAST_PAIR_FMDN_*Kconfig options remain available as a full set of standalone options for backward compatibility. The old and new Kconfig option variants are mutually exclusive and cannot be used together. Using the deprecated options triggers a Kconfig deprecation warning during the build. Update your Kconfig configuration files:# Old (deprecated) CONFIG_BT_FAST_PAIR_FMDN=y CONFIG_BT_FAST_PAIR_FMDN_RING_COMP_ONE=y # New CONFIG_BT_FAST_PAIR_FHN=y CONFIG_BT_FAST_PAIR_FHN_RING_COMP_ONE=y
Note
If your project configuration relies on the
CONFIG_BT_FAST_PAIR_USE_CASE_LOCATOR_TAGKconfig option, this option currently does not automatically select the newCONFIG_BT_FAST_PAIR_FHNsymbol to maintain backward compatibility. To complete the migration, enable theCONFIG_BT_FAST_PAIR_FHNKconfig option explicitly in your project configuration (for example, inprj.conf) to avoid usage of the deprecatedCONFIG_BT_FAST_PAIR_FMDNoption:# Fast Pair use case configuration # Enable the FHN Kconfig options explicitly to avoid the deprecated FMDN Kconfig options. CONFIG_BT_FAST_PAIR_USE_CASE_LOCATOR_TAG=y CONFIG_BT_FAST_PAIR_FHN=y CONFIG_BT_FAST_PAIR_FHN_DULT=y
The FMDN implementation directory has been renamed from
subsys/bluetooth/services/fast_pair/fmdn/tosubsys/bluetooth/fast_pair/fhn/. If your project references the FMDN source directory directly (for example, in testCMakeLists.txtfiles), update the path fromsubsys/bluetooth/fast_pair/fmdntosubsys/bluetooth/fast_pair/fhn.The Partition Manager approach for defining the Fast Pair partition is now deprecated in favor of devicetree (DTS). The Bluetooth Fast Pair: Input device and Bluetooth Fast Pair: Locator tag samples have been migrated to use DTS overlay files instead of the Partition Manager for defining the
bt_fast_pairpartition. The nRF53 Series DFU configuration with MCUboot is the only exception that still requires the Partition Manager.Important
If your product has devices in the field using MCUboot DFU, the partition addresses and sizes in the new DTS overlay must match exactly the layout previously defined in the Partition Manager static configuration file (for example,
pm_static.yml). Mismatched partition addresses break backwards compatibility and prevent DFU from working between the old (PM-based) and new (DTS-based) firmware images.If your application uses the Partition Manager for the Fast Pair partition, perform the following steps to migrate to the DTS approach:
Translate the memory map from your Partition Manager static YAML file into a DTS overlay. Create a board-specific devicetree overlay file (for example,
boards/<board_target>.overlay) and redefine apartitionsnode under the NVM device node. The overlay must redefine the full NVM memory layout:boot_partition(MCUboot),slot0_partition(image-0),slot1_partition(image-1),bt_fast_pair_partition(Fast Pair), andstorage_partition(storage). If your configuration does not use MCUboot, you can remove theboot_partitionandslot1_partitionnodes.If you want to maintain the NVM layout compatibility, use the same addresses and sizes as in the original PM static file. For example, a PM static entry
bt_fast_pair: {address: 0xfc000, size: 0x1000}translates to the following DTS node:bt_fast_pair_partition: partition@fc000 { reg = <0xfc000 0x1000>; };
Refer to the board overlay files in the Bluetooth Fast Pair: Input device or Bluetooth Fast Pair: Locator tag samples for complete examples. The DTS-based NVM layouts in these samples are compatible with the previous layouts defined using Partition Manager in nRF Connect SDK v3.2.x.
If your configuration uses MCUboot, create a MCUboot-specific board overlay (for example,
sysbuild/mcuboot/boards/<board_target>.overlay) that includes the application overlay to share the same partition map. The MCUboot overlay must also set itszephyr,code-partitionchosen node to theboot_partition. For example:#include "../../../configuration/boards/<board_target>.overlay" / { chosen { zephyr,code-partition = &boot_partition; }; };
Disable the Partition Manager in your sysbuild configuration. You can do this in one of the following ways:
Set the option in a board-specific sysbuild configuration file:
SB_CONFIG_PARTITION_MANAGER=n
See the
sysbuild/configuration/<board_target>/sysbuild.conffile from the Bluetooth Fast Pair: Locator tag sample as an example.Alternatively, change the Kconfig default in your project’s
Kconfig.sysbuildfile if your DTS migration covers all supported board targets:config PARTITION_MANAGER default n
See the
Kconfig.sysbuildfile from the Bluetooth Fast Pair: Input device sample as an example.The global project configuration can also be changed if you use global
sysbuild.conffile that is applied to all board targets:SB_CONFIG_PARTITION_MANAGER=n
Enable the
CONFIG_USE_DT_CODE_PARTITIONKconfig option in your board-specific application configuration file. This option ensures that the application links into the DTS code partition when the Partition Manager is disabled.Note
If your configuration uses MCUboot, the
CONFIG_USE_DT_CODE_PARTITIONKconfig option is enabled by default in the application and MCUboot image. You do not need to explicitly enable it in your project configuration.
The
nrf5340dk/nrf5340/cpuapp/nsboard target has been removed from the Bluetooth Fast Pair: Input device sample’s default configuration. It is only available with the deprecated Partition Manager solution as a legacy build configuration (SB_CONFIG_PARTITION_MANAGER=y).
Drivers
This section describes the changes related to drivers.
The
mfd_npm13xx_reg_write2function has been renamed tomfd_npm13xx_reg_write_burst.