2024-06-15 10:46 PM - edited 2024-06-16 08:14 PM
Hello,
I am working on implementing secure firmware with OEMiRoT boot on the STM32H563. I have configured I2C1 and TIM1 as non-secure peripherals. While the TIM1 interrupt works as expected, I am encountering an issue where the I2C1 slave interrupt handler is never entered. (Note: The I2C slave works correctly if TrustZone is disabled.)
I am wondering if the I2C1 slave interrupt handler requires special handling when configured as a non-secure peripheral with TrustZone enabled?
Additionally, if I need to change the start offset and application size for secure and non-secure applications, what changes are required beyond updating flash_layout.h in OEMiROT project?
Any assistance on these issues would be greatly appreciated.
Thanks,
Ivan
Solved! Go to Solution.
2024-06-25 09:01 AM
Hello @Ivan2307 ,
I could reproduce your issue.
The reason is related to the usage of both .sh and .bat scripts and on windows we are more used to .bat
BUT, when you use STM32CubeIDE, only .sh scripts are updated in ROT_Provisioning/OEMiROT
And I used provisioning.bat instead of provisioning.sh like you and fell in same issue.
In fact, in the postbuild of OEMiROT_Boot, you update all needed files to make everything consistent.
The point is that you will update the ob_flash_programming.sh where you can see sec1_end=0x16 which is the good value for last secure flash sector, but ob_flash_programming.bat is not updated.
So, just launch provisioning.sh and it will work.
Best regards
Jocelyn
2024-06-18 01:49 AM
Hello @Ivan2307
I2C interrupt needs to be allocated to non secure. I don't see other reason why you wouldn't get this interrupt.
If you use the OEMiROT as it is, after changing the mapping in flash_layout.h, when building SBSFU_Boot, the linker files of the secure and non secure application will be updated.
Best regards
Jocelyn
2024-06-20 09:32 AM
Hello @Jocelyn RICARD
Thanks for your reply.
As regarding to OEMiROT, I saw the linker files were updated automatically after changing the mapping "in flash_layout.h". If I want to change the secure firmware and non-secure firmware size. How many parameters (Macro) I need to change in flash_layout.h? Looks if just changing "FLASH_S_PARTITION_SIZE" and "FLASH_NS_PARTITION_SIZE", it doesn't work.
Thanks, Ivan
2024-06-20 09:54 AM
Hello @Ivan2307 ,
the tools were made to make it easy so it should work in theory
What values did you use ? Did you change other settings?
Best regards
Jocelyn
2024-06-24 10:27 AM
Hello @Jocelyn RICARD ,
Thanks for your reply. I still have question regarding the issue I am facing. I also thought the change should work, but I noticed the VCP port printout is different before and after modifying the 'flash_layout.h' file.
The original firmware VCP port printout is as follows:
The VCP port printout after changing the flash layout is as follow:
I have also attached the modified firmware for your reference. If possible, could you please help me check it? What other changes I need to make to the flash layout to get it working correctly?
Thank you very much for your assistance.
Regards, Ivan
2024-06-25 09:01 AM
Hello @Ivan2307 ,
I could reproduce your issue.
The reason is related to the usage of both .sh and .bat scripts and on windows we are more used to .bat
BUT, when you use STM32CubeIDE, only .sh scripts are updated in ROT_Provisioning/OEMiROT
And I used provisioning.bat instead of provisioning.sh like you and fell in same issue.
In fact, in the postbuild of OEMiROT_Boot, you update all needed files to make everything consistent.
The point is that you will update the ob_flash_programming.sh where you can see sec1_end=0x16 which is the good value for last secure flash sector, but ob_flash_programming.bat is not updated.
So, just launch provisioning.sh and it will work.
Best regards
Jocelyn
2024-06-25 10:51 AM
Hello @Jocelyn RICARD ,
Thanks for your help. after updating .bat script, launch provision.bat and it works.
Regards, Ivan