Hi!
We are currently migrating our SD-based SDK code to Zephyr, on nrf52833 boards.
While we have finally been able to get MCUBoot (CONFIG_BOOTLOADER_MCUBOOT=y) to run with a static partition file, we consistently get the following log on runtime, and the app is never started:
00> *** Booting Zephyr OS build v3.2.99-ncs1 ***
00> I: Starting bootloader
00> W: Failed reading sectors; BOOT_MAX_IMG_SECTORS=128 - too small?
00> W: Cannot upgrade: not a compatible amount of sectors
00> E: Unable to find bootable image
I have a few questions regarding this:
- I have created the partition manager file (pm_static.yml) from the original build of our project, and added partitions to match our dts overlay (both are at bottom). The default setup causes s.t. the bootloader. which is much smaller than the default of 0xC000 = 48 KB for MCUboot, to sit apart from the mcuboot_pad and the app more than needed (see picture from nrfConnect Programmer below). What is the correct way to work with this?
- If I try to remove the mcuboot_pad totally, I consistently receive a failure of the static partition manager on build: "Partition manager failed: End of last partition is after last valid address". Why is this? Is the pad a must?
- In the default partition manager (As you can see below), alignment is consistently used ("align: start: 0x1000"). Is there a specific reason for this?
- The big one - what is the reason that the aforementioned mcuboot print is received?
Thanks ahead of time!
Roi
pm_static.yml:
app: address: 0xc200 end_address: 0x3e000 region: flash_primary size: 0x31e00 mcuboot: address: 0x0 end_address: 0xc000 placement: before: - mcuboot_primary region: flash_primary size: 0xc000 mcuboot_pad: address: 0xc000 end_address: 0xc200 placement: align: start: 0x1000 before: - mcuboot_primary_app region: flash_primary size: 0x200 mcuboot_primary: address: 0xc000 end_address: 0x3e000 orig_span: &id001 - mcuboot_pad - app region: flash_primary sharers: 0x1 size: 0x32000 span: *id001 mcuboot_primary_app: address: 0xc200 end_address: 0x3e000 orig_span: &id002 - app region: flash_primary size: 0x31e00 span: *id002 mcuboot_secondary: address: 0x3e000 end_address: 0x70000 placement: after: - mcuboot_primary align: start: 0x1000 region: flash_primary share_size: - mcuboot_primary size: 0x32000 scratch_partition: address: 0x70000 end_address: 0x7a000 placement: align: start: 0x1000 region: flash_primary size: 0xa000 settings_storage: address: 0x7a000 end_address: 0x7c000 placement: align: start: 0x1000 region: flash_primary size: 0x2000 storage_partition: address: 0x7c000 end_address: 0x80000 placement: align: start: 0x1000 region: flash_primary size: 0x4000 sram_primary: address: 0x20000000 end_address: 0x20020000 region: sram_primary size: 0x20000
dts overlay:
/delete-node/ &storage_partition; &flash0 { partitions { compatible = "fixed-partitions"; #address-cells = <1>; #size-cells = <1>; boot_partition: partition@0 { label = "mcuboot"; reg = <0x00000000 0xC000>; }; slot0_partition: partition@c000 { label = "image-0"; reg = <0x0000C000 0x32000>; }; slot1_partition: partition@3e000 { label = "image-1"; reg = <0x0003E000 0x32000>; }; scratch_partition: partition@70000 { label = "image-scratch"; reg = <0x00070000 0xA000>; }; settings_partition: partition@7a000 { label = "settings"; reg = <0x0007A000 0x00002000>; }; storage_partition: partition@7c000 { label = "storage"; reg = <0x0007c000 0x00004000>; }; }; };
mcuboot.conf (merged via edit to CMakeLists):
CONFIG_DISABLE_FLASH_PATCH=y CONFIG_BOOT_SIGNATURE_KEY_FILE="/mcuboot/skey.pem" CONFIG_UART_CONSOLE=n CONFIG_LOG_BACKEND_UART=n CONFIG_LOG=y CONFIG_LOG_MODE_MINIMAL=y CONFIG_PRINTK=n CONFIG_LOG_PRINTK=n CONFIG_STDOUT_CONSOLE=n CONFIG_RTT_CONSOLE=y CONFIG_BOOT_BANNER=y CONFIG_USE_SEGGER_RTT=y