[nrfconnect] Added support for nRF54L15 DK platform (#41055)
Introduced support for nRF54L15 DK platform by introducing:
* Board and config files in several examples
* Updated readme files
* Removed obsolete pm_static files with _release suffix
that are not needed anymore
* Removed few runs from nrfconnect github workflow and replaced
them with new runs for nRF54L15 DK.
diff --git a/.github/workflows/examples-nrfconnect.yaml b/.github/workflows/examples-nrfconnect.yaml
index ffbfc25..9cbf7be 100644
--- a/.github/workflows/examples-nrfconnect.yaml
+++ b/.github/workflows/examples-nrfconnect.yaml
@@ -84,6 +84,14 @@
nrfconnect nrf52840dk_nrf52840 lock-app \
examples/lock-app/nrfconnect/build/nrfconnect/zephyr/zephyr.elf \
/tmp/bloat_reports/
+ - name: Build example nRF Connect SDK Lock App on nRF54L15 DK
+ if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true'
+ run: |
+ scripts/examples/nrfconnect_example.sh lock-app nrf54l15dk/nrf54l15/cpuapp
+ .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
+ nrfconnect nrf54l15dk_nrf54l15_cpuapp lock-app \
+ examples/lock-app/nrfconnect/build/nrfconnect/zephyr/zephyr.elf \
+ /tmp/bloat_reports/
- name: Build example nRF Connect SDK Lighting App on nRF52840 Dongle
if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true'
run: |
@@ -92,6 +100,14 @@
nrfconnect nrf52840dongle_nrf52840 lighting-app \
examples/lighting-app/nrfconnect/build/nrfconnect/zephyr/zephyr.elf \
/tmp/bloat_reports/
+ - name: Build example nRF Connect SDK Lighting App on nRF54L15 DK
+ if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true'
+ run: |
+ scripts/examples/nrfconnect_example.sh lighting-app nrf54l15dk/nrf54l15/cpuapp
+ .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
+ nrfconnect nrf54l15dk_nrf54l15_cpuapp lighting-app \
+ examples/lighting-app/nrfconnect/build/nrfconnect/zephyr/zephyr.elf \
+ /tmp/bloat_reports/
- name: Build example nRF Connect SDK Lighting App on nRF52840 DK with RPC
if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true'
run: |
@@ -116,22 +132,6 @@
nrfconnect nrf52840dk_nrf52840 shell \
examples/shell/nrfconnect/build/nrfconnect/zephyr/zephyr.elf \
/tmp/bloat_reports/
- - name: Build example nRF Connect SDK Pump App on nRF52840 DK
- if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true'
- run: |
- scripts/examples/nrfconnect_example.sh pump-app nrf52840dk/nrf52840
- .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- nrfconnect nrf52840dk_nrf52840 pump-app \
- examples/pump-app/nrfconnect/build/nrfconnect/zephyr/zephyr.elf \
- /tmp/bloat_reports/
- - name: Build example nRF Connect SDK Pump Controller App on nRF52840 DK
- if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true'
- run: |
- scripts/examples/nrfconnect_example.sh pump-controller-app nrf52840dk/nrf52840
- .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- nrfconnect nrf52840dk_nrf52840 pump-controller-app \
- examples/pump-controller-app/nrfconnect/build/nrfconnect/zephyr/zephyr.elf \
- /tmp/bloat_reports/
- name: Build example nRF Connect SDK All Clusters App on nRF52840 DK
run: |
scripts/examples/nrfconnect_example.sh all-clusters-app nrf52840dk/nrf52840
@@ -139,12 +139,12 @@
nrfconnect nrf52840dk_nrf52840 all-clusters-app \
examples/all-clusters-app/nrfconnect/build/nrfconnect/zephyr/zephyr.elf \
/tmp/bloat_reports/
- - name: Build example nRF Connect SDK All Clusters App on nRF5340 DK
+ - name: Build example nRF Connect SDK All Clusters App on nRF54L15 DK
if: github.event_name == 'push' || steps.changed_paths.outputs.nrfconnect == 'true'
run: |
- scripts/examples/nrfconnect_example.sh all-clusters-app nrf5340dk/nrf5340/cpuapp -DFILE_SUFFIX=release
+ scripts/examples/nrfconnect_example.sh all-clusters-app nrf54l15dk/nrf54l15/cpuapp
.environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
- nrfconnect nrf5340dk_nrf5340_cpuapp all-clusters-app \
+ nrfconnect nrf54l15dk_nrf54l15_cpuapp all-clusters-app \
examples/all-clusters-app/nrfconnect/build/nrfconnect/zephyr/zephyr.elf \
/tmp/bloat_reports/
- name: Run unit tests for Zephyr native_posix_64 platform
diff --git a/config/nrfconnect/chip-module/Kconfig.defaults b/config/nrfconnect/chip-module/Kconfig.defaults
index 6591580..ba0f3d7 100644
--- a/config/nrfconnect/chip-module/Kconfig.defaults
+++ b/config/nrfconnect/chip-module/Kconfig.defaults
@@ -327,6 +327,9 @@
if CHIP_CRYPTO_PSA
+config CHIP_CRYPTO_PSA_AEAD_SINGLE_PART
+ default y if SOC_SERIES_NRF54LX
+
config PSA_CRYPTO_DRIVER_OBERON
default y if (SOC_SERIES_NRF52X || SOC_SERIES_NRF53X)
diff --git a/examples/all-clusters-app/nrfconnect/Kconfig.sysbuild b/examples/all-clusters-app/nrfconnect/Kconfig.sysbuild
index fdbbbde..867b808 100644
--- a/examples/all-clusters-app/nrfconnect/Kconfig.sysbuild
+++ b/examples/all-clusters-app/nrfconnect/Kconfig.sysbuild
@@ -70,6 +70,14 @@
default y
endif # SOC_SERIES_NRF53X
+
+if BOARD_NRF54L15DK
+
+config PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
+ default y
+
+endif # BOARD_NRF54L15DK
+
endif # BOOTLOADER_MCUBOOT
source "${ZEPHYR_BASE}/share/sysbuild/Kconfig"
diff --git a/examples/all-clusters-app/nrfconnect/README.md b/examples/all-clusters-app/nrfconnect/README.md
index 4c51e52..3ced05b 100644
--- a/examples/all-clusters-app/nrfconnect/README.md
+++ b/examples/all-clusters-app/nrfconnect/README.md
@@ -61,10 +61,13 @@
### Bluetooth LE advertising
In this example, to commission the device onto a Matter network, it must be
-discoverable over Bluetooth LE. For security reasons, you must start Bluetooth
-LE advertising manually after powering up the device by pressing:
+discoverable over Bluetooth LE. The Bluetooth LE advertising is automatically
+started after powering up the device, but it may timeout and require re-starting
+by pressing:
-- On nRF52840 DK, nRF5340 DK, and nRF21540 DK: **Button 4**.
+- On nRF52840 DK and nRF5340 DK: **Button 4**.
+
+- On nRF54L15 DK: **Button 3**.
- On nRF7002 DK: **Button 2**.
@@ -99,12 +102,13 @@
The example supports building and running on the following devices:
-| Hardware platform | Build target | Platform image |
-| ------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
-| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
-| [nRF52840 Dongle](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle) | `nrf52840dongle/nrf52840` | <details><summary>nRF52840 Dongle</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_Dongle-medium.jpg" alt="nRF52840 Dongle"/></details> |
-| [nRF7002 DK](https://www.nordicsemi.com/Products/Development-hardware/nRF7002-DK) | `nrf7002dk/nrf5340/cpuapp` | <details><summary>nRF7002 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF7002-DK_Front-small.png" alt="nRF7002 DK"/></details> |
+| Hardware platform | Build target | Platform image |
+| ------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
+| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
+| [nRF54L15 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF54L15-DK) | `nrf54l15dk/nrf54l15/cpuapp` | <details><summary>nRF54L15 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF54L15_DK_info-medium.png" alt="nRF54L15 DK"/></details> |
+| [nRF52840 Dongle](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle) | `nrf52840dongle/nrf52840` | <details><summary>nRF52840 Dongle</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_Dongle-medium.jpg" alt="nRF52840 Dongle"/></details> |
+| [nRF7002 DK](https://www.nordicsemi.com/Products/Development-hardware/nRF7002-DK) | `nrf7002dk/nrf5340/cpuapp` | <details><summary>nRF7002 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF7002-DK_Front-small.png" alt="nRF7002 DK"/></details> |
<hr>
@@ -113,8 +117,8 @@
The development kits for this sample offer the following IPv6 network support
for Matter:
-- Matter over Thread is supported for `nrf52840dk/nrf52840` and
- `nrf5340dk/nrf5340/cpuapp`.
+- Matter over Thread is supported for `nrf52840dk/nrf52840`,
+ `nrf5340dk/nrf5340/cpuapp`, and `nrf54l15dk/nrf54l15/cpuapp`.
- Matter over Wi-Fi is supported for `nrf7002dk/nrf5340/cpuapp`.
## Device UI
@@ -132,58 +136,127 @@
> Functionalities associated with the remaining missing elements are
> inaccessible.
-**LED 1** shows the overall state of the device and its connectivity. The
-following states are possible:
+**Device UI elements by platform:**
-- _Short Flash On (50 ms on/950 ms off)_ — The device is in the
- unprovisioned (unpaired) state and is waiting for a commissioning
- application to connect.
+#### nRF52840 DK and nRF5340 DK
-- _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
- unprovisioned state and a commissioning application is connected through
- Bluetooth LE.
+- **LED 1** shows the overall state of the device and its connectivity. The
+ following states are possible:
-- _Short Flash Off (950ms on/50ms off)_ — The device is fully
- provisioned, but does not yet have full connectivity for Thread or Wi-Fi
- network.
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
+
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
- _Solid On_ — The device is fully provisioned.
-**Button 1** can be used for the following purposes:
+- **Button 1** can be used for the following purposes:
-- _Pressed for less than 3 s_ — Initiates the OTA software update
- process. This feature is disabled by default, but can be enabled by
- following the
- [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
- instructions.
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
-- _Pressed for more than 3 s_ — initiates the factory reset of the
- device. Releasing the button within the 3-second window cancels the factory
- reset procedure.
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
-**Button 2**:
+- **Button 4**: Starts the NFC tag emulation, enables Bluetooth LE advertising
+ for the predefined period of time (15 minutes by default), and makes the
+ device discoverable over Bluetooth LE. This button is used during the
+ commissioning procedure.
-- On nRF52840 DK, nRF5340 DK, and nRF21540 DK: Not available.
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
-- On nRF7002 DK:
+#### nRF54L15 DK
- - If pressed for more than three seconds, it starts the NFC tag emulation,
- enables Bluetooth LE advertising for the predefined period of time (15
- minutes by default), and makes the device discoverable over Bluetooth
- LE.
+- **LED 0** shows the overall state of the device and its connectivity. The
+ following states are possible:
-**Button 4**:
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
-- On nRF52840 DK, nRF5340 DK, and nRF21540 DK: Starts the NFC tag emulation,
- enables Bluetooth LE advertising for the predefined period of time (15
- minutes by default), and makes the device discoverable over Bluetooth LE.
- This button is used during the commissioning procedure.
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
-- On nRF7002 DK: Not available.
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
-**SEGGER J-Link USB port** can be used to get logs from the device or
-communicate with it using the
-[command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+- _Solid On_ — The device is fully provisioned.
+
+- **Button 0** can be used for the following purposes:
+
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
+
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
+
+- **Button 3**: Starts the NFC tag emulation, enables Bluetooth LE advertising
+ for the predefined period of time (15 minutes by default), and makes the
+ device discoverable over Bluetooth LE. This button is used during the
+ commissioning procedure.
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+
+#### nRF7002 DK
+
+- **LED 1** shows the overall state of the device and its connectivity. The
+ following states are possible:
+
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
+
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
+
+- _Solid On_ — The device is fully provisioned.
+
+- **Button 1** can be used for the following purposes:
+
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
+
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
+
+- **Button 2**: If pressed for more than three seconds, it starts the NFC tag
+ emulation, enables Bluetooth LE advertising for the predefined period of
+ time (15 minutes by default), and makes the device discoverable over
+ Bluetooth LE.
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
<hr>
@@ -306,10 +379,10 @@
>
> There are two types of Device Firmware Upgrade modes: single-image DFU and
> multi-image DFU. Single-image mode supports upgrading only one firmware image,
-> the application image, and should be used for single-core nRF52840 DK devices.
-> Multi-image mode allows to upgrade more firmware images and is suitable for
-> upgrading the application core and network core firmware in two-core nRF5340
-> DK devices.
+> the application image, and should be used for single-core nRF52840 DK and
+> nRF54L15 DK devices. Multi-image mode allows to upgrade more firmware images
+> and is suitable for upgrading the application core and network core firmware
+> in two-core nRF5340 DK devices.
>
> Currently the multi-image mode is not available for the Matter OTA DFU.
@@ -373,10 +446,11 @@
- release -- Release version of the application - can be used to enable only
the necessary application functionalities to optimize its performance. It
has Device Firmware Upgrade feature enabled. It can be used only for the
- nRF52840 DK and nRF5340 DK, as only those platforms support the DFU.
+ nRF52840 DK, nRF5340 DK, nRF54L15 DK, and nRF7002 DK as those platforms have
+ DFU enabled by default.
- dfu -- Debug version of the application with Device Firmware Upgrade feature
- support. It can be used only for the nRF52840 DK and nRF5340 DK, as only
- those platforms support the DFU.
+ support. It can be used only for the nRF52840 DK, nRF5340 DK, nRF54L15 DK,
+ and nRF7002 DK as those platforms have DFU enabled by default.
For more information, see the
[Configuring nRF Connect SDK examples](../../../docs/platforms/nrf/nrfconnect_examples_configuration.md)
diff --git a/examples/all-clusters-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/all-clusters-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..2245cf5
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,27 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Multirole is the only currently supported role by SoftDevice.
+CONFIG_BT_LL_SOFTDEVICE_MULTIROLE=y
+
+# ZMS cache optimization
+CONFIG_ZMS_LOOKUP_CACHE=y
+CONFIG_ZMS_LOOKUP_CACHE_SIZE=512
+CONFIG_ZMS_LOOKUP_CACHE_FOR_SETTINGS=y
+
+# Workaround required as Zephyr L2 implies usage of NVS backend for settings.
+# It should be removed once the proper fix will be applied in Zephyr.
+CONFIG_NVS=n
diff --git a/examples/all-clusters-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/all-clusters-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..5e210e9
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ aliases {
+ // Use watchdog wdt31 as the application watchdog
+ watchdog0 = &wdt31;
+ };
+
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+// TODO: re-enable HWFC once it's fixed
+&uart20 {
+ /delete-property/ hw-flow-control;
+};
+
+&mx25r64 {
+ status = "okay";
+};
+
+&wdt31 {
+ status = "okay";
+};
diff --git a/examples/all-clusters-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp_dfu.yml b/examples/all-clusters-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp_dfu.yml
new file mode 100644
index 0000000..c874ec5
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp_dfu.yml
@@ -0,0 +1,56 @@
+mcuboot:
+ address: 0x0
+ region: flash_primary
+ size: 0xD000
+mcuboot_pad:
+ address: 0xD000
+ region: flash_primary
+ size: 0x800
+app:
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+mcuboot_primary:
+ orig_span: &id001
+ - mcuboot_pad
+ - app
+ span: *id001
+ address: 0xD000
+ region: flash_primary
+ size: 0x165000
+mcuboot_primary_app:
+ orig_span: &id002
+ - app
+ span: *id002
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+factory_data:
+ address: 0x172000
+ region: flash_primary
+ size: 0x1000
+settings_storage:
+ address: 0x173000
+ region: flash_primary
+ size: 0xA000
+mcuboot_secondary:
+ address: 0x0
+ orig_span: &id003
+ - mcuboot_secondary_pad
+ - mcuboot_secondary_app
+ region: external_flash
+ size: 0x165000
+ span: *id003
+mcuboot_secondary_pad:
+ region: external_flash
+ address: 0x0
+ size: 0x800
+mcuboot_secondary_app:
+ region: external_flash
+ address: 0x800
+ size: 0x164800
+external_flash:
+ address: 0x165000
+ size: 0x69B000
+ device: MX25R64
+ region: external_flash
diff --git a/examples/all-clusters-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp_release.yml b/examples/all-clusters-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp_release.yml
new file mode 100644
index 0000000..c874ec5
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp_release.yml
@@ -0,0 +1,56 @@
+mcuboot:
+ address: 0x0
+ region: flash_primary
+ size: 0xD000
+mcuboot_pad:
+ address: 0xD000
+ region: flash_primary
+ size: 0x800
+app:
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+mcuboot_primary:
+ orig_span: &id001
+ - mcuboot_pad
+ - app
+ span: *id001
+ address: 0xD000
+ region: flash_primary
+ size: 0x165000
+mcuboot_primary_app:
+ orig_span: &id002
+ - app
+ span: *id002
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+factory_data:
+ address: 0x172000
+ region: flash_primary
+ size: 0x1000
+settings_storage:
+ address: 0x173000
+ region: flash_primary
+ size: 0xA000
+mcuboot_secondary:
+ address: 0x0
+ orig_span: &id003
+ - mcuboot_secondary_pad
+ - mcuboot_secondary_app
+ region: external_flash
+ size: 0x165000
+ span: *id003
+mcuboot_secondary_pad:
+ region: external_flash
+ address: 0x0
+ size: 0x800
+mcuboot_secondary_app:
+ region: external_flash
+ address: 0x800
+ size: 0x164800
+external_flash:
+ address: 0x165000
+ size: 0x69B000
+ device: MX25R64
+ region: external_flash
diff --git a/examples/all-clusters-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/all-clusters-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..e800269
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# TODO: Workaround, disable memory guard to avoid false faults in application after boot
+CONFIG_HW_STACK_PROTECTION=n
+
+CONFIG_BOOT_WATCHDOG_FEED=n
+
+# nRF54L15DK uses SPI NOR external flash
+CONFIG_GPIO=y
+CONFIG_SPI=y
+CONFIG_SPI_NOR=y
+CONFIG_SPI_NOR_SFDP_DEVICETREE=y
+CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
+
+# required by SPI driver
+CONFIG_MULTITHREADING=y
+
+CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y
+
+# Adjust the maximum sectors to the app image size of ~1.4MB
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+
+# Currently, without tickless kernel, the SYSCOUNTER value after the software
+# reset is not set properly and due to that the first system interrupt is not called
+# in the proper time - the SYSCOUNTER value is set to the value from before
+# reset + 1. Hence, the reboot time increases more and more.
+# To avoid it enable tickless kernel for mcuboot.
+CONFIG_TICKLESS_KERNEL=y
+
+# Low Power mode
+CONFIG_POWEROFF=y
diff --git a/examples/all-clusters-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/all-clusters-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..ce1d757
--- /dev/null
+++ b/examples/all-clusters-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+&mx25r64 {
+ status = "okay";
+};
diff --git a/examples/all-clusters-app/nrfconnect/sysbuild/mcuboot/prj.conf b/examples/all-clusters-app/nrfconnect/sysbuild/mcuboot/prj.conf
index 3bcb12f..ba05b21 100644
--- a/examples/all-clusters-app/nrfconnect/sysbuild/mcuboot/prj.conf
+++ b/examples/all-clusters-app/nrfconnect/sysbuild/mcuboot/prj.conf
@@ -23,8 +23,6 @@
CONFIG_FLASH=y
CONFIG_FPROTECT=y
-CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h"
-
# Use minimal C library instead of the Picolib
CONFIG_MINIMAL_LIBC=y
@@ -47,3 +45,8 @@
CONFIG_TICKLESS_KERNEL=n
CONFIG_TIMEOUT_64BIT=n
CONFIG_NRF_ENABLE_ICACHE=n
+CONFIG_SIZE_OPTIMIZATIONS=y
+
+# Activate LTO
+CONFIG_LTO=y
+CONFIG_ISR_TABLES_LOCAL_DECLARATION=y
diff --git a/examples/light-switch-app/nrfconnect/Kconfig.sysbuild b/examples/light-switch-app/nrfconnect/Kconfig.sysbuild
index 4a0b8f3..e7681ff 100644
--- a/examples/light-switch-app/nrfconnect/Kconfig.sysbuild
+++ b/examples/light-switch-app/nrfconnect/Kconfig.sysbuild
@@ -67,6 +67,14 @@
default y
endif # SOC_SERIES_NRF53X
+
+if BOARD_NRF54L15DK
+
+config PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
+ default y
+
+endif # BOARD_NRF54L15DK
+
endif # BOOTLOADER_MCUBOOT
#### Enable generating factory data
diff --git a/examples/light-switch-app/nrfconnect/README.md b/examples/light-switch-app/nrfconnect/README.md
index 7869d71..0fd9070 100644
--- a/examples/light-switch-app/nrfconnect/README.md
+++ b/examples/light-switch-app/nrfconnect/README.md
@@ -95,14 +95,16 @@
same network. You must provide this information to the light switch through the
process called binding, which links clusters and endpoints on both devices, so
that the devices can interact with each other. This functionality is on the
-endpoint 1 and triggered by **Button 2**.
+endpoint 1 and triggered by **Button 2** for the nRF52840 DK and nRF5340 DK, or
+by **Button 1** for the nRF54L15 DK.
### Generic Switch
The Generic Switch on the endpoint 2 offers the switch server cluster. It
implements the Momentary Switch (`MS`) and Momentary Switch Release (`MSR`)
features. For this reason, it sends event notifications `InitialPress` and
-`ShortRelease` if **Button 3** of the DK is pressed and released.
+`ShortRelease` if **Button 3** for the nRF52840 DK and nRF5340 DK, or **Button
+2** for the nRF54L15 DK is pressed and released.
### Common example settings
@@ -118,10 +120,13 @@
### Bluetooth LE advertising
In this example, to commission the device onto a Matter network, it must be
-discoverable over Bluetooth LE. For security reasons, you must start Bluetooth
-LE advertising manually after powering up the device by pressing:
+discoverable over Bluetooth LE. The Bluetooth LE advertising is automatically
+started after powering up the device, but it may timeout and require re-starting
+by pressing:
-- On nRF52840 DK, nRF5340 DK, and nRF21540 DK: **Button 4**.
+- On nRF52840 DK and nRF5340 DK: **Button 4**.
+
+- On nRF54L15 DK: **Button 3**.
- On nRF7002 DK: **Button 2**.
@@ -213,19 +218,20 @@
The example supports building and running on the following devices:
-| Hardware platform | Build target | Platform image |
-| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
-| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
-| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
-| [nRF7002 DK](https://www.nordicsemi.com/Products/Development-hardware/nRF7002-DK) | `nrf7002dk/nrf5340/cpuapp` | <details><summary>nRF7002 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF7002-DK_Front-small.png" alt="nRF7002 DK"/></details> |
+| Hardware platform | Build target | Platform image |
+| ----------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
+| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
+| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
+| [nRF54L15 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF54L15-DK) | `nrf54l15dk/nrf54l15/cpuapp` | <details><summary>nRF54L15 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF54L15_DK_info-medium.png" alt="nRF54L15 DK"/></details> |
+| [nRF7002 DK](https://www.nordicsemi.com/Products/Development-hardware/nRF7002-DK) | `nrf7002dk/nrf5340/cpuapp` | <details><summary>nRF7002 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF7002-DK_Front-small.png" alt="nRF7002 DK"/></details> |
### IPv6 network support
The development kits for this sample offer the following IPv6 network support
for Matter:
-- Matter over Thread is supported for `nrf52840dk/nrf52840` and
- `nrf5340dk/nrf5340/cpuapp`.
+- Matter over Thread is supported for `nrf52840dk/nrf52840`,
+ `nrf5340dk/nrf5340/cpuapp`, and `nrf54l15dk/nrf54l15/cpuapp`.
- Matter over Wi-Fi is supported for `nrf7002dk/nrf5340/cpuapp`.
### Additional requirements for testing
@@ -249,58 +255,51 @@
monitor the state of the device. These correspond to PCB components on the
platform image.
-### LEDs
+**Device UI elements by platform:**
-This section describes all behaviors of LEDs located on platform image.
+#### nRF52840 DK and nRF5340 DK
-**LED 1** shows the overall state of the device and its connectivity. The
-following states are possible:
+- **LED 1** shows the overall state of the device and its connectivity. The
+ following states are possible:
-- _Short Flash On (50 ms on/950 ms off)_ — The device is in the
- unprovisioned (unpaired) state and is waiting for a commissioning
- application to connect.
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
-- _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
- unprovisioned state and a commissioning application is connected through
- Bluetooth LE.
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
-- _Short Flash Off (950ms on/50ms off)_ — The device is fully
- provisioned, but does not yet have full connectivity for Thread or Wi-Fi
- network.
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
-- _Solid On_ — The device is fully provisioned.
+ - _Solid On_ — The device is fully provisioned.
-**LED 2** simulates the BLE DFU process. The following states are possible:
+- **LED 2** simulates the BLE DFU process. The following states are possible:
-- _Off_ — BLE is not advertising and DFU can not be performed.
+ - _Off_ — BLE is not advertising and DFU can not be performed.
-- _Rapid Even Flashing (30 ms off / 170 ms on)_ — BLE is advertising,
- DFU process can be started.
+ - _Rapid Even Flashing (30 ms off / 170 ms on)_ — BLE is
+ advertising, DFU process can be started.
-**All LEDs**
+- **All LEDs**
Blink in unison when the factory reset procedure is initiated.
-### Buttons
+- **Button 1** can be used for the following purposes:
-This section describes a reaction to pressing or holding buttons located on the
-platform image.
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
-**Button 1** can be used for the following purposes:
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
-- _Pressed for less than 3 s_ — Initiates the OTA software update
- process. This feature is disabled by default, but can be enabled by
- following the
- [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
- instructions.
-
-- _Pressed for more than 3 s_ — initiates the factory reset of the
- device. Releasing the button within the 3-second window cancels the factory
- reset procedure.
-
-**Button 2** can be used for the following purposes:
-
-- On nRF52840 DK, nRF5340 DK and nRF21540 DK:
+- **Button 2** can be used for the following purposes:
- If pressed for less than 0.5 seconds, it changes the light state to the
opposite one on the bound lighting device
@@ -312,11 +311,135 @@
is changing from 0% to 100% with 1% increments every 300 milliseconds as
long as **Button 2** is pressed.
-- On nRF7002 DK:
+- **Button 4**: Starts the NFC tag emulation, enables Bluetooth LE advertising
+ for the predefined period of time (60 minutes by default), and makes the
+ device discoverable over Bluetooth LE. This button is used during the
+ commissioning procedure.
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
+
+#### nRF54L15 DK
+
+- **LED 0** shows the overall state of the device and its connectivity. The
+ following states are possible:
+
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
+
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
+
+ - _Solid On_ — The device is fully provisioned.
+
+- **LED 1** simulates the BLE DFU process. The following states are possible:
+
+ - _Off_ — BLE is not advertising and DFU can not be performed.
+
+ - _Rapid Even Flashing (30 ms off / 170 ms on)_ — BLE is
+ advertising, DFU process can be started.
+
+- **All LEDs**
+
+Blink in unison when the factory reset procedure is initiated.
+
+- **Button 0** can be used for the following purposes:
+
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
+
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
+
+- **Button 1** can be used for the following purposes:
+
+ - If pressed for less than 0.5 seconds, it changes the light state to the
+ opposite one on the bound lighting device
+ [lighting-app](../../lighting-app/nrfconnect/README.md)
+
+ - If pressed for more than 0.5 seconds, it changes the brightness of the
+ light on the bound lighting bulb device
+ [lighting-app](../../lighting-app/nrfconnect/README.md). The brightness
+ is changing from 0% to 100% with 1% increments every 300 milliseconds as
+ long as **Button 1** is pressed.
+
+- **Button 3**: Starts the NFC tag emulation, enables Bluetooth LE advertising
+ for the predefined period of time (60 minutes by default), and makes the
+ device discoverable over Bluetooth LE. This button is used during the
+ commissioning procedure.
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
+
+#### nRF7002 DK
+
+- **LED 1** shows the overall state of the device and its connectivity. The
+ following states are possible:
+
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
+
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
+
+ - _Solid On_ — The device is fully provisioned.
+
+- **LED 2** simulates the BLE DFU process. The following states are possible:
+
+ - _Off_ — BLE is not advertising and DFU can not be performed.
+
+ - _Rapid Even Flashing (30 ms off / 170 ms on)_ — BLE is
+ advertising, DFU process can be started.
+
+- **All LEDs**
+
+Blink in unison when the factory reset procedure is initiated.
+
+- **Button 1** can be used for the following purposes:
+
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
+
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
+
+- **Button 2** can be used for the following purposes:
- If the device is not commissioned to a Matter network, it starts the NFC
tag emulation, enables Bluetooth LE advertising for the predefined
- period of time (15 minutes by default), and makes the device
+ period of time (60 minutes by default), and makes the device
discoverable over Bluetooth LE. This button is used during the
commissioning procedure.
@@ -328,27 +451,14 @@
- If pressed for more than 0.5 seconds, it changes the brightness of the light on the bound lighting bulb device ([lighting-app](../../lighting-app/nrfconnect/)). The brightness is changing from 0% to 100% with 1% increments every 300 milliseconds as long as **Button 2** is pressed.
-**Button 4**
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
-- On nRF52840 DK, nRF5340 DK and nRF21540 DK:
-
- Starts the NFC tag emulation, enables Bluetooth LE advertising for the
- predefined period of time (15 minutes by default), and makes the device
- discoverable over Bluetooth LE. This button is used during the commissioning
- procedure.
-
-- On nRF7002 DK:
-
- Not available.
-
-**SEGGER J-Link USB port** can be used to get logs from the device or
-communicate with it using the
-[command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
-
-**NFC port with antenna attached** can be used to start the
-[rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
-information from the Matter device in a data payload that can be shared using
-NFC.
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
### Matter CLI commands
@@ -501,10 +611,10 @@
>
> There are two types of Device Firmware Upgrade modes: single-image DFU and
> multi-image DFU. Single-image mode supports upgrading only one firmware image,
-> the application image, and should be used for single-core nRF52840 DK devices.
-> Multi-image mode allows to upgrade more firmware images and is suitable for
-> upgrading the application core and network core firmware in two-core nRF5340
-> DK devices.
+> the application image, and should be used for single-core nRF52840 DK and
+> nRF54L15 DK devices. Multi-image mode allows to upgrade more firmware images
+> and is suitable for upgrading the application core and network core firmware
+> in two-core nRF5340 DK devices.
#### Changing bootloader configuration
diff --git a/examples/light-switch-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/light-switch-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..2245cf5
--- /dev/null
+++ b/examples/light-switch-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,27 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Multirole is the only currently supported role by SoftDevice.
+CONFIG_BT_LL_SOFTDEVICE_MULTIROLE=y
+
+# ZMS cache optimization
+CONFIG_ZMS_LOOKUP_CACHE=y
+CONFIG_ZMS_LOOKUP_CACHE_SIZE=512
+CONFIG_ZMS_LOOKUP_CACHE_FOR_SETTINGS=y
+
+# Workaround required as Zephyr L2 implies usage of NVS backend for settings.
+# It should be removed once the proper fix will be applied in Zephyr.
+CONFIG_NVS=n
diff --git a/examples/light-switch-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/light-switch-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..5e210e9
--- /dev/null
+++ b/examples/light-switch-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ aliases {
+ // Use watchdog wdt31 as the application watchdog
+ watchdog0 = &wdt31;
+ };
+
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+// TODO: re-enable HWFC once it's fixed
+&uart20 {
+ /delete-property/ hw-flow-control;
+};
+
+&mx25r64 {
+ status = "okay";
+};
+
+&wdt31 {
+ status = "okay";
+};
diff --git a/examples/light-switch-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml b/examples/light-switch-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml
deleted file mode 100644
index ce42b39..0000000
--- a/examples/light-switch-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0x7000
- region: flash_primary
-mcuboot_pad:
- address: 0x7000
- size: 0x200
-app:
- address: 0x7200
- size: 0xf3e00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0x7000
- size: 0xf4000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0x7200
- size: 0xf3e00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_secondary:
- address: 0x0
- size: 0xf4000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0xf4000
- size: 0x70c000
- device: MX25R64
- region: external_flash
diff --git a/examples/light-switch-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml b/examples/light-switch-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml
deleted file mode 100644
index 10e8680..0000000
--- a/examples/light-switch-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0x8000
- region: flash_primary
-mcuboot_pad:
- address: 0x8000
- size: 0x200
-app:
- address: 0x8200
- size: 0xf2e00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0x8000
- size: 0xf3000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0x8200
- size: 0xf2e00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_primary_1:
- address: 0x0
- size: 0x40000
- device: flash_ctrl
- region: ram_flash
-mcuboot_secondary:
- address: 0x0
- size: 0xf3000
- device: MX25R64
- region: external_flash
-mcuboot_secondary_1:
- address: 0xf3000
- size: 0x40000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0x133000
- size: 0x6CD000
- device: MX25R64
- region: external_flash
-pcd_sram:
- address: 0x20000000
- size: 0x2000
- region: sram_primary
diff --git a/examples/light-switch-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml b/examples/light-switch-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
new file mode 100644
index 0000000..c874ec5
--- /dev/null
+++ b/examples/light-switch-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
@@ -0,0 +1,56 @@
+mcuboot:
+ address: 0x0
+ region: flash_primary
+ size: 0xD000
+mcuboot_pad:
+ address: 0xD000
+ region: flash_primary
+ size: 0x800
+app:
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+mcuboot_primary:
+ orig_span: &id001
+ - mcuboot_pad
+ - app
+ span: *id001
+ address: 0xD000
+ region: flash_primary
+ size: 0x165000
+mcuboot_primary_app:
+ orig_span: &id002
+ - app
+ span: *id002
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+factory_data:
+ address: 0x172000
+ region: flash_primary
+ size: 0x1000
+settings_storage:
+ address: 0x173000
+ region: flash_primary
+ size: 0xA000
+mcuboot_secondary:
+ address: 0x0
+ orig_span: &id003
+ - mcuboot_secondary_pad
+ - mcuboot_secondary_app
+ region: external_flash
+ size: 0x165000
+ span: *id003
+mcuboot_secondary_pad:
+ region: external_flash
+ address: 0x0
+ size: 0x800
+mcuboot_secondary_app:
+ region: external_flash
+ address: 0x800
+ size: 0x164800
+external_flash:
+ address: 0x165000
+ size: 0x69B000
+ device: MX25R64
+ region: external_flash
diff --git a/examples/light-switch-app/nrfconnect/pm_static_nrf7002dk_nrf5340_cpuapp_release.yml b/examples/light-switch-app/nrfconnect/pm_static_nrf7002dk_nrf5340_cpuapp_release.yml
deleted file mode 100644
index 3c56dc0..0000000
--- a/examples/light-switch-app/nrfconnect/pm_static_nrf7002dk_nrf5340_cpuapp_release.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0xC000
- region: flash_primary
-mcuboot_pad:
- address: 0xC000
- size: 0x200
-app:
- address: 0xC200
- size: 0xeee00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0xC000
- size: 0xef000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0xC200
- size: 0xeee00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_primary_1:
- address: 0x0
- size: 0x40000
- device: flash_ctrl
- region: ram_flash
-mcuboot_secondary:
- address: 0x0
- size: 0xef000
- device: MX25R64
- region: external_flash
-mcuboot_secondary_1:
- address: 0xef000
- size: 0x40000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0x12f000
- size: 0x6D1000
- device: MX25R64
- region: external_flash
-pcd_sram:
- address: 0x20000000
- size: 0x2000
- region: sram_primary
diff --git a/examples/light-switch-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/light-switch-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..e800269
--- /dev/null
+++ b/examples/light-switch-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# TODO: Workaround, disable memory guard to avoid false faults in application after boot
+CONFIG_HW_STACK_PROTECTION=n
+
+CONFIG_BOOT_WATCHDOG_FEED=n
+
+# nRF54L15DK uses SPI NOR external flash
+CONFIG_GPIO=y
+CONFIG_SPI=y
+CONFIG_SPI_NOR=y
+CONFIG_SPI_NOR_SFDP_DEVICETREE=y
+CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
+
+# required by SPI driver
+CONFIG_MULTITHREADING=y
+
+CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y
+
+# Adjust the maximum sectors to the app image size of ~1.4MB
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+
+# Currently, without tickless kernel, the SYSCOUNTER value after the software
+# reset is not set properly and due to that the first system interrupt is not called
+# in the proper time - the SYSCOUNTER value is set to the value from before
+# reset + 1. Hence, the reboot time increases more and more.
+# To avoid it enable tickless kernel for mcuboot.
+CONFIG_TICKLESS_KERNEL=y
+
+# Low Power mode
+CONFIG_POWEROFF=y
diff --git a/examples/light-switch-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/light-switch-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..ce1d757
--- /dev/null
+++ b/examples/light-switch-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+&mx25r64 {
+ status = "okay";
+};
diff --git a/examples/light-switch-app/nrfconnect/sysbuild/mcuboot/prj.conf b/examples/light-switch-app/nrfconnect/sysbuild/mcuboot/prj.conf
index 3bcb12f..ba05b21 100644
--- a/examples/light-switch-app/nrfconnect/sysbuild/mcuboot/prj.conf
+++ b/examples/light-switch-app/nrfconnect/sysbuild/mcuboot/prj.conf
@@ -23,8 +23,6 @@
CONFIG_FLASH=y
CONFIG_FPROTECT=y
-CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h"
-
# Use minimal C library instead of the Picolib
CONFIG_MINIMAL_LIBC=y
@@ -47,3 +45,8 @@
CONFIG_TICKLESS_KERNEL=n
CONFIG_TIMEOUT_64BIT=n
CONFIG_NRF_ENABLE_ICACHE=n
+CONFIG_SIZE_OPTIMIZATIONS=y
+
+# Activate LTO
+CONFIG_LTO=y
+CONFIG_ISR_TABLES_LOCAL_DECLARATION=y
diff --git a/examples/lighting-app/nrfconnect/Kconfig.sysbuild b/examples/lighting-app/nrfconnect/Kconfig.sysbuild
index 4048c88..75c3a3e 100644
--- a/examples/lighting-app/nrfconnect/Kconfig.sysbuild
+++ b/examples/lighting-app/nrfconnect/Kconfig.sysbuild
@@ -70,6 +70,14 @@
default y
endif # SOC_SERIES_NRF53X
+
+if BOARD_NRF54L15DK
+
+config PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
+ default y
+
+endif # BOARD_NRF54L15DK
+
endif # BOOTLOADER_MCUBOOT
#### Enable generating factory data
diff --git a/examples/lighting-app/nrfconnect/README.md b/examples/lighting-app/nrfconnect/README.md
index 62e4954..3e9cad0 100644
--- a/examples/lighting-app/nrfconnect/README.md
+++ b/examples/lighting-app/nrfconnect/README.md
@@ -51,7 +51,7 @@
pair it with the Matter controller over Bluetooth® LE to get the configuration
from the controller to use the device within a Thread or Wi-Fi network. The
device starts advertising automatically and you can commission the device within
-15 minutes. If the advertising time elapsed you can re-enable it using buttons.
+60 minutes. If the advertising time elapsed you can re-enable it using buttons.
See [Bluetooth LE advertising](#bluetooth-le-advertising) to learn how to do
this. The controller must get the commissioning information from the Matter
accessory device and provision the device into the network.
@@ -72,10 +72,13 @@
### Bluetooth LE advertising
In this example, to commission the device onto a Matter network, it must be
-discoverable over Bluetooth LE. For security reasons, you must start Bluetooth
-LE advertising manually after powering up the device by pressing:
+discoverable over Bluetooth LE. The Bluetooth LE advertising is automatically
+started after powering up the device, but it may timeout and require re-starting
+by pressing:
-- On nRF52840 DK, nRF5340 DK, and nRF21540 DK: **Button 4**.
+- On nRF52840 DK and nRF5340 DK: **Button 4**.
+
+- On nRF54L15 DK: **Button 3**.
- On nRF7002 DK: **Button 2**.
@@ -167,12 +170,13 @@
The example supports building and running on the following devices:
-| Hardware platform | Build target | Platform image |
-| ------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
-| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
-| [nRF52840 Dongle](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle) | `nrf52840dongle/nrf52840` | <details><summary>nRF52840 Dongle</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_Dongle-medium.jpg" alt="nRF52840 Dongle"/></details> |
-| [nRF7002 DK](https://www.nordicsemi.com/Products/Development-hardware/nRF7002-DK) | `nrf7002dk/nrf5340/cpuapp` | <details><summary>nRF7002 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF7002-DK_Front-small.png" alt="nRF7002 DK"/></details> |
+| Hardware platform | Build target | Platform image |
+| ------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
+| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
+| [nRF54L15 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF54L15-DK) | `nrf54l15dk/nrf54l15/cpuapp` | <details><summary>nRF54L15 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF54L15_DK_info-medium.png" alt="nRF54L15 DK"/></details> |
+| [nRF52840 Dongle](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle) | `nrf52840dongle/nrf52840` | <details><summary>nRF52840 Dongle</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_Dongle-medium.jpg" alt="nRF52840 Dongle"/></details> |
+| [nRF7002 DK](https://www.nordicsemi.com/Products/Development-hardware/nRF7002-DK) | `nrf7002dk/nrf5340/cpuapp` | <details><summary>nRF7002 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF7002-DK_Front-small.png" alt="nRF7002 DK"/></details> |
<hr>
@@ -181,8 +185,8 @@
The development kits for this sample offer the following IPv6 network support
for Matter:
-- Matter over Thread is supported for `nrf52840dk/nrf52840` and
- `nrf5340dk/nrf5340/cpuapp`.
+- Matter over Thread is supported for `nrf52840dk/nrf52840`,
+ `nrf5340dk/nrf5340/cpuapp`, and `nrf54l15dk/nrf54l15/cpuapp`.
- Matter over Wi-Fi is supported for `nrf7002dk/nrf5340/cpuapp`.
## Device UI
@@ -200,79 +204,186 @@
> Functionalities associated with the remaining missing elements are
> inaccessible.
-**LED 1** shows the overall state of the device and its connectivity. The
-following states are possible:
+**Device UI elements by platform:**
-- _Short Flash On (50 ms on/950 ms off)_ — The device is in the
- unprovisioned (unpaired) state and is waiting for a commissioning
- application to connect.
+#### nRF52840 DK and nRF5340 DK
-- _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
- unprovisioned state and a commissioning application is connected through
- Bluetooth LE.
+- **LED 1** shows the overall state of the device and its connectivity. The
+ following states are possible:
-- _Short Flash Off (950ms on/50ms off)_ — The device is fully
- provisioned, but does not yet have full connectivity for Thread or Wi-Fi
- network.
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
-- _Solid On_ — The device is fully provisioned.
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
-**LED 2** simulates the light bulb and shows the state of the lighting. The
-following states are possible:
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
-- _Solid On_ — The light bulb is on.
+ - _Solid On_ — The device is fully provisioned.
-- _Off_ — The light bulb is off.
+- **LED 2** simulates the light bulb and shows the state of the lighting. The
+ following states are possible:
- Additionally, the LED starts blinking evenly (500 ms on/500 ms off) when the
- Identify command of the Identify cluster is received on the endpoint 1. The
- command’s argument can be used to specify the duration of the effect.
+ - _Solid On_ — The light bulb is on.
-**Button 1** can be used for the following purposes:
+ - _Off_ — The light bulb is off.
-- _Pressed for less than 3 s_ — Initiates the OTA software update
- process. This feature is disabled by default, but can be enabled by
- following the
- [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
- instructions.
+ Additionally, the LED starts blinking evenly (500 ms on/500 ms off) when the
+ Identify command of the Identify cluster is received on the endpoint 1. The
+ command’s argument can be used to specify the duration of the effect.
-- _Pressed for more than 3 s_ — initiates the factory reset of the
- device. Releasing the button within the 3-second window cancels the factory
- reset procedure.
+- **Button 1** can be used for the following purposes:
-**Button 2** — Pressing the button once changes the lighting state to the
-opposite one.
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
-- On nRF52840 DK, nRF5340 DK, and nRF21540 DK: Changes the LED state to the
- opposite one.
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
-- On nRF7002 DK:
+- **Button 2** — Pressing the button once changes the lighting state to
+ the opposite one.
+
+- **Button 4** : Starts the NFC tag emulation, enables Bluetooth LE
+ advertising for the predefined period of time (60 minutes by default), and
+ makes the device discoverable over Bluetooth LE. This button is used during
+ the commissioning procedure.
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
+
+#### nRF54L15 DK
+
+- **LED 0** shows the overall state of the device and its connectivity. The
+ following states are possible:
+
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
+
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
+
+ - _Solid On_ — The device is fully provisioned.
+
+- **LED 1** simulates the light bulb and shows the state of the lighting. The
+ following states are possible:
+
+ - _Solid On_ — The light bulb is on.
+
+ - _Off_ — The light bulb is off.
+
+ Additionally, the LED starts blinking evenly (500 ms on/500 ms off) when the
+ Identify command of the Identify cluster is received on the endpoint 1. The
+ command’s argument can be used to specify the duration of the effect.
+
+- **Button 0** can be used for the following purposes:
+
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
+
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
+
+- **Button 1** — Pressing the button once changes the lighting state to
+ the opposite one.
+
+- **Button 3** : Starts the NFC tag emulation, enables Bluetooth LE
+ advertising for the predefined period of time (60 minutes by default), and
+ makes the device discoverable over Bluetooth LE. This button is used during
+ the commissioning procedure.
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
+
+#### nRF7002 DK
+
+- **LED 1** shows the overall state of the device and its connectivity. The
+ following states are possible:
+
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
+
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
+
+ - _Solid On_ — The device is fully provisioned.
+
+- **LED 2** simulates the light bulb and shows the state of the lighting. The
+ following states are possible:
+
+ - _Solid On_ — The light bulb is on.
+
+ - _Off_ — The light bulb is off.
+
+ Additionally, the LED starts blinking evenly (500 ms on/500 ms off) when the
+ Identify command of the Identify cluster is received on the endpoint 1. The
+ command’s argument can be used to specify the duration of the effect.
+
+- **Button 1** can be used for the following purposes:
+
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
+
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
+
+- **Button 2** can be used for the following purposes:
- If pressed for less than three seconds, it changes the LED state to the
opposite one.
- If pressed for more than three seconds, it starts the NFC tag emulation,
- enables Bluetooth LE advertising for the predefined period of time (15
+ enables Bluetooth LE advertising for the predefined period of time (60
minutes by default), and makes the device discoverable over Bluetooth
LE.
-**Button 4** :
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
-- On nRF52840 DK, nRF5340 DK, and nRF21540 DK: Starts the NFC tag emulation,
- enables Bluetooth LE advertising for the predefined period of time (15
- minutes by default), and makes the device discoverable over Bluetooth LE.
- This button is used during the commissioning procedure.
-
-- On nRF7002 DK: Not available.
-
-**SEGGER J-Link USB port** can be used to get logs from the device or
-communicate with it using the
-[command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
-
-**NFC port with antenna attached** can be used to start the
-[rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
-information from the Matter device in a data payload that can be shared using
-NFC.
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
<hr>
@@ -417,10 +528,10 @@
>
> There are two types of Device Firmware Upgrade modes: single-image DFU and
> multi-image DFU. Single-image mode supports upgrading only one firmware image,
-> the application image, and should be used for single-core nRF52840 DK devices.
-> Multi-image mode allows to upgrade more firmware images and is suitable for
-> upgrading the application core and network core firmware in two-core nRF5340
-> DK devices.
+> the application image, and should be used for single-core nRF52840 DK and
+> nRF54L15 DK devices. Multi-image mode allows to upgrade more firmware images
+> and is suitable for upgrading the application core and network core firmware
+> in two-core nRF5340 DK devices.
>
> Currently the multi-image mode is only available for the DFU over Bluetooth LE
> method.
@@ -488,12 +599,12 @@
- debug -- Debug version of the application - can be used to enable additional
features for verifying the application behavior, such as logs or
- command-line shell. It can be used only for the nRF52840 DK and nRF5340 DK,
- as those platforms have DFU enabled by default.
+ command-line shell. It can be used only for the nRF52840 DK, nRF5340 DK,
+ nRF54L15 DK, and nRF7002 DK as those platforms have DFU enabled by default.
- release -- Release version of the application - can be used to enable only
the necessary application functionalities to optimize its performance. It
- can be used only for the nRF52840 DK and nRF5340 DK, as those platforms have
- DFU enabled by default.
+ can be used only for the nRF52840 DK, nRF5340 DK, nRF54L15 DK, and nRF7002
+ DK as those platforms have DFU enabled by default.
For more information, see the
[Configuring nRF Connect SDK examples](../../../docs/platforms/nrf/nrfconnect_examples_configuration.md)
diff --git a/examples/lighting-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/lighting-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..2245cf5
--- /dev/null
+++ b/examples/lighting-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,27 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Multirole is the only currently supported role by SoftDevice.
+CONFIG_BT_LL_SOFTDEVICE_MULTIROLE=y
+
+# ZMS cache optimization
+CONFIG_ZMS_LOOKUP_CACHE=y
+CONFIG_ZMS_LOOKUP_CACHE_SIZE=512
+CONFIG_ZMS_LOOKUP_CACHE_FOR_SETTINGS=y
+
+# Workaround required as Zephyr L2 implies usage of NVS backend for settings.
+# It should be removed once the proper fix will be applied in Zephyr.
+CONFIG_NVS=n
diff --git a/examples/lighting-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/lighting-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..18b25be
--- /dev/null
+++ b/examples/lighting-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2025 Project CHIP Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/ {
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+
+ aliases {
+ // Configure PWM module for led1 (LED2 on the board)
+ pwm-led1 = &pwm_led1;
+
+ // Use watchdog wdt31 as the application watchdog
+ watchdog0 = &wdt31;
+ };
+
+ pwmleds {
+ compatible = "pwm-leds";
+ pwm_led1: pwm_led_1 {
+ pwms = <&pwm20 1 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
+ };
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+// TODO: re-enable HWFC once it's fixed
+&uart20 {
+ /delete-property/ hw-flow-control;
+};
+
+&mx25r64 {
+ status = "okay";
+};
+
+&pwm20 {
+ status = "okay";
+ pinctrl-0 = <&pwm_default>;
+ pinctrl-1 = <&pwm_sleep>;
+ pinctrl-names = "default", "sleep";
+};
+
+&pinctrl {
+ pwm_default: pwm_default {
+ group1 {
+ psels = <NRF_PSEL(PWM_OUT1, 1, 10)>;
+ };
+ };
+ pwm_sleep: pwm_sleep {
+ group1 {
+ psels = <NRF_PSEL(PWM_OUT1, 1, 10)>;
+ low-power-enable;
+ };
+ };
+};
+
+&wdt31 {
+ status = "okay";
+};
diff --git a/examples/lighting-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml b/examples/lighting-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml
deleted file mode 100644
index ce42b39..0000000
--- a/examples/lighting-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0x7000
- region: flash_primary
-mcuboot_pad:
- address: 0x7000
- size: 0x200
-app:
- address: 0x7200
- size: 0xf3e00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0x7000
- size: 0xf4000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0x7200
- size: 0xf3e00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_secondary:
- address: 0x0
- size: 0xf4000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0xf4000
- size: 0x70c000
- device: MX25R64
- region: external_flash
diff --git a/examples/lighting-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml b/examples/lighting-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml
deleted file mode 100644
index 10e8680..0000000
--- a/examples/lighting-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0x8000
- region: flash_primary
-mcuboot_pad:
- address: 0x8000
- size: 0x200
-app:
- address: 0x8200
- size: 0xf2e00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0x8000
- size: 0xf3000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0x8200
- size: 0xf2e00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_primary_1:
- address: 0x0
- size: 0x40000
- device: flash_ctrl
- region: ram_flash
-mcuboot_secondary:
- address: 0x0
- size: 0xf3000
- device: MX25R64
- region: external_flash
-mcuboot_secondary_1:
- address: 0xf3000
- size: 0x40000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0x133000
- size: 0x6CD000
- device: MX25R64
- region: external_flash
-pcd_sram:
- address: 0x20000000
- size: 0x2000
- region: sram_primary
diff --git a/examples/lighting-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml b/examples/lighting-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
new file mode 100644
index 0000000..c874ec5
--- /dev/null
+++ b/examples/lighting-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
@@ -0,0 +1,56 @@
+mcuboot:
+ address: 0x0
+ region: flash_primary
+ size: 0xD000
+mcuboot_pad:
+ address: 0xD000
+ region: flash_primary
+ size: 0x800
+app:
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+mcuboot_primary:
+ orig_span: &id001
+ - mcuboot_pad
+ - app
+ span: *id001
+ address: 0xD000
+ region: flash_primary
+ size: 0x165000
+mcuboot_primary_app:
+ orig_span: &id002
+ - app
+ span: *id002
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+factory_data:
+ address: 0x172000
+ region: flash_primary
+ size: 0x1000
+settings_storage:
+ address: 0x173000
+ region: flash_primary
+ size: 0xA000
+mcuboot_secondary:
+ address: 0x0
+ orig_span: &id003
+ - mcuboot_secondary_pad
+ - mcuboot_secondary_app
+ region: external_flash
+ size: 0x165000
+ span: *id003
+mcuboot_secondary_pad:
+ region: external_flash
+ address: 0x0
+ size: 0x800
+mcuboot_secondary_app:
+ region: external_flash
+ address: 0x800
+ size: 0x164800
+external_flash:
+ address: 0x165000
+ size: 0x69B000
+ device: MX25R64
+ region: external_flash
diff --git a/examples/lighting-app/nrfconnect/pm_static_nrf7002dk_nrf5340_cpuapp_release.yml b/examples/lighting-app/nrfconnect/pm_static_nrf7002dk_nrf5340_cpuapp_release.yml
deleted file mode 100644
index 3c56dc0..0000000
--- a/examples/lighting-app/nrfconnect/pm_static_nrf7002dk_nrf5340_cpuapp_release.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0xC000
- region: flash_primary
-mcuboot_pad:
- address: 0xC000
- size: 0x200
-app:
- address: 0xC200
- size: 0xeee00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0xC000
- size: 0xef000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0xC200
- size: 0xeee00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_primary_1:
- address: 0x0
- size: 0x40000
- device: flash_ctrl
- region: ram_flash
-mcuboot_secondary:
- address: 0x0
- size: 0xef000
- device: MX25R64
- region: external_flash
-mcuboot_secondary_1:
- address: 0xef000
- size: 0x40000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0x12f000
- size: 0x6D1000
- device: MX25R64
- region: external_flash
-pcd_sram:
- address: 0x20000000
- size: 0x2000
- region: sram_primary
diff --git a/examples/lighting-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/lighting-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..e800269
--- /dev/null
+++ b/examples/lighting-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# TODO: Workaround, disable memory guard to avoid false faults in application after boot
+CONFIG_HW_STACK_PROTECTION=n
+
+CONFIG_BOOT_WATCHDOG_FEED=n
+
+# nRF54L15DK uses SPI NOR external flash
+CONFIG_GPIO=y
+CONFIG_SPI=y
+CONFIG_SPI_NOR=y
+CONFIG_SPI_NOR_SFDP_DEVICETREE=y
+CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
+
+# required by SPI driver
+CONFIG_MULTITHREADING=y
+
+CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y
+
+# Adjust the maximum sectors to the app image size of ~1.4MB
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+
+# Currently, without tickless kernel, the SYSCOUNTER value after the software
+# reset is not set properly and due to that the first system interrupt is not called
+# in the proper time - the SYSCOUNTER value is set to the value from before
+# reset + 1. Hence, the reboot time increases more and more.
+# To avoid it enable tickless kernel for mcuboot.
+CONFIG_TICKLESS_KERNEL=y
+
+# Low Power mode
+CONFIG_POWEROFF=y
diff --git a/examples/lighting-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/lighting-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..ce1d757
--- /dev/null
+++ b/examples/lighting-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+&mx25r64 {
+ status = "okay";
+};
diff --git a/examples/lighting-app/nrfconnect/sysbuild/mcuboot/prj.conf b/examples/lighting-app/nrfconnect/sysbuild/mcuboot/prj.conf
index 3bcb12f..ba05b21 100644
--- a/examples/lighting-app/nrfconnect/sysbuild/mcuboot/prj.conf
+++ b/examples/lighting-app/nrfconnect/sysbuild/mcuboot/prj.conf
@@ -23,8 +23,6 @@
CONFIG_FLASH=y
CONFIG_FPROTECT=y
-CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h"
-
# Use minimal C library instead of the Picolib
CONFIG_MINIMAL_LIBC=y
@@ -47,3 +45,8 @@
CONFIG_TICKLESS_KERNEL=n
CONFIG_TIMEOUT_64BIT=n
CONFIG_NRF_ENABLE_ICACHE=n
+CONFIG_SIZE_OPTIMIZATIONS=y
+
+# Activate LTO
+CONFIG_LTO=y
+CONFIG_ISR_TABLES_LOCAL_DECLARATION=y
diff --git a/examples/lit-icd-app/nrfconnect/Kconfig.sysbuild b/examples/lit-icd-app/nrfconnect/Kconfig.sysbuild
index 8877de4..1a300f5 100644
--- a/examples/lit-icd-app/nrfconnect/Kconfig.sysbuild
+++ b/examples/lit-icd-app/nrfconnect/Kconfig.sysbuild
@@ -67,6 +67,14 @@
default y
endif # SOC_SERIES_NRF53X
+
+if BOARD_NRF54L15DK
+
+config PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
+ default y
+
+endif # BOARD_NRF54L15DK
+
endif # BOOTLOADER_MCUBOOT
#### Enable generating factory data
diff --git a/examples/lit-icd-app/nrfconnect/README.md b/examples/lit-icd-app/nrfconnect/README.md
index 81503f9..0157224 100644
--- a/examples/lit-icd-app/nrfconnect/README.md
+++ b/examples/lit-icd-app/nrfconnect/README.md
@@ -59,8 +59,13 @@
### Bluetooth LE advertising
In this example, to commission the device onto a Matter network, it must be
-discoverable over Bluetooth LE. For security reasons, you must start Bluetooth
-LE advertising manually after powering up the device by pressing **Button 4**.
+discoverable over Bluetooth LE. The Bluetooth LE advertising is automatically
+started after powering up the device, but it may timeout and require re-starting
+by pressing:
+
+- On nRF52840 DK and nRF5340 DK: **Button 4**.
+
+- On nRF54L15 DK: **Button 3**.
### Bluetooth LE rendezvous
@@ -129,10 +134,11 @@
The example supports building and running on the following devices:
-| Hardware platform | Build target | Platform image |
-| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
-| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
-| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
+| Hardware platform | Build target | Platform image |
+| ----------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
+| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
+| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
+| [nRF54L15 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF54L15-DK) | `nrf54l15dk/nrf54l15/cpuapp` | <details><summary>nRF54L15 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF54L15_DK_info-medium.png" alt="nRF54L15 DK"/></details> |
<hr>
@@ -142,53 +148,107 @@
monitor the state of the device. These correspond to PCB components on the
platform image.
-**LED 1** shows the overall state of the device and its connectivity. The
-following states are possible:
+**Device UI elements by platform:**
-- _Short Flash On (50 ms on/950 ms off)_ — The device is in the
- unprovisioned (unpaired) state and is waiting for a commissioning
- application to connect.
+#### nRF52840 DK and nRF5340 DK
-- _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
- unprovisioned state and a commissioning application is connected through
- Bluetooth LE.
+- **LED 1** shows the overall state of the device and its connectivity. The
+ following states are possible:
-- _Short Flash Off (950ms on/50ms off)_ — The device is fully
- provisioned, but does not yet have full connectivity for Thread network.
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
-- _Solid On_ — The device is fully provisioned.
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
-**LED 2** is used for the Identify feature purpose. The LED starts blinking
-evenly (500 ms on/500 ms off) when the Identify command of the Identify cluster
-is received on the endpoint 1. The command’s argument can be used to specify the
-duration of the effect.
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread network.
-**Button 1** Pressing the button for more than 3 s initiates the factory reset
-of the device. Releasing the button within the 3-second window cancels the
-factory reset procedure.
+ - _Solid On_ — The device is fully provisioned.
-**Button 2** Represents the Dynamic SIT LIT Support feature from the
-Intermittently Connected Devices Management cluster. Pressing it requests
-putting the ICD device in the SIT mode. Pressing the button again withdraws the
-previous request.
+- **LED 2** is used for the Identify feature purpose. The LED starts blinking
+ evenly (500 ms on/500 ms off) when the Identify command of the Identify
+ cluster is received on the endpoint 1. The command’s argument can be used to
+ specify the duration of the effect.
-**Button 3** Represents the User Active Mode Trigger feature from the
-Intermittently Connected Devices Management cluster. Pressing it puts the ICD
-device in the active mode and makes it responsive.
+- **Button 1** Pressing the button for more than 3 s initiates the factory
+ reset of the device. Releasing the button within the 3-second window cancels
+ the factory reset procedure.
-**Button 4** Starts the NFC tag emulation, enables Bluetooth LE advertising for
-the predefined period of time (15 minutes by default), and makes the device
-discoverable over Bluetooth LE. This button is used during the commissioning
-procedure.
+- **Button 2** Represents the Dynamic SIT LIT Support feature from the
+ Intermittently Connected Devices Management cluster. Pressing it requests
+ putting the ICD device in the SIT mode. Pressing the button again withdraws
+ the previous request.
-**SEGGER J-Link USB port** can be used to get logs from the device or
-communicate with it using the
-[command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+- **Button 3** Represents the User Active Mode Trigger feature from the
+ Intermittently Connected Devices Management cluster. Pressing it puts the
+ ICD device in the active mode and makes it responsive.
-**NFC port with antenna attached** can be used to start the
-[rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
-information from the Matter device in a data payload that can be shared using
-NFC.
+- **Button 4** Starts the NFC tag emulation, enables Bluetooth LE advertising
+ for the predefined period of time (15 minutes by default), and makes the
+ device discoverable over Bluetooth LE. This button is used during the
+ commissioning procedure.
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
+
+#### nRF54L15 DK
+
+- **LED 0** shows the overall state of the device and its connectivity. The
+ following states are possible:
+
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
+
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread network.
+
+ - _Solid On_ — The device is fully provisioned.
+
+- **LED 1** is used for the Identify feature purpose. The LED starts blinking
+ evenly (500 ms on/500 ms off) when the Identify command of the Identify
+ cluster is received on the endpoint 1. The command’s argument can be used to
+ specify the duration of the effect.
+
+- **Button 0** Pressing the button for more than 3 s initiates the factory
+ reset of the device. Releasing the button within the 3-second window cancels
+ the factory reset procedure.
+
+- **Button 1** Represents the Dynamic SIT LIT Support feature from the
+ Intermittently Connected Devices Management cluster. Pressing it requests
+ putting the ICD device in the SIT mode. Pressing the button again withdraws
+ the previous request.
+
+- **Button 2** Represents the User Active Mode Trigger feature from the
+ Intermittently Connected Devices Management cluster. Pressing it puts the
+ ICD device in the active mode and makes it responsive.
+
+- **Button 3** Starts the NFC tag emulation, enables Bluetooth LE advertising
+ for the predefined period of time (15 minutes by default), and makes the
+ device discoverable over Bluetooth LE. This button is used during the
+ commissioning procedure.
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
<hr>
@@ -305,10 +365,10 @@
>
> There are two types of Device Firmware Upgrade modes: single-image DFU and
> multi-image DFU. Single-image mode supports upgrading only one firmware image,
-> the application image, and should be used for single-core nRF52840 DK devices.
-> Multi-image mode allows to upgrade more firmware images and is suitable for
-> upgrading the application core and network core firmware in two-core nRF5340
-> DK devices.
+> the application image, and should be used for single-core nRF52840 DK and
+> nRF54L15 DK devices. Multi-image mode allows to upgrade more firmware images
+> and is suitable for upgrading the application core and network core firmware
+> in two-core nRF5340 DK devices.
#### Changing bootloader configuration
diff --git a/examples/lit-icd-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/lit-icd-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..2245cf5
--- /dev/null
+++ b/examples/lit-icd-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,27 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Multirole is the only currently supported role by SoftDevice.
+CONFIG_BT_LL_SOFTDEVICE_MULTIROLE=y
+
+# ZMS cache optimization
+CONFIG_ZMS_LOOKUP_CACHE=y
+CONFIG_ZMS_LOOKUP_CACHE_SIZE=512
+CONFIG_ZMS_LOOKUP_CACHE_FOR_SETTINGS=y
+
+# Workaround required as Zephyr L2 implies usage of NVS backend for settings.
+# It should be removed once the proper fix will be applied in Zephyr.
+CONFIG_NVS=n
diff --git a/examples/lit-icd-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/lit-icd-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..5e210e9
--- /dev/null
+++ b/examples/lit-icd-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ aliases {
+ // Use watchdog wdt31 as the application watchdog
+ watchdog0 = &wdt31;
+ };
+
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+// TODO: re-enable HWFC once it's fixed
+&uart20 {
+ /delete-property/ hw-flow-control;
+};
+
+&mx25r64 {
+ status = "okay";
+};
+
+&wdt31 {
+ status = "okay";
+};
diff --git a/examples/lit-icd-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml b/examples/lit-icd-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml
deleted file mode 100644
index ce42b39..0000000
--- a/examples/lit-icd-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0x7000
- region: flash_primary
-mcuboot_pad:
- address: 0x7000
- size: 0x200
-app:
- address: 0x7200
- size: 0xf3e00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0x7000
- size: 0xf4000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0x7200
- size: 0xf3e00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_secondary:
- address: 0x0
- size: 0xf4000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0xf4000
- size: 0x70c000
- device: MX25R64
- region: external_flash
diff --git a/examples/lit-icd-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml b/examples/lit-icd-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml
deleted file mode 100644
index 10e8680..0000000
--- a/examples/lit-icd-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0x8000
- region: flash_primary
-mcuboot_pad:
- address: 0x8000
- size: 0x200
-app:
- address: 0x8200
- size: 0xf2e00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0x8000
- size: 0xf3000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0x8200
- size: 0xf2e00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_primary_1:
- address: 0x0
- size: 0x40000
- device: flash_ctrl
- region: ram_flash
-mcuboot_secondary:
- address: 0x0
- size: 0xf3000
- device: MX25R64
- region: external_flash
-mcuboot_secondary_1:
- address: 0xf3000
- size: 0x40000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0x133000
- size: 0x6CD000
- device: MX25R64
- region: external_flash
-pcd_sram:
- address: 0x20000000
- size: 0x2000
- region: sram_primary
diff --git a/examples/lit-icd-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml b/examples/lit-icd-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
new file mode 100644
index 0000000..c874ec5
--- /dev/null
+++ b/examples/lit-icd-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
@@ -0,0 +1,56 @@
+mcuboot:
+ address: 0x0
+ region: flash_primary
+ size: 0xD000
+mcuboot_pad:
+ address: 0xD000
+ region: flash_primary
+ size: 0x800
+app:
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+mcuboot_primary:
+ orig_span: &id001
+ - mcuboot_pad
+ - app
+ span: *id001
+ address: 0xD000
+ region: flash_primary
+ size: 0x165000
+mcuboot_primary_app:
+ orig_span: &id002
+ - app
+ span: *id002
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+factory_data:
+ address: 0x172000
+ region: flash_primary
+ size: 0x1000
+settings_storage:
+ address: 0x173000
+ region: flash_primary
+ size: 0xA000
+mcuboot_secondary:
+ address: 0x0
+ orig_span: &id003
+ - mcuboot_secondary_pad
+ - mcuboot_secondary_app
+ region: external_flash
+ size: 0x165000
+ span: *id003
+mcuboot_secondary_pad:
+ region: external_flash
+ address: 0x0
+ size: 0x800
+mcuboot_secondary_app:
+ region: external_flash
+ address: 0x800
+ size: 0x164800
+external_flash:
+ address: 0x165000
+ size: 0x69B000
+ device: MX25R64
+ region: external_flash
diff --git a/examples/lit-icd-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/lit-icd-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..e800269
--- /dev/null
+++ b/examples/lit-icd-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# TODO: Workaround, disable memory guard to avoid false faults in application after boot
+CONFIG_HW_STACK_PROTECTION=n
+
+CONFIG_BOOT_WATCHDOG_FEED=n
+
+# nRF54L15DK uses SPI NOR external flash
+CONFIG_GPIO=y
+CONFIG_SPI=y
+CONFIG_SPI_NOR=y
+CONFIG_SPI_NOR_SFDP_DEVICETREE=y
+CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
+
+# required by SPI driver
+CONFIG_MULTITHREADING=y
+
+CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y
+
+# Adjust the maximum sectors to the app image size of ~1.4MB
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+
+# Currently, without tickless kernel, the SYSCOUNTER value after the software
+# reset is not set properly and due to that the first system interrupt is not called
+# in the proper time - the SYSCOUNTER value is set to the value from before
+# reset + 1. Hence, the reboot time increases more and more.
+# To avoid it enable tickless kernel for mcuboot.
+CONFIG_TICKLESS_KERNEL=y
+
+# Low Power mode
+CONFIG_POWEROFF=y
diff --git a/examples/lit-icd-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/lit-icd-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..ce1d757
--- /dev/null
+++ b/examples/lit-icd-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+&mx25r64 {
+ status = "okay";
+};
diff --git a/examples/lit-icd-app/nrfconnect/sysbuild/mcuboot/prj.conf b/examples/lit-icd-app/nrfconnect/sysbuild/mcuboot/prj.conf
index 3bcb12f..ba05b21 100644
--- a/examples/lit-icd-app/nrfconnect/sysbuild/mcuboot/prj.conf
+++ b/examples/lit-icd-app/nrfconnect/sysbuild/mcuboot/prj.conf
@@ -23,8 +23,6 @@
CONFIG_FLASH=y
CONFIG_FPROTECT=y
-CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h"
-
# Use minimal C library instead of the Picolib
CONFIG_MINIMAL_LIBC=y
@@ -47,3 +45,8 @@
CONFIG_TICKLESS_KERNEL=n
CONFIG_TIMEOUT_64BIT=n
CONFIG_NRF_ENABLE_ICACHE=n
+CONFIG_SIZE_OPTIMIZATIONS=y
+
+# Activate LTO
+CONFIG_LTO=y
+CONFIG_ISR_TABLES_LOCAL_DECLARATION=y
diff --git a/examples/lock-app/nrfconnect/Kconfig.sysbuild b/examples/lock-app/nrfconnect/Kconfig.sysbuild
index 4a0b8f3..e7681ff 100644
--- a/examples/lock-app/nrfconnect/Kconfig.sysbuild
+++ b/examples/lock-app/nrfconnect/Kconfig.sysbuild
@@ -67,6 +67,14 @@
default y
endif # SOC_SERIES_NRF53X
+
+if BOARD_NRF54L15DK
+
+config PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
+ default y
+
+endif # BOARD_NRF54L15DK
+
endif # BOOTLOADER_MCUBOOT
#### Enable generating factory data
diff --git a/examples/lock-app/nrfconnect/README.md b/examples/lock-app/nrfconnect/README.md
index 0a0743a..7f4a255 100644
--- a/examples/lock-app/nrfconnect/README.md
+++ b/examples/lock-app/nrfconnect/README.md
@@ -70,7 +70,9 @@
discoverable over Bluetooth LE. For security reasons, you must start Bluetooth
LE advertising manually after powering up the device by pressing:
-- On nRF52840 DK, nRF5340 DK, and nRF21540 DK: **Button 4**.
+- On nRF52840 DK and nRF5340 DK: **Button 4**.
+
+- On nRF54L15 DK: **Button 3**.
- On nRF7002 DK: **Button 2**.
@@ -162,11 +164,12 @@
The example supports building and running on the following devices:
-| Hardware platform | Build target | Platform image |
-| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
-| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
-| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
-| [nRF7002 DK](https://www.nordicsemi.com/Products/Development-hardware/nRF7002-DK) | `nrf7002dk/nrf5340/cpuapp` | <details><summary>nRF7002 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF7002-DK_Front-small.png" alt="nRF7002 DK"/></details> |
+| Hardware platform | Build target | Platform image |
+| ----------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
+| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
+| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
+| [nRF54L15 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF54L15-DK) | `nrf54l15dk/nrf54l15/cpuapp` | <details><summary>nRF54L15 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF54L15_DK_info-medium.png" alt="nRF54L15 DK"/></details> |
+| [nRF7002 DK](https://www.nordicsemi.com/Products/Development-hardware/nRF7002-DK) | `nrf7002dk/nrf5340/cpuapp` | <details><summary>nRF7002 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF7002-DK_Front-small.png" alt="nRF7002 DK"/></details> |
<hr>
@@ -175,8 +178,8 @@
The development kits for this sample offer the following IPv6 network support
for Matter:
-- Matter over Thread is supported for `nrf52840dk/nrf52840` and
- `nrf5340dk/nrf5340/cpuapp`.
+- Matter over Thread is supported for `nrf52840dk/nrf52840`,
+ `nrf5340dk/nrf5340/cpuapp`, and `nrf54l15dk/nrf54l15/cpuapp`.
- Matter over Wi-Fi is supported for `nrf7002dk/nrf5340/cpuapp`.
## Device UI
@@ -185,82 +188,195 @@
monitor the state of the device. These correspond to PCB components on the
platform image.
-**LED 1** shows the overall state of the device and its connectivity. The
-following states are possible:
+**Device UI elements by platform:**
-- _Short Flash On (50 ms on/950 ms off)_ — The device is in the
- unprovisioned (unpaired) state and is waiting for a commissioning
- application to connect.
+#### nRF52840 DK and nRF5340 DK
-- _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
- unprovisioned state and a commissioning application is connected through
- Bluetooth LE.
+- **LED 1** shows the overall state of the device and its connectivity. The
+ following states are possible:
-- _Short Flash Off (950ms on/50ms off)_ — The device is fully
- provisioned, but does not yet have full connectivity for Thread or Wi-Fi
- network.
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
-- _Solid On_ — The device is fully provisioned.
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
-**LED 2** simulates the lock bolt and shows the state of the lock. The following
-states are possible:
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
-- _Solid On_ — The bolt is extended and the door is locked.
+ - _Solid On_ — The device is fully provisioned.
-- _Off_ — The bolt is retracted and the door is unlocked.
+- **LED 2** simulates the lock bolt and shows the state of the lock. The
+ following states are possible:
-- _Rapid Even Flashing (100 ms on/100 ms off during 2 s)_ — The
- simulated bolt is in motion from one position to another.
+ - _Solid On_ — The bolt is extended and the door is locked.
- Additionally, the LED starts blinking evenly (500 ms on/500 ms off) when the
- Identify command of the Identify cluster is received on the endpoint 1. The
- command’s argument can be used to specify the duration of the effect.
+ - _Off_ — The bolt is retracted and the door is unlocked.
-**Button 1** can be used for the following purposes:
+ - _Rapid Even Flashing (100 ms on/100 ms off during 2 s)_ — The
+ simulated bolt is in motion from one position to another.
-- _Pressed for less than 3 s_ — Initiates the OTA software update
- process. This feature is disabled by default, but can be enabled by
- following the
- [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
- instructions.
+ Additionally, the LED starts blinking evenly (500 ms on/500 ms off) when the
+ Identify command of the Identify cluster is received on the endpoint 1. The
+ command’s argument can be used to specify the duration of the effect.
-- _Pressed for more than 3 s_ — initiates the factory reset of the
- device. Releasing the button within the 3-second window cancels the factory
- reset procedure.
+- **Button 1** can be used for the following purposes:
-**Button 2** — Pressing the button once changes the lock state to the
-opposite one.
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
-- On nRF52840 DK, nRF5340 DK, and nRF21540 DK: Changes the lock state to the
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
+
+- **Button 2** — Pressing the button once changes the lock state to the
opposite one.
-- On nRF7002 DK:
+- **Button 4**: Starts the NFC tag emulation, enables Bluetooth LE advertising
+ for the predefined period of time (60 minutes by default), and makes the
+ device discoverable over Bluetooth LE. This button is used during the
+ commissioning procedure.
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
+
+#### nRF54L15 DK
+
+- **LED 0** shows the overall state of the device and its connectivity. The
+ following states are possible:
+
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
+
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
+
+ - _Solid On_ — The device is fully provisioned.
+
+- **LED 1** simulates the lock bolt and shows the state of the lock. The
+ following states are possible:
+
+ - _Solid On_ — The bolt is extended and the door is locked.
+
+ - _Off_ — The bolt is retracted and the door is unlocked.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off during 2 s)_ — The
+ simulated bolt is in motion from one position to another.
+
+ Additionally, the LED starts blinking evenly (500 ms on/500 ms off) when the
+ Identify command of the Identify cluster is received on the endpoint 1. The
+ command’s argument can be used to specify the duration of the effect.
+
+- **Button 0** can be used for the following purposes:
+
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
+
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
+
+- **Button 1** — Pressing the button once changes the lock state to the
+ opposite one.
+
+- **Button 3**: Starts the NFC tag emulation, enables Bluetooth LE advertising
+ for the predefined period of time (60 minutes by default), and makes the
+ device discoverable over Bluetooth LE. This button is used during the
+ commissioning procedure.
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
+
+#### nRF7002 DK
+
+- **LED 1** shows the overall state of the device and its connectivity. The
+ following states are possible:
+
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
+
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
+
+ - _Solid On_ — The device is fully provisioned.
+
+- **LED 2** simulates the lock bolt and shows the state of the lock. The
+ following states are possible:
+
+ - _Solid On_ — The bolt is extended and the door is locked.
+
+ - _Off_ — The bolt is retracted and the door is unlocked.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off during 2 s)_ — The
+ simulated bolt is in motion from one position to another.
+
+ Additionally, the LED starts blinking evenly (500 ms on/500 ms off) when the
+ Identify command of the Identify cluster is received on the endpoint 1. The
+ command’s argument can be used to specify the duration of the effect.
+
+- **Button 1** can be used for the following purposes:
+
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instructions.
+
+ - _Pressed for more than 3 s_ — initiates the factory reset of the
+ device. Releasing the button within the 3-second window cancels the
+ factory reset procedure.
+
+- **Button 2** can be used for the following purposes:
- If pressed for less than three seconds, it changes the lock state to the
opposite one.
- If pressed for more than three seconds, it starts the NFC tag emulation,
- enables Bluetooth LE advertising for the predefined period of time (15
+ enables Bluetooth LE advertising for the predefined period of time (60
minutes by default), and makes the device discoverable over Bluetooth
LE.
-**Button 4**:
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
-- On nRF52840 DK, nRF5340 DK, and nRF21540 DK: Starts the NFC tag emulation,
- enables Bluetooth LE advertising for the predefined period of time (15
- minutes by default), and makes the device discoverable over Bluetooth LE.
- This button is used during the commissioning procedure.
-
-- On nRF7002 DK: Not available.
-
-**SEGGER J-Link USB port** can be used to get logs from the device or
-communicate with it using the
-[command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
-
-**NFC port with antenna attached** can be used to start the
-[rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
-information from the Matter device in a data payload that can be shared using
-NFC.
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
<hr>
@@ -383,10 +499,10 @@
>
> There are two types of Device Firmware Upgrade modes: single-image DFU and
> multi-image DFU. Single-image mode supports upgrading only one firmware image,
-> the application image, and should be used for single-core nRF52840 DK devices.
-> Multi-image mode allows to upgrade more firmware images and is suitable for
-> upgrading the application core and network core firmware in two-core nRF5340
-> DK devices.
+> the application image, and should be used for single-core nRF52840 DK and
+> nRF54L15 DK devices. Multi-image mode allows to upgrade more firmware images
+> and is suitable for upgrading the application core and network core firmware
+> in two-core nRF5340 DK devices.
#### Changing bootloader configuration
diff --git a/examples/lock-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/lock-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..2245cf5
--- /dev/null
+++ b/examples/lock-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,27 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Multirole is the only currently supported role by SoftDevice.
+CONFIG_BT_LL_SOFTDEVICE_MULTIROLE=y
+
+# ZMS cache optimization
+CONFIG_ZMS_LOOKUP_CACHE=y
+CONFIG_ZMS_LOOKUP_CACHE_SIZE=512
+CONFIG_ZMS_LOOKUP_CACHE_FOR_SETTINGS=y
+
+# Workaround required as Zephyr L2 implies usage of NVS backend for settings.
+# It should be removed once the proper fix will be applied in Zephyr.
+CONFIG_NVS=n
diff --git a/examples/lock-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/lock-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..5e210e9
--- /dev/null
+++ b/examples/lock-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ aliases {
+ // Use watchdog wdt31 as the application watchdog
+ watchdog0 = &wdt31;
+ };
+
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+// TODO: re-enable HWFC once it's fixed
+&uart20 {
+ /delete-property/ hw-flow-control;
+};
+
+&mx25r64 {
+ status = "okay";
+};
+
+&wdt31 {
+ status = "okay";
+};
diff --git a/examples/lock-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml b/examples/lock-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml
deleted file mode 100644
index ce42b39..0000000
--- a/examples/lock-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0x7000
- region: flash_primary
-mcuboot_pad:
- address: 0x7000
- size: 0x200
-app:
- address: 0x7200
- size: 0xf3e00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0x7000
- size: 0xf4000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0x7200
- size: 0xf3e00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_secondary:
- address: 0x0
- size: 0xf4000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0xf4000
- size: 0x70c000
- device: MX25R64
- region: external_flash
diff --git a/examples/lock-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml b/examples/lock-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml
deleted file mode 100644
index 10e8680..0000000
--- a/examples/lock-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0x8000
- region: flash_primary
-mcuboot_pad:
- address: 0x8000
- size: 0x200
-app:
- address: 0x8200
- size: 0xf2e00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0x8000
- size: 0xf3000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0x8200
- size: 0xf2e00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_primary_1:
- address: 0x0
- size: 0x40000
- device: flash_ctrl
- region: ram_flash
-mcuboot_secondary:
- address: 0x0
- size: 0xf3000
- device: MX25R64
- region: external_flash
-mcuboot_secondary_1:
- address: 0xf3000
- size: 0x40000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0x133000
- size: 0x6CD000
- device: MX25R64
- region: external_flash
-pcd_sram:
- address: 0x20000000
- size: 0x2000
- region: sram_primary
diff --git a/examples/lock-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml b/examples/lock-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
new file mode 100644
index 0000000..c874ec5
--- /dev/null
+++ b/examples/lock-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
@@ -0,0 +1,56 @@
+mcuboot:
+ address: 0x0
+ region: flash_primary
+ size: 0xD000
+mcuboot_pad:
+ address: 0xD000
+ region: flash_primary
+ size: 0x800
+app:
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+mcuboot_primary:
+ orig_span: &id001
+ - mcuboot_pad
+ - app
+ span: *id001
+ address: 0xD000
+ region: flash_primary
+ size: 0x165000
+mcuboot_primary_app:
+ orig_span: &id002
+ - app
+ span: *id002
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+factory_data:
+ address: 0x172000
+ region: flash_primary
+ size: 0x1000
+settings_storage:
+ address: 0x173000
+ region: flash_primary
+ size: 0xA000
+mcuboot_secondary:
+ address: 0x0
+ orig_span: &id003
+ - mcuboot_secondary_pad
+ - mcuboot_secondary_app
+ region: external_flash
+ size: 0x165000
+ span: *id003
+mcuboot_secondary_pad:
+ region: external_flash
+ address: 0x0
+ size: 0x800
+mcuboot_secondary_app:
+ region: external_flash
+ address: 0x800
+ size: 0x164800
+external_flash:
+ address: 0x165000
+ size: 0x69B000
+ device: MX25R64
+ region: external_flash
diff --git a/examples/lock-app/nrfconnect/pm_static_nrf7002dk_nrf5340_cpuapp_release.yml b/examples/lock-app/nrfconnect/pm_static_nrf7002dk_nrf5340_cpuapp_release.yml
deleted file mode 100644
index 3c56dc0..0000000
--- a/examples/lock-app/nrfconnect/pm_static_nrf7002dk_nrf5340_cpuapp_release.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0xC000
- region: flash_primary
-mcuboot_pad:
- address: 0xC000
- size: 0x200
-app:
- address: 0xC200
- size: 0xeee00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0xC000
- size: 0xef000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0xC200
- size: 0xeee00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_primary_1:
- address: 0x0
- size: 0x40000
- device: flash_ctrl
- region: ram_flash
-mcuboot_secondary:
- address: 0x0
- size: 0xef000
- device: MX25R64
- region: external_flash
-mcuboot_secondary_1:
- address: 0xef000
- size: 0x40000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0x12f000
- size: 0x6D1000
- device: MX25R64
- region: external_flash
-pcd_sram:
- address: 0x20000000
- size: 0x2000
- region: sram_primary
diff --git a/examples/lock-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/lock-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..e800269
--- /dev/null
+++ b/examples/lock-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# TODO: Workaround, disable memory guard to avoid false faults in application after boot
+CONFIG_HW_STACK_PROTECTION=n
+
+CONFIG_BOOT_WATCHDOG_FEED=n
+
+# nRF54L15DK uses SPI NOR external flash
+CONFIG_GPIO=y
+CONFIG_SPI=y
+CONFIG_SPI_NOR=y
+CONFIG_SPI_NOR_SFDP_DEVICETREE=y
+CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
+
+# required by SPI driver
+CONFIG_MULTITHREADING=y
+
+CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y
+
+# Adjust the maximum sectors to the app image size of ~1.4MB
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+
+# Currently, without tickless kernel, the SYSCOUNTER value after the software
+# reset is not set properly and due to that the first system interrupt is not called
+# in the proper time - the SYSCOUNTER value is set to the value from before
+# reset + 1. Hence, the reboot time increases more and more.
+# To avoid it enable tickless kernel for mcuboot.
+CONFIG_TICKLESS_KERNEL=y
+
+# Low Power mode
+CONFIG_POWEROFF=y
diff --git a/examples/lock-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/lock-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..ce1d757
--- /dev/null
+++ b/examples/lock-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+&mx25r64 {
+ status = "okay";
+};
diff --git a/examples/lock-app/nrfconnect/sysbuild/mcuboot/prj.conf b/examples/lock-app/nrfconnect/sysbuild/mcuboot/prj.conf
index 3bcb12f..ba05b21 100644
--- a/examples/lock-app/nrfconnect/sysbuild/mcuboot/prj.conf
+++ b/examples/lock-app/nrfconnect/sysbuild/mcuboot/prj.conf
@@ -23,8 +23,6 @@
CONFIG_FLASH=y
CONFIG_FPROTECT=y
-CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h"
-
# Use minimal C library instead of the Picolib
CONFIG_MINIMAL_LIBC=y
@@ -47,3 +45,8 @@
CONFIG_TICKLESS_KERNEL=n
CONFIG_TIMEOUT_64BIT=n
CONFIG_NRF_ENABLE_ICACHE=n
+CONFIG_SIZE_OPTIMIZATIONS=y
+
+# Activate LTO
+CONFIG_LTO=y
+CONFIG_ISR_TABLES_LOCAL_DECLARATION=y
diff --git a/examples/platform/nrfconnect/doc/images/nRF54L15_DK_info-medium.png b/examples/platform/nrfconnect/doc/images/nRF54L15_DK_info-medium.png
new file mode 100644
index 0000000..debb14e
--- /dev/null
+++ b/examples/platform/nrfconnect/doc/images/nRF54L15_DK_info-medium.png
Binary files differ
diff --git a/examples/window-app/nrfconnect/Kconfig.sysbuild b/examples/window-app/nrfconnect/Kconfig.sysbuild
index 8877de4..1a300f5 100644
--- a/examples/window-app/nrfconnect/Kconfig.sysbuild
+++ b/examples/window-app/nrfconnect/Kconfig.sysbuild
@@ -67,6 +67,14 @@
default y
endif # SOC_SERIES_NRF53X
+
+if BOARD_NRF54L15DK
+
+config PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
+ default y
+
+endif # BOARD_NRF54L15DK
+
endif # BOOTLOADER_MCUBOOT
#### Enable generating factory data
diff --git a/examples/window-app/nrfconnect/README.md b/examples/window-app/nrfconnect/README.md
index c743bb2..3e45bd0 100644
--- a/examples/window-app/nrfconnect/README.md
+++ b/examples/window-app/nrfconnect/README.md
@@ -60,8 +60,13 @@
### Bluetooth LE advertising
In this example, to commission the device onto a Matter network, it must be
-discoverable over Bluetooth LE. For security reasons, you must start Bluetooth
-LE advertising manually after powering up the device by pressing **Button 4**.
+discoverable over Bluetooth LE. The Bluetooth LE advertising is automatically
+started after powering up the device, but it may timeout and require re-starting
+by pressing:
+
+- On nRF52840 DK and nRF5340 DK: **Button 4**.
+
+- On nRF54L15 DK: **Button 3**.
### Bluetooth LE rendezvous
@@ -145,10 +150,11 @@
The example supports building and running on the following devices:
-| Hardware platform | Build target | Platform image |
-| ----------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
-| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
-| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
+| Hardware platform | Build target | Platform image |
+| ----------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
+| [nRF52840 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK) | `nrf52840dk/nrf52840` | <details><summary>nRF52840 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF52840_DK_info-medium.jpg" alt="nRF52840 DK"/></details> |
+| [nRF5340 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF5340-DK) | `nrf5340dk/nrf5340/cpuapp` | <details><summary>nRF5340 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF5340_DK_info-medium.jpg" alt="nRF5340 DK"/></details> |
+| [nRF54L15 DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF54L15-DK) | `nrf54l15dk/nrf54l15/cpuapp` | <details><summary>nRF54L15 DK</summary><img src="../../platform/nrfconnect/doc/images/nRF54L15_DK_info-medium.png" alt="nRF54L15 DK"/></details> |
<hr>
@@ -158,61 +164,65 @@
monitor the state of the device. These correspond to PCB components on the
platform image.
-**LED 1** shows the overall state of the device and its connectivity. The
-following states are possible:
+**Device UI elements by platform:**
-- _Short Flash On (50 ms on/950 ms off)_ — The device is in the
- unprovisioned (unpaired) state and is waiting for a commissioning
- application to connect.
+#### nRF52840 DK and nRF5340 DK
-- _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
- unprovisioned state and a commissioning application is connected through
- Bluetooth LE.
+- **LED 1** shows the overall state of the device and its connectivity. The
+ following states are possible:
-- _Short Flash Off (950ms on/50ms off)_ — The device is fully
- provisioned, but does not yet have full connectivity for Thread or Wi-Fi
- network.
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
-- _Solid On_ — The device is fully provisioned and has full Thread
- network and service connectivity.
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
-**LED 2** indicates the lift position of the shutter, which is represented by
-the brightness of the LED. The brightness level ranges from 0 to 255, where the
-switched off LED with brightness level 0 indicates a fully opened shutter
-(lifted) and 255 indicates a fully closed shutter (lowered).
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
-**LED 3** indicates the tilt position of the shutter, which is represented by
-the brightness of the LED. The brightness level ranges from 0 to 255, where the
-switched off LED with brightness level 0 indicates a fully opened shutter
-(tilted to a horizontal position) and 255 indicates a fully closed shutter
-(tilted to a vertical position).
+ - _Solid On_ — The device is fully provisioned and has full Thread
+ network and service connectivity.
-**Button 1** can be used for the following purposes:
+- **LED 2** indicates the lift position of the shutter, which is represented
+ by the brightness of the LED. The brightness level ranges from 0 to 255,
+ where the switched off LED with brightness level 0 indicates a fully opened
+ shutter (lifted) and 255 indicates a fully closed shutter (lowered).
-- _Pressed for 6 s_ — Initiates the factory reset of the device.
- Releasing the button within the 6-second window cancels the factory reset
- procedure. **LED 1** and **LED 4** blink in unison when the factory reset
- procedure is initiated.
+- **LED 3** indicates the tilt position of the shutter, which is represented
+ by the brightness of the LED. The brightness level ranges from 0 to 255,
+ where the switched off LED with brightness level 0 indicates a fully opened
+ shutter (tilted to a horizontal position) and 255 indicates a fully closed
+ shutter (tilted to a vertical position).
-- _Pressed for less than 3 s_ — Initiates the OTA software update
- process. This feature is disabled by default, but can be enabled by
- following the
- [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
- instruction.
+- **Button 1** can be used for the following purposes:
-**Button 2** — Pressing the button once moves the shutter towards the open
-position by one step. Depending on the current movement mode, the button
-decreases the brightness of **LED2** for the lift mode and **LED3** for the tilt
-mode.
+ - _Pressed for 6 s_ — Initiates the factory reset of the device.
+ Releasing the button within the 6-second window cancels the factory
+ reset procedure. **LED 1** and **LED 4** blink in unison when the
+ factory reset procedure is initiated.
-**Button 3** — Pressing the button once moves the shutter towards the
-closed position by one step. Depending on the current movement mode, the button
-increases the brightness of **LED2** for the lift mode and **LED3** for the tilt
-mode.
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instruction.
-**Button 2** and **Button 3** — Pressing both buttons at the same time
-toggles the shutter movement mode between lift and tilt. After each device
-reset, the mode is set to lift by default.
+- **Button 2** — Pressing the button once moves the shutter towards the
+ open position by one step. Depending on the current movement mode, the
+ button decreases the brightness of **LED2** for the lift mode and **LED3**
+ for the tilt mode.
+
+- **Button 3** — Pressing the button once moves the shutter towards the
+ closed position by one step. Depending on the current movement mode, the
+ button increases the brightness of **LED2** for the lift mode and **LED3**
+ for the tilt mode.
+
+- **Button 2** and **Button 3** — Pressing both buttons at the same time
+ toggles the shutter movement mode between lift and tilt. After each device
+ reset, the mode is set to lift by default.
> **Note**:
>
@@ -223,18 +233,98 @@
> factory reset both LEDs are switched off by default, which corresponds to the
> shutter being fully open, both lift-wise and tilt-wise.
-**Button 4** — Pressing the button once starts the NFC tag emulation and
-enables Bluetooth LE advertising for the predefined period of time (15 minutes
-by default).
+- **Button 4** — Pressing the button once starts the NFC tag emulation
+ and enables Bluetooth LE advertising for the predefined period of time (60
+ minutes by default).
-**SEGGER J-Link USB port** can be used to get logs from the device or
-communicate with it using the
-[command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
-**NFC port with antenna attached** can be used to start the
-[rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
-information from the Matter device in a data payload that can be shared using
-NFC.
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
+
+#### nRF54L15 DK
+
+- **LED 0** shows the overall state of the device and its connectivity. The
+ following states are possible:
+
+ - _Short Flash On (50 ms on/950 ms off)_ — The device is in the
+ unprovisioned (unpaired) state and is waiting for a commissioning
+ application to connect.
+
+ - _Rapid Even Flashing (100 ms on/100 ms off)_ — The device is in the
+ unprovisioned state and a commissioning application is connected through
+ Bluetooth LE.
+
+ - _Short Flash Off (950ms on/50ms off)_ — The device is fully
+ provisioned, but does not yet have full connectivity for Thread or Wi-Fi
+ network.
+
+ - _Solid On_ — The device is fully provisioned and has full Thread
+ network and service connectivity.
+
+- **LED 1** indicates the lift position of the shutter, which is represented
+ by the brightness of the LED. The brightness level ranges from 0 to 255,
+ where the switched off LED with brightness level 0 indicates a fully opened
+ shutter (lifted) and 255 indicates a fully closed shutter (lowered).
+
+- **LED 2** indicates the tilt position of the shutter, which is represented
+ by the brightness of the LED. The brightness level ranges from 0 to 255,
+ where the switched off LED with brightness level 0 indicates a fully opened
+ shutter (tilted to a horizontal position) and 255 indicates a fully closed
+ shutter (tilted to a vertical position).
+
+- **Button 0** can be used for the following purposes:
+
+ - _Pressed for 6 s_ — Initiates the factory reset of the device.
+ Releasing the button within the 6-second window cancels the factory
+ reset procedure. **LED 0** and **LED 3** blink in unison when the
+ factory reset procedure is initiated.
+
+ - _Pressed for less than 3 s_ — Initiates the OTA software update
+ process. This feature is disabled by default, but can be enabled by
+ following the
+ [Building with Device Firmware Upgrade support](#building-with-device-firmware-upgrade-support)
+ instruction.
+
+- **Button 1** — Pressing the button once moves the shutter towards the
+ open position by one step. Depending on the current movement mode, the
+ button decreases the brightness of **LED1** for the lift mode and **LED2**
+ for the tilt mode.
+
+- **Button 2** — Pressing the button once moves the shutter towards the
+ closed position by one step. Depending on the current movement mode, the
+ button increases the brightness of **LED1** for the lift mode and **LED2**
+ for the tilt mode.
+
+- **Button 1** and **Button 2** — Pressing both buttons at the same time
+ toggles the shutter movement mode between lift and tilt. After each device
+ reset, the mode is set to lift by default.
+
+> **Note**:
+>
+> Completely opening and closing the shutter requires 20 button presses (steps).
+> Each step takes approximately 200 ms to simulate the real shutter movement.
+> The shutter position and LED brightness values are stored in non-volatile
+> memory and are restored after every device reset. After the firmware update or
+> factory reset both LEDs are switched off by default, which corresponds to the
+> shutter being fully open, both lift-wise and tilt-wise.
+
+- **Button 3** — Pressing the button once starts the NFC tag emulation
+ and enables Bluetooth LE advertising for the predefined period of time (15
+ minutes by default).
+
+- **SEGGER J-Link USB port** can be used to get logs from the device or
+ communicate with it using the
+ [command line interface](../../../docs/platforms/nrf/nrfconnect_examples_cli.md).
+
+- **NFC port with antenna attached** can be used to start the
+ [rendezvous](#bluetooth-le-rendezvous) by providing the commissioning
+ information from the Matter device in a data payload that can be shared
+ using NFC.
<hr>
@@ -359,10 +449,10 @@
>
> There are two types of Device Firmware Upgrade modes: single-image DFU and
> multi-image DFU. Single-image mode supports upgrading only one firmware image,
-> the application image, and should be used for single-core nRF52840 DK devices.
-> Multi-image mode allows to upgrade more firmware images and is suitable for
-> upgrading the application core and network core firmware in two-core nRF5340
-> DK devices.
+> the application image, and should be used for single-core nRF52840 DK and
+> nRF54L15 DK devices. Multi-image mode allows to upgrade more firmware images
+> and is suitable for upgrading the application core and network core firmware
+> in two-core nRF5340 DK devices.
#### Changing bootloader configuration
diff --git a/examples/window-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/window-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..2245cf5
--- /dev/null
+++ b/examples/window-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,27 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Multirole is the only currently supported role by SoftDevice.
+CONFIG_BT_LL_SOFTDEVICE_MULTIROLE=y
+
+# ZMS cache optimization
+CONFIG_ZMS_LOOKUP_CACHE=y
+CONFIG_ZMS_LOOKUP_CACHE_SIZE=512
+CONFIG_ZMS_LOOKUP_CACHE_FOR_SETTINGS=y
+
+# Workaround required as Zephyr L2 implies usage of NVS backend for settings.
+# It should be removed once the proper fix will be applied in Zephyr.
+CONFIG_NVS=n
diff --git a/examples/window-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/window-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..a9ec77d
--- /dev/null
+++ b/examples/window-app/nrfconnect/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+
+ aliases {
+ // Configure PWM module for led1 (LED2 on the board)
+ pwm-led1 = &pwm_led1;
+ pwm-led2 = &pwm_led2;
+
+ // Use watchdog wdt31 as the application watchdog
+ watchdog0 = &wdt31;
+ };
+
+ pwmleds {
+ compatible = "pwm-leds";
+ pwm_led1: pwm_led_1 {
+ pwms = <&pwm20 1 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
+ };
+ pwm_led2: pwm_led_2 {
+ pwms = <&pwm20 2 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
+ };
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+// TODO: re-enable HWFC once it's fixed
+&uart20 {
+ /delete-property/ hw-flow-control;
+};
+
+&mx25r64 {
+ status = "okay";
+};
+
+&pwm20 {
+ status = "okay";
+ pinctrl-0 = <&pwm_default>;
+ pinctrl-1 = <&pwm_sleep>;
+ pinctrl-names = "default", "sleep";
+};
+
+&pinctrl {
+ pwm_default: pwm_default {
+ group1 {
+ psels = <NRF_PSEL(PWM_OUT1, 1, 10)>, <NRF_PSEL(PWM_OUT2, 1, 14)>;
+ };
+ };
+ pwm_sleep: pwm_sleep {
+ group1 {
+ psels = <NRF_PSEL(PWM_OUT1, 1, 10)>, <NRF_PSEL(PWM_OUT2, 1, 14)>;
+ low-power-enable;
+ };
+ };
+};
+
+&wdt31 {
+ status = "okay";
+};
diff --git a/examples/window-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml b/examples/window-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml
deleted file mode 100644
index ce42b39..0000000
--- a/examples/window-app/nrfconnect/pm_static_nrf52840dk_nrf52840_release.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0x7000
- region: flash_primary
-mcuboot_pad:
- address: 0x7000
- size: 0x200
-app:
- address: 0x7200
- size: 0xf3e00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0x7000
- size: 0xf4000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0x7200
- size: 0xf3e00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_secondary:
- address: 0x0
- size: 0xf4000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0xf4000
- size: 0x70c000
- device: MX25R64
- region: external_flash
diff --git a/examples/window-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml b/examples/window-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml
deleted file mode 100644
index 10e8680..0000000
--- a/examples/window-app/nrfconnect/pm_static_nrf5340dk_nrf5340_cpuapp_release.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-mcuboot:
- address: 0x0
- size: 0x8000
- region: flash_primary
-mcuboot_pad:
- address: 0x8000
- size: 0x200
-app:
- address: 0x8200
- size: 0xf2e00
-mcuboot_primary:
- orig_span: &id001
- - mcuboot_pad
- - app
- span: *id001
- address: 0x8000
- size: 0xf3000
- region: flash_primary
-mcuboot_primary_app:
- orig_span: &id002
- - app
- span: *id002
- address: 0x8200
- size: 0xf2e00
-factory_data:
- address: 0xfb000
- size: 0x1000
- region: flash_primary
-settings_storage:
- address: 0xfc000
- size: 0x4000
- region: flash_primary
-mcuboot_primary_1:
- address: 0x0
- size: 0x40000
- device: flash_ctrl
- region: ram_flash
-mcuboot_secondary:
- address: 0x0
- size: 0xf3000
- device: MX25R64
- region: external_flash
-mcuboot_secondary_1:
- address: 0xf3000
- size: 0x40000
- device: MX25R64
- region: external_flash
-external_flash:
- address: 0x133000
- size: 0x6CD000
- device: MX25R64
- region: external_flash
-pcd_sram:
- address: 0x20000000
- size: 0x2000
- region: sram_primary
diff --git a/examples/window-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml b/examples/window-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
new file mode 100644
index 0000000..c874ec5
--- /dev/null
+++ b/examples/window-app/nrfconnect/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
@@ -0,0 +1,56 @@
+mcuboot:
+ address: 0x0
+ region: flash_primary
+ size: 0xD000
+mcuboot_pad:
+ address: 0xD000
+ region: flash_primary
+ size: 0x800
+app:
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+mcuboot_primary:
+ orig_span: &id001
+ - mcuboot_pad
+ - app
+ span: *id001
+ address: 0xD000
+ region: flash_primary
+ size: 0x165000
+mcuboot_primary_app:
+ orig_span: &id002
+ - app
+ span: *id002
+ address: 0xD800
+ region: flash_primary
+ size: 0x164800
+factory_data:
+ address: 0x172000
+ region: flash_primary
+ size: 0x1000
+settings_storage:
+ address: 0x173000
+ region: flash_primary
+ size: 0xA000
+mcuboot_secondary:
+ address: 0x0
+ orig_span: &id003
+ - mcuboot_secondary_pad
+ - mcuboot_secondary_app
+ region: external_flash
+ size: 0x165000
+ span: *id003
+mcuboot_secondary_pad:
+ region: external_flash
+ address: 0x0
+ size: 0x800
+mcuboot_secondary_app:
+ region: external_flash
+ address: 0x800
+ size: 0x164800
+external_flash:
+ address: 0x165000
+ size: 0x69B000
+ device: MX25R64
+ region: external_flash
diff --git a/examples/window-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/examples/window-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
new file mode 100644
index 0000000..e800269
--- /dev/null
+++ b/examples/window-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2025 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# TODO: Workaround, disable memory guard to avoid false faults in application after boot
+CONFIG_HW_STACK_PROTECTION=n
+
+CONFIG_BOOT_WATCHDOG_FEED=n
+
+# nRF54L15DK uses SPI NOR external flash
+CONFIG_GPIO=y
+CONFIG_SPI=y
+CONFIG_SPI_NOR=y
+CONFIG_SPI_NOR_SFDP_DEVICETREE=y
+CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
+
+# required by SPI driver
+CONFIG_MULTITHREADING=y
+
+CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y
+
+# Adjust the maximum sectors to the app image size of ~1.4MB
+CONFIG_BOOT_MAX_IMG_SECTORS=512
+
+# Currently, without tickless kernel, the SYSCOUNTER value after the software
+# reset is not set properly and due to that the first system interrupt is not called
+# in the proper time - the SYSCOUNTER value is set to the value from before
+# reset + 1. Hence, the reboot time increases more and more.
+# To avoid it enable tickless kernel for mcuboot.
+CONFIG_TICKLESS_KERNEL=y
+
+# Low Power mode
+CONFIG_POWEROFF=y
diff --git a/examples/window-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/examples/window-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
new file mode 100644
index 0000000..ce1d757
--- /dev/null
+++ b/examples/window-app/nrfconnect/sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.overlay
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2025 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/ {
+ chosen {
+ nordic,pm-ext-flash = &mx25r64;
+ };
+};
+
+// restore full RRAM and SRAM space - by default some parts are dedicated to FLRP
+&cpuapp_rram {
+ reg = <0x0 DT_SIZE_K(1524)>;
+};
+
+&cpuapp_sram {
+ reg = <0x20000000 DT_SIZE_K(256)>;
+ ranges = <0x0 0x20000000 0x40000>;
+};
+
+&mx25r64 {
+ status = "okay";
+};
diff --git a/examples/window-app/nrfconnect/sysbuild/mcuboot/prj.conf b/examples/window-app/nrfconnect/sysbuild/mcuboot/prj.conf
index 3bcb12f..ba05b21 100644
--- a/examples/window-app/nrfconnect/sysbuild/mcuboot/prj.conf
+++ b/examples/window-app/nrfconnect/sysbuild/mcuboot/prj.conf
@@ -23,8 +23,6 @@
CONFIG_FLASH=y
CONFIG_FPROTECT=y
-CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h"
-
# Use minimal C library instead of the Picolib
CONFIG_MINIMAL_LIBC=y
@@ -47,3 +45,8 @@
CONFIG_TICKLESS_KERNEL=n
CONFIG_TIMEOUT_64BIT=n
CONFIG_NRF_ENABLE_ICACHE=n
+CONFIG_SIZE_OPTIMIZATIONS=y
+
+# Activate LTO
+CONFIG_LTO=y
+CONFIG_ISR_TABLES_LOCAL_DECLARATION=y