Live demo — data resets daily at 03:00 UTC. Nothing you enter is saved. Server UI →

ESH10000533 - M.2 PSU Module

Overview

The ESH10000533 is a high-performance power supply module featuring dual-channel power management based on the Linear Technology LTC3889 PMBus controller, designed for M.2 device testing and validation.

Description

The M.2 PSU module provides two independent, precision-controlled DC/DC converter channels with comprehensive PMBus monitoring and control capabilities. Built around the LTC3889 power management IC, this module offers real-time telemetry, fault protection, calibration support, and temperature monitoring for demanding power delivery applications.

Key Features:

  • Dual Independent Power Channels (CH1, CH2): Precision voltage and current control

    • Maximum 60W per channel
    • Programmable output voltage via PMBus VOUT_COMMAND
    • Configurable voltage and current limits
    • Margin high/low voltage support
    • Soft-start and shutdown sequencing
  • Comprehensive Fault Protection: Multi-level protection with configurable responses

    • Output overvoltage/undervoltage fault and warning limits
    • Output overcurrent protection
    • Input overvoltage/undervoltage monitoring
    • Overtemperature and undertemperature protection
    • TON_MAX fault detection for startup monitoring
  • PMBus Monitoring: Real-time telemetry for all critical parameters

    • Output voltage (READ_VOUT)
    • Output current (READ_IOUT)
    • Input voltage (READ_VIN)
    • Input current (READ_IIN)
    • Temperature (READ_TEMPERATURE_1, READ_TEMPERATURE_2)
    • Power output (READ_POUT)
    • Efficiency calculations
  • Calibration Support: Per-channel current sense calibration

    • IOUT_CAL_GAIN: Current sense resistor calibration (typical 2mΩ)
    • MFR_IOUT_CAL_GAIN_TC: Temperature coefficient compensation (typical 50 ppm/°C)
    • MFR_IIN_CAL_GAIN: Input current calibration
    • Persistent calibration storage by product ID, revision, and serial number
    • User-accessible CALIBRATION channel for reading/updating calibration data
  • Temperature Monitoring: Dual-sensor temperature reporting with ITempReporter interface

    • Warning threshold: 60°C
    • Error threshold: 90°C
    • Automatic temperature invalidation every 10 seconds
    • Reports maximum temperature across all sensors
  • Status and Fault Reporting: Comprehensive status registers per PMBus specification

    • STATUS_BYTE, STATUS_WORD: Overall unit status
    • STATUS_VOUT, STATUS_IOUT: Per-channel output status
    • STATUS_INPUT: Input voltage/current status
    • STATUS_TEMPERATURE: Temperature status
    • STATUS_CML: Communication and memory status
    • STATUS_MFR_SPECIFIC: Manufacturer-specific status

Hardware Details

Power Management Controller:

  • Chip: Linear Technology LTC3889
  • I²C Address: 0x4F (7-bit)
  • Channels: 2 independent DC/DC converters (CH1, CH2)
  • Communication: PMBus over I²C
  • Silicon Revision: 2.0

Power Specifications:

  • Maximum Power per Channel: 60W
  • Switching Frequency: Configurable via FREQUENCY_SWITCH register
  • Voltage Protection Levels (configurable):
    • Overvoltage Fault Limit: +20% of nominal
    • Overvoltage Warning Limit: +10% of nominal
    • Margin High: +5% of nominal
    • Margin Low: -5% of nominal
    • Undervoltage Warning Limit: -10% of nominal
    • Undervoltage Fault Limit: -20% of nominal
    • Power Good On: -10% of nominal
    • Power Good Off: -20% of nominal

Current Sensing:

  • Sense Resistor: External (typically 0.1mΩ for input monitoring)
  • Calibration: Per-channel gain and temperature coefficient
  • Overcurrent Warning Limit: Configurable (default 5A)

Channel Naming Convention

All channels follow the naming pattern: {ModuleIndex}.ESH10000533.{Address}.{ChannelName}

Where:

  • {ModuleIndex} is the position of the module in the system (e.g., 0, 1, 2...)
  • ESH10000533 is the module type identifier
  • {Address} is the PMBus device address (0x4F)
  • {ChannelName} is the specific PMBus register/command name

Examples:

  • Global register: 0.ESH10000533.0x4F.VIN_ON
  • CH1 register: 0.ESH10000533.0x4F.CH1.VOUT_COMMAND
  • CH2 register: 0.ESH10000533.0x4F.CH2.READ_IOUT
  • Calibration: 0.ESH10000533.CALIBRATION

User-Accessible Channels

The module exposes approximately ~100 PMBus registers as user-accessible channels, organized into three categories:

Global Channels (Applied to entire PSU)

Channel Name Code Access Description
PAGE 0x00 RW Channel/page selector (0=CH1, 1=CH2)
CAPABILITY 0x19 RO PMBus protocol capabilities
FREQUENCY_SWITCH 0x33 RW Switching frequency (kHz)
VIN_ON 0x35 RW Input voltage threshold to enable conversion (V)
VIN_OFF 0x36 RW Input voltage threshold to disable conversion (V)
VIN_OV_FAULT_LIMIT 0x55 RW Input overvoltage fault limit (V)
VIN_UV_WARN_LIMIT 0x58 RW Input undervoltage warning limit (V)
IIN_OC_WARN_LIMIT 0x5D RW Input overcurrent warning limit (A)
STATUS_INPUT 0x7C RO Input voltage/current status register
STATUS_CML 0x7E RO Communication and memory status
READ_VIN 0x88 RO Input voltage measurement (V)
READ_IIN 0x89 RO Input current measurement (A)
READ_TEMPERATURE_1 0x8D RO Temperature sensor 1 reading (°C)
READ_TEMPERATURE_2 0x8E RO Temperature sensor 2 reading (°C)
MFR_IIN_CAL_GAIN Mfr RW Input current calibration gain (mΩ)
ProjectConfig Special WO PMBus project configuration (Base64 encoded)
SET_TO_RAM Special WO Apply configuration to RAM (trigger)
CLEAR_ERRORS Special WO Clear fault conditions (trigger)

Per-Channel Registers (CH1 and CH2)

Each channel (CH1, CH2) has the following registers:

Control Registers:

Channel Name Code Access Description
OPERATION 0x01 RW Operating mode (On/Off, Margin High/Low)
ON_OFF_CONFIG 0x02 RW CONTROL pin and PMBus command settings
VOUT_MODE 0x20 RO Output voltage data format (L16)
VOUT_COMMAND 0x21 RW Output voltage setpoint (V)
VOUT_MAX 0x24 RW Maximum allowed output voltage (V)
VOUT_MARGIN_HIGH 0x25 RW Margin high voltage setting (V)
VOUT_MARGIN_LOW 0x26 RW Margin low voltage setting (V)
VOUT_TRANSITION_RATE 0x27 RW Voltage slew rate (V/ms)

Current Configuration:

Channel Name Code Access Description
IOUT_CAL_GAIN 0x38 RW Current sense resistor value (mΩ)
IOUT_OC_FAULT_LIMIT 0x46 RW Output overcurrent fault limit (A)
IOUT_OC_FAULT_RESPONSE 0x47 RW Overcurrent fault action
IOUT_OC_WARN_LIMIT 0x4A RW Output overcurrent warning limit (A)
MFR_IOUT_CAL_GAIN_TC Mfr RW Current cal temperature coefficient (ppm/°C)

Voltage Protection:

Channel Name Code Access Description
VOUT_OV_FAULT_LIMIT 0x40 RW Output overvoltage fault limit (V)
VOUT_OV_FAULT_RESPONSE 0x41 RW Overvoltage fault action
VOUT_OV_WARN_LIMIT 0x42 RW Output overvoltage warning limit (V)
VOUT_UV_WARN_LIMIT 0x43 RW Output undervoltage warning limit (V)
VOUT_UV_FAULT_LIMIT 0x44 RW Output undervoltage fault limit (V)
VOUT_UV_FAULT_RESPONSE 0x45 RW Undervoltage fault action

Temperature Protection:

Channel Name Code Access Description
OT_FAULT_LIMIT 0x4F RW Overtemperature fault limit (°C)
OT_FAULT_RESPONSE 0x50 RW Overtemperature fault action
OT_WARN_LIMIT 0x51 RW Overtemperature warning limit (°C)
UT_FAULT_LIMIT 0x53 RW Undertemperature fault limit (°C)
UT_FAULT_RESPONSE 0x54 RW Undertemperature fault action

Timing Configuration:

Channel Name Code Access Description
TON_DELAY 0x60 RW Turn-on delay (ms)
TON_RISE 0x61 RW Turn-on rise time (ms)
TON_MAX_FAULT_LIMIT 0x62 RW Maximum startup time before fault (ms)
TON_MAX_FAULT_RESPONSE 0x63 RW TON_MAX fault action
TOFF_DELAY 0x64 RW Turn-off delay (ms)
TOFF_FALL 0x65 RW Turn-off fall time (ms)
TOFF_MAX_WARN_LIMIT 0x66 RW Maximum shutdown decay time (ms)

Status Registers (Read-Only):

Channel Name Code Access Description
STATUS_BYTE 0x78 RO One-byte fault summary
STATUS_WORD 0x79 RO Two-byte fault summary
STATUS_VOUT 0x7A RO Output voltage fault/warning status
STATUS_IOUT 0x7B RO Output current fault/warning status
STATUS_TEMPERATURE 0x7D RO Temperature fault/warning status
STATUS_MFR_SPECIFIC 0x80 RO Manufacturer-specific status

Telemetry Registers (Read-Only):

Channel Name Code Access Description
READ_VOUT 0x8B RO Output voltage measurement (V)
READ_IOUT 0x8C RO Output current measurement (A)
READ_POUT 0x96 RO Output power measurement (W)
READ_DUTY_CYCLE 0x94 RO PWM duty cycle (%)

Special Channels

Channel Name Type Access Description
CALIBRATION Calibration RW Module calibration table (Base64 encoded)

Total User-Accessible Channels: ~100 (38 global + ~59 per channel × 2 channels + special channels)

Channel Configuration

Setting Output Voltage

The primary use case is controlling output voltage via VOUT_COMMAND:

// Set CH1 output to 3.3V
SetValues(
    new[] { "0.ESH10000533.0x4F.CH1.VOUT_COMMAND" },
    new[] { "3.3" }
);

// Set CH2 output to 5.0V
SetValues(
    new[] { "0.ESH10000533.0x4F.CH2.VOUT_COMMAND" },
    new[] { "5.0" }
);

Reading Telemetry

Monitor voltage, current, and power output:

// Read CH1 output voltage and current
string[] values = GetValues(new[] {
    "0.ESH10000533.0x4F.CH1.READ_VOUT",
    "0.ESH10000533.0x4F.CH1.READ_IOUT",
    "0.ESH10000533.0x4F.CH1.READ_POUT"
});

double voltage = double.Parse(values[0]);  // Volts
double current = double.Parse(values[1]);  // Amps
double power = double.Parse(values[2]);    // Watts

Enabling/Disabling Channels

Control channel operation via OPERATION register:

// Turn CH1 ON (0x80 = On, immediate)
SetValues(
    new[] { "0.ESH10000533.0x4F.CH1.OPERATION" },
    new[] { "0x80" }
);

// Turn CH1 OFF (0x00 = Off, immediate)
SetValues(
    new[] { "0.ESH10000533.0x4F.CH1.OPERATION" },
    new[] { "0x00" }
);

Configuring Protection Limits

Set overcurrent protection:

// Set CH1 overcurrent warning to 4.5A
SetValues(
    new[] { "0.ESH10000533.0x4F.CH1.IOUT_OC_WARN_LIMIT" },
    new[] { "4.5" }
);

// Set CH1 overvoltage fault to 3.6V (for 3.3V nominal)
SetValues(
    new[] { "0.ESH10000533.0x4F.CH1.VOUT_OV_FAULT_LIMIT" },
    new[] { "3.6" }
);

PMBus Register Access

PMBus registers use Linear11 (L11) or Linear16 (L16) data formats. The module handles conversion automatically:

  • L16: Used for VOUT registers (voltage)
  • L11: Used for most other registers (current, power, temperature)
  • Reg: Binary register values (for control/status registers)

Calibration Channel

The CALIBRATION channel provides access to persistent calibration data:

Calibration Table Structure:

// Default calibration values:
CH1.IOUT_CAL_GAIN = 2.000 mΩ           // Current sense resistor
CH2.IOUT_CAL_GAIN = 2.000 mΩ
CH1.MFR_IOUT_CAL_GAIN_TC = 50 ppm/°C   // Temperature coefficient
CH2.MFR_IOUT_CAL_GAIN_TC = 50 ppm/°C
MFR_IIN_CAL_GAIN = 2.000 mΩ            // Input current sense
CH1.IOUT_OC_WARN_LIMIT = 5.000 A       // Overcurrent warning
CH2.IOUT_OC_WARN_LIMIT = 5.000 A

Reading Calibration Data:

string[] values = GetValues(new[] { "0.ESH10000533.CALIBRATION" });
CalibrationTable cal = SerializableHelpers.CreateFromBase64<CalibrationTable>(values[0]);

foreach (var row in cal.CalData)
{
    Console.WriteLine($"{row.Key}: Gain={row.Gain}, Offset={row.Offset}");
}

Updating Calibration Data:

// Modify only gain and offset values in the table
cal["CH1.IOUT_CAL_GAIN"].Gain = 2.05;  // Adjusted for actual resistor value
cal["CH1.MFR_IOUT_CAL_GAIN_TC"].Gain = 48;  // Measured temperature coefficient

// Write back
string base64Cal = SerializableHelpers.AsBase64(cal);
SetValues(
    new[] { "0.ESH10000533.CALIBRATION" },
    new[] { base64Cal }
);

Important: The module automatically applies calibration values to the hardware registers on startup and after calibration updates.

Internal Channels (Not User-Accessible)

The following PMBus registers are marked as HIDDEN and not exposed to users:

  • CLEAR_FAULTS (0x03): Use CLEAR_ERRORS special channel instead
  • WRITE_PROTECT (0x10): Internal write protection control
  • STORE_USER_ALL (0x15): EEPROM storage
  • RESTORE_USER_ALL (0x16): EEPROM restore
  • SMBALERT_MASK (0x1B): Alert masking
  • Various manufacturer-specific internal registers

These channels are used internally by the module for configuration and fault management.

Programming Interface

Basic Power Output Control:

// Set CH1 to 1.8V, CH2 to 3.3V
SetValues(
    new[] {
        "0.ESH10000533.0x4F.CH1.VOUT_COMMAND",
        "0.ESH10000533.0x4F.CH2.VOUT_COMMAND"
    },
    new[] { "1.8", "3.3" }
);

// Enable both channels
SetValues(
    new[] {
        "0.ESH10000533.0x4F.CH1.OPERATION",
        "0.ESH10000533.0x4F.CH2.OPERATION"
    },
    new[] { "0x80", "0x80" }  // On, immediate
);

Comprehensive Monitoring:

// Read all telemetry for CH1
string[] ch1Telemetry = GetValues(new[] {
    "0.ESH10000533.0x4F.CH1.READ_VOUT",
    "0.ESH10000533.0x4F.CH1.READ_IOUT",
    "0.ESH10000533.0x4F.CH1.READ_POUT",
    "0.ESH10000533.0x4F.READ_TEMPERATURE_1",
    "0.ESH10000533.0x4F.READ_VIN",
    "0.ESH10000533.0x4F.READ_IIN"
});

double vout = double.Parse(ch1Telemetry[0]);
double iout = double.Parse(ch1Telemetry[1]);
double pout = double.Parse(ch1Telemetry[2]);
double temp = double.Parse(ch1Telemetry[3]);
double vin = double.Parse(ch1Telemetry[4]);
double iin = double.Parse(ch1Telemetry[5]);

Console.WriteLine($"CH1: {vout}V @ {iout}A = {pout}W, Temp: {temp}°C");
Console.WriteLine($"Input: {vin}V @ {iin}A");

Fault Status Checking:

// Check for faults
string[] status = GetValues(new[] {
    "0.ESH10000533.0x4F.CH1.STATUS_WORD",
    "0.ESH10000533.0x4F.CH1.STATUS_VOUT",
    "0.ESH10000533.0x4F.CH1.STATUS_IOUT"
});

// Parse status registers (implementation depends on PMBus handler)
ushort statusWord = ushort.Parse(status[0]);
byte statusVout = byte.Parse(status[1]);
byte statusIout = byte.Parse(status[2]);

if ((statusWord & 0x0010) != 0)  // VOUT fault bit
    Console.WriteLine("Output voltage fault detected!");
if ((statusWord & 0x0080) != 0)  // IOUT/POUT fault bit
    Console.WriteLine("Output current fault detected!");

Clearing Faults:

// Clear all fault conditions
SetValues(
    new[] { "0.ESH10000533.0x4F.CLEAR_ERRORS" },
    new[] { Guid.NewGuid().ToString() }  // Trigger channel
);

Margin Testing:

// Configure margin high/low for CH1 (3.3V nominal)
SetValues(
    new[] {
        "0.ESH10000533.0x4F.CH1.VOUT_COMMAND",
        "0.ESH10000533.0x4F.CH1.VOUT_MARGIN_HIGH",
        "0.ESH10000533.0x4F.CH1.VOUT_MARGIN_LOW"
    },
    new[] { "3.3", "3.465", "3.135" }  // ±5%
);

// Switch to margin high
SetValues(
    new[] { "0.ESH10000533.0x4F.CH1.OPERATION" },
    new[] { "0x98" }  // On, margin high
);

// Switch to margin low
SetValues(
    new[] { "0.ESH10000533.0x4F.CH1.OPERATION" },
    new[] { "0xA8" }  // On, margin low
);

// Return to normal
SetValues(
    new[] { "0.ESH10000533.0x4F.CH1.OPERATION" },
    new[] { "0x80" }  // On, immediate
);

Error Handling

The module provides comprehensive error detection and reporting:

Voltage Faults:

  • Overvoltage fault (VOUT > VOUT_OV_FAULT_LIMIT)
  • Overvoltage warning (VOUT > VOUT_OV_WARN_LIMIT)
  • Undervoltage warning (VOUT < VOUT_UV_WARN_LIMIT)
  • Undervoltage fault (VOUT < VOUT_UV_FAULT_LIMIT)

Current Faults:

  • Overcurrent fault (IOUT > IOUT_OC_FAULT_LIMIT)
  • Overcurrent warning (IOUT > IOUT_OC_WARN_LIMIT)

Temperature Faults:

  • Overtemperature fault (Temp > OT_FAULT_LIMIT)
  • Overtemperature warning (Temp > OT_WARN_LIMIT)
  • Undertemperature fault (Temp < UT_FAULT_LIMIT)
  • Module-level warnings at 60°C, errors at 90°C

Input Faults:

  • Input overvoltage fault (VIN > VIN_OV_FAULT_LIMIT)
  • Input undervoltage warning (VIN < VIN_UV_WARN_LIMIT)
  • Input overcurrent warning (IIN > IIN_OC_WARN_LIMIT)

Startup Faults:

  • TON_MAX fault: Output failed to reach regulation within TON_MAX_FAULT_LIMIT

Fault Responses: Each fault type has a configurable response register that determines the action:

  • Ignore (continue operating)
  • Shutdown (disable output)
  • Shutdown and retry
  • Shutdown and latch off (requires CLEAR_ERRORS to recover)

Best Practices

  1. Always check input voltage before enabling outputs: Verify VIN is within VIN_ON and VIN_OFF thresholds
  2. Set appropriate protection limits: Configure VOUT_OV_FAULT_LIMIT and IOUT_OC_WARN_LIMIT for your application
  3. Monitor STATUS registers: Regularly poll STATUS_WORD and STATUS_VOUT/IOUT for fault detection
  4. Use calibration for accuracy: Load and verify calibration data for precise current measurements
  5. Clear faults after configuration changes: Use CLEAR_ERRORS after modifying limits to reset fault latches
  6. Apply configuration to RAM: After loading project config, trigger SET_TO_RAM to activate settings
  7. Monitor temperature: The module reports max temperature across both sensors; ensure adequate cooling
  8. Use margin testing for validation: Utilize VOUT_MARGIN_HIGH/LOW for power supply acceptance testing
  9. Implement proper sequencing: Use TON_DELAY and TOFF_DELAY for multi-rail power sequencing
  10. Handle PMBus exceptions: PMBus operations can fail; implement retry logic with timeouts

Module Initialization Sequence

On Reset(), the module performs the following initialization:

  1. Call base.Reset() to clear channels and initialize PMBus handler
  2. Load project configuration file: psu_r0.2.proj
    • Contains LTC3889 chip configuration
    • Defines register default values
    • Configures CH1 and CH2 pages
  3. Write project configuration to ProjectConfig channel (Base64 encoded)
  4. Trigger SET_TO_RAM to apply configuration to device RAM
  5. Clear any existing fault conditions via CLEAR_ERRORS
  6. Load calibration table from persistent storage
    • Create default calibration if none exists
    • Default values: 2mΩ sense resistors, 50ppm/°C TC, 5A OC warning
  7. Apply calibration values to hardware registers
  8. Create CALIBRATION channel for user access to calibration data

Post-Reset State:

  • All PMBus registers accessible as channels
  • Device configured per project file defaults
  • Calibration factors loaded and applied
  • Outputs disabled (require OPERATION command to enable)
  • Faults cleared and ready for operation

Temperature Monitoring

The module implements the ITempReporter interface for system-level temperature monitoring:

Temperature Reporting:

  • Device Name: PSU1, PSU2, etc. (based on module instance)
  • Warning Threshold: 60°C
  • Error Threshold: 90°C
  • Update Interval: 10 seconds (via Invalidate() method)

Temperature Sources:

  • READ_TEMPERATURE_1: Primary temperature sensor
  • READ_TEMPERATURE_2: Secondary temperature sensor
  • Reports the maximum of all temperature sensors

Integration: Temperature data is automatically reported to the system thermal management subsystem for monitoring and protection.

Revision History

  • ESH10000533: Current production version
    • Based on Linear Technology LTC3889 PMBus controller
    • Dual independent channels (CH1, CH2)
    • Maximum 60W per channel
    • I²C address: 0x4F
    • Silicon revision: 2.0
    • Project file: psu_r0.2.proj
    • Calibration support for current sensing
    • Temperature monitoring and reporting
    • Comprehensive PMBus register access (~100 channels)
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.