2025-05-15 5:58 PM
Hi there,
We are having some issues with our STM32H7 when the MCU is heated above approximately 55C. This leads to a fault of some form within the STM32 which prevents it from reading an external flash which the code is being run from. This memory is MX66UM1G45GXDI00 being run in memory mapped mode and XIP. We also have external RAM setup on the other XSPI interface, APS256XXN-OBR-BG, with the design being based on the STM32H7S7-DK.
The XSPI devices are being run at 1.8V and we have confirmed that all the rails (3.3V, VDD, VCore) are up and stable. Both XSPI devices are being run at 200MHz.
We saw a similar forum thread where there was discussion about the SBS Cell Compensation used in the XPI where there was speculation that issues could arise from updating the compensation value during operation. I attempted this fix however the issue still occurs. The symptoms experienced in that thread very closely match the issues we are experiencing.
https://community.st.com/t5/stm32-mcus-products/stm32h7s7l8h6h-xspi-instability/td-p/749315
Is there any further advice here?
Best Regards,
Robert T
2025-05-16 5:53 AM
Hello @RobertT and welcome to the community;
Does the problem persist even when the IO compensation cell is disabled?
Could you try to implement the following steps:
1.Enable the compensation cell before XSPI1 communication.
2.Copy the code found by the cell inside the user code register.
3.Start the communication with the compensation cell off.
I hope this help you.
Thank you.
Kaouthar
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
2025-05-17 2:17 AM
2025-05-18 11:01 PM
We have tried the code below:
/* Configure the compensation cell */
HAL_SBS_ConfigCompensationCell(SBS_IO_XSPI1_CELL, SBS_IO_CELL_CODE, 0U, 0U);
HAL_SBS_ConfigCompensationCell(SBS_IO_XSPI2_CELL, SBS_IO_CELL_CODE, 0U, 0U);
/* Enable compensation cell */
HAL_SBS_EnableCompensationCell(SBS_IO_XSPI1_CELL);
HAL_SBS_EnableCompensationCell(SBS_IO_XSPI2_CELL);
/* wait ready before enabled IO */
while(HAL_SBS_GetCompensationCellReadyStatus(SBS_IO_XSPI1_CELL_READY) != 1U);
while(HAL_SBS_GetCompensationCellReadyStatus(SBS_IO_XSPI2_CELL_READY) != 1U);
uint32_t code1, code2, nmos1, nmos2, pmos1, pmos2;
HAL_SBS_GetCompensationCell(SBS_IO_XSPI1_CELL, &code1, &nmos1, &pmos1);
HAL_SBS_GetCompensationCell(SBS_IO_XSPI2_CELL, &code2, &nmos2, &pmos2);
HAL_SBS_ConfigCompensationCell(SBS_IO_XSPI1_CELL, SBS_IO_REGISTER_CODE, nmos1, pmos1);
HAL_SBS_ConfigCompensationCell(SBS_IO_XSPI2_CELL, SBS_IO_REGISTER_CODE, nmos2, pmos2);
HAL_SBS_DisableCompensationCell(SBS_IO_XSPI1_CELL);
HAL_SBS_DisableCompensationCell(SBS_IO_XSPI2_CELL);
/* high speed low voltage config */
HAL_SBS_EnableIOSpeedOptimize(SBS_IO_XSPI1_HSLV);
HAL_SBS_EnableIOSpeedOptimize(SBS_IO_XSPI2_HSLV);
We have also tried completely disabling the compensation, by removing the above code, leaving on the below:
/* high speed low voltage config */
HAL_SBS_EnableIOSpeedOptimize(SBS_IO_XSPI1_HSLV);
HAL_SBS_EnableIOSpeedOptimize(SBS_IO_XSPI2_HSLV);
This code also seems to fail at the rough 55C mark.
I noticed you only mentioned XSPI1. Is there any significance of one or the other? We have ran some testing with compensation on and off for both in all the combinations but still see similar results.
Regards,
Robert
2025-05-21 6:07 PM
I believe we have resolved this issue. It does seem that the XSPI Compensation was the root cause. It was an additional issue on the PCB caused by derating of a PTC Fuse that caused further issues at a similar temperature.
Regards,
Robert.
2025-05-21 11:56 PM
Dear @RobertT ,
Thank you for the feedback, can you please elaborate more ? an how it was solved . I'm curious to know
Ciao
STOne-32.