PMBus 是什麼?與 I2C、SMBus 的差別完整比較(PMBus 入門)
PMBus 入門:PMBus 是什麼、用在哪裡,和 I2C、SMBus 是什麼關係?從實體層、速度、Timeout、PEC、SMBALERT# 到命令集逐項比較,附一筆實際交易拆解與 PMBus 系列學習路線。
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 匯流排上,但反過來不成立。
逐項比較
| 項目 | I2C | SMBus | PMBus |
|---|---|---|---|
| 定位 | 通用晶片間通訊 | 系統管理(電池、溫度、風扇) | 電源管理 |
| 時脈速度 | 100 kHz、400 kHz、1 MHz、3.4 MHz | 早期 10 ~ 100 kHz,新版加入 400 kHz、1 MHz | 100 kHz、400 kHz(新版支援 1 MHz) |
| 最低時脈 | 無(可以停在任何速度) | 有下限(10 kHz) | 同 SMBus |
| Timeout | 無,SCL 可以無限期拉低 | 有:SCL 低電位超過約 25 ~ 35 ms,裝置必須重置通訊 | 同 SMBus |
| 電壓門檻 | 相對於 VDD 的比例 | 固定電壓門檻,與供電電壓無關 | 同 SMBus |
| 錯誤檢查 | 只有 ACK / NACK | PEC(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
把它拆成三層來看:
| 層 | 看到的內容 |
|---|---|
| I2C | Start、位址 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 Byte | 1 Byte 資料 | OPERATION (01h)、VOUT_MODE (20h) |
| Read / Write Word | 2 Bytes 資料 | READ_IOUT (8Ch)、STATUS_WORD (79h) |
| Block Read / Write | 多個 Bytes,第一個是 Byte Count | MFR_ID (99h)、READ_EIN (86h) |
| Process Call | 先寫再讀 | QUERY (1Ah)、COEFFICIENTS (30h) |
學習路線:PMBus 系列文章
建議依照下面的順序閱讀:
第一步:基本控制
第二步:數值格式
- VOUT_MODE + VOUT_COMMAND 與 LINEAR16
- LINEAR11 與 READ_* 量測讀取
- 數值格式總覽:Linear、VID、Direct
- COEFFICIENTS (30h):Direct 格式係數
第三步:故障與除錯
第四步:進階
第五步:動手實作
所有命令碼的速查,請見 PMBus 命令總表;需要換算數值或計算 PEC,可以用 PMBus 數值換算工具。
結論
- PMBus 是電源管理專用的通訊標準,建立在 SMBus 和 I2C 之上。
- I2C 負責傳輸、SMBus 負責可靠性與交易格式、PMBus 負責命令的意義。
- SMBus / PMBus 比 I2C 多了 Timeout、PEC、SMBALERT#、固定電壓門檻。
- PMBus 定義了完整的電源命令集與 LINEAR11 / LINEAR16 / Direct 數值格式。
- PMBus 裝置可以接在 I2C 匯流排上,但主控端要注意 Timeout 與 PEC。