I have implemented a program that sends an image's .HEX file through our custom software. The data is received and parsed by an application running on an NRF5340. The relevant portion is extracted and written to the correct partition using flash_img_buffered_write.
For the application update, I use PM_MCUBOOT_SECONDARY_ID to select the partition where the data is written. This process works well—after writing the received data, the device marks the image as pending using boot_request_upgrade(BOOT_UPGRADE_PERMANENT), then resets. Upon reboot, the image is moved from the secondary partition to the primary partition, and the new firmware starts successfully.
However, when attempting to update the bootloader or network core, it’s unclear which partition ID should be used. Which partition should I write to in order to update these components? Additionally, are there any extra steps or function calls required to properly update either the bootloader or the network core? Lastly, can all three or at least two of them be updated simultaneously using this method?
I have attached the partition file to show the available partitions:
partitions.yml:
EMPTY_0:
address: 0xfe000
end_address: 0x100000
placement:
after:
- settings_storage
region: flash_primary
size: 0x2000
app:
address: 0x20200
end_address: 0xfc000
region: flash_primary
size: 0xdbe00
app_image:
address: 0x20200
end_address: 0xfc000
orig_span: &id001
- app
region: flash_primary
size: 0xdbe00
span: *id001
b0:
address: 0x0
end_address: 0x8000
placement:
after:
- start
region: flash_primary
size: 0x8000
b0_container:
address: 0x0
end_address: 0x8000
orig_span: &id002
- b0
region: flash_primary
size: 0x8000
span: *id002
external_flash:
address: 0x11c000
end_address: 0x800000
region: external_flash
size: 0x6e4000
mcuboot:
address: 0x8200
end_address: 0x14000
placement:
align:
end: 0x1000
before:
- mcuboot_primary
region: flash_primary
sharers: 0x1
size: 0xbe00
mcuboot_pad:
address: 0x20000
end_address: 0x20200
placement:
align:
start: 0x4000
before:
- mcuboot_primary_app
region: flash_primary
sharers: 0x2
size: 0x200
mcuboot_primary:
address: 0x20000
end_address: 0xfc000
orig_span: &id003
- app
- mcuboot_pad
region: flash_primary
size: 0xdc000
span: *id003
mcuboot_primary_1:
address: 0x0
device: nordic_ram_flash_controller
end_address: 0x40000
region: ram_flash
size: 0x40000
mcuboot_primary_app:
address: 0x20200
end_address: 0xfc000
orig_span: &id004
- app
region: flash_primary
size: 0xdbe00
span: *id004
mcuboot_secondary:
address: 0x0
device: DT_CHOSEN(nordic_pm_ext_flash)
end_address: 0xdc000
placement:
align:
start: 0x4
region: external_flash
share_size:
- mcuboot_primary
size: 0xdc000
mcuboot_secondary_1:
address: 0xdc000
device: DT_CHOSEN(nordic_pm_ext_flash)
end_address: 0x11c000
region: external_flash
size: 0x40000
otp:
address: 0xff8380
end_address: 0xff83fc
region: otp
size: 0x7c
pcd_sram:
address: 0x20000000
end_address: 0x20002000
placement:
after:
- start
region: sram_primary
size: 0x2000
provision:
address: 0xff8100
end_address: 0xff8380
region: otp
size: 0x280
ram_flash:
address: 0x40000
end_address: 0x40000
region: ram_flash
size: 0x0
rpmsg_nrf53_sram:
address: 0x20070000
end_address: 0x20080000
placement:
before:
- end
region: sram_primary
size: 0x10000
s0:
address: 0x8000
end_address: 0x14000
orig_span: &id005
- mcuboot
- s0_pad
region: flash_primary
size: 0xc000
span: *id005
s0_image:
address: 0x8200
end_address: 0x14000
orig_span: &id006
- mcuboot
region: flash_primary
size: 0xbe00
span: *id006
s0_pad:
address: 0x8000
end_address: 0x8200
placement:
after:
- b0_container
align:
start: 0x4000
region: flash_primary
share_size:
- mcuboot_pad
size: 0x200
s1:
address: 0x14000
end_address: 0x20000
orig_span: &id007
- s1_pad
- s1_image
region: flash_primary
size: 0xc000
span: *id007
s1_image:
address: 0x14200
end_address: 0x20000
placement:
after:
- s1_pad
- s0
region: flash_primary
share_size:
- mcuboot
size: 0xbe00
s1_pad:
address: 0x14000
end_address: 0x14200
placement:
after:
- s0
align:
start: 0x4000
region: flash_primary
share_size:
- mcuboot_pad
size: 0x200
settings_storage:
address: 0xfc000
end_address: 0xfe000
placement:
align:
start: 0x4000
before:
- end
region: flash_primary
size: 0x2000
sram_primary:
address: 0x20002000
end_address: 0x20070000
region: sram_primary
size: 0x6e000
partitions_CPUNET.yml:
app:
address: 0x1008800
end_address: 0x1040000
orig_span: &id001
- hci_ipc
region: flash_primary
size: 0x37800
span: *id001
b0n:
address: 0x1000000
end_address: 0x1008580
placement:
after:
- start
region: flash_primary
size: 0x8580
b0n_container:
address: 0x1000000
end_address: 0x1008800
orig_span: &id002
- b0n
- provision
region: flash_primary
size: 0x8800
span: *id002
hci_ipc:
address: 0x1008800
end_address: 0x1040000
region: flash_primary
size: 0x37800
provision:
address: 0x1008580
end_address: 0x1008800
placement:
after:
- b0n
region: flash_primary
size: 0x280
sram_primary:
address: 0x21000000
end_address: 0x21010000
region: sram_primary
size: 0x10000

