Migration notes for nRF Connect SDK v3.5.0 (Working draft)
This document describes the changes required or recommended when migrating your application from nRF Connect SDK v3.4.0 to nRF Connect SDK v3.5.0.
Required changes
The following changes are mandatory to make your application work in the same way as in previous releases.
Build and configuration system
This section describes the changes related to the build and configuration system.
Device Firmware Update (DFU) support for the nRF70 Series firmware patch has been removed, together with the following Kconfig options:
SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_WIFI_FW_PATCHSB_CONFIG_DFU_ZIP_WIFI_FW_PATCHCONFIG_NRF_WIFI_FW_PATCH_DFU
If your application enabled any of these options, remove them. The nRF70 Series firmware patch is no longer allocated a separate MCUboot update slot. If you set the
SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGESKconfig option or a static partition layout explicitly for a firmware-patch build, reduce the number of updatable images by one and remove the now-unused update-slot partitions. Storing the nRF70 Series firmware patch in external flash using theSB_CONFIG_WIFI_PATCHES_EXT_FLASH_XIPorSB_CONFIG_WIFI_PATCHES_EXT_FLASH_STOREKconfig option is not affected.
The HAL preprocessor symbols listed in HAL global define deprecation are no longer defined globally. In the application code, replace references to the deprecated symbols with the corresponding Kconfig symbols or devicetree properties shown in the table.
HAL preprocessor symbols replacements Deprecated symbol
Replacement symbol
Notes
NRF51Board-selected
NRF51422_XXAACONFIG_SOC_NRF51822_QFAABoard-selected
NRF51422_XXABCONFIG_SOC_NRF51822_QFABBoard-selected
NRF51422_XXACCONFIG_SOC_NRF51822_QFACBoard-selected
NRF52805_XXAACONFIG_SOC_NRF52805Board-selected
NRF52810_XXAACONFIG_SOC_NRF52810Board-selected
NRF52811_XXAACONFIG_SOC_NRF52811Board-selected
NRF52820_XXAACONFIG_SOC_NRF52820Board-selected
NRF52832_XXAACONFIG_SOC_NRF52832Board-selected
NRF52833_XXAACONFIG_SOC_COMPATIBLE_NRF52833Board-selected
NRF52840_XXAACONFIG_SOC_NRF52840Board-selected
NRF5340_XXAA_APPLICATIONCONFIG_SOC_COMPATIBLE_NRF5340_CPUAPPBoard-selected
NRF5340_XXAA_NETWORKCONFIG_SOC_COMPATIBLE_NRF5340_CPUNETBoard-selected
NRF54H20_XXAACONFIG_SOC_NRF54H20_CPUAPP,CONFIG_SOC_NRF54H20_CPURAD,CONFIG_SOC_NRF54H20_CPUPPR, orCONFIG_SOC_NRF54H20_CPUFLPRBoard-selected
NRF54L05_XXAABoard-selected
DEVELOP_IN_NRF54L15CONFIG_SOC_NRF54L05_DEVELOP_IN_NRF54L15orCONFIG_SOC_NRF54L10_DEVELOP_IN_NRF54L15Board-selected
NRF54L10_XXAABoard-selected
NRF54L15_XXAACONFIG_SOC_NRF54L15_CPUAPP,CONFIG_SOC_NRF54L15_CPUFLPR, orCONFIG_SOC_COMPATIBLE_NRF54L15Board-selected
NRF54LC10A_XXAACONFIG_SOC_NRF54LC10A_CPUAPPorCONFIG_SOC_NRF54LC10A_CPUFLPRBoard-selected
DEVELOP_IN_NRF54LM20BBoard-selected
NRF54LM20A_XXAACONFIG_SOC_NRF54LM20A_CPUAPP,CONFIG_SOC_NRF54LM20A_CPUFLPR, orCONFIG_SOC_COMPATIBLE_NRF54LM20ABoard-selected
NRF7120_ENGA_XXAACONFIG_SOC_NRF7120_ENGA_CPUAPP,CONFIG_SOC_NRF7120_ENGA_CPUFLPR, orCONFIG_SOC_COMPATIBLE_NRF7120_ENGABoard-selected
NRF54LM20B_XXAACONFIG_SOC_NRF54LM20B_CPUAPPorCONFIG_SOC_NRF54LM20B_CPUFLPRBoard-selected
NRF54LS05A_XXAACONFIG_SOC_NRF54LS05A_CPUAPPBoard-selected
DEVELOP_IN_NRF54LS05BCONFIG_SOC_NRF54LS05A_DEVELOP_IN_NRF54LS05BBoard-selected
NRF54LS05B_XXAACONFIG_SOC_NRF54LS05B_CPUAPPBoard-selected
NRF54LV10A_XXAACONFIG_SOC_NRF54LV10A_CPUAPPorCONFIG_SOC_NRF54LV10A_CPUFLPRBoard-selected
NRF9120_XXAACONFIG_SOC_NRF9120Board-selected
NRF9160_XXAACONFIG_SOC_NRF9160Board-selected
NRF9220_XXAACONFIG_SOC_NRF9251_CPUAPP,CONFIG_SOC_NRF9251_CPUPPR, orCONFIG_SOC_NRF9251_CPUFLPRBoard-selected
NRF9230_ENGB_XXAACONFIG_SOC_NRF9230_ENGB_CPUAPP,CONFIG_SOC_NRF9230_ENGB_CPURAD, orCONFIG_SOC_NRF9230_ENGB_CPUPPRBoard-selected
NRF_APPLICATIONMatching
CONFIG_SOC_*_CPUAPPsymbol for your board target (for example,CONFIG_SOC_NRF54LC10A_CPUAPPorCONFIG_SOC_NRF9251_CPUAPP)Board-selected
NRF_FLPRMatching
CONFIG_SOC_*_CPUFLPRsymbol for your board target (for example,CONFIG_SOC_NRF54LC10A_CPUFLPRorCONFIG_SOC_NRF9251_CPUFLPR)Board-selected
NRF_RADIOCORECONFIG_SOC_NRF54H20_CPURADorCONFIG_SOC_NRF9230_ENGB_CPURADBoard-selected
NRF_PPRCONFIG_SOC_NRF54H20_CPUPPR,CONFIG_SOC_NRF9230_ENGB_CPUPPR, orCONFIG_SOC_NRF9251_CPUPPRBoard-selected
NRF_TRUSTZONE_NONSECUREBoard-selected for non-secure firmware images
ENABLE_APPROTECTKconfig
ENABLE_APPROTECT_USER_HANDLINGKconfig
ENABLE_AUTHENTICATED_APPROTECTSet together with
ENABLE_APPROTECT_USER_HANDLINGENABLE_SECURE_APPROTECTKconfig
ENABLE_SECUREAPPROTECTAlias of
ENABLE_SECURE_APPROTECTENABLE_SECURE_APPROTECT_USER_HANDLINGKconfig
ENABLE_AUTHENTICATED_SECUREAPPROTECTSet together with
ENABLE_SECURE_APPROTECT_USER_HANDLINGENABLE_TRACEKconfig
ENABLE_SWOKconfig
NRF_SKIP_FICR_NS_COPY_TO_RAMCONFIG_SOC_NRF5340_CPUAPPorCONFIG_SOC_SERIES_NRF91Implicit for these targets, use Kconfig checks instead of the define
NRF_SKIP_CLOCK_CONFIGURATIONKconfig
NRF_DISABLE_FICR_TRIMCNFKconfig
NRF_SKIP_TAMPC_SETUPKconfig
NRF_SKIP_GLITCHDETECTOR_DISABLEKconfig
NRF54L_CONFIGURATION_56_ENABLEKconfig, enabled by default on nRF54L Series SoCs
NRF91_ERRATA_36_ENABLE_WORKAROUNDCONFIG_NRF91_ANOMALY_36_WORKAROUNDTF-M build configuration
NRF_CONFIG_NFCT_PINS_AS_GPIOSnfct-pins-as-gpiosproperty on theuicrornfctdevicetree nodeDevicetree
NRF_CONFIG_GPIO_AS_PINRESETgpio-as-nresetproperty on theuicrdevicetree nodeDevicetree
NRF_CONFIG_SWD_PINS_AS_GPIOSswd-pins-as-gpiosproperty on thetampcdevicetree nodeDevicetree
NRF_CONFIG_CPU_FREQ_MHZDevicetree
clock-frequencyon thehfpllorcpuappnode, orCONFIG_TFM_CPU_FREQ_MHZin TF-M buildsDerived from devicetree or TF-M Kconfig
Alternatively, include
mdk_config.hin the source files that still need the HAL preprocessor symbols. The header provides mapping between the Kconfig symbols or devicetree properties and corresponding HAL preprocessor symbols.Partition Manager, which was deprecated in the nRF Connect SDK v3.3.0, has been removed. All boards and applications must now use DTS partitioning. For details about porting from nRF Connect SDK 3.3, see the Migrating partition configuration from Partition Manager to devicetree (DTS) page.
Samples and applications
This section describes the changes related to samples and applications.
Bluetooth Fast Pair samples
The Bluetooth Fast Pair: Locator tag and Bluetooth Fast Pair: Input device samples no longer support the nRF52 and nRF53 Series devices. The following board targets have been removed from both samples:
nrf52dk/nrf52832nrf52840dk/nrf52840nrf5340dk/nrf5340/cpuappnrf5340dk/nrf5340/cpuapp/ns
Additionally, the following board targets have been removed from the Bluetooth Fast Pair: Locator tag sample:
nrf52833dk/nrf52833thingy53/nrf5340/cpuappthingy53/nrf5340/cpuapp/ns
If your application is based on one of these samples and targets an nRF52 or nRF53 Series device, continue using the nRF Connect SDK v3.4.0 release or migrate your design to a supported nRF54L Series device.
Matter
All Matter samples, shared sample code, devicetree partition files, and Matter-specific snippets have been moved from
sdk-nrfto the separate Matter add-on repository (ncs-matter). The Matter bridge and Thingy:53 weather station reference applications are also relocated into the add-on underncs-matter/samples/.If your project is based on a Matter sample or application from
sdk-nrfv3.4.0 or earlier, you must migrate to the add-on structure to continue receiving sample updates. See Migrating Matter projects from sdk-nrf to Matter add-on for the full migration guide, including path mapping tables, Kconfig symbol renames, devicetree include updates, snippet name changes, and workspace setup instructions.
Libraries
This section describes the changes related to libraries.
Location library:
The library now always uses the chosen
zephyr,wifinode to find the used Wi-Fi device. If your application uses the deprecatedncs,location-wifinode, you need to change it to use thezephyr,wifinode instead:chosen { zephyr,wifi = &mywifi; };
Trusted storage library:
The library has been deprecated and will be removed in a future release. Use the Secure Storage subsystem instead (
CONFIG_SECURE_STORAGE). If you have an existing installation that uses the Trusted Storage library with entries stored in non-volatile memory, you can switch to using Secure Storage without losing any data by enabling theCONFIG_SECURE_STORAGE_TRUSTED_STORAGE_COMPATIBILITYKconfig option.
Drivers
This section describes the changes related to drivers.
Wi-Fi drivers for the nRF70 and nRF71 Series:
Updated the default values of the following Kconfig options to reduce the default RAM footprint of the Wi-Fi drivers:
CONFIG_NRF70_RX_NUM_BUFS(orCONFIG_NRF71_RX_NUM_BUFS) from48to16.CONFIG_NRF70_MAX_TX_AGGREGATION(orCONFIG_NRF71_MAX_TX_AGGREGATION) from12to4.CONFIG_NRF_WIFI_DATA_HEAP_SIZEfrom130000to65536.
If your application relies on the previous default values, set these Kconfig options to their earlier values.
Clock control nrf deprecation
The Clock Control driver has been updated for the following clocks on nRF52, nRF53, nRF91, and nRF54L Series devices:
HFCLK
LFCLK
XO
XO24M
HFCLK192M
HFCLKAUDIO
To restore the legacy driver implementation, set CONFIG_CLOCK_CONTROL_NRF to y.
To migrate your code from nRF Connect SDK v3.4.0 to nRF Connect SDK v3.5.0, complete the following steps:
Enable each application-controlled clock in the application-specific or board-specific devicetree overlay file.
This enables the corresponding clock driver. For example:
/* if nRF54L XO is to be controlled */ &xo { status = "okay"; }; /* if nRF52, nRF53 HFCLK is to be controlled */ &hfclk { status = "okay"; }; /* if nRF52, nRF53, nRF91 or nRF54L LFCLK is to be controlled */ &lfclk { status = "okay"; }; /* if HFCLK192M is to be controlled */ &hfclk192m { status = "okay"; }; /* if XO24M is to be controlled */ &xo24m { status = "okay"; }; /* if HFCLKAUDIO is to be controlled */ &hfclkaudio { status = "okay"; };
Rename the following Kconfig options:
Move the following Kconfig options to the
nordic,nrf-clock-lfclkdevicetree node:Replace
CONFIG_CLOCK_CONTROL_NRF_K32SRC_FREQUENCYwith thek32src-frequencyproperty.Replace
CONFIG_CLOCK_CONTROL_NRF_SOURCEchoice with thek32srcenum property.Replace
CLOCK_CONTROL_NRF_K32SRC_RCandNRFX_CLOCK_LF_SRC_RCwith thek32src = "rc".Replace
CLOCK_CONTROL_NRF_K32SRC_XTALandNRFX_CLOCK_LF_SRC_XTALwith thek32src = "xtal".Replace
CLOCK_CONTROL_NRF_K32SRC_SYNTHandNRFX_CLOCK_LF_SRC_SYNTHwith thek32src = "synth".Replace
CLOCK_CONTROL_NRF_K32SRC_EXT_LOW_SWINGandNRFX_CLOCK_LF_SRC_LOW_SWINGwith thek32src = "ext_low_swing".Replace
CLOCK_CONTROL_NRF_K32SRC_EXT_FULL_SWINGandNRFX_CLOCK_LF_SRC_FULL_SWINGwith thek32src = "ext_full_swing".Replace
CONFIG_CLOCK_CONTROL_NRF_ACCURACY_PPMchoice with thek32src-accuracy-ppmenum property.Replace
CLOCK_CONTROL_NRF_K32SRC_500PPMwith thek32src-accuracy-ppm = <500>.Replace
CLOCK_CONTROL_NRF_K32SRC_250PPMwith thek32src-accuracy-ppm = <250>.Replace
CLOCK_CONTROL_NRF_K32SRC_150PPMwith thek32src-accuracy-ppm = <150>.Replace
CLOCK_CONTROL_NRF_K32SRC_100PPMwith thek32src-accuracy-ppm = <100>.Replace
CLOCK_CONTROL_NRF_K32SRC_75PPMwith thek32src-accuracy-ppm = <75>.Replace
CLOCK_CONTROL_NRF_K32SRC_50PPMwith thek32src-accuracy-ppm = <50>.Replace
CLOCK_CONTROL_NRF_K32SRC_30PPMwith thek32src-accuracy-ppm = <30>.Replace
CLOCK_CONTROL_NRF_K32SRC_20PPMwith thek32src-accuracy-ppm = <20>.Replace
CONFIG_NRFX_CLOCK_LFXO_TWO_STAGE_ENABLEDwithk32src = "xtal"ork32src = "ext_low_swing"ork32src = "ext_full_swing".
Update your application to use the new clock control API.
Use the following mapping when you update the API calls:
mgris the on-off manager created fornordic,nrf-clockand obtained usingz_nrf_clock_control_get_onoff.devis the device compatible withnordic,nrf-clock.sysis the subsystem fornordic,nrf-clock.The new clocks implementation does not use it.
new_devis the device that corresponds to the previously usedsysvalue. It must be compatible with one of the following nodes:nordic,nrf-clock-lfclknordic,nrf-clock-hfclknordic,nrf-clock-xonordic,nrf-clock-hfclk192mnordic,nrf-clock-xo24mnordic,nrf-clock-hfclkaudio
The following example shows the deprecated API usage and the corresponding new API usage:
// Old API usage (deprecated) z_nrf_clock_calibration_init(&mgrs); //1 onoff_release(mgr) //2 onoff_request(mgr, &cli); //3 onoff_cancel_or_release(mgr, &cli); //4 clock_control_on(dev,sys) //5 clock_control_off(dev,sys) //6 clock_control_async_on(dev,sys) //7 clock_control_get_status(dev,sys) //8 z_nrf_clock_control_get_onoff(sys) //9 // New API usage z_nrf_clock_calibration_init(); //1 nrf_clock_control_release(new_dev, NULL); //2 nrf_clock_control_request(new_dev, NULL, &cli); //3 nrf_clock_control_cancel_or_release(new_dev, NULL, &cli); //4 clock_control_on(new_dev, NULL) //5 clock_control_off(new_dev, NULL) //6 clock_control_async_on(new_dev, NULL) //7 clock_control_get_status(new_dev, NULL) //8 // Remove all uses of z_nrf_clock_control_get_onoff //9
Recommended changes
The following changes are recommended for your application to work optimally after the migration.
Build and configuration system
No changes since the latest nRF Connect SDK release.
Samples and applications
This section describes the changes related to samples and applications.
No changes since the latest nRF Connect SDK release.
Libraries
This section describes the changes related to libraries.
No changes since the latest nRF Connect SDK release.