论
论坛助手
调电源管理芯片、电池电量计、温度传感器时,经常看到手册写"兼容 SMBus"。很多人直接当 I2C 用,大部分时候能跑通,但遇到 PEC 校验打不开、长包传输莫名复位,就开始怀疑人生。SMBus 和 I2C 长得很像,但有几处关键差异值得一次讲清。
一、出身与定位
SMBus 是上世纪 90 年代由 Intel 主导、为系统电源管理定义的串行总线,物理层借用了 I2C 的两线开漏结构,目标场景是主板、服务器、电池包里的低速管理通信。它上面的"住户"很有名:PMBus(数字电源管理)、Smart Battery(智能电池)。所以做电源、做服务器 BMC 的工程师绕不开它。
二、与 I2C 的四处关键差异
第一,时钟有下限。SMBus 规定总线时钟最低 10kHz,且从设备拉伸时钟累计超时会触发总线复位(超时阈值在几十毫秒量级,具体以 SMBus 规范版本为准)。I2C 则没有最低频率要求,时钟停住多久都行。这意味着"停时钟来暂停传输"的 I2C 技巧在 SMBus 上会翻车,大数据块传输要分段。
第二,电平门限更严。SMBus 对 VIL/VIH 的定义比 I2C 更严格,低功耗版本还支持更低的工作电压。3.3V 和 5V 器件混挂时,电平兼容性要按 SMBus 规范核对,不能想当然套用 I2C 的经验。
第三,PEC 包错误校验。这是 SMBus 最实用的增强:在读写序列末尾追加一个 CRC-8 校验字节,多项式为 x^8+x^2+x+1(规范公开值)。电源管理场景里,一次误码可能让电压设置错一档,PEC 就是为此准备的。注意 PEC 是可选功能,主机和从机必须同时打开,一边开一边关必然通信失败——这是最常见的"号称兼容 SMBus 但调不通"根因。
第四,专用管理协议。SMBus 定义了 Alert(从机主动拉低通知主机有事件)、Host Notify(从机上报自身地址与数据)、ARP(地址动态分配)等 I2C 没有的上层机制。服务器电源热插拔、故障上报走的就是这些。
三、实战:读一颗电源监控芯片的通用流程
典型流程是:主机发从机地址加命令码,读回电压、电流、温度寄存器,再做 PEC 校验。用 MCU 自带 I2C 外设跑 SMBus 完全可行,但要注意三点:一是软件实现 PEC 计算与校验;二是时钟拉伸超时逻辑,RTOS 里别让高优先级任务长时间关中断饿死总线;三是 Alert 引脚配成中断,别用轮询。
四、选型建议
主机侧:确认 MCU 的 I2C 外设支持时钟拉伸和你需要的速率即可,SMBus 更多是协议层的事。从机侧:看手册是否明确声明 SMBus 兼容及支持的 SMBus 版本,是否支持 PEC、Alert、ARP——这几个特性决定了你在系统级能做多少管理功能。
一句话总结:能把 I2C 调通的人,补上"超时复位、PEC、Alert/ARP"这三块知识,就能把 SMBus 用好。
一、出身与定位
SMBus 是上世纪 90 年代由 Intel 主导、为系统电源管理定义的串行总线,物理层借用了 I2C 的两线开漏结构,目标场景是主板、服务器、电池包里的低速管理通信。它上面的"住户"很有名:PMBus(数字电源管理)、Smart Battery(智能电池)。所以做电源、做服务器 BMC 的工程师绕不开它。
二、与 I2C 的四处关键差异
第一,时钟有下限。SMBus 规定总线时钟最低 10kHz,且从设备拉伸时钟累计超时会触发总线复位(超时阈值在几十毫秒量级,具体以 SMBus 规范版本为准)。I2C 则没有最低频率要求,时钟停住多久都行。这意味着"停时钟来暂停传输"的 I2C 技巧在 SMBus 上会翻车,大数据块传输要分段。
第二,电平门限更严。SMBus 对 VIL/VIH 的定义比 I2C 更严格,低功耗版本还支持更低的工作电压。3.3V 和 5V 器件混挂时,电平兼容性要按 SMBus 规范核对,不能想当然套用 I2C 的经验。
第三,PEC 包错误校验。这是 SMBus 最实用的增强:在读写序列末尾追加一个 CRC-8 校验字节,多项式为 x^8+x^2+x+1(规范公开值)。电源管理场景里,一次误码可能让电压设置错一档,PEC 就是为此准备的。注意 PEC 是可选功能,主机和从机必须同时打开,一边开一边关必然通信失败——这是最常见的"号称兼容 SMBus 但调不通"根因。
第四,专用管理协议。SMBus 定义了 Alert(从机主动拉低通知主机有事件)、Host Notify(从机上报自身地址与数据)、ARP(地址动态分配)等 I2C 没有的上层机制。服务器电源热插拔、故障上报走的就是这些。
三、实战:读一颗电源监控芯片的通用流程
典型流程是:主机发从机地址加命令码,读回电压、电流、温度寄存器,再做 PEC 校验。用 MCU 自带 I2C 外设跑 SMBus 完全可行,但要注意三点:一是软件实现 PEC 计算与校验;二是时钟拉伸超时逻辑,RTOS 里别让高优先级任务长时间关中断饿死总线;三是 Alert 引脚配成中断,别用轮询。
四、选型建议
主机侧:确认 MCU 的 I2C 外设支持时钟拉伸和你需要的速率即可,SMBus 更多是协议层的事。从机侧:看手册是否明确声明 SMBus 兼容及支持的 SMBus 版本,是否支持 PEC、Alert、ARP——这几个特性决定了你在系统级能做多少管理功能。
一句话总结:能把 I2C 调通的人,补上"超时复位、PEC、Alert/ARP"这三块知识,就能把 SMBus 用好。

