Back

PMBus

Loading views...

PMBus

Category: Power Management

Overview

PMBus (Power Management Bus) is an open-standard protocol extension of SMBus/I2C specifically for digital management of power supplies, voltage regulators, and power modules. It enables reading telemetry, setting voltages, enabling/disabling outputs, and configuring faults over a 2-wire bus.


1. Theory & Fundamentals

  • Built on top of SMBus 2.0 (I2C-compatible)
  • Defines command codes for power supply management
  • Telemetry: Read voltage, current, temperature, power, duty cycle
  • Control: Set output voltage, current limit, enable/disable output
  • Faults: Configure and read over-voltage, over-current, over-temperature
  • Speed: 100 kHz – 400 kHz
  • Addressing: Up to 8 devices per bus (with address pins)

2. Frame / Packet Structure

PMBus command structure (SMBus transactions):
  Write Byte:   S | ADDR W | A | CMD | A | DATA | A | P
  Read Byte:    S | ADDR W | A | CMD | A | Sr | ADDR R | A | DATA | NA | P
  Write Word:   CMD | DATA_LOW | DATA_HIGH
  Read Word:    returns 2 bytes (Linear11 or ULINEAR16 format)

Linear11 format (2 bytes):
  [15:11] = 5-bit signed exponent N
  [10:0]  = 11-bit signed mantissa Y
  Value = Y × 2^N

Example: VOUT_COMMAND = 0x21
  Write word to set output voltage
  ULINEAR16 format: voltage = value × 2^exponent

3. Protocol Mechanics

  • Command codes: 0x00–0xFF; lower codes standard, upper vendor-specific
  • Page: Multi-phase converters use PAGE command to select output
  • Group protocol: Change multiple regulators simultaneously
  • Fault response: SMBALERT# line or polling STATUS registers
  • Coefficients: Some devices use m/b/R coefficients for scaling

4. Hardware Implementation

  • Common PMBus ICs: LTC3880, TPS40425, IR38064, ISL91302
  • I2C interface: Same 2-wire SDA/SCL; 4.7 kΩ pull-ups
  • PMBUS_CNTRL pin: Hardware enable (some devices)
  • SMBAlert# pin: Open-drain fault interrupt
  • Tools: LTpowerPlay (Analog Devices), Fusion Digital Power Designer (TI)

5. Register-Level / Configuration

// Read output voltage (READ_VOUT, cmd 0x8B)
uint16_t PMBus_ReadVout(uint8_t addr) {
    return SMBus_ReadWord(addr, 0x8B);
}
float PMBus_Linear16ToFloat(uint16_t raw, int8_t exp) {
    return raw * powf(2.0f, exp);
}
// Set output voltage (VOUT_COMMAND, cmd 0x21)
void PMBus_SetVout(uint8_t addr, float voltage) {
    int8_t exp = SMBus_ReadByte(addr, 0x20); // VOUT_MODE
    exp = -(exp & 0x1F); // 2's complement lower 5 bits
    uint16_t raw = (uint16_t)(voltage / powf(2.0f, exp));
    SMBus_WriteWord(addr, 0x21, raw);
}

6. Driver / Software Development

// Read telemetry: voltage, current, temperature
float vout = PMBus_ReadLinear11(addr, 0x8B); // READ_VOUT
float iout = PMBus_ReadLinear11(addr, 0x8C); // READ_IOUT
float temp = PMBus_ReadLinear11(addr, 0x8D); // READ_TEMPERATURE_1
float pout = PMBus_ReadLinear11(addr, 0x96); // READ_POUT

// Check fault status
uint8_t status_word_hi = PMBus_ReadByte(addr, 0x79);
uint8_t status_word_lo = PMBus_ReadByte(addr, 0x78);
// Bit 13 = OC_FAULT, bit 12 = UC_FAULT, etc.

7. Debugging & Testing

  • LTpowerPlay / Fusion Digital Power Designer: GUI configuration
  • Logic analyzer with PMBus/SMBus decode
  • Common issues: Linear11 scaling wrong; address collision; SMBALERT# not handled
  • Verify VOUT_MODE before interpreting VOUT readings
  • Check PEC (Packet Error Code) if enabled

8. Real-World Applications

  1. Server power supply telemetry and control
  2. Multi-rail PCB power management
  3. Data center power monitoring
  4. Solar inverter control
  5. Industrial motor drive power modules

9. Advanced Topics & Edge Cases

  • PMBus 1.3: Adds AVSBus (adaptive voltage scaling)
  • SVID (Serial VID): Intel/AMD CPU power management (proprietary PMBus variant)
  • AVS: Adaptive Voltage Scaling for processors
  • PMBus vs I2C power controllers: PMBus is standardized; I2C custom registers
  • Phase interleaving: PMBus manages timing of multi-phase converters

10. Standards & Variants

Standard Notes
PMBus 1.0 Original spec
PMBus 1.1 Zone commands
PMBus 1.2 Extended commands
PMBus 1.3 AVSBus integration

💡 Practical Examples

Ex 1: Read LTC3880 output voltage: PMBus_ReadLinear11(0x40, 0x8B) → 1.002 V

Ex 2: Set voltage: PMBusSetVout(0x40, 1.0f) → sets VOUTCOMMAND

Ex 3: Fault check: Poll STATUSWORD; if bit set, read STATUSVOUT / STATUS_IOUT for detail.


🧪 Practice Questions

Beginner: 1) PMBus vs I2C? 2) What can you read? 3) What is Linear11? 4) PMBus address range? 5) What is SMBALERT#?

Intermediate: 1) Linear11 decode formula. 2) Set output voltage. 3) Fault handler. 4) PAGE command use. 5) Coefficient-based vs Linear11.

Advanced: 1) Multi-rail telemetry logger. 2) Adaptive voltage scaling implementation. 3) PMBus fault injection test. 4) Multi-phase converter management. 5) PMBus over RTOS with mutex.


Checklist

  • [ ] Understand PMBus command structure
  • [ ] Read output voltage with Linear11 decode
  • [ ] Read current, temperature, power
  • [ ] Set output voltage via VOUT_COMMAND
  • [ ] Handle SMBALERT# fault interrupt
  • [ ] Parse STATUS_WORD fault bits
  • [ ] Use LTpowerPlay for configuration
  • [ ] Debug with logic analyzer
  • [ ] Implement multi-rail monitoring
  • [ ] Configure fault thresholds