From eb4378a97c5d26df89d833cc38c13bcbd32183a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 26 Oct 2026 23:10:33 +0100 Subject: [PATCH 1/2] Fit the nRF54L05 and nRF54L10 application RAM to the parts Both linker scripts used the nRF54L15 RAM top: RAM up to 0x2003FF80 and the bootloader NOINIT area at 0x2003FF80. The L05 has 96 KB of RAM and the L10 192 KB, so the initial stack pointer and the NOINIT area were outside RAM, and the bootloader's peer data and double-reset marker were not where the bootloader writes them. RAM now ends at 0x20017F80 (L05) and 0x2002FF80 (L10), with NOINIT there, as in the bootloader's nrf54l05.ld and nrf54l10.ld. --- AGENTS.md | 3 ++- README.md | 3 ++- cores/nRF5/linker/nrf54l05_s145_v10.ld | 4 ++-- cores/nRF5/linker/nrf54l10_s145_v10.ld | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 01621b4..9d500ec 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -128,7 +128,8 @@ chip-independently. Per-chip values (from `nrf54l_s145_v10.ld`): | nRF54L10 | `0x8000 – 0xC7000` | `0xC7000 – 0xCE000` | `0xCF000` | `0xDA800` | | nRF54L15 | `0x8000 – 0x147000` | `0x147000 – 0x14E000` | `0x14F000` | `0x15A800` | -RAM ends at `0x2003FF80`; the bootloader keeps its BLE peer data and the +App RAM ends at `0x20017F80` / `0x2002FF80` / `0x2003FF80` (L05 96 KB, L10 +192 KB, L15 256 KB); the bootloader keeps its BLE peer data and the double-reset marker in the last 128 bytes. Both sides must agree, so change the layout in the bootloader repo's `linker/` scripts in the same step. diff --git a/README.md b/README.md index 1c9c1d2..868623a 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,8 @@ of RRAM. | nRF54L15 | `0x0 – 0x8000` | `0x8000 – 0x147000` | `0x147000 – 0x14E000` | `0x14F000` | `0x15A800` | RAM: `0x20000000 – 0x20004800` belongs to the SoftDevice, the application -runs from `0x20004800` to `0x2003FF80`; the last 128 bytes hold the +runs from `0x20004800` to `0x20017F80` / `0x2002FF80` / `0x2003FF80` (L05 / +L10 / L15); the last 128 bytes of RAM hold the bootloader's BLE peer data and double-reset marker. The layout matches the [nRF54_Bootloader](https://github.com/meshtastic/nRF54_Bootloader) linker scripts. diff --git a/cores/nRF5/linker/nrf54l05_s145_v10.ld b/cores/nRF5/linker/nrf54l05_s145_v10.ld index 9c3ca80..6609d0d 100644 --- a/cores/nRF5/linker/nrf54l05_s145_v10.ld +++ b/cores/nRF5/linker/nrf54l05_s145_v10.ld @@ -6,10 +6,10 @@ GROUP(-lgcc -lc -lnosys) MEMORY { FLASH (rx) : ORIGIN = 0x00008000, LENGTH = 0x3f000 - RAM (rwx) : ORIGIN = 0x20004800, LENGTH = 0x3B780 + RAM (rwx) : ORIGIN = 0x20004800, LENGTH = 0x13780 /* Bootloader peer data and double-reset marker, must stay untouched by the app */ - NOINIT (rwx) : ORIGIN = 0x2003FF80, LENGTH = 0x78 + NOINIT (rwx) : ORIGIN = 0x20017F80, LENGTH = 0x78 } __softdevice_start__ = 0x0005A800; diff --git a/cores/nRF5/linker/nrf54l10_s145_v10.ld b/cores/nRF5/linker/nrf54l10_s145_v10.ld index 1136491..624f905 100644 --- a/cores/nRF5/linker/nrf54l10_s145_v10.ld +++ b/cores/nRF5/linker/nrf54l10_s145_v10.ld @@ -6,10 +6,10 @@ GROUP(-lgcc -lc -lnosys) MEMORY { FLASH (rx) : ORIGIN = 0x00008000, LENGTH = 0xbf000 - RAM (rwx) : ORIGIN = 0x20004800, LENGTH = 0x3B780 + RAM (rwx) : ORIGIN = 0x20004800, LENGTH = 0x2B780 /* Bootloader peer data and double-reset marker, must stay untouched by the app */ - NOINIT (rwx) : ORIGIN = 0x2003FF80, LENGTH = 0x78 + NOINIT (rwx) : ORIGIN = 0x2002FF80, LENGTH = 0x78 } __softdevice_start__ = 0x000DA800; From d6ac31ef280ee059822d70f8150380af9c6741df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 26 Oct 2026 23:10:50 +0100 Subject: [PATCH 2/2] Release 0.5.1 --- changelog.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index f3d7aa0..3d53700 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 0.5.1 — 2026-10-26 + +- nRF54L05 and nRF54L10: application RAM ends at `0x20017F80` / `0x2002FF80` + instead of the nRF54L15's `0x2003FF80`, which is past the end of their RAM. + The stack and the bootloader's peer data and double-reset marker are now + inside RAM, where the bootloader expects them + ## 0.5.0 — 2026-10-26 Requires s145 10.0.1, bootloader 0.5.0 and a platform with the 10.0.1 boards. diff --git a/package.json b/package.json index 6cf52e4..abe1c64 100644 --- a/package.json +++ b/package.json @@ -28,5 +28,5 @@ "url": "https://github.com/meshtastic/nRF54_Arduino.git" }, "license": "LGPL-2.1-or-later", - "version": "0.5.0" + "version": "0.5.1" }