主題 · 共 16 篇
PMBus
PMBus 是伺服器電源、POL、VRM 等電源產品的標準管理介面。這個系列從入門開始,逐一解讀規格書中的常用命令與數值格式,最後用 Python 實作讀取工具。建議依照下面的順序閱讀。
入門
- 1PMBus 是什麼?與 I2C、SMBus 的差別完整比較(PMBus 入門)
PMBus 入門:PMBus 是什麼、用在哪裡,和 I2C、SMBus 是什麼關係?從實體層、速度、Timeout、PEC、SMBALERT# 到命令集逐項比較,附一筆實際交易拆解與 PMBus 系列學習路線。
- 2PMBus 命令總表:00h ~ FFh 命令碼、交易類型與資料格式速查
PMBus 標準命令碼完整速查表(00h ~ FFh):每個命令的名稱、SMBus 交易類型(Byte / Word / Block / Process Call)與資料格式(LINEAR11、LINEAR16、Direct、位元欄位),依控制、輸出電壓、保護門檻、狀態、量測、廠商資訊分類整理。
基本控制
- 3PMBus 指令解析:OPERATION (01h) 開關機與 Margin 測試
PMBus OPERATION (01h) 命令逐位元解析:On / Soft Off / Immediate Off、Margin High / Low 與 Fault 處理,附常用設定值速查表與 CRPS 電源實務差異。
- 4PMBus 指令解析:ON_OFF_CONFIG (02h) 開機條件與 CONTROL 腳位設定
PMBus ON_OFF_CONFIG (02h) 逐位元解析:PU、CMD、CP、極性與關機方式,搞懂電源到底聽 CONTROL 腳位還是 OPERATION 命令,附常用設定值速查表與 C 語言解碼範例。
數值格式
- 5PMBus 指令解析:VOUT_MODE (20h) + VOUT_COMMAND (21h) 與 LINEAR16 格式
搞懂 PMBus 輸出電壓怎麼設定:VOUT_MODE (20h) 的模式與指數、VOUT_COMMAND (21h) 的 LINEAR16 換算,附指數解析度速查表、LINEAR11 差異比較與 C 語言整數換算範例。
- 6PMBus 指令解析:LINEAR11 格式與 READ_VIN / IOUT / TEMPERATURE / POUT 量測讀取
PMBus LINEAR11 資料格式完整解析:5 位元指數 + 11 位元尾數的換算、負數處理與常見錯誤,搭配 READ_VIN (88h)、READ_IOUT (8Ch)、READ_TEMPERATURE_1 (8Dh)、READ_POUT (96h) 等量測命令速查表與 C 語言整數編解碼範例。
- 7PMBus 數值格式深度解析:Linear、VID 與 Direct Mode 完整比較
PMBus 三大數值格式一次搞懂:LINEAR11 / LINEAR16 的指數與尾數、VID 模式的 Intel VR12 / VR12.5 與 AMD SVI2 碼表公式、Direct 模式的 m、b、R 係數換算與 COEFFICIENTS (30h),附格式選擇指南與 MCU 整數運算注意事項。
- 8PMBus 指令解析:COEFFICIENTS (30h) 動態讀取 Direct 格式的 m、b、R 係數
PMBus COEFFICIENTS (30h) 完整解析:Block Write-Block Read Process Call 封包格式、讀取 / 寫入方向旗標、5 Bytes 回應的 m、b、R 解包方式,附 READ_VIN 實際解碼範例、檢流電阻陷阱與 C 語言解包程式。
狀態與故障除錯
- 9PMBus 指令解析:STATUS_WORD (79h) 電源故障除錯的第一步
PMBus STATUS_WORD (79h) 16 個狀態位元逐一解析,搭配 STATUS_VOUT、STATUS_IOUT、STATUS_INPUT、STATUS_TEMPERATURE、STATUS_CML 的追查流程,附常見數值解讀、清除方式與 C 語言解碼範例。
- 10PMBus 指令解析:CLEAR_FAULTS (03h) 清除故障、釋放 SMBALERT# 與重新開機
PMBus CLEAR_FAULTS (03h) 完整解析:Send Byte 時序(含 PEC 計算範例)、清除哪些 STATUS、為什麼清掉又馬上出現,以及最常被問的問題:清除故障後電源會自己重新開機嗎?附 Latch Off、Hiccup 行為比較與 CRC-8 程式。
- 11PMBus 指令解析:SMBALERT_MASK (1Bh) 屏蔽特定告警的 SMBALERT# 中斷
PMBus SMBALERT_MASK (1Bh) 完整解析:寫入用 Write Word、讀取用 Block Write-Block Read Process Call 的特殊格式,Mask Byte 與 STATUS 位元的對應方式,搭配 ARA 流程與 i2c-tools 實作範例。
- 12PMBus 常見問題除錯:NACK、匯流排卡住、Timeout、數值錯誤一次解決
PMBus / SMBus 除錯實戰:找不到裝置、7 位元與 8 位元位址混淆、特定命令 NACK、讀值錯誤、SDA 被拉住的匯流排解鎖(含 C 語言範例)、SMBus Timeout 與 Clock Stretching、寫入沒反應、SMBALERT# 一直拉低,附除錯流程圖與檢查清單。
進階
- 13PMBus / SMBus PEC 校驗完整解析:CRC-8 計算範圍、讀寫範例與常見錯誤
SMBus / PMBus PEC(Packet Error Checking)完整解析:CRC-8 多項式與參數、每種交易要把哪些位元組算進去、Read Word 為什麼要包含兩次位址,附 Send Byte / Write Byte / Read Word / Process Call 實際 PEC 數值、常見錯誤對照與 C 語言位元版 / 查表版實作。
- 14PMBus 指令解析:QUERY (1Ah) 自動查詢電源支援哪些命令
PMBus QUERY (1Ah) 能力查詢命令完整解析:Block Write-Block Read Process Call 格式、回應位元組的支援/讀寫/資料格式定義,附常見回應值速查、自動掃描指令清單的做法與 C 語言解碼範例。
- 15PMBus 指令解析:READ_EIN (86h) / READ_EOUT (87h) 能量累加器,計算平均功率與效率
PMBus READ_EIN (86h) 與 READ_EOUT (87h) 完整解析:6 Bytes 的累加器、溢位計數與取樣計數格式,平均功率 = 能量計數差 ÷ 取樣計數差的原理,溢位處理、效率計算與 C 語言整數實作範例。
實作
- 16用 Python / Linux 讀取 PMBus 電源:i2c-tools、smbus2 與 hwmon 實作
在 Linux 上用 Python 讀取 PMBus 電源的完整實作:i2c-tools 快速驗證、smbus2 讀取 LINEAR11 / LINEAR16 量測值、STATUS_WORD 解碼、Block Read 讀取 MFR_ID、PEC 驗證與 QUERY,以及用核心 pmbus 驅動透過 hwmon / sensors 監控。