NCS v2.6.0, NRF5340dk
I'm trying to configure a project that uses mcuboot with direct XIP with the external QSPI flash. I've been looking at examples in
ncs/v2.6.0/nrf/tests/modules/mcuboot/external_flash
ncs/v2.6.0/nrf/tests/modules/mcuboot/direct_xip
ncs/v2.6.0/nrf/samples/nrf5340/extxip_smp_svr
The partition manager is having time creating partitions and throwing errors that memory regions are not aligned, so I've been using this as a guideline Partition Manager Error w/ Direct XIP and MCUboot enabled
This is the process I've been using to build
Starting with the "external_flash" example:
1. copy the linker script from ncs/v2.6.0/nrf/samples/nrf5340/extxip_smp_svr/linker_arm_extxip.ld
2. create a VERSION file for cmake builds
VERSION_MAJOR = 0 VERSION_MINOR = 1 PATCHLEVEL = 11 VERSION_TWEAK = 0 EXTRAVERSION =
3. modify prj.conf
CONFIG_ZTEST=y CONFIG_BOOTLOADER_MCUBOOT=y CONFIG_MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP=y CONFIG_FLASH=y CONFIG_HAVE_CUSTOM_LINKER_SCRIPT=y CONFIG_CUSTOM_LINKER_SCRIPT="linker_arm_extxip.ld" CONFIG_XIP=y CONFIG_NORDIC_QSPI_NOR_XIP=y
# MCUboot requires a large stack size, otherwise an MPU fault will occur CONFIG_MAIN_STACK_SIZE=10240 # Enable flash operations CONFIG_FLASH=y # This must be increased to accommodate the bigger images. CONFIG_BOOT_MAX_IMG_SECTORS=256 # Use minimal C library instead of the Picolib CONFIG_MINIMAL_LIBC=y CONFIG_BOOT_DIRECT_XIP=y CONFIG_PM_PARTITION_SIZE_MCUBOOT=0x10000
nvs_storage: address: 0xfa000 end_address: 0xfc000 region: flash_primary size: 0x2000 settings_storage: address: 0xfc000 end_address: 0xff000 region: flash_primary size: 0x3000 id_storage: address: 0xff000 end_address: 0x100000 region: flash_primary size: 0x1000
5. generate a new pm_static.yml
west build -b nrf5340dk_nrf5340_cpuapp -t partition_manager_report --pristine cp pm_static.yml pm_static.yml.bak cp build/partitions.yml pm_static.yml
6. Modify the pm_static.yml to include mcuboot_secodary_app and mcuboot_secondary_pad
app: address: 0x10200 end_address: 0xfa000 region: flash_primary size: 0xe9e00 external_flash: address: 0xea000 end_address: 0x800000 region: external_flash size: 0x716000 id_storage: address: 0xff000 end_address: 0x100000 region: flash_primary size: 0x1000 mcuboot: address: 0x0 end_address: 0x10000 placement: before: - mcuboot_primary region: flash_primary size: 0x10000 mcuboot_pad: address: 0x10000 end_address: 0x10200 placement: before: - mcuboot_primary_app region: flash_primary size: 0x200 mcuboot_primary: address: 0x10000 end_address: 0xfa000 orig_span: &id001 - app - mcuboot_pad region: flash_primary size: 0xea000 span: *id001 mcuboot_primary_app: address: 0x10200 end_address: 0xfa000 orig_span: &id002 - app region: flash_primary size: 0xe9e00 span: *id002 mcuboot_secondary: address: 0x0 device: DT_CHOSEN(nordic_pm_ext_flash) end_address: 0xea000 orig_span: &id003 - mcuboot_secondary_pad - mcuboot_secondary_app placement: align: start: 0x4 region: external_flash share_size: - mcuboot_primary size: 0xea000 span: *id003 mcuboot_secondary_pad: address: 0x0 device: DT_CHOSEN(nordic_pm_ext_flash) end_address: 0x200 align: start: 0x4000 region: external_flash share_size: - mcuboot_pad size: 0x200 mcuboot_secondary_app: address: 0x200 end_address: 0xea000 device: DT_CHOSEN(nordic_pm_ext_flash) placement: after: - mcuboot_secondary_pad region: external_flash share_size: - mcuboot_primary_app size: 0xe9e00 nvs_storage: address: 0xfa000 end_address: 0xfc000 region: flash_primary size: 0x2000 otp: address: 0xff8100 end_address: 0xff83fc region: otp size: 0x2fc pcd_sram: address: 0x20000000 end_address: 0x20002000 placement: after: - start region: sram_primary size: 0x2000 rpmsg_nrf53_sram: address: 0x20070000 end_address: 0x20080000 placement: before: - end region: sram_primary size: 0x10000 settings_storage: address: 0xfc000 end_address: 0xff000 region: flash_primary size: 0x3000 sram_primary: address: 0x20002000 end_address: 0x20070000 region: sram_primary size: 0x6e000
7. Modify linker script with new external flash memory address
MEMORY
{
EXTFLASH (wx) : ORIGIN = 0x10ea000, LENGTH = 0x716000
}
#include <zephyr/arch/arm/cortex_m/scripts/linker.ld>
8. Build/flash using vscode
Results:
The application builds and programs, however there is no output on my terminal for either the app core or the net core
Memory report looks like what I'd expect. I'm surprised the mcuboot_secondary_pad isn't in the correct span, but the address is correct
Any assistance debugging this would be appreciated