Skip to main content
MWoło.2
Senior III
January 5, 2023
Solved

STPMIC1APQR-STM32MP157CAA problem with the voltage setting via I2C

  • January 5, 2023
  • 2 replies
  • 2304 views

Hi,

I encounter an extraordinary problem with STPMIC1APQR. When powering on the board without loading any images voltages on each section are as described in the PMIC documentation. When I start fsbl the voltages change, and increase not as described in the dts.

My dts configuration is as follows

&i2c4{
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&i2c4_pins_mx &i2c4_pins_z_mx>;
	pinctrl-1 = <&i2c4_sleep_pins_mx &i2c4_sleep_pins_z_mx>;
	status = "okay";
 
	/* USER CODE BEGIN i2c4 */
	i2c-scl-rising-time-ns = <185>;
	i2c-scl-falling-time-ns = <20>;
	clock-frequency = <400000>;
	/delete-property/ dmas;
	/delete-property/ dma-names;
 
	pmic:stpmic@33{
		compatible = "st,stpmic1";
		reg = <0x33>;
		interrupts-extended = <&exti_pwr 55 IRQ_TYPE_EDGE_FALLING>;
		interrupt-controller;
		#interrupt-cells = <2>;
		status = "okay";
 
		regulators{
			compatible = "st,stpmic1-regulators";
			buck1-supply = <&vin>;
			buck2-supply = <&vin>;
			buck3-supply = <&vin>;
			buck4-supply = <&vin>;
			ldo1-supply = <&v3v3>;
			ldo2-supply = <&vin>;
			ldo3-supply = <&vdd_ddr>;
			ldo4-supply = <&vin>;
			ldo5-supply = <&vin>;
			ldo6-supply = <&v3v3>;
			vref_ddr-supply = <&vin>;
			boost-supply = <&vin>;
			pwr_sw1-supply = <&bst_out>;
			pwr_sw2-supply = <&bst_out>;
 
			vddcore:buck1{
				regulator-name = "vddcore";
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <1350000>;
				regulator-always-on;
				regulator-initial-mode = <0>;
				regulator-over-current-protection;
			};
 
			vdd_ddr:buck2{
				regulator-name = "vdd_ddr";
				regulator-min-microvolt = <1350000>;
				regulator-max-microvolt = <1350000>;
				regulator-always-on;
				regulator-initial-mode = <0>;
				regulator-over-current-protection;
			};
 
			vdd:buck3{
				regulator-name = "vdd";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
				st,mask-reset;
				regulator-initial-mode = <0>;
				regulator-over-current-protection;
			};
 
			v3v3:buck4{
				regulator-name = "v3v3";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
				regulator-over-current-protection;
				regulator-initial-mode = <0>;
			};
 
			v1v8_audio:ldo1{
				regulator-name = "v1v8_audio";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
				interrupts = <IT_CURLIM_LDO1 0>;
			};
 
			v3v3_emmc:ldo2{
				regulator-name = "v3v3_emmc";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
				interrupts = <IT_CURLIM_LDO2 0>;
			};
 
			vtt_ddr:ldo3{
				regulator-name = "vtt_ddr";
				regulator-min-microvolt = <500000>;
				regulator-max-microvolt = <750000>;
				regulator-always-on;
				regulator-over-current-protection;
			};
 
			vdd_usb:ldo4{
				regulator-name = "vdd_usb";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				interrupts = <IT_CURLIM_LDO4 0>;
				regulator-always-on;
			};
 
			vdda:ldo5{
				regulator-name = "vdda";
				regulator-min-microvolt = <2900000>;
				regulator-max-microvolt = <2900000>;
				interrupts = <IT_CURLIM_LDO5 0>;
				regulator-boot-on;
			};
 
			v1v2_hdmi:ldo6{
				regulator-name = "v1v2_hdmi";
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <1200000>;
				regulator-always-on;
				interrupts = <IT_CURLIM_LDO6 0>;
			};
 
			vref_ddr:vref_ddr{
				regulator-name = "vref_ddr";
				regulator-always-on;
				regulator-over-current-protection;
			};
 
			bst_out:boost{
				regulator-name = "bst_out";
				interrupts = <IT_OCP_BOOST 0>;
			};
 
			vbus_otg:pwr_sw1{
				regulator-name = "vbus_otg";
				interrupts = <IT_OCP_OTG 0>;
			};
 
			vbus_sw:pwr_sw2{
				regulator-name = "vbus_sw";
				interrupts = <IT_OCP_SWOUT 0>;
				regulator-active-discharge = <1>;
			};
		};
 
		onkey{
			compatible = "st,stpmic1-onkey";
			interrupts = <IT_PONKEY_F 0>, <IT_PONKEY_R 0>;
			interrupt-names = "onkey-falling", "onkey-rising";
			power-off-time-sec = <10>;
			status = "okay";
		};
 
		watchdog {
			compatible = "st,stpmic1-wdt";
			status = "disabled";
		};
	};
	/* USER CODE END i2c4 */
};

For instance, buck2 voltage should be no more than 1.35V and I have 1.9V, the same with the core should be no more than 1.2V and is 1.8V, CPU start heating. Bootloader starts with log

NOTICE: CPU: STM32MP157CAA Rev.Z 
NOTICE: Model: STMicroelectronics custom STM32CubeMX board - openstlinux-5.15-5
ERROR: nvmem node board_id not found 
INFO: PMIC version = 0x21 
NOTICE: Reset reason (0x4): 
INFO: Pad Reset from NRST 
INFO: FCONF: Reading TB_FW firmware configuration file from: 0x2ffe2000 
INFO: FCONF: Reading firmware configuration information for: stm32mp_io 
INFO: Using USB 
INFO: Instance 2 
INFO: Boot used partition fsbl1 
NOTICE: BL2: v2.6-stm32mp1-r1.0(debug):v2.6-dirty 
NOTICE: BL2: Built : 13:14:26, Nov 23 2021 
INFO: BL2: Doing platform setup 
INFO: RAM: DDR3-DDR3L 16bits 533000kHz 
ERROR: DDR addr bus test: can't access memory @ 0xc0000004 
PANIC at PC : 0x2ffead6d 

Of course botting stack on DDR3 memory access problem. What did I do wrong?

This topic has been closed for replies.
Best answer by MWoło.2

Hi Patrick,

problem solved PMIC was badly soldered. I reflow it again and now the voltages are correct. I guess the thermal pad has a bad connection.

Sorry for a problem

Thanks

BR Michal

2 replies

PatrickF
Technical Moderator
January 5, 2023

Hi,

I first suspect you have an HW issue as buck1 and buck2 cannot be setup above 1.5V whatever SW do.

Are the STPMIC1 bucks wired as recommended with recommended components ?

Bad component characteristics or bad power path routing could make them to oscillate up to hell.

Maybe share schematics with component references around STPMIC1A.

During platform power up (before any SW is started), are the voltages according to STPMIC1A datasheet (buck3=3.3V and buck1=1.2V for instance. buck2 is off at this stage) ?

Did you program STPMIC1 NVM ?

Regards.

In order 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.NEW ! Sidekick STM32 AI agent, see here
MWoło.2
MWoło.2AuthorBest answer
Senior III
January 5, 2023

Hi Patrick,

problem solved PMIC was badly soldered. I reflow it again and now the voltages are correct. I guess the thermal pad has a bad connection.

Sorry for a problem

Thanks

BR Michal