2025-02-10 04:12 PM
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;
}
}
Solved! Go to Solution.
2025-02-11 01:29 PM
> 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.
2025-02-10 04:22 PM - edited 2025-02-10 04:24 PM
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.
2025-02-11 12:27 PM
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?
2025-02-11 12:49 PM
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):
This is not STM32H7 having the two power configurations.
2025-02-11 01:29 PM
> 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.
2025-02-11 01:33 PM - edited 2025-02-11 01:39 PM
You are very wrong. The STM32U575VIT6Q has both the LDO and SMPS. After reset the LDO is enabled. The SMPS has to be enabled explicitly. There is even an example program for the STM32U575 developer board that allows you to switch between the two regulators to measure power consumption. As you are an employee of ST, I would expect that you would check the data sheet before giving a very wrong answer. The power consumption using the SMPS is about half of the LDO consumption.
2025-02-11 01:47 PM
@ScottD wrote:
As you are an employee of ST, I would expect that you would check the data sheet before giving a very wrong answer. The power consumption using the SMPS is about half of the LDO consumption.
Ok you are correct but as a "ST employee" I could be wrong and I'm not expert of evreything as well as all of the products.
2025-02-11 03:28 PM
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.