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

Supported hardware

Bare Metal v2.0.0 provides a set of samples for the following development kits of the nRF54L Series:

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

S115 SoftDevice

S145 SoftDevice

SoftDevice Handler

Boards

  • Added support for the following boards: See Software maturity levels for details.

  • Updated:

    • The SRAM sizes for the bm_nrf54l15dk board 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.h file for bm_nrf54l15dk to 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_nrf54l15dk board variants.

Build system

  • Updated the Kconfig dependencies, including those for drivers, libraries, and Bluetooth LE services.

DFU

  • Added:

  • 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_NAME Kconfig 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_NAME Kconfig option and zephyr-rtos settings subsystem handlers for setting up the DFU Device Bluetooth name remotely.

Interrupts

Drivers

Subsystems

Storage

  • Storage Library:

    • Added:

    • Updated:

      • The bm_storage_is_busy() function to return false instead of true when called with a NULL pointer 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_value field from uint32_t to uint8_t.

      • The SoftDevice backend to support chunking of write operations.

      • The no_explicit_erase field in bm_storage_info by renaming it to is_erase_before_write to explicitly convey that the memory must be erased before it can be written to.

      • The SoftDevice backend’s bm_storage_info.program_unit from 16 to 4 bytes, reflecting the true minimum programmable unit.

      • The start_addr and end_addr fields in bm_storage_config and bm_storage by replacing them with by addr and size. The API now uses relative addressing (0-based offsets within the partition).

      • The bm_storage_write() and bm_storage_erase() functions to return -ENOMEM when out of memory, instead of -EIO.

      • The bm_storage_read(), bm_storage_write(), and bm_storage_erase() functions to return -EINVAL on alignment errors, instead of -EFAULT.

      • The bm_storage_evt_dispatch_type enum and the bm_storage_evt.dispatch_type field by replacing them with a boolean bm_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), enabling bm_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_rmem library:

    • 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_RMEM Kconfig option.

Filesystem

  • Bare Metal Zephyr Memory Storage (BM_ZMS)

    • Added the bm_zms_fs_config.storage_api field 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_CHARS Kconfig option for configuring the number of characteristics in a ble_gatt_db_srv structure. The number of characteristics was previously set using the BLE_GATT_DB_MAX_CHARS definition in the ble_gatt_db.h file.

      • A missing word alignment check of the data parameter to the pm_peer_data_store() function.

    • Updated the params union field of the pm_evt structure to an anonymous union.

    • Fixed:

    • Removed the CONFIG_MBEDTLS_PSA_STATIC_KEY_SLOT_BUFFER_SIZE Kconfig 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:

  • Bluetooth: Advertising library library:

  • Bluetooth: Database Discovery library library:

    • Updated:

    • 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_evt structure after a rework.

  • Bluetooth: Scan library:

    • Added the ble_scan_filter_data structure as input to the ble_scan_filter_add() function.

    • Updated:

      • The maturity status of the library to Supported.

      • The functions to use the uint32_t type instead of int when returning nrf_errors.

      • The params union field of the ble_scan_evt structure to an anonymous union.

      • The allow_list_used function by renaming it to ble_scan_is_allow_list_used().

      • The name of the ble_gap_evt_adv_report_t fields in the ble_scan_evt struct to adv_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

Libraries for NFC

  • Added:

    • The NFC libraries for NFC Connection Handover and Bluetooth LE Out-of-Band (OOB) pairing.

    • The workaround to ensure the FRAMEDELAYMAX register 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:

      Use #include <bm/nfc/...> to include NFC-related header files provided by Bare Metal instead of #include <nfc/...>.

Utils

Samples

Bluetooth LE samples

NFC samples

Peripheral samples

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_opt when 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

Documentation

  • Added:

  • 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).