External provisioning¶
Configure a PF1550 from an ESP32-C6 over the board's I2C test pads before the board's own processor runs, and check the result.
The pf1550_esp32c6_provision example does it: it applies a Portenta H7 profile, runs the boot self-test, prints a
bench checklist and then monitors the rails. Use it on a new board with an unprogrammed (A0EP) PMIC, or to bring
up a carrier whose +3V3 depends on SW2.
Two masters, one PMIC
Do not connect the ESP32-C6 while the board's own processor drives the same I2C bus. Hold that processor in reset or leave it unprogrammed, and disconnect the ESP32-C6 before you release it.
When to use it¶
| Situation | Provision from the ESP32-C6? |
|---|---|
| First power-up, bare module, no firmware on the processor | Yes |
| Carrier +3V3 or JTAG VTref reads 0 V while the processor runs from SW3 | Yes, with the carrier profile |
| Production firmware already applies a profile early in boot | No |
| OTP-programmed PMIC whose rails are already right | Probe and diagnostics only |
Wiring¶
| ESP32-C6 | Board | Notes |
|---|---|---|
| GPIO4 | PF1550 SDA | Kconfig PF1550_I2C_SDA_GPIO |
| GPIO5 | PF1550 SCL | Kconfig PF1550_I2C_SCL_GPIO |
| GND | GND | |
| any GPIO (optional) | STANDBY, USB_VBUS_EN, USB_OTG_EN test points | Enable PF1550_GPIO_STRAPS_ENABLE and set the three GPIO numbers |
Power the board from USB or a bench supply. The PMIC answers once VSYS and VDDIO are up; the board's processor does not need to run. Without strap GPIOs, the board's own pull resistors must hold STANDBY low.
Build, flash, watch¶
From examples/esp32, with ESP-IDF v5.5 loaded and the scripts submodule initialised:
./scripts/build_app.sh pf1550_esp32c6_provision Release
./scripts/flash_app.sh flash_monitor pf1550_esp32c6_provision Release
A successful run logs the profile name, Self-test: PASS, a checklist of the voltages to measure at the module
(SW1, SW2, SW3, LDO1 to LDO3) with the set points read back, and Provisioning complete. It then prints the PMIC
state, the SW set points and the fault flags every 10 s.
Afterwards¶
- Disconnect the ESP32-C6 from the I2C bus.
- Power the board down completely (USB and battery off) if this was the first profile on the part, then power it up again, and measure the rails.
- Release the board's processor or flash its firmware.
The PF1550 keeps its registers only while it stays powered: an unprogrammed part forgets the profile at the next full power-down. Production firmware has to apply the profile at every boot.
Kconfig options¶
Edit them with ./scripts/build_app.sh pf1550_esp32c6_provision Release menuconfig, under PF1550 Example
Configuration.
| Option | Default | Meaning |
|---|---|---|
PF1550_I2C_SDA_GPIO |
4 | SDA pin |
PF1550_I2C_SCL_GPIO |
5 | SCL pin |
PF1550_I2C_FREQ_HZ |
400000 | I2C clock; the PF1550 supports up to 400 kHz |
PF1550_PROFILE_SELECT |
PF1550_PROFILE_CARRIER |
Profile the provision app applies; or PF1550_PROFILE_DEFAULT |
PF1550_GPIO_STRAPS_ENABLE |
off | Drive the strap pins from the ESP32-C6 |
PF1550_GPIO_STANDBY, PF1550_GPIO_USB_VBUS_EN, PF1550_GPIO_USB_OTG_EN |
−1 (not wired) | Strap GPIO numbers |
PF1550_APPLY_PORTENTA_PROFILE |
off | Lets the probe example apply the profile too |
Next: Troubleshooting.