PMBus 系列約 4 分鐘

PMBus 是什麼?與 I2C、SMBus 的差別完整比較(PMBus 入門)

PMBus 入門:PMBus 是什麼、用在哪裡,和 I2C、SMBus 是什麼關係?從實體層、速度、Timeout、PEC、SMBALERT# 到命令集逐項比較,附一筆實際交易拆解與 PMBus 系列學習路線。

📘 參考規格書PMBus · PMBus Power System Management Protocol Specification Part I / Part II原廠文件 ↗

PMBus 是什麼

PMBus 是一套讓主控端(BMC、MCU、測試工具)和電源溝通的標準語言。透過 PMBus,主控端可以:

  • 控制:開關機、調整輸出電壓、設定保護門檻
  • 監控:讀取輸入 / 輸出電壓、電流、溫度、功率、風扇轉速
  • 診斷:讀取故障狀態、記錄異常、清除故障

PMBus 由 **SMIF(System Management Interface Forum)**維護,2005 年發表第一版,之後陸續推出 1.1、1.2、1.3 等版本。規格分成兩部分:

規格內容
Part I實體層與傳輸:電氣特性、時序、與 SMBus 的關係、CONTROL 與 SMBALERT# 等訊號
Part II命令語言:每個命令碼的意義、資料格式(Linear、Direct、VID)、狀態位元

常見的應用

應用例子
伺服器電源CRPS 電源供應器,由主機板 BMC 監控
板載電源POL(Point-of-Load)DC-DC 轉換器
處理器供電CPU / GPU 的 VRM 控制器
熱插拔與電源監控Hot-Swap 控制器、電流 / 功率監控 IC
通訊與工控電信機房電源、工業電源模組

三層關係:I2C → SMBus → PMBus

flowchart BT
    I["I2C<br>實體層 + 基本傳輸<br>SDA / SCL、Start / Stop、位址、ACK"]
    S["SMBus<br>可靠性與交易格式<br>Timeout、PEC、SMBALERT#、Read/Write Byte/Word、Block"]
    P["PMBus<br>電源專用命令集<br>OPERATION、READ_VOUT、STATUS_WORD、LINEAR11…"]
    I --> S --> P
  • I2C:只定義「怎麼把位元組送過去」,沒有規定位元組代表什麼。
  • SMBus:在 I2C 上加了可靠性機制(Timeout、PEC),並定義標準的交易格式(Read Byte、Write Word、Block Read……)。
  • PMBus:在 SMBus 上定義電源專用的命令集:01h 是開關機、8Bh 是讀輸出電壓,以及數值格式(LINEAR11、LINEAR16、Direct)。

所以 PMBus 裝置一定是 SMBus 裝置,也一定能接在 I2C 匯流排上,但反過來不成立。

逐項比較

項目I2CSMBusPMBus
定位通用晶片間通訊系統管理(電池、溫度、風扇)電源管理
時脈速度100 kHz、400 kHz、1 MHz、3.4 MHz早期 10 ~ 100 kHz,新版加入 400 kHz、1 MHz100 kHz、400 kHz(新版支援 1 MHz)
最低時脈無(可以停在任何速度)有下限(10 kHz)同 SMBus
Timeout無,SCL 可以無限期拉低有:SCL 低電位超過約 25 ~ 35 ms,裝置必須重置通訊同 SMBus
電壓門檻相對於 VDD 的比例固定電壓門檻,與供電電壓無關同 SMBus
錯誤檢查只有 ACK / NACKPEC(CRC-8,選配)同 SMBus,電源應用中很常啟用
中斷通知無SMBALERT# + ARA(選配)同 SMBus,搭配 STATUS 命令使用
交易格式未定義Send/Receive Byte、Read/Write Byte/Word、Block、Process Call使用 SMBus 的交易格式
命令意義未定義少數通用定義完整定義數百個電源命令碼
數值格式未定義未定義LINEAR11、LINEAR16、Direct、VID
額外訊號無SMBALERT#SMBALERT#、CONTROL(開關機腳位)

實際看一筆 PMBus 交易

以讀取輸出電壓 READ_VOUT (8Bh) 為例(位址 0x58、啟用 PEC):

S | B0h | A | 8Bh | A | Sr | B1h | A | 00h | A | 18h | A | PEC | NA | P

把它拆成三層來看:

層看到的內容
I2CStart、位址 0x58 + 寫入、一個位元組、Repeated Start、位址 + 讀取、三個位元組、NACK、Stop
SMBus這是一筆 Read Word 交易,最後一個位元組是 PEC
PMBus命令 8Bh 是 READ_VOUT,資料 1800h 要用 LINEAR16 搭配 VOUT_MODE 解讀;若 N = −9,電壓就是 12.0 V

同一串位元組,I2C 只看得到「傳了幾個 Byte」,SMBus 看得出「交易類型和校驗」,PMBus 才知道它代表 12 V。

PMBus 常用的交易類型

交易類型用途範例命令
Send Byte只送命令碼,沒有資料CLEAR_FAULTS (03h)
Read / Write Byte1 Byte 資料OPERATION (01h)、VOUT_MODE (20h)
Read / Write Word2 Bytes 資料READ_IOUT (8Ch)、STATUS_WORD (79h)
Block Read / Write多個 Bytes,第一個是 Byte CountMFR_ID (99h)、READ_EIN (86h)
Process Call先寫再讀QUERY (1Ah)、COEFFICIENTS (30h)

學習路線:PMBus 系列文章

建議依照下面的順序閱讀:

第一步:基本控制

  1. OPERATION (01h):開關機與 Margin 測試
  2. ON_OFF_CONFIG (02h):開機條件與 CONTROL 腳位

第二步:數值格式

  1. VOUT_MODE + VOUT_COMMAND 與 LINEAR16
  2. LINEAR11 與 READ_* 量測讀取
  3. 數值格式總覽:Linear、VID、Direct
  4. COEFFICIENTS (30h):Direct 格式係數

第三步:故障與除錯

  1. STATUS_WORD (79h):故障除錯的第一步
  2. CLEAR_FAULTS (03h):清除故障與重新開機
  3. SMBALERT_MASK (1Bh):屏蔽特定告警

第四步:進階

  1. PEC 校驗完整解析
  2. QUERY (1Ah):查詢支援的命令
  3. READ_EIN / READ_EOUT:平均功率與效率

第五步:動手實作

  1. 用 Python / Linux 讀取 PMBus 電源
  2. PMBus 常見問題除錯

所有命令碼的速查,請見 PMBus 命令總表;需要換算數值或計算 PEC,可以用 PMBus 數值換算工具。

結論

  • PMBus 是電源管理專用的通訊標準,建立在 SMBus 和 I2C 之上。
  • I2C 負責傳輸、SMBus 負責可靠性與交易格式、PMBus 負責命令的意義。
  • SMBus / PMBus 比 I2C 多了 Timeout、PEC、SMBALERT#、固定電壓門檻。
  • PMBus 定義了完整的電源命令集與 LINEAR11 / LINEAR16 / Direct 數值格式。
  • PMBus 裝置可以接在 I2C 匯流排上,但主控端要注意 Timeout 與 PEC。