cancel
Showing results for 
Search instead for 
Did you mean: 

STPMIC1APQR-STM32MP157CAA problem with the voltage setting via I2C

MWoło.2
Senior II

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?

1 ACCEPTED SOLUTION

Accepted Solutions
MWoło.2
Senior II

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

View solution in original post

2 REPLIES 2
PatrickF
ST Employee

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.
MWoło.2
Senior II

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