Skip to main content
Visitor II
February 11, 2025
Solved

STM32U575 SMPS time out when enabling. What to check for?

  • February 11, 2025
  • 2 replies
  • 1057 views

My controller uses the STM32U575 chip. I followed the recommended design for the SMPS using the same inductor and XR7 capacitors as recommended in the reference design. I built up 4 boards, the first three boards worked properly without issue. After reset, I switch from the LDO to the SMPS using the same code as is used in the various examples. No issues with 3 of the boards. On the 4th board, the wait loop for regulator ready after enabling the SMPS times out. I added code to switch back to the LDO if this happens and display a message that the SMPS has a problem (via the serial port to my computer). The processor and code runs properly from the LDO, but uses more power which is an issue as this is a battery operated device.

The power to the chip is a regulated 3.3v. I tried replacing the inductor, problem still exists. Not much to the circuit. I have the two 2.2uF caps placed next to the pins 49 and 98 (using the 100 pin LQFP package). After reset, to save power, I program the CPU clock to run at 24mhz, which switches to higher speeds when needed. The voltage is 1 volt when running at 24mhz, 1.2v when running at 160mhz, which is correct according to the data sheet. The following is the loop that times out. So the SMPS seems to be working, but the check for the regulator being ready is not occurring only on this one board.

Any suggestions what to check or modify? or does this indicate that something is defective in the CPU chip?

 

 /* Switch to SMPS regulator instead of LDO */
 BadSMPSFlag = 0; /* assume good */
 MODIFY_REG(PWR->CR3, PWR_CR3_REGSEL, LL_PWR_SMPS_SUPPLY);
 i = 250000; /* at 4mhz should timeout at 3 seconds */
 while (LL_PWR_IsActiveFlag_REGULATOR() != 1)
 {
 if (--i == 0)
 {
 BadSMPSFlag = 1;
 MODIFY_REG(PWR->CR3, PWR_CR3_REGSEL, LL_PWR_LDO_SUPPLY); /* switch back to LDO */
 break;
 }
 }

 

    This topic has been closed for replies.
    Best answer by TDK

     

    > Any suggestions what to check or modify? or does this indicate that something is defective in the CPU chip?

    If 3/4 boards work, I would suspect a hardware issue over a software one. Reflow all relevant solder joints. Measure VCAP during startup on a scope if you can, along with maybe VFBSMPS to spot differences.

    2 replies

    ScottDAuthor
    Visitor II
    February 11, 2025

    A clarification to my previous post. My timeout will wait 3 seconds before aborting and switching back to the LDO. During that 3 second window, where the CPU is running at its default 4mhz after reset, the voltage is 0.9v, then switches to 1 volt or 1.2volt depending whether the program is in the 24mhz mode or the 160mhz mode. If it times out then obviously this is from the LDO not the SMPS, I measured the same voltage characteristics on the working boards which are using the SMPS.

    ScottDAuthor
    Visitor II
    February 11, 2025

    Here is some additional information. I rewrote the code to explicitly set the bits of the PWR->CR3 register, and read it to verify the setting.

     tmpreg = PWR->CR3;
     tmpreg = 0x00000002;
     PWR->CR3 = tmpreg;
     tmpreg = PWR->CR3;

    The value  of tmpreg after line 1 is 0.

    Bit 1 when set to 1 selects the SMPS, if 0 LDO. So I write a 1 to CR3 bit 1.

    Reading CR3 at line 4 show a value of 0x00000002 as it should be.

    Next is to read the SVMSR register to wait for a ready.

     i = 250000;
     while (i > 0)
     {
     tmpreg = PWR->SVMSR;
     if (tmpreg & 0x00000002)
     break;
     if (--i == 0)
     {
     BadSMPSFlag = 1;
     tmpreg = PWR->CR3;
     tmpreg = 0;
     PWR->CR3 = tmpreg;
     break;
     }
     }

    After line 4 reads the SVMSR register, it shows a value of 0x00008000. That set bit is the ACTVOSRDY bit.

    Bit 15 ACTVOSRDY: Voltage level ready for currently used VOS
    0: VCORE is above or below the current voltage scaling provided by ACTVOS[1:0].
    1: VCORE is equal to the current voltage scaling provided by ACTVOS[1:0]

    The bit being monitored is bit 1 which is the regulator selection bit.

    Bit 1 REGS: Regulator selection
    0: LDO selected
    1: SMPS selected

    The value never changes, the current consumption stays the same as being the LDO consumption without dropping as I have seen on my board and on the developer board.

    Therefore something is keeping the regulator from switching. I do not know what else to check for. I examined the board under my microscope. All solder joints are clean and traces have continuity.

    What else can I look for? or is this a defective chip?

    Technical Moderator
    February 11, 2025

    Hello,

    I didn't understand why are you switching between the modes between LDO and the SMPS in STM32U575 product.

    There is only one power configuration according to the package (SMPS or LDO): 

    SofLit_0-1739306855302.png

    This is not STM32H7 having the two power configurations.

     

    TDKAnswer
    Super User
    February 11, 2025

     

    > Any suggestions what to check or modify? or does this indicate that something is defective in the CPU chip?

    If 3/4 boards work, I would suspect a hardware issue over a software one. Reflow all relevant solder joints. Measure VCAP during startup on a scope if you can, along with maybe VFBSMPS to spot differences.

    ScottDAuthor
    Visitor II
    February 11, 2025

    After re-flowing all related pins, no change. After looking for anything different between the 3 good boards and the one bad board, I found one difference. On the board I have the ism330 accelerometer that is in close proximity to the inductor for the SMPS and connects to cpu pins in that same area. On the other three boards we had not installed the ism330. This board had it. I did an x-ray of the board and found that a solder joint on the underside of the ism330 had a very slight short to the 3.3v. Why this would affect the smps I am not sure as the short was to an uninitialized gpio pin which should be unconnected until configured. Regardless, I removed the ism330 and the problem went away.

    As a side note, I realize the accelerometer chips are used in very small devices, but it would be nice if they were also available in another package like an lqfp or something that has the pins exposed for manual soldering and able to directly probe the pins.