Release Notes for nRF Connect SDK Bare Metal option v2.0.0
Bare Metal v2.0.0 is a major release that expands hardware support, adds maturity to key features, and introduces several new libraries, services, and samples. This release is based on nRF Connect SDK v3.3.0.
Highlights
Added support for three new SoCs with their dedicated development kits: the nRF54LM20A (nRF54LM20 DK), nRF54LS05B (nRF54LS05 DK), and nRF54LV10A (nRF54LV10 DK). For more details regarding the maturity of features on those SoCs, refer to Software maturity levels.
Updated the SoftDevice to v10.0.0, a new major version that targets both the existing and newly added devices. See the SoftDevice release notes for details.
Expanded the Bluetooth® LE Central role support through additional libraries and samples, including the Battery Service (BAS) Client and Nordic UART Service (NUS) Client services, and the Bluetooth: Nordic UART Service Central sample.
Core libraries for Bluetooth LE Central role applications, Bluetooth: Scan library and Bluetooth: Database Discovery library, are now Supported.
Improved the quality and maintainability through fixes and hardening across Bluetooth LE libraries, drivers, DFU, NFC integration, and documentation, including clearer SoftDevice documentation per SoC variant where applicable.
Supported hardware
Bare Metal v2.0.0 provides a set of samples for the following development kits of the nRF54L Series:
nRF54L15 DK - with build targets supporting three SoCs: nRF54L15, nRF54L10, and nRF54L05.
nRF54LM20 DK, supporting the nRF54LM20A SoC.
nRF54LS05 DK, supporting the nRF54LS05B SoC.
nRF54LV10 DK, supporting the nRF54LV10A SoC.
SoftDevice variants
This release includes two versions of the SoftDevice, the Nordic Bluetooth LE protocol stack used on the nRF54L DKs. Both SoftDevices have been updated to v10.0.0 in this release:
S115 - Supports the peripheral role only. Recommended for memory-constrained peripheral-only applications.
S145 - Supports both peripheral and central roles, and allows a higher number of simultaneous connections. Recommended for applications that act as a central, or that need to handle more than one connection.
Separate documentation and API references are now provided for each SoC-specific variant of the S115 and S145 SoftDevices (nRF54L15, nRF54LM20, nRF54LS05, and nRF54LV10). See SoftDevice release notes and migration documents and API documentation for details.
Release tag
The release tag for the Bare Metal manifest repository is v2.0.0.
Check the west.yml file for the corresponding tags in the project repositories.
To use this release, install it using nRF Connect for VS Code extension by following the instructions in Installing the nRF Connect SDK Bare Metal option.
Alternatively, check out the tag in the manifest repository, run west config manifest.path nrf-bm, and then west update.
This release of Bare Metal is based on nRF Connect SDK v3.3.0.
IDE and tool support
nRF Connect for Visual Studio Code is the recommended IDE for Bare Metal v2.0.0. See the Installation section for more information about supported operating systems and toolchain.
Changelog
The following sections provide detailed lists of changes by component.
SDK installation
Updated the steps to install prerequisites in the Installing the nRF Connect SDK Bare Metal option page. Installation of the recommended version of SEGGER J-Link is now handled by nRF Connect for Desktop.
S115 SoftDevice
Updated the SoftDevice to v10.0.0. See the SoftDevice release notes for details.
S145 SoftDevice
Updated the SoftDevice to v10.0.0. See the SoftDevice release notes for details.
SoftDevice Handler
Added:
The
CONFIG_NRF_SDH_LOG_SD_INFOKconfig option to log SoftDevice information like version and firmware ID when enabling the SoftDevice.The
CONFIG_NRF_SDH_BLE_LOG_SD_RAM_USAGEKconfig option to log SoftDevice RAM usage and the application RAM minimum address when enabling Bluetooth LE in the SoftDevice.The
nrf_sdh_ble_sd_ram_usage_get()function for returning the number of bytes used or required for SoftDevice RAM.
Updated:
The
NRF_SDH_STATE_EVT_OBSERVERandNRF_SDH_STACK_EVT_OBSERVERmacros to not declare the handler prototype.The log error message when there is insufficient RAM for the SoftDevice when enabling Bluetooth LE in the SoftDevice.
Boards
Added support for the following boards: See Software maturity levels for details.
PCA10184 (nRF54LM20 DK)
PCA10188 (nRF54LV10 DK)
PCA10214 (nRF54LS05 DK)
Updated:
The SRAM sizes for the
bm_nrf54l15dkboard target to not overlap with VPR context.The board memory layout for all boards to align with the new SoftDevice.
The LPUARTE pins in the
board-config.hfile forbm_nrf54l15dkto avoid conflicts for LEDs, buttons, and other peripherals where possible.The board RAM memory layout for all boards to use a single node for SoftDevice RAM, combining the previously separate static and dynamic nodes.
Disabled all Peripheral Resource Sharing (PRS) boxes for the
bm_nrf54l15dkboard variants.
Build system
Updated the Kconfig dependencies, including those for drivers, libraries, and Bluetooth LE services.
DFU
Added:
Experimental support for the nRF54LV10A, nRF54LM20A, and nRF54LS05B SoCs.
The
CONFIG_BM_MCUMGR_GRP_IMG_BUFFER_SZKconfig option to set the size of the data buffer.The
CONFIG_BM_MCUMGR_GRP_IMG_NVM_WRITE_BLOCKS_MAXKconfig option to set the maximum number of non-volatile memory wear units written to NVM at once.
Updated:
The maturity status of DFU for the nRF54L15, nRF54L10, and nRF54L05 SoCs from Experimental to Supported.
Image upload NVM writes to be handled in synchronization with SD.
The support for setting up the DFU Device Bluetooth name remotely. This new implementation consumes less RAM and RRAM than the previous one. The new solution is enabled by the
CONFIG_BM_FLAT_SETTINGS_BLUETOOTH_NAMEKconfig option. It employs the newly added inter-application RAM clipboard storage.Firmware loader to not clear the retained DFU Device Bluetooth name after loading it from retained memory. This allows the advertising name to persist after updating SoftDevice and/or firmware loader, or if the application image validation fails and the device reboots into firmware loader.
Removed:
The
CONFIG_NCS_BM_SETTINGS_BLUETOOTH_NAMEKconfig option and zephyr-rtos settings subsystem handlers for setting up the DFU Device Bluetooth name remotely.
Interrupts
Added the
BM_IRQ_DIRECT_CONNECTandBM_IRQ_SET_PRIORITYmacros that should be used when connecting IRQ and setting IRQ priority.
Drivers
Low Power UART with EasyDMA (LPUARTE) driver:
Updated to use the Bare Metal GPIOTE library.
Removed the
gpiote_instandgpiote_inst_nummembers from thebm_lpuarte_configstructure.
Subsystems
Storage
-
Added:
The capability to compile more than one backend. An instance can be configured to use a specific backend by using the
bm_storage_config.apifield.The
bm_storage_info.wear_unitfield to represent the NVM wear granularity.The
bm_storage_nvm_info_get()function to retrieve NVM information, such as the size of the program unit.The
bm_storage_config.is_wear_alignedconfiguration flag to enforce wear unit alignment on operations.The
bm_storage_config.is_write_paddedconfiguration flag to automatically pad write operations to the alignment unit.The
bm_storage_evt_dispatch()function for event delivery.
Updated:
The
bm_storage_is_busy()function to returnfalseinstead oftruewhen called with aNULLpointer or an uninitialized instance.The
bm_storage_init()function to return an error when the instance is already initialized.The SoftDevice, RRAM, and native_sim backends to support deinitialization.
The SoftDevice, RRAM, and native_sim backends to support the erase operation.
The
bm_storage_info.erase_valuefield fromuint32_ttouint8_t.The SoftDevice backend to support chunking of write operations.
The
no_explicit_erasefield inbm_storage_infoby renaming it tois_erase_before_writeto explicitly convey that the memory must be erased before it can be written to.The SoftDevice backend’s
bm_storage_info.program_unitfrom 16 to 4 bytes, reflecting the true minimum programmable unit.The
start_addrandend_addrfields inbm_storage_configandbm_storageby replacing them with byaddrandsize. The API now uses relative addressing (0-based offsets within the partition).The
bm_storage_write()andbm_storage_erase()functions to return-ENOMEMwhen out of memory, instead of-EIO.The
bm_storage_read(),bm_storage_write(), andbm_storage_erase()functions to return-EINVALon alignment errors, instead of-EFAULT.The
bm_storage_evt_dispatch_typeenum and thebm_storage_evt.dispatch_typefield by replacing them with a booleanbm_storage_evt.is_async.All backends to use the new
bm_storage_evt_dispatch()function for event delivery. For backends without an internal operation queue (such as RRAM), enablingbm_scheduler()defers synchronous events to the main thread context.The SoftDevice backend to process operations iteratively instead of recursively when the SoftDevice is disabled. Re-entrant calls from event handlers are safely enqueued and processed by the loop.
bm_rmemlibrary:Added the new inter-application RAM clipboard storage. It is a simple SRAM-based storage mechanism designed to provide data clipboards between applications. It can be enabled by the
CONFIG_BM_RMEMKconfig option.
Filesystem
Bare Metal Zephyr Memory Storage (BM_ZMS)
Added the
bm_zms_fs_config.storage_apifield to select the storage backend API.Fixed a bug where a read immediately following a write could start searching for data using an invalid address if the write triggered a sector close. A backup read address is now stored before closing a sector to ensure that read operations start from a valid address.
Libraries
Added the Bare Metal GPIOTE library.
Bluetooth: Peer Manager library:
Added:
The
CONFIG_BLE_GATT_DB_MAX_CHARSKconfig option for configuring the number of characteristics in able_gatt_db_srvstructure. The number of characteristics was previously set using theBLE_GATT_DB_MAX_CHARSdefinition in theble_gatt_db.hfile.A missing word alignment check of the
dataparameter to thepm_peer_data_store()function.
Updated the
paramsunion field of thepm_evtstructure to an anonymous union.Fixed:
The spelling of the
characteristicsmember of theble_gatt_db_srvstructure.The
pm_peer_data_store(),pm_peer_data_remote_db_store(), andpm_peer_data_app_data_store()functions to allow data lengths that are not word aligned.An issue where the
pm_peer_delete()function under some circumstances could fail to delete peer data.
Removed the
CONFIG_MBEDTLS_PSA_STATIC_KEY_SLOT_BUFFER_SIZEKconfig option. The PSA Crypto core can deduce the key slot buffer size based on the keys enabled in the build, so there is no need to define the size manually.
Button handling library library:
Updated to use the Bare Metal GPIOTE library.
Bluetooth: Advertising library library:
Added:
The
constkeyword to the configuration structure parameter of theble_adv_init()function to reflect that the function only reads from the configuration and does not modify it.The advertising name to the configuration structure of the
ble_adv_init()function.The
ble_adv_stop()function to stop advertising.
Updated:
The
CONFIG_BLE_ADV_EXTENDED_ADVERTISINGKconfig option to be disabled by default and dependent on the newCONFIG_SOFTDEVICE_EXTENDED_ADVERTISINGKconfig option.The
CONFIG_BLE_ADV_DIRECTED_ADVERTISINGKconfig option to be disabled by default.
Fixed:
An issue causing fast advertising with allow list to incorrectly send event
BLE_ADV_EVT_FASTwhen it should have sent eventBLE_ADV_EVT_FAST_ALLOW_LIST.An issue causing slow advertising with allow list to incorrectly send event
BLE_ADV_EVT_SLOWwhen it should have sent eventBLE_ADV_EVT_SLOW_ALLOW_LIST.An issue in the data module where the short name would not be matched in certain cases.
Removed:
The
CONFIG_BLE_ADV_NAMEKconfig option. Instead, the application must set the device name by calling thesd_ble_gap_device_name_set()function.
Bluetooth: Database Discovery library library:
Updated:
The maturity status of the library to Supported.
The
paramsunion field of theble_db_discovery_evtstructure to an anonymous union.The
BLE_DB_DISCOVERY_COMPLETEevent to pass the service discovery result by-reference instead of by-value. This removes one copy operation for eachBLE_DB_DISCOVERY_COMPLETEevent and significantly reduces the size of bothble_db_discovery_evtandble_db_discoverystructures.
Fixed:
An issue where starting a second round of discovery, after either a disconnect or a completed discovery, could result in incorrect internal state. This could eventually lead to insufficient memory for discovering new services.
Removed:
The
ble_db_discovery_user_evtstructure after a rework.
Bluetooth: Scan library:
Added the
ble_scan_filter_datastructure as input to theble_scan_filter_add()function.Updated:
The maturity status of the library to Supported.
The functions to use the
uint32_ttype instead ofintwhen returning nrf_errors.The
paramsunion field of theble_scan_evtstructure to an anonymous union.The
allow_list_usedfunction by renaming it toble_scan_is_allow_list_used().The name of the
ble_gap_evt_adv_report_tfields in theble_scan_evtstruct toadv_report.
Fixed an issue with active scanning where the multifilter match was used. A match would not be triggered unless the data for all types of enabled filters were provided in either the advertising or scan response data. Now, the data can be provided in a mix of the advertising and scan response data.
Bluetooth LE Connection state library:
Deprecated the library. Applications and other libraries and services should keep an internal state of required connections instead.
Bluetooth LE Services
Added:
The Battery Service (BAS) Client service.
The
ble_cgms_config.initial_comm_intervalto theble_cgms_configstructure to set the initial communication interval.
Updated:
The Bluetooth: Heart Rate Service Central (
ble_hrs_central) by renaming it to the Heart Rate Service (HRS) Client sample.All services to return errors from the SoftDevice directly.
Removed the BMS authorization code Kconfig options (
CONFIG_BLE_BMS_AUTHORIZATION_CODEandCONFIG_BLE_BMS_USE_AUTHORIZATION_CODE) from the service library, as they are only used by the BMS sample.-
Updated:
The
ble_bas_battery_level_update()function to be able to send multiple notifications back to back with the same battery level value. Furthermore, the function will now only update the battery level characteristic value if the value changes.The
ble_bas_battery_level_update()function to returnNRF_ERROR_INVALID_PARAMif the battery level value is outside of the valid range of0to100.The
ble_bas_battery_level_update()function with support for notifying the current battery level instead of providing a new battery level value and then notifying. This is done by setting the battery level parameter of theble_bas_battery_level_update()to the value ofBLE_BAS_BATTERY_LEVEL_LAST.
Removed the
ble_bas_battery_level_notifyfunction in favor of theble_bas_battery_level_update()function.
-
Updated:
The
ble_hrs_heart_rate_measurement_send()function to not consume RR interval data when notifications are disabled in the CCCD and notification of the HRM data would fail.The
ble_hrs_heart_rate_measurement_send()function to log the heart rate value on the debug log level. Previously, this value was logged on the info log level, which caused excessive logging when periodically sending heart rate measurements.
Heart Rate Service (HRS) Client service:
Added:
The
ble_hrs_client_hrm_notif_disable()function to disable Heart Rate Measurement notifications.Validation of the
ble_hrs_client_config.evt_handlerandble_hrs_client_config.gatt_queueconfiguration fields inble_hrs_client_init().State validation in the
ble_hrs_client_hrm_notif_enable()andble_hrs_client_hrm_notif_disable()functions, returningNRF_ERROR_INVALID_STATEwhen the connection or CCCD handle has not been assigned.
Updated:
The
ble_hrs_client_evtstructure by aligning with other client services.The
hrs_dbstructure by renaming it toble_hrs_handles.The
ble_hrmstructure by renaming it toble_hrs_measurement.The
paramsunion field of theble_hrs_client_evtstructure to an anonymous union.
Fixed a potential buffer over-read when parsing malformed Heart Rate Measurement notifications.
-
Removed the
ble_nus_client_contextstructure and thelink_ctxfield from theble_nus_evtstructure. The service now reads the CCCD directly from the SoftDevice instead of caching notification state internally.
Nordic UART Service (NUS) Client service:
Added the Nordic UART Service (NUS) client.
Human Interface Device Service (HIDS) service:
Updated the
paramsunion field of theble_hids_evtstructure to an anonymous union.
Bond Management Service (BMS) service:
Updated the security configuration of the
ble_bms_configstructure to align with other services. Added theBLE_BMS_CONFIG_SEC_MODE_DEFAULTmacro to set the default security configuration.
Libraries for NFC
Added:
The NFC libraries for NFC Connection Handover and Bluetooth LE Out-of-Band (OOB) pairing.
The workaround to ensure the
FRAMEDELAYMAXregister is set to the default value when a field is lost. This avoids violating protocol timing, which can lead readers to reject the NFC tag’s response.
Updated:
The maturity status of NFC libraries from Experimental to Supported for the nRF54L05, nRF54L10, and nRF54L15 SoCs. The nRF54LM20A SoC is still in Experimental quality.
The NFC subsystem code by migrating it to Bare Metal. It does not reuse code from nRF Connect SDK anymore. The NFC-related Kconfig options provided by Bare Metal have the
BM_NFC_prefix. The following list shows the mapping from nRF Connect SDK Kconfig options to Bare Metal Kconfig options:CONFIG_NFCT_IRQ_PRIORITY–>CONFIG_BM_NFCT_IRQ_PRIORITYCONFIG_NFC_PLATFORM_LOG_LEVEL*–>CONFIG_BM_NFC_PLATFORM_LOG_LEVEL*CONFIG_NFC_NDEF*–>CONFIG_BM_NFC_NDEF*CONFIG_NFC_T4T_NDEF_FILE–>CONFIG_BM_NFC_T4T_NDEF_FILE
Use
#include <bm/nfc/...>to include NFC-related header files provided by Bare Metal instead of#include <nfc/...>.
Utils
Bluetooth LE Date Time characteristic type:
Moved the
ble_date_time.hheader file frominclude/bm/bluetooth/services/toinclude/bm/bluetooth/.
-
Renamed the
common.hheader file toble_common.h.Moved the
ble_common.hheader file frominclude/bm/bluetooth/services/toinclude/bm/bluetooth/.Removed the
gap_conn_sec_mode_from_u8function from theble_common.hfile. Use theBLE_GAP_CONN_SEC_MODE_OPENand similar macros instead.Updated the return value of the
is_notification_enabled()andis_indication_enabled()functions toboolto reflect that it returns a boolean value and not anuint16_t.
Samples
Updated the prefix for sample Kconfig options from
APPtoSAMPLE.Removed the battery measurement simulation from the following samples:
Aligned LED and button behavior across samples.
All samples that are compatible with the new board targets PCA10188 (nRF54LV10 DK), PCA10184 (nRF54LM20 DK), and PCA10214 (nRF54LS05 DK) have been updated to reflect support for these boards.
Bluetooth LE samples
Added:
The Bluetooth: Nordic UART Service Central sample.
The Bluetooth: NFC pairing sample.
Bluetooth: Bond Management Service (BMS) sample:
Added sample-specific Kconfig options for the BMS authorization code by moving them from the service library scope and renaming them from
CONFIG_BLE_BMS_AUTHORIZATION_CODEandCONFIG_BLE_BMS_USE_AUTHORIZATION_CODEtoCONFIG_SAMPLE_BLE_BMS_AUTHORIZATION_CODEandCONFIG_SAMPLE_BLE_BMS_USE_AUTHORIZATION_CODE.
Bluetooth: Human Interface Device Service Keyboard:
Added support for boot mode.
Bluetooth: Human Interface Device Service Mouse sample:
Fixed an issue where the sample did not enter or exit boot mode properly based on the HID events.
Bluetooth: Heart Rate Service Central sample:
Added the Battery Service (BAS) Client service to the sample.
Bluetooth: Nordic UART Service (NUS) sample:
Updated to align with changes to the Low Power UART with EasyDMA (LPUARTE) driver.
Bluetooth: Power Profiling sample:
Updated to use a dedicated variable to hold the service attribute handle instead of incorrectly using the connection handle variable for this during service initialization.
NFC samples
Included nRF54LM20A as an available SoC for the Bluetooth: NFC pairing, NFC: Text record for Type 4 Tag, and NFC: Text record for Type 2 Tag samples.
Updated to use
CONFIG_BM_NFC_*Kconfig options provided by Bare Metal instead ofCONFIG_NFC_*options provided by nRF Connect SDK. Use#include <bm/nfc/...>headers provided by Bare Metal instead of#include <nfc/...>headers from nRF Connect SDK.
Peripheral samples
Added the PPI - Programmable Peripheral Interconnect sample.
LPUARTE sample:
Updated to align with changes to the Low Power UART with EasyDMA (LPUARTE) driver.
UARTE sample:
Updated the sample to use the logging module instead of console.
DFU samples
MCUboot: Recovery entry sample:
Updated:
MCUboot and firmware loader by enabling building of a size-optimized configuration of these components. To enable the size-optimized configuration, set FILE_SUFFIX to
size_optwhen building the sample.By enabling migration to the new solution for setting up the DFU Device Bluetooth name remotely. See the Running the DFU process page for details.
To clear the retained DFU Device Bluetooth name on boot. This was previously done by the firmware loader.
Subsystem samples
Added the UARTE shell sample.
Documentation
Added:
The Allocation and interrupts page.
The Board memory layouts section, which documents RRAM and SRAM partition layouts for supported boards.
Updated:
Sample documentation with clearer, more descriptive user guides, including updated explanations of configuration options, hardware connections, and testing procedures.
The SoftDevice release notes and migration documents and API documentation pages to provide separate documentation and API references for each SoC-specific variant of the S115 and S145 SoftDevices (nRF54L15, nRF54LM20, nRF54LS05, and nRF54LV10).