Programmable LDO (I²C/PMBus)
Introduction & Scope
A programmable LDO exposes VOUT, ILIM, and soft-start (TON/TOFF) via I²C/PMBus, with telemetry (V/I/T), alarms, and optional event logging. This page targets single-rail or few-rail precision supply use. Multi-rail sequencing/margining lives on the Power System Manager page; digital compensation/inductor topics live on the PMBus Digital Buck page.
Architecture
Control path: I²C/PMBus → registers → DAC → error amplifier → Pass FET → VOUT. Observe path: remote sense → MUX → ADC → telemetry/STATUS → ALERT#/log. Stability notes focus on sampling bandwidth, debounce, and avoiding inner-loop pole/zero from sense RC.
Engineer notes: Keep telemetry refresh, alarm debounce, and register polling in sync; place sense RC near the load return to avoid inner-loop artifacts; limit VOUT step size/interval when using margin high/low under heavy load.
Register Map Essentials
| Register | Function | Range / Step | Unit | Accuracy | Update rate | Debounce / Retry | Notes |
|---|---|---|---|---|---|---|---|
| VOUT_COMMAND | Output setpoint | 0.6–5.5 V / 5–10 mV | mV | ±1–2% | N/A (static) | — | Clamp within VOUT_MAX |
| VOUT_MAX | Safety ceiling | ≥ setpoint / device limit | mV | — | N/A | — | Blocks illegal writes |
| MARGIN HI/LO | Test offsets | ±1–10% / step 5–10 mV | mV | ±1–2% | per write | — | Use small step + dwell under load |
| IOUT_OC_WARN | Over-current warn | 0.1–3 A / 25–100 mA | mA | ±5–10% | telemetry tick | debounce ≥2–3 samples | Map to STATUS & ALERT# |
| IOUT_OC_FAULT | OC fault action | same range | mA | ±5–10% | telemetry tick | retry / latch | Foldback or shutdown |
| TON_RISE / TOFF_FALL | Soft-start/stop | 0.5–200 ms | ms | — | per write | — | Set to avoid inrush/undershoot |
| STATUS_WORD / VOUT / TEMP | Aggregated & domain bits | bitfields | — | — | 1–20 Hz | sticky + clear-on-read | Sync with polling period |
| READ_VIN/VOUT/IOUT/T | Telemetry | — | V/mA/°C | V/T: ±1–2% · I: ±5–10% | 1–20 Hz | avg/oversample | Document filter depth |
| BLACKBOX / LOG_CFG | Event logging | depth 8–256 | — | — | on event | — | Time source & retention |
# Minimal init (sequence)
write VOUT_MAX := safe_ceiling_mV
write VOUT_COMMAND := target_mV
write TON_RISE := softstart_ms
write IOUT_OC_WARN_LIMIT := warn_mA (debounce=3)
write IOUT_OC_FAULT_LIMIT := fault_mA (action=retry)
clear STATUS_WORD; configure LOG_CFG
# Polling loop
loop:
read READ_VOUT, READ_IOUT, READ_TEMPERATURE
read STATUS_WORD; if changed: capture timestamp, clear sticky, store to LOG
sleep poll_ms
Programmable Sequences
A) Single-rail: soft-start + PG + UV debounce
| Step | Register | Value | Reason | Expected readback |
|---|---|---|---|---|
| 1 | VOUT_MAX | ≥ target | Guard vs mis-writes | — |
| 2 | VOUT_COMMAND | target mV | Nominal setpoint | READ_VOUT ≈ target |
| 3 | TON_RISE | e.g., 10–50 ms | Limit inrush/undershoot | PG near end-of-ramp |
| 4 | UV debounce | ≥ 2–3 samples | Suppress false UV | STATUS_VOUT clean |
| 5 | STATUS_WORD | clear | Baseline | all zeros |
write VOUT_MAX := safe_ceiling
write VOUT_COMMAND := target_mV
write TON_RISE := softstart_ms
config UV_debounce := 3
clear STATUS_WORD
power_on()
wait_until(READ_VOUT within ±Δ and PG=1)
B) Multi-rail: ratiometric / tracking with a neighbor rail
| Step | Register | Value | Reason | Expected readback |
|---|---|---|---|---|
| 1 | TON_RISE | match both rails | Ratiometric ramp | PG windows aligned |
| 2 | MARGIN HI/LO | ± small | Fine-align endpoints | ΔV within spec |
| 3 | VOUT_COMMAND | step + dwell | Tracking follow | READ_VOUT tracks peer |
| 4 | STATUS_WORD | monitor | Detect anomalies | no WARN/FAULT |
sync(TON_RISE_peer)
for each step in plan:
write VOUT_COMMAND := prev + ΔmV
sleep dwell_ms
ensure |READ_VOUT - peer_V| ≤ ε
if anomaly: abort_and_restore()
C) Field tuning: brown-out mitigation and safe rollback
| Step | Register | Value | Reason | Expected readback |
|---|---|---|---|---|
| 1 | STATUS_VOUT | check UV_WARN | Detect brown-out | bit set then clears |
| 2 | MARGIN HIGH | + small | Temporary uplift | READ_VOUT increases |
| 3 | UV debounce | increase | Filter transients | reduced chatter |
| 4 | LOG_CFG | enable event | Post-mortem trace | entry appended |
| 5 | VOUT_COMMAND | small-step rollback | Return to nominal | no new WARN/FAULT |
if STATUS_VOUT.UV_WARN:
write MARGIN_HIGH := +ΔmV
increase UV_debounce
enable LOG_CFG
while VOUT_nominal_not_met:
write VOUT_COMMAND := current - step_mV
sleep dwell_ms
assert STATUS_WORD clean
Telemetry & Alarms
| Item | Typical update | Averaging | Effective BW | Accuracy (typ.) | Alarm debounce | Notes |
|---|---|---|---|---|---|---|
| READ_VOUT | 5–20 Hz | N=4–8 | ~1–3 Hz | ±1–2 % | 2–3 samples | Align with PG/UV thresholds |
| READ_IOUT | 5–10 Hz | N=4–8 | ~1–2 Hz | ±5–10 % | 2–3 samples | Prefer WARN early, FAULT fast |
| READ_TEMPERATURE | 1–2 Hz | N=8–16 | <0.5 Hz | ±2–3 °C | 2–3 samples | Larger window reduces chatter |
| READ_VIN | 1–10 Hz | N=4–8 | ~0.5–2 Hz | ±1–2 % | 2–3 samples | Increase during bring-up |
# ALERT# ISR (debounced by device)
on_alert():
s = read STATUS_WORD
if s != prev_s:
v = read READ_VOUT; i = read READ_IOUT; t = read READ_TEMPERATURE
log_append(type=STATUS_CHANGE, s, v, i, t, timestamp())
clear_sticky_bits()
prev_s = s
# Background poll (align with update rates)
every poll_ms:
v,i,t = read READ_VOUT, READ_IOUT, READ_TEMPERATURE
if out_of_range(v,i,t): raise WARN (debounce)
Protections
| Condition | Threshold(s) | Debounce | Primary action | Secondary | Retry / Latch | Notes |
|---|---|---|---|---|---|---|
| UV (undervoltage) | WARN > FAULT (separate) | 2–3 samples | Limit / hold ramp | Foldback if persistent | Retry with delay | Align with PG; step VOUT cautiously |
| OV (overvoltage) | WARN < FAULT (fast) | short / none | Shut or foldback | — | Latch preferred | Protect downstream ICs |
| OC (overcurrent) | WARN below FAULT | 2–3 samples | Current limit | Foldback | Retry 3–5, then latch | Thermal monitors in loop |
| Thermal | WARN / SD with hysteresis | 2–3 samples | Foldback / shut | — | Latch until cool | Give thermal priority |
state = NORMAL
on_tick():
s = read STATUS_WORD
if s.UV_FAULT or s.OV_FAULT or s.OC_FAULT or s.TEMP_SD:
state = PROTECT
start_timer()
apply current_limit()
if oc_persistent(): apply foldback()
if fatal(): latch_off()
elif s.any_WARN_debounced:
log_event(WARN, s, timestamp())
PROTECT:
if recoverable() and retries <= max_retries:
wait retry_delay_ms
retries += 1
restore_nominal()
state = NORMAL
else if not recoverable():
latch_off()
Stability & Loop Interaction
| Parameter | Lower bound | Upper bound | Effect if violated | Quick fix |
|---|---|---|---|---|
| Sense RC cutoff | ≥ 3× sample rate | ≤ 1/3 sample rate | Inner-loop pole/zero → PG chatter | Raise f_RC or narrow sample window |
| Averaging window | N=4 (min) | N=16 (typ) | Too small: noisy WARN; too large: slow FAULT | Use small for FAULT path, larger for WARN |
| UV debounce | ≥ 2 samples | ≤ 6 samples | Too low: false UV; too high: late abort | Tune with step load traces |
| Margin step ΔV | ≤ 10 mV | ≤ 2% of VOUT | Large step → undershoot/OC chain | Reduce ΔV; add dwell ≥ 1–2× update period |
| Sense lead R | short / thick | > 100 mΩ round trip | ΔV/ΔI bias vs real load point | Compensate in calc; route closer to load |
# Safe programmable stepping (margin or tuning)
window = averaging_samples() # e.g., 8
update = telemetry_update_hz() # e.g., 10 Hz
dwell = max(150, 1000*window/update) # ms
step_mV = min(10, 0.02 * VOUT_nominal_mV)
while target != current:
next = approach(current, target, step_mV)
write VOUT_COMMAND := next
sleep dwell
assert STATUS_WORD clean and READ_VOUT within ±ε
current = next
Validation Playbook
Test Matrix
| Scenario | Stimulus | Expected STATUS/ALERT | Pass criteria | Notes |
|---|---|---|---|---|
| Brown-out | VIN ramp-down then restore | UV_WARN (debounced) → UV_FAULT if severe; ALERT# pulse | Clean WARN before FAULT; recovery without chatter | Log entry with time source, no duplicates |
| Thermal run-away | High load soak to elevate T | T_WARN → TEMP_SD; action foldback | Foldback limits power; latch or timed retry as set | Thermal has priority if OC also trips |
| Short-circuit | Hard short at output | OC_FAULT immediate; ALERT#; optional retry | Limit → foldback within spec time; no oscillation | Retry N≤5 then latch is acceptable |
Timeline Alignment Log
| Signal | Ttrigger | Δt to PG | Δt to ALERT# | Δt to READ_VOUT | Δt to STATUS change | Notes |
|---|---|---|---|---|---|---|
| Load step ↑ | t0 | +x ms | +y ms | +z ms | +w ms | Use common trigger for scope & host |
| VIN dip | t0 | +x ms | +y ms | +z ms | +w ms | Document debounce settings |
| Thermal event | t0 | — | +y ms | +z ms | +w ms | Check foldback entry/exit |
# 1) Configure baseline
write VOUT_MAX, VOUT_COMMAND, TON_RISE
write UV/OV debounce, IOUT_OC WARN/FAULT, LOG_CFG
clear STATUS_WORD; note config_hash()
# 2) Step-load sweeps (up & down)
for each ΔI in plan:
apply_load_step(ΔI)
capture scope: Vout, PG, ALERT#
poll READ_VOUT/IOUT/T with timestamps
align_timebases(); compare thresholds to STATUS_*
# 3) Scenarios (A/B)
run brown_out(); run thermal_runaway(); run short_circuit()
score pass/fail per matrix; export report + logs
# Replay integrity
events = read_log_all()
events = merge_duplicates(events, min_interval_ms=1000)
assert chronological(events)
assert counts_by_type(events) match expected_matrix
replay(events) -> reconstruct STATUS timeline
compare against scope-aligned timeline (Δt within tolerance)
Layout Checklist (Copy-Ready)
- I²C: Place SDA/SCL pull-ups at host; address resistors (ADDR0/1) next to the LDO; keep I²C over calm reference copper.
- AGND–PGND: Single-point star tie; keep reference/ADC returns on AGND only.
- Remote-sense: Route VOUT_SNS± as a tight pair, no vias over hot copper; RC at LDO pins.
- Split loops: High-current output loop outside; keep sense/LOG/INT inside isolated corridor.
- LOG/INT: Add 22–100 Ω series + small RC; optional weak pull to avoid float.
- Decoupling: Input/Output MLCC close; digital vs analog caps in separate islands.
- Thermal: Copper spreaders + via array under pass FET pad; don’t cross sense pair.
- ESD/TVS: Put clamps at connector edge; return path not through reference nets.
- Silkscreen: Fix I²C address on silk; 0 Ω options for A/B/C addressing.
- Test pads: VIN/VOUT/SDA/SCL/INT/PG pin-tip pads; scope + READ_* timestamp alignment.
Mini IC-Selection Pointers
| Brand | Series / Part | Interface | VIN / VOUT Range | Step / Accuracy | ILIM (Prog) | TON / Soft-start | Telemetry Items | AEC-Q100 | Pkg / Temp | Notes |
|---|---|---|---|---|---|---|---|---|---|---|
| TI | TPS6594-Q1 (PMIC LDO) | I²C | VBAT → LDOs up to ~3.3/5.0 | mV-step (per LDO) / typ. ±2–3% | Prog limit / foldback | Prog TON / sequencing | STATUS, PG, temp; log via host | Yes (-Q1) | FC/QFN • -40~125 °C | PMIC LDO Multi-rail SoC power |
| TI | TPS65219 / TPS6521905 | I²C | 2.8–5.5 / 0.5–3.3 (LDO) | mV-step / typ. ±2–3% | Warn/Fault levels | Soft-start via regs | STATUS, PG; READ_* limited | — | QFN • -40~105 °C | PMIC LDO MCU/MPU companions |
| ST | STPMIC1 (e.g., STPMIC1A) | I²C | VIN 2.8–5.5 / LDO 0.8–3.3 | mV-step / typ. ±2–3% | Warn/Fault via map | Prog TON & order | STATUS, PG, temp flag | — | QFN • -40~105 °C | PMIC LDO STM32MPx power |
| ST | STPMIC2 / STPMIC2x | I²C | Wide / LDO multi-rails | mV-step / typ. ±2–3% | Prog thresholds | SS/TON in regs | STATUS, PG | — | QFN • -40~105 °C | More rails, richer map |
| NXP | PF5020 | I²C | 3.3–5.5 / LDO up to 3.3 | mV-step / typ. ±2–3% | Prog warn/fault | Power-up profile | STATUS, PG; temp | — | HLQFN • -40~105 °C | PMIC LDO i.MX support |
| NXP | PF1550 | I²C | USB-in / LDO 0.8–3.3 | mV-step / typ. ±2–3% | Prog levels | Soft-start via regs | STATUS, INT | — | WLCSP/QFN • -40~85 °C | Wearables/portable |
| Renesas | RAA215300 | I²C | Wide / LDO multi-rails | mV-step / typ. ±2–3% | OC warn/fault | Programmable | STATUS, PG, temp | — | FC/QFN • -40~105 °C | PMIC LDO RZ/MPU |
| Renesas | DA9063 (Dialog) | I²C | 2.8–5.5 / LDO up to 3.3 | mV-step / typ. ±2–3% | OC map | Seq & delays | STATUS, INT | — | VFBGA • -40~105 °C | Classic multi-rail PMIC |
| onsemi | FAN53880 | I²C | 2.5–5.5 / LDO multi-rails | mV-step / typ. ±2–3% | OC warn/fault | Soft-start in regs | STATUS, INT | — | WLCSP • -40~85 °C | Camera/handheld |
| onsemi | NCP6924 / NCP6922 | I²C | 3.0–5.5 / LDO 0.9–3.3 | mV-step / typ. ±2–3% | Prog thresholds | Sequencing | STATUS, PG | — | QFN • -40~105 °C | General PMIC LDOs |
| Microchip | MCP16502 | I²C | 2.7–5.5 / LDO 0.8–3.3 | mV-step / typ. ±2–3% | OC flags | TON/seq in GUI | STATUS, PG | — | QFN • -40~105 °C | PMIC LDO SAM/MPU power |
| Microchip | MIC2826 (NRND) | I²C | 2.7–5.5 / LDO multi-rails | mV-step / typ. ±2–3% | OC warn | Prog delays | STATUS pins | — | QFN • -40~85 °C | Legacy reference |
| Melexis | — | — | — | — | — | — | — | — | — | No catalog parts with I²C/PMBus-programmable LDO + telemetry found; focus is sensors/actuators. |
Submit BOM (48h) — Cross-Brand Equivalents
Get a procurement-ready shortlist in 48 hours for programmable LDOs with I²C/PMBus control, including cross-brand equivalents and function-close options when pin-to-pin is not feasible.
- Response in 48h on business days; accelerated turnarounds available for urgent cases.
- Seven brands covered: TI, ST, NXP, Renesas, onsemi, Microchip, Melexis (included when matching parts exist).
- Two-tier results: (1) fully programmable LDO first; (2) function-close with differences noted (interface, step size, temp grade).
- Risk notes: EOL/NRND screening, counterfeit risk hints, and suggested safe replacements.
- Deliverables: CSV + human-readable summary; criteria include interface, telemetry, ILIM/VOUT steps, TON profile, AEC-Q100, package and lead time.
Use your site form template below to submit requirements (target VOUT, accuracy, ILIM range, AEC-Q100 preference, package, quantities, lead-time, and BOM file).
Frequently Asked Questions
What qualifies as a “programmable LDO” for this page?
A device must expose I²C or PMBus registers that change operating behavior at run-time, such as VOUT, ILIM, soft-start, alarms, or telemetry. Parts with only Enable/PG pins are excluded. PMICs are included when their LDO rails are individually addressable through a documented register map.
How do I choose step size and accuracy for VOUT margining?
Keep ΔV steps small enough to avoid triggering UV/OV thresholds and allow the loop to settle between steps. Use the device’s nominal accuracy to set your pass/fail bands, and enforce dwell time matched to telemetry update plus averaging window to prevent false violations.
Can I program ILIM at run-time without risking false trips?
Yes, if you combine reasonable step granularity with debounce on fault paths. Avoid abrupt increases at high load and consider temperature drift and foldback behavior. Validate with step-load tests while logging STATUS bits and READ_IOUT to confirm clean entry and exit conditions.
I²C vs PMBus: when does PMBus actually help on a single rail?
PMBus adds standard command semantics, structured status words, and clearer telemetry conventions. For a single rail, PMBus helps when you want portable scripts, richer fault reporting, or reuse across vendors. If you only tweak VOUT occasionally, plain I²C with a simple map can be enough.
How fast should telemetry update to catch brown-outs?
Choose a READ_* rate that exceeds the expected event bandwidth after averaging. Faster is not always better; oversampling with large windows adds latency. A practical approach is to set an update rate several times the worst-case droop duration and confirm by scope-to-telemetry alignment.
Do I need black-box logging or is STATUS_* enough?
STATUS_* is fine for live supervision, but black-box logs help post-mortem analysis and field returns. Use a ring buffer with timestamp source and de-duplication to limit write amplification. Validate that entries persist across brown-outs and that replay matches your scope timeline.
How to avoid PG chatter after enabling averaging or debounce?
Keep WARN/FAULT thresholds separated from nominal by a margin larger than the averaged noise. Match debounce length to transient duration and ensure sense RC bandwidth does not create inner-loop artifacts. Confirm stability with step-load sweeps while monitoring PG and STATUS transitions.
Remote sense length limit before ΔV bias breaks specs?
There is no single length: the issue is round-trip resistance and coupling. Keep the pair short, tightly coupled, and away from high di/dt copper. If leads are long, model the drop, add compensation in calculations, and relocate measurement points close to the actual load pads.
What is a safe auto-retry policy for short-circuit events?
Bound the number of retries and include a cool-down delay to protect the pass device. Thermal faults should take priority over current faults. Many systems use a small fixed number of attempts then latch-off, requiring host intervention to clear the condition safely.
Which pins should always have test pads for validation?
Provide pin-tip pads for VIN, VOUT, SDA, SCL, INT/ALERT#, and PG. These allow synchronized scope captures and host logs. Keep pads close to the component pins and label them clearly to avoid probe-induced errors during bring-up and production diagnostics.
How do you score “pin-to-pin vs pin-compatible vs function-close” alternatives?
Pin-to-pin shares footprint and signals with equivalent ratings and safe limits. Pin-compatible may require minor passives or mapping changes. Function-close keeps key behaviors (VOUT/ILIM/TON, telemetry) but differs in details. We label the class and list deltas so you can assess risk quickly.
Can I reuse an MCU driver across brands?
Yes, if you abstract register access behind a small driver layer. Normalize commands such as set VOUT, read STATUS, and clear faults. Keep device-specific maps in tables and gate advanced features behind capability flags to make cross-brand swaps straightforward.
How does AEC-Q100 grading map to my validation effort?
AEC-Q100 focuses on reliability and temperature range, not full application compliance. For automotive or harsh environments, still verify protection timing, telemetry integrity, and logging under thermal soak and brown-out conditions aligned with your vehicle or system test plan.
What MOQ and lead-time should I expect for engineering lots?
Small lots vary by package and brand. Expect reels or cut-tape minimums and multi-week lead-times for specific grades. We label stock tiers and propose alternates with similar registers or telemetry to keep your bring-up on schedule while final parts are inbound.
What information helps you return a 48-hour cross-brand shortlist?
Please share target VOUT range and tolerance, ILIM window, whether I²C or PMBus is preferred, AEC-Q100 and temperature range, package constraints, quantities, and desired lead-time. A current BOM or schematic snippet accelerates matching and improves alternative quality.