Hi,
We have a few questions regarding the pm_static.yml file that's used for defining flash partitions in zephyr.
Our main questions are regarding alignment; we've created a partition "device_details_partition" where we plan on writing configuration values at manufacturing using nrfjprog via an external nRF53DK.
These values should be permanent for the lifecycle of the device and will only ever be read in the application firmware, never overwritten. "device_details_partition" needs to have static memory locations so we know where to write/read.
The "device_details_partition" is only 16 bytes long so we're unable to align it to 4kb, we've defined it as follows;
device_details_partition: address: 0xf3FF0 # New address, originally where user_partition started end_address: 0xf4000 # Size is 0x10 region: flash_primary size: 0x10
Some questions we had about this implementation:
- Could having the size and end address of mcuboot_primary and mcuboot_primary_app not 4kb aligned cause any issues?
- Is there a better way we can create "device_details_partition"? A section of flash which can be flashed externally.
Below is our full pm_static.yml
user_partition: # NVS Storage
address: 0xf6000
end_address: 0xf8000
placement:
after:
- settings_storage
region: flash_primary
size: 0x2000
device_details_partition:
address: 0xf3FF0 # New address
end_address: 0xf4000 # Size is 0x10
region: flash_primary
size: 0x10
app:
address: 0x4c200
end_address: 0xf3FF0 # Decreased by 0x10
region: flash_primary
size: 0xa7df0
external_flash:
address: 0x128000
end_address: 0x200000
region: external_flash
size: 0xd8000
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: 0x4000
before:
- mcuboot_primary_app
region: flash_primary
size: 0x200
mcuboot_primary:
address: 0xc000
end_address: 0xf3FF0 # Decreased by 0x10
orig_span: &id001
- mcuboot_pad
- app
- tfm
region: flash_primary
size: 0xe7FF0
span: *id001
mcuboot_primary_1:
address: 0x0
device: nordic_ram_flash_controller
end_address: 0x40000
region: ram_flash
size: 0x40000
mcuboot_primary_app:
address: 0xc200
end_address: 0xf3FF0 # Decreased by 0x10
orig_span: &id002
- app
- tfm
region: flash_primary
size: 0xe7e00
span: *id002
mcuboot_secondary:
address: 0x0
device: DT_CHOSEN(nordic_pm_ext_flash)
end_address: 0xe8000
placement:
align:
start: 0x4
region: external_flash
share_size:
- mcuboot_primary
size: 0xe8000
mcuboot_secondary_1:
address: 0xe8000
device: DT_CHOSEN(nordic_pm_ext_flash)
end_address: 0x128000
region: external_flash
size: 0x40000
nonsecure_storage:
address: 0xf4000
end_address: 0xf6000
orig_span: &id003
- settings_storage
region: flash_primary
size: 0x2000
span: *id003
otp:
address: 0xff8100
end_address: 0xff83fc
region: otp
size: 0x2fc
pcd_sram:
address: 0x20000000
end_address: 0x20002000
placement:
before:
- tfm_sram
region: sram_primary
size: 0x2000
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
settings_storage:
address: 0xf4000
end_address: 0xf6000
inside:
- nonsecure_storage
placement:
align:
start: 0x4000
before:
- tfm_storage
- end
region: flash_primary
size: 0x2000
sram_nonsecure:
address: 0x2000fd70
end_address: 0x20080000
orig_span: &id004
- sram_primary
- rpmsg_nrf53_sram
region: sram_primary
size: 0x70290
span: *id004
sram_primary:
address: 0x2000fd70
end_address: 0x20070000
region: sram_primary
size: 0x60290
sram_secure:
address: 0x20000000
end_address: 0x2000fd70
orig_span: &id005
- pcd_sram
- tfm_sram
region: sram_primary
size: 0xfd70
span: *id005
tfm:
address: 0xc200
end_address: 0x4c200
inside:
- mcuboot_primary_app
placement:
before:
- app
region: flash_primary
size: 0x40000
tfm_its:
address: 0xf8000
end_address: 0xfa000
inside:
- tfm_storage
placement:
before:
- tfm_otp_nv_counters
region: flash_primary
size: 0x2000
tfm_nonsecure:
address: 0x4c200
end_address: 0xf3FF0
orig_span: &id006
- app
region: flash_primary
size: 0xa7df0
span: *id006
tfm_otp_nv_counters:
address: 0xfa000
end_address: 0xfc000
inside:
- tfm_storage
placement:
before:
- tfm_ps
region: flash_primary
size: 0x2000
tfm_ps:
address: 0xfc000
end_address: 0x100000
inside:
- tfm_storage
placement:
align:
start: 0x4000
before:
- end
region: flash_primary
size: 0x4000
tfm_secure:
address: 0xc000
end_address: 0x4c200
orig_span: &id007
- mcuboot_pad
- tfm
region: flash_primary
size: 0x40200
span: *id007
tfm_sram:
address: 0x20002000
end_address: 0x2000fd70
inside:
- sram_secure
placement:
after:
- start
region: sram_primary
size: 0xdd70
tfm_storage:
address: 0xf8000
end_address: 0x100000
orig_span: &id008
- tfm_ps
- tfm_its
- tfm_otp_nv_counters
region: flash_primary
size: 0x8000
span: *id008