cancel
Showing results for 
Search instead for 
Did you mean: 

STM32H563 I2C doesn't work when TrustZone enabled with OEMiROT boot path.

Ivan2307
Associate II

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

 

1 ACCEPTED SOLUTION

Accepted Solutions
Jocelyn RICARD
ST Employee

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

View solution in original post

6 REPLIES 6
Jocelyn RICARD
ST Employee

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

 

 

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

Jocelyn RICARD
ST Employee

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

Ivan2307
Associate II

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:

Ivan2307_1-1719249106713.png

The VCP port printout after changing the flash layout is as follow:

Ivan2307_2-1719249224271.png

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

 

Jocelyn RICARD
ST Employee

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

Hello @Jocelyn RICARD ,

Thanks for your help. after updating .bat script, launch provision.bat and it works.

Regards, Ivan