[经验分享] 低速总线:IIC和SMBUS

[复制链接]
 楼主| keaibukelian 发表于 2025-7-15 20:37 | 显示全部楼层 |阅读模式
I²C(Inter-Integrated Circuit)和SMBus(System Management Bus)是两种广泛应用于嵌入式系统的串行通信总线协议,主要用于连接低速外设。以下是它们的核心技术对比与应用解析:

一、I²C总线

核心特性
协议层级:双线制(时钟SCL + 数据SDA)、半双工、多主多从架构。
通信速率:
标准模式(Standard Mode):100 kbps
快速模式(Fast Mode):400 kbps
高速模式(High-Speed Mode):3.4 Mbps(需特殊硬件支持)
地址分配:
7位地址(支持112个设备)或10位地址(扩展至1008个设备)。
保留地址(如广播地址0x00)用于特殊功能。
通信流程
起始条件(Start):SCL高电平时SDA下降沿。
地址帧:主设备发送从机地址 + 读写位(1位,0写/1读)。
数据帧:每字节(8位)后跟随1位ACK/NACK确认信号。
停止条件(Stop):SCL高电平时SDA上升沿。

典型应用
传感器接口:温度传感器(如LM75)、加速度计(MPU6050)。
EEPROM读写:存储配置参数(如AT24C系列)。
显示器控制:OLED屏幕(SSD1306)初始化配置。

硬件设计要点
上拉电阻:SCL/SDA需外接上拉电阻(典型值:4.7kΩ~10kΩ,依总线电容调整)。
冲突检测:多主模式下需支持总线仲裁(基于线与逻辑)。
信号完整性:长距离通信需考虑阻抗匹配(如加缓冲器)。

二、SMBus总线

核心特性
协议起源:基于I²C协议扩展,专为系统管理设计(如电池、电源、温度监控)。
通信速率:
固定速率:100 kbps(兼容I²C标准模式)。
增强功能:
超时机制:强制限制SCL低电平时间(35ms),防止总线挂死。
电源管理:支持设备休眠唤醒(ALERT#信号)。
地址保留:预定义系统管理地址(如0x08~0x0F为SMBus主机控制器)。
关键协议差异
电气特性:
更严格的电压范围(VIL/VIH与I²C不同)。
上拉电阻范围更窄(推荐1kΩ~10kΩ)。
数据格式:
强制使用PEC(Packet Error Checking,CRC-8校验)。
特定命令格式(如Block Read/Write支持多字节传输)。
总线复位:
通过发送复位序列(9个SCL脉冲)强制从机复位。
典型应用
智能电池管理:读取电池电量、健康状态(SBS规范)。
服务器监控:CPU温度监控(如LM75SMBus版本)。
热插拔控制:支持设备热插拔检测(通过ALERT#信号)。
三、I²C vs SMBus核心对比



四、设计注意事项
兼容性问题:

SMBus设备可连接至I²C总线,但I²C设备可能不满足SMBus的电气要求。
混合总线时需验证电压电平和时序参数。
上拉电阻计算:

I²C:根据总线电容选择,公式:
KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ R_{max} = \fra…
,其中$ ( t_r ) $为上升时间。
SMBus:推荐使用1kΩ~10kΩ(避免过大的下拉电流)。
协议冲突处理:

I²C多主模式需硬件支持仲裁(如STM32的I²C外设)。
SMBus主机需处理ALERT#中断并轮询设备状态。
调试工具:

使用逻辑分析仪抓取SCL/SDA波形(如Saleae Logic Pro)。
软件调试可借助Linux的i2c-tools(i2cdetect/i2cget等命令)。
五、选择依据
选I²C:简单外设、成本敏感、无需严格错误检测。
选SMBus:系统管理、热插拔支持、高可靠性场景。

通过理解两者的协议差异和应用场景,可更高效地设计嵌入式系统互联方案。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/u011732210/article/details/147605533

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
破晓战神 发表于 2025-7-18 15:13 | 显示全部楼层
I²C和SMBus都是嵌入式系统中非常重要的通信协议,这篇文章提供了很详细的对比和应用解析,对于我们设计和选择通信协议非常有帮助。
逆鳞风暴 发表于 2025-7-18 21:39 | 显示全部楼层
I²C和SMBus的对比分析非常详细,对于我们这些嵌入式系统开发者来说很有帮助。特别是在选择外设接口时,了解这些协议的特性和应用场景可以避免很多设计上的错误。
蚊子的噩梦 发表于 2025-7-18 21:41 | 显示全部楼层
I²C和SMBus的对比真的很详细,对于我们这些嵌入式系统开发者来说,了解这些协议的差异和应用场景非常关键。感谢分享!
cashrwood 发表于 2025-8-4 11:12 | 显示全部楼层
总线上的所有设备必须共地,否则电压参考点不一致会导致信号解析错误。
sanfuzi 发表于 2025-8-4 12:06 | 显示全部楼层
均为低速串行总线,广泛用于短距离设备通信
geraldbetty 发表于 2025-8-4 16:54 | 显示全部楼层
I²C支持10位地址扩展,适合多从机场景;SMBus仅7位地址,需通过硬件引脚(如AD0/AD1)或软件配置避免地址冲突。
robertesth 发表于 2025-8-4 18:38 | 显示全部楼层
上拉电阻范围更窄: 推荐1kΩ~10kΩ。
hudi008 发表于 2025-8-4 22:25 | 显示全部楼层
支持多从机/多主机、对协议灵活性要求高
eefas 发表于 2025-8-5 10:54 | 显示全部楼层
简单外设、成本敏感、无需严格错误检测。
beacherblack 发表于 2025-8-5 11:41 | 显示全部楼层
IIC:需根据总线电容选择合适阻值,确保信号上升沿稳定。
SMBus:推荐1kΩ~10kΩ,避免过大的下拉电流。
febgxu 发表于 2025-8-5 14:15 | 显示全部楼层
总线上的设备地址唯一,避免地址冲突。
chenqianqian 发表于 2025-8-6 08:45 来自手机 | 显示全部楼层
IIC和SMBUS的应用场景主要有什么不同?
迷雾隐者 发表于 2025-8-6 15:44 | 显示全部楼层
I²C和SMBus确实在嵌入式系统中扮演着重要角色。I²C的灵活性和SMBus的系统管理特性,使得它们在不同应用场景下各有优势。
jimmhu 发表于 2025-8-8 10:33 | 显示全部楼层
布线合理,避免过长的走线和过多的分支,以减少信号反射和噪声。
plsbackup 发表于 2025-8-8 14:03 | 显示全部楼层
SCL/SDA需外接上拉电阻              
abotomson 发表于 2025-8-8 15:59 | 显示全部楼层
IIC总线需要上拉电阻来确保在没有设备驱动时,SDA和SCL线处于高电平。
mikewalpole 发表于 2025-8-11 16:12 | 显示全部楼层
I²C 支持多主设备仲裁(通过 SDA 线竞争,低电平优先),但 SMBus 通常只允许单主设备,设计时需明确主从角色。
pl202 发表于 2025-8-11 22:52 | 显示全部楼层
硬件上的上拉电阻、总线电容和电压兼容性
uytyu 发表于 2025-8-12 11:57 | 显示全部楼层
SMBus设备可连接至I²C总线,但I²C设备可能不满足SMBus的电气要求。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

4326

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部