Skip to content

Move the nRF54L05/L10/L15 to the s145 10.0.1 SoftDevice - #9

Open
cvaldess wants to merge 2 commits into
meshtastic:masterfrom
cvaldess:pr/s145-10.0.1
Open

cvaldess wants to merge 2 commits into
meshtastic:masterfrom
cvaldess:pr/s145-10.0.1

Conversation

@cvaldess

@cvaldess cvaldess commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Second of the three PRs for the move to s145 10.0.1, in the order @caveman99 set in andyshinn#1: the bootloader (meshtastic/nRF54_Bootloader#4) is released first, then this, then the platform (meshtastic/platform-nordicnrf54#3) moving both pins and the boards together.

It's @andyshinn's 958690f and 552b4ea from ashinn/nrf54lm20a, squashed onto master with his authorship. Master has no nRF54LM20A support yet, so the LM20A SoftDevice hex, its nrf54lm API directory and the LM20A lines in the docs are left out; they can come with the LM20A support. The commit message says what was trimmed.

What it changes

  • SoftDevice files follow sdk-nrf-bm's per-family layout: cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/ and bootloader/s145/10.0.1/nrf54l/s145_nrf54l{05,10,15}_10.0.1_softdevice.hex. The 9.0.0 headers and hex files are removed.
  • nrf54l{05,10,15}_s145_v9.ld become *_s145_v10.ld, with the 10.0.1 bases: 0x5A800 / 0xDA800 / 0x15A800 (were 0x58C00 / 0xD8C00 / 0x158C00). App FLASH, InternalFS and the bootloader settings page don't move. Master's linker structure is kept; only __softdevice_start__ changes.
  • The API change from 9.0.0 is small, but not nothing: NRF_EVT_RADIO_CANCELED is gone, and the NRF_SOC_EVTS entries after it are renumbered (NRF_EVT_RAND_SEED_REQUEST 9 → 8). Code that uses the names is fine once rebuilt; an application built against one version can't run on the other anyway, since the SoftDevice base moves too.
  • tests/blink builds against the platform PR branch (99af5cd), since platform master still selects 9.0.0 and the v9 scripts. It goes back to platform master once that is released.

Migration

A board on 9.0.0 can't get to 10.0.1 by DFU: the bootloader can't replace the SoftDevice, and its interrupt forwarding is built for the old base. It needs a one-time reflash over SWD of the 10.0.1 SoftDevice, a bootloader built for 10.0.1 and the application.

  • Without a chip erase, InternalFS stays, so the node keeps its config and BLE bonds.
  • With a chip erase, both are lost.

Don't send a DFU package built for 10.0.1 to a board still on bootloader v0.3.0: it erases the application before it rejects the package, and the board stays in the bootloader until it gets a 9.0.0 package or SWD.

Testing

tests/blink builds for all five boards against this and the platform PR.

nRF54L15-DK, starting from bootloader v0.3.0 + s145 9.0.0. Meshtastic's nrf54l15dk env built against this core (plus the MDK bump from #8) and the platform PR. Against the 9.0.0 build of the same tree, the application differs only in the SoftDevice base, the NRF_EVT_RAND_SEED_REQUEST value in two comparisons, and build dates.

Over SWD, without a chip erase: 10.0.1 SoftDevice + bootloader from the bootloader PR + application. Then:

  • it boots; the SoftDevice info struct at 0x15C800 reads magic 0x51B1E5DB, FWID 0x310D
  • the config came back from InternalFS (fixed BLE PIN still set), and the node sent its NodeInfo on the mesh 32 s after the reset
  • RRAM matches the three images byte for byte; the flashing didn't touch the settings page or InternalFS
  • BLE: an iPhone that was already bonded reconnected on its own, encrypted with LESC + MITM; after forgetting the device, a fresh pairing with the PIN worked the same way, with no resets
  • going back to 9.0.0 the same way (InternalFS kept) worked, and the bond made on 10.0.1 still reconnected

Not covered: the L05 and L10 (no hardware), the XIAO boards (flashed over their CMSIS-DAP, not tried), BLE OTA through the 10.0.1 bootloader, and anything longer than a few minutes on 10.0.1.

andyshinn and others added 2 commits October 15, 2026 14:35
sdk-nrf-bm ships s145 per SoC family (nrf54l, nrf54lm, ...): one API header
set per family and one hex per SoC in it. Mirror that layout for the nRF54L
family:

  cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/   L05 / L10 / L15
  bootloader/s145/10.0.1/nrf54l/s145_nrf54l{05,10,15}_10.0.1_softdevice.hex

The L05/L10/L15 linker scripts become *_s145_v10.ld with the 10.0.1
SoftDevice bases (0x5A800 / 0xDA800 / 0x15A800); the 9.0.0 hex and API
headers are dropped.

[cvaldess: squashed from andyshinn/nRF54_Arduino 958690f and 552b4ea onto
master. Left out the nRF54LM20A SoftDevice hex, its nrf54lm API directory,
the nRF54LM20A lines in the docs and the test changes that point at the
fork platform, since master has no nRF54LM20A support yet. Kept master's
linker structure and only moved __softdevice_start__. The package version
is left to the release.]
The boards on meshtastic/platform-nordicnrf54 master still select s145
9.0.0 and the v9 linker scripts, which this tree no longer ships. Point the
smoke test at the platform branch that moves them to 10.0.1; switch back to
master once that is released.
@coderabbitai

coderabbitai Bot commented Oct 15, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 14 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b6fd11a1-dde0-46f2-b49b-b437448032c5
📥 Commits

Reviewing files that changed from the base of the PR and between 79a7ad6 and 99af5cd.

📒 Files selected for processing: 33
  • AGENTS.md
  • README.md
  • bootloader/s145/10.0.1/nrf54l/s145_nrf54l05_10.0.1_softdevice.hex
  • bootloader/s145/10.0.1/nrf54l/s145_nrf54l10_10.0.1_softdevice.hex
  • bootloader/s145/10.0.1/nrf54l/s145_nrf54l15_10.0.1_softdevice.hex
  • bootloader/s145/10.0.1/s145_10.0.1_license-agreement.txt
  • bootloader/s145/10.0.1/s145_10.0.1_license-attribution.txt
  • bootloader/s145/9.0.0/s145_nrf54l05_9.0.0_softdevice.hex
  • bootloader/s145/9.0.0/s145_nrf54l10_9.0.0_softdevice.hex
  • bootloader/s145/9.0.0/s145_nrf54l15_9.0.0_softdevice.hex
  • cores/nRF5/linker/nrf54l05_s145_v10.ld
  • cores/nRF5/linker/nrf54l10_s145_v10.ld
  • cores/nRF5/linker/nrf54l15_s145_v10.ld
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/ble.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/ble_err.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/ble_gap.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/ble_gatt.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/ble_gattc.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/ble_gatts.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/ble_hci.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/ble_ranges.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/ble_types.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/nrf_error.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/nrf_error_sdm.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/nrf_error_soc.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/nrf_nvic.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/nrf_sd_def.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/nrf_sd_isr.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/nrf_sdm.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/nrf_soc.h
  • cores/nRF5/nordic/softdevice/s145_nrf54l_10.0.1_API/include/nrf_svc.h
  • libraries/Bluefruit54Lib/README.md
  • tests/blink/platformio.ini
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants