Hi,
We are working on nrf5340 board with NS and TF-M setup and we have SDK v2.7.0
We need to have a flash partition to store the some secure data may be a size of 4KB inside the TF-M.
Please help us or direct us to any reference.
Hi,
We are working on nrf5340 board with NS and TF-M setup and we have SDK v2.7.0
We need to have a flash partition to store the some secure data may be a size of 4KB inside the TF-M.
Please help us or direct us to any reference.
Hi, any one please guide us through the setup please.
I see they have an example psa_protected_storage. If I set any partition size to 1KB the example does not work, it just goes into arch_system_halt().
How can I modify the partition size?
Hi,
You seem to have found an example that provides what you are looking for:
Jithin A said:example psa_protected_storage.
What exactly did you add here?
Jithin A said:If I set any partition size to 1KB the example does not work, it just goes into arch_system_halt().
And what is the assert output?
I suspect that the data that you added is stacked memory. If yes, then try to adjust your CONFIG_MAIN_STACK_SIZE.
If you want to store larger than 2k objects, you should adjust the CONFIG_TFM_PS_MAX_ASSET_SIZE. This can max. be 4020 due to overhead, and aligning to a flash page.
Kind regards,
Håkon
Hi,
You need to expand the partition in order to write larger asset sizes, and you also need to set a different TFM profile.
This is the configuration I am using now:
CONFIG_BUILD_WITH_TFM=y #CONFIG_TFM_PROFILE_TYPE_NOT_SET=y CONFIG_TFM_PROFILE_TYPE_MEDIUM=y CONFIG_TFM_PS_MAX_ASSET_SIZE=4000 CONFIG_MAIN_STACK_SIZE=4096
And here is a larger pm_static.yml (store as pm_static.yml this in your project and delete build folder and regenerate the project):
app:
address: 0x40000
end_address: 0xf4000
region: flash_primary
size: 0xb4000
otp:
address: 0xff8100
end_address: 0xff83fc
region: otp
size: 0x2fc
rpmsg_nrf53_sram:
address: 0x20070000
end_address: 0x20080000
placement:
before:
- end
region: sram_primary
size: 0x10000
sram_nonsecure:
address: 0x20030000
end_address: 0x20080000
orig_span: &id001
- sram_primary
- rpmsg_nrf53_sram
region: sram_primary
size: 0x50000
span: *id001
sram_primary:
address: 0x20030000
end_address: 0x20070000
region: sram_primary
size: 0x40000
sram_secure:
address: 0x20000000
end_address: 0x20030000
orig_span: &id002
- tfm_sram
region: sram_primary
size: 0x30000
span: *id002
tfm:
address: 0x0
end_address: 0x40000
placement:
before:
- app
region: flash_primary
size: 0x40000
tfm_its:
address: 0xf4000
end_address: 0xf6000
inside:
- tfm_storage
placement:
align:
start: 0x4000
before:
- tfm_otp_nv_counters
region: flash_primary
size: 0x2000
tfm_nonsecure:
address: 0x40000
end_address: 0xf4000
orig_span: &id003
- app
region: flash_primary
size: 0xb4000
span: *id003
tfm_otp_nv_counters:
address: 0xf6000
end_address: 0xf8000
inside:
- tfm_storage
placement:
align:
start: 0x4000
before:
- tfm_ps
region: flash_primary
size: 0x2000
tfm_ps:
address: 0xf8000
end_address: 0x100000
inside:
- tfm_storage
placement:
align:
start: 0x4000
before:
- end
region: flash_primary
size: 0x8000
tfm_secure:
address: 0x0
end_address: 0x40000
orig_span: &id004
- tfm
region: flash_primary
size: 0x40000
span: *id004
tfm_sram:
address: 0x20000000
end_address: 0x20030000
inside:
- sram_secure
placement:
after:
- start
region: sram_primary
size: 0x30000
tfm_storage:
address: 0xf4000
end_address: 0x100000
orig_span: &id005
- tfm_ps
- tfm_its
- tfm_otp_nv_counters
region: flash_primary
size: 0xc000
span: *id005
Kind regards,
Håkon
Hi Håkon,
Thank you for the response.
The above suggestion did not work for me, I am seeing the same -132 error when I run the code.
I removed build directory and rebuilt the project, yet the same result.
I can confirm the partitions.yml in build/zephyr/partition.yml updated your setup.
Hi,
Sorry about this, I forgot to erase the partitions when testing, so it had the layout of a former flashed firmware.
This was my working configuration. I see that there is a problem with the PS partition size, which is for some reason set to 0x4000, while the partition size is actually 0x8000, so I set it explicitly:
CONFIG_BUILD_WITH_TFM=y # CONFIG_TFM_PROFILE_TYPE_NOT_SET=y # CONFIG_TFM_PROFILE_TYPE_MEDIUM=y CONFIG_TFM_PROFILE_TYPE_SMALL=y CONFIG_TFM_PS_MAX_ASSET_SIZE=3800 CONFIG_MAIN_STACK_SIZE=4096 CONFIG_PM_PARTITION_SIZE_TFM_PROTECTED_STORAGE=0x8000
Kind regards,
Håkon
Hi Håkon
Thank you that worked for me.
One last question, I found this TF-M profile table and I see TFM PROTECTED STORAGE is set to OFF in the SMALL profile. If so, how is it working on our setup.

If I set to any other profile except SMALL, I get -132 error and why is so?
Hi,
My deepest apologies for sharing incorrect information.
Note that we recommend to either use minimal or full TFM profile, as shown here:
https://docs.nordicsemi.com/bundle/ncs-2.7.0/page/nrf/security/tfm.html#minimal_build
If you have CONFIG_TFM_PROFILE_TYPE_NOT_SET that implies a "full" implementation, and you need to adjust this configuration:
# Adjust even higher if storing larger files CONFIG_TFM_CRYPTO_IOVEC_BUFFER_SIZE=6400
Jithin A said:I found this TF-M profile table and I see TFM PROTECTED STORAGE is set to OFF in the SMALL profile.
I think there's an issue with how kconfig shows the tfm subsys vs. what is actually set in the cmake files to the TFM build. I see that the configuration is greyed out, but it does indeed pass this to the tfm image:
build/$IMAGE_NAME/tfm/CMakeCache.txt:TFM_PARTITION_PROTECTED_STORAGE:BOOL=ON
Sorry for all the back-and-forth in this matter.
Kind regards,
Håkon
Hi,
My deepest apologies for sharing incorrect information.
Note that we recommend to either use minimal or full TFM profile, as shown here:
https://docs.nordicsemi.com/bundle/ncs-2.7.0/page/nrf/security/tfm.html#minimal_build
If you have CONFIG_TFM_PROFILE_TYPE_NOT_SET that implies a "full" implementation, and you need to adjust this configuration:
# Adjust even higher if storing larger files CONFIG_TFM_CRYPTO_IOVEC_BUFFER_SIZE=6400
Jithin A said:I found this TF-M profile table and I see TFM PROTECTED STORAGE is set to OFF in the SMALL profile.
I think there's an issue with how kconfig shows the tfm subsys vs. what is actually set in the cmake files to the TFM build. I see that the configuration is greyed out, but it does indeed pass this to the tfm image:
build/$IMAGE_NAME/tfm/CMakeCache.txt:TFM_PARTITION_PROTECTED_STORAGE:BOOL=ON
Sorry for all the back-and-forth in this matter.
Kind regards,
Håkon
Hi,
Thank you for letting me know, will test above and let you know.