Hello, I develop the dfu for my application. I started testing the dfu process with maximum image size that I can build and I need some help here.
Here is my pm_static.yml:
# flash primary: mcuboot: address: 0x0 end_address: 0x10000 placement: before: - mcuboot_primary region: flash_primary size: 0x10000 mcuboot_primary: address: 0x10000 end_address: 0xe8000 orig_span: &id001 - mcuboot_pad - app - tfm region: flash_primary size: 0xd8000 span: *id001 tfm_secure: address: 0x10000 end_address: 0x50000 orig_span: &id008 - mcuboot_pad - tfm region: flash_primary size: 0x40000 span: *id008 mcuboot_pad: address: 0x10000 end_address: 0x10200 placement: align: start: 0x8000 before: - mcuboot_primary_app region: flash_primary size: 0x200 mcuboot_primary_app: address: 0x10200 end_address: 0xe8000 orig_span: &id002 - app - tfm region: flash_primary size: 0xd7e00 span: *id002 tfm: address: 0x10200 end_address: 0x50000 inside: - mcuboot_primary_app placement: before: - app region: flash_primary size: 0x3fe00 tfm_nonsecure: address: 0x50000 end_address: 0xe7000 orig_span: &id007 - app region: flash_primary size: 0x97000 span: *id007 app: address: 0x50000 end_address: 0xe7000 region: flash_primary size: 0x97000 swap_move_region: address: 0xe7000 end_address: 0xe8000 region: flash_primary size: 0x1000 tfm_storage: address: 0xe8000 end_address: 0xfc000 orig_span: &id009 - tfm_ps - tfm_its - tfm_otp_nv_counters region: flash_primary size: 0x14000 span: *id009 tfm_its: address: 0xe8000 end_address: 0xea000 inside: - tfm_storage placement: align: start: 0x8000 before: - tfm_otp_nv_counters region: flash_primary size: 0x2000 EMPTY_2: address: 0xea000 end_address: 0xf0000 placement: after: - tfm_its region: flash_primary size: 0x6000 tfm_otp_nv_counters: address: 0xf0000 end_address: 0xf2000 inside: - tfm_storage placement: align: start: 0x8000 before: - tfm_ps region: flash_primary size: 0x2000 EMPTY_1: address: 0xf2000 end_address: 0xf8000 placement: after: - tfm_otp_nv_counters region: flash_primary size: 0x6000 tfm_ps: address: 0xf8000 end_address: 0xfc000 inside: - tfm_storage placement: align: start: 0x8000 before: - end region: flash_primary size: 0x4000 EMPTY_0: address: 0xfc000 end_address: 0x100000 placement: after: - tfm_ps region: flash_primary size: 0x4000 # otp otp: address: 0xff8108 end_address: 0xff83fc region: otp size: 0x2f4 # sram primary mcuboot_sram: address: 0x20000000 end_address: 0x20010000 orig_span: &id003 - tfm_sram region: sram_primary size: 0x10000 span: *id003 sram_secure: address: 0x20000000 end_address: 0x20010000 orig_span: &id006 - tfm_sram region: sram_primary size: 0x10000 span: *id006 tfm_sram: address: 0x20000000 end_address: 0x20010000 inside: - sram_secure placement: after: - start region: sram_primary size: 0x10000 sram_nonsecure: address: 0x20010000 end_address: 0x20040000 orig_span: &id005 - sram_primary - nrf_modem_lib_ctrl - nrf_modem_lib_tx - nrf_modem_lib_rx region: sram_primary size: 0x30000 span: *id005 nrf_modem_lib_sram: address: 0x20010000 end_address: 0x20014568 orig_span: &id004 - nrf_modem_lib_ctrl - nrf_modem_lib_tx - nrf_modem_lib_rx region: sram_primary size: 0x4568 span: *id004 nrf_modem_lib_ctrl: address: 0x20010000 end_address: 0x200104e8 inside: - sram_nonsecure placement: after: - tfm_sram - start region: sram_primary size: 0x4e8 nrf_modem_lib_tx: address: 0x200104e8 end_address: 0x20012568 inside: - sram_nonsecure placement: after: - nrf_modem_lib_ctrl region: sram_primary size: 0x2080 nrf_modem_lib_rx: address: 0x20012568 end_address: 0x20014568 inside: - sram_nonsecure placement: after: - nrf_modem_lib_tx region: sram_primary size: 0x2000 sram_primary: address: 0x20014568 end_address: 0x20040000 region: sram_primary size: 0x2ba98 # external flash: littlefs_storage: address: 0x0 end_address: 0x4000000 region: external_flash size: 0x4000000 fmfu_storage: address: 0x4000000 end_address: 0x4400000 region: external_flash size: 0x400000 external_flash: address: 0x4400000 end_address: 0x7f29000 region: external_flash size: 0x3B29000 mcuboot_secondary: address: 0x7f29000 end_address: 0x8000000 region: external_flash size: 0xd7000
I had to limit the imgtool max slot size to 4kB less than mcuboot secondary slot size with the following configuration:
CONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS="--slot-size 0xD6000"
Otherwise, the mcuboot says that the image in secondary slot is not valid (too big).
With such configuration, I can perform dfu for max possible image size that I can build and everything seems to work fine, but the mcuboot prints the following warning:
Non-optimal sector distribution, slot0 has 214 usable sectors (216 assigned) but slot1 has 215 assigned
That suggests the mcuboot secondary slot should be 1 sector lower (4kB) but I don't understand why. If I lower the mcuboot secondary slot by 1 sector, the warning disappears, but I also have to lower the imgtool slot size argument to 0xD5000, to make the dfu pass (which seems to be wasting 1 sector).
So my questions are:
1. Is my pm_static.yml configured okay? Is it the correct way to reserve 1 sector (4kB) for swap using move algorithm?
2. Why mcuboot warns me about non-optimal sector distribution?
3. Is it necessary to limit the imgtool output to 1 memory sector less than the mcuboot secondary slot size?
nRF9160, NCS 2.9.0