Environment
- nRF Connect SDK: v3.2.1
- Zephyr: 4.2.99 (NCS fork)
- CMake (bundled): 3.21.0
- Board:
nrf5340dk_nrf5340_cpuapp - OS: Linux
What already works: application-core FOTA (image 0)
This has worked reliably for a long time:
mcumgr ... image upload -e -n 0 app.signed.bin
mcumgr ... image list # note new hash in slot 1
mcumgr ... image test <hash>
mcumgr ... reset
mcumgr ... image confirm <hash>
Swap + revert behave exactly as expected.
Goal
Add network-core (hci_ipc) FOTA through MCUmgr in the same way (image 1), without losing the application core's swap/revert.
Config we added
# sysbuild
SB_CONFIG_SECURE_BOOT_NETCORE=y
SB_CONFIG_NETCORE_APP_UPDATE=y
# application prj.conf
CONFIG_MCUMGR_GRP_IMG_UPDATABLE_IMAGE_NUMBER=2
Network-core FOTA steps we follow
mcumgr ... image upload -e -n 1 signed_by_mcuboot_and_b0_hci_ipc.bin
mcumgr ... image list # image=1 slot=1 appears, secondary magic=good
mcumgr ... image confirm <hash>
mcumgr ... reset # -> device bricked, only recoverable with: nrfjprog --qspieraseall
What we have tried
In every combination below, staging works fine (image upload -n 1 → image=1 slot=1, magic=good), but the result is always the same: after image test/confirm + reset, the device bricks (reboot loop, only recoverable with nrfjprog --qspieraseall).
-
A)
SECURE_BOOT_NETCORE+NETCORE_APP_UPDATEonly (app core keepsBOOT_SWAP_USING_MOVE). → Brick on reset. RTT shows MCUboot validating image 1 OK, thenabort()right afterboot_verify_slot_dependencies. The net image seems to go through the app-core swap path. We noticed the network-core swap-skip inboot_slots_compatible()(swap_move.c) is guarded by#ifdef PM_S1_ADDRESS, which is undefined in this config. -
B) Added
SECURE_BOOT_APPCOREtoo (to definePM_S1_ADDRESS). → Build assertPM_S0_SIZE == PM_S1_SIZE; fixed by removing our explicitCONFIG_PM_PARTITION_SIZE_MCUBOOTso PM sizes S0/S1 equally. The device still bricks on reset — now apparently later, possibly during the PCD copy to the network core. -
We have not switched MCUboot to
OVERWRITE_ONLY(used by the NCSref_smp_svr_ext_flashsample for nRF53), because it removes the application core's revert capability, which we need to keep.
So we seem to be missing a config combination: every variant we tried either bricks immediately or bricks "later", always around the network-core update on reset.
Question
Is there a documented minimal configuration for nRF5340 network-core FOTA over MCUmgr (image 1) that coexists with application-core image swap + revert — i.e. without forcing MCUboot into OVERWRITE_ONLY? Does enabling network-core update with BOOT_SWAP_USING_MOVE on the app core require application-core secure boot (B0), or is there a supported combination we are missing?
A reference set of Kconfig options for this exact case would be ideal.