STM32CubeProgrammer (STM32CubeProg) can be used with STM32PRGFW-UTIL to read and update the non-volatile memory (NVM) of the power management IC (PMIC) on the STM32 MPU board, which is seen as a specific partition on the device.
This page describes the format of the partition used by the embedded programming service to allow PMIC NVM access by STM32CubeProgrammer (see AN5275: USB DFU/USART protocols used in STM32MP1 series bootloaders for protocol details).
Refer to STM32CubeProgrammer article to know how to use the STM32CubeProgrammer and to STM32PRGFW-UTIL README.md to know how to use the STM32PRGFW-UTIL, which are the official STMicroelectronics tools to update the PMIC NVM on STM32 MPU platforms.
1. PMIC NVM partition[edit source]
The PMIC NVM partition is identified by the reserved Id 0xF4:
- it is exported (when the IC is present on the board) as a specific alternate setting of the USB DFU [1]
- it accessible with commands of the UART protocol in AN5275
- Download command (0x31) with Packet number=0xF4000000: 0xF4 for Special operation: PMIC NVM and 0x0 address
- Read partition command (0x12) with partition Id = 0xF4.
This optional partition is programmed without header.
It is supported in STM32PRGFW-UTIL, the only supported tools for PMIC NVM update in ecosystem release ≥ v5.1.0 .
For read operation, the host requests the PMIC NVM partition data and the platform replies with all the partition content.
For write operation, the host must send the full partition containing one or more modifications (any reserved bit must be preserved).
Information |
In OpenSTLinux, the PMIC STPMIC1 is handled in the secured world by OP-TEE ecosystem release ≥ v4.0.0 , the PMIC NVM update is no more supported in U-Boot. |
1.1. STPMIC1 NVM partition[edit source]
For STPMIC1, the NVM partition has a fixed size of 8 bytes and exports in R/W the NVM shadow registers bytes (Address 0xF8 to 0xFF) as defined in STPMIC1 datasheet: DS12792.
NVM offset |
STPMIC1 Address |
NVM user shadow register |
---|---|---|
0 | 0xF8 | NVM_ON_OFF_CTRL_SHR |
1 | 0xF9 | NVM_BUCK_RANK_SHR |
2 | 0xFA | NVM_LDO14_RANK_SHR |
3 | 0xFB | NVM_LDO56_VREF_RANK_SHR |
4 | 0xFC | NVM_BUCKS_VOUT_SHR |
5 | 0xFD | NVM_LDO13_VOUT_SHR |
6 | 0xFE | NVM_LDO56_VOUT_SHR |
7 | 0xFF | NVM_DEV_ADDR_SHR |
1.2. STPMIC2 NVM partition[edit source]
For STPMIC2, the NVM partition has a fixed size of 38 bytes and exports in R/W the NVM shadow registers bytes (Address 0x90 to 0xB7) as defined in STPMIC25 datasheet: DS14278.
NVM offset |
STPMIC25 Address |
NVM user shadow register |
---|---|---|
0 | 0x90 | MAIN_CTRL_SHR1 |
1 | 0x91 | MAIN_CTRL_SHR2 |
2 | 0x92 | RANK_SHR1 |
3 | 0x93 | RANK_SHR2 |
4 | 0x94 | RANK_SHR3 |
5 | 0x95 | RANK_SHR4 |
6 | 0x96 | RANK_SHR5 |
7 | 0x97 | RANK_SHR6 |
8 | 0x98 | RANK_SHR7 |
9 | 0x99 | RANK_SHR8 |
10 | 0x9A | BUCK_MODE_SHR1 |
11 | 0x9C | BUCK1_VOUT_SHR |
12 | 0x9D | BUCK2_VOUT_SHR |
13 | 0x9E | BUCK3_VOUT_SHR |
14 | 0x9F | BUCK4_VOUT_SHR |
15 | 0xA0 | BUCK5_VOUT_SHR |
16 | 0xA1 | BUCK6_VOUT_SHR |
17 | 0xA2 | BUCK7_VOUT_SHR |
18 | 0xA3 | LDO2_SHR |
19 | 0xA4 | LDO3_SHR |
20 | 0xA5 | LDO5_SHR |
21 | 0xA6 | LDO6_SHR |
22 | 0xA7 | LDO7_SHR |
23 | 0xA8 | LDO8_SHR |
24 | 0xA9 | PD_SHR1 |
25 | 0xAB | PD_SHR3 |
26 | 0xAC | BUCKS_IOUT_SHR1 |
27 | 0xAD | BUCKS_IOUT_SHR2 |
28 | 0xAE | LDOS_IOUT_SHR |
29 | 0xAF | FS_OCP_SHR1 |
30 | 0xB0 | FS_OCP_SHR2 |
31 | 0xB1 | FS_SHR1 |
32 | 0xB2 | FS_SHR2 |
33 | 0xB3 | FS_SHR3 |
34 | 0xB4 | BUCK_AUTOCAL_S |
35 | 0xB5 | I2C_ADDR_SHR |
36 | 0xB6 | USER_SHR1 |
37 | 0xB7 | USER_SHR2 |
2. PMIC NVM programming via CLI[edit source]
The purpose of the tool is to facilitate the programming of the STPMIC with STM32PRGFW-UTIL by providing a dedicated command line interface (not available through the GUI) that simplifies the detection and selection of the appropriate partition for both UART and DFU interfaces.
Syntax: -pmic <PMIC_file_path>
<PMIC_file_path> : Indicate the binary file path (8 Bytes as length).
See STM32CubeProgrammer article and STM32PRGFW-UTIL for details.
3. Reference list[edit source]