锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

I2C与SMBus之间的差异

时间:2023-02-05 17:00:00 576kohm电阻9a传速表传感器

关于I2C与SMBus,很多人很少谈论和理解两者之间的细节差异,包括许多外国简报,文章经常混合、混合描述和交替使用。

的确,在一般应用下,I2C Bus与SMBus没有太大区别,从实际接线来看几乎没有区别。即使两者直接相连,也可以正确交流和操作。然而,如果我们真的想仔细探索,事实上,仍然有很多不同。如果电子设计工程师无法区分两者之间的真正差异,那么在未来的开发设计验证和纠错阶段将不可避免地遇到麻烦。因此,本文将从各个层面进行解释I2CBus与SMBus希望能给大家带来一些帮助。

使用背景和版本进化的区别

从规格制定背景开始,I2C1992年设计电视应用时开发的界面年发表;而SMBus(System Management Bus)则是Intel与Duracell(金顶电池)共同制定笔记本电脑使用的智能电池(Smart Battery)时间研发的界面,首版于1995但是SMBus文件中也提到,SMBus确实是参考自己I2C,并以I2C衍生成基础。

I2C它起源于电视设计,但随着通用路线的发展,有机会使用各种电子设计I2C;而SMBus则在之后为PC先进的组态和电源管理接口(AdvancedConfiguration & Power Interface;ACPI)本规范已成为基本的管理信息传输接口和控制传输接口。

虽然I2C与SMBus制定时间不同,但都在2000年左右进入成熟的改版,I2C以加速为主要诉求的过程改版,SMBus以更切合Smart Battery及ACPI的需求为多。

I2C三次主要修订:

1992年v1.0

1998年v2.0

2000年v2.1

SMBus三次主要修订:

1995年v1.0

1998年v1.1

2000年v2.0

电气特性差异:逻辑电平定义、限流、相关限制

I2C的Hi/Lo逻辑电平有两种识别方法:相对识别和绝对识别,相对识别是基于Vdd决定电压,Hi为0.7Vdd,Lo为0.3Vdd,绝对认定与TTL准位识别相同,直接指定Hi/Li电压,Hi为3.0V,Lo为1.5V。相对的SMBus电平和I2C有异,Hi为2.1V,Lo为0.8V,与I2C不完全一致,但也算部分交集。

不过,SMBus后来还增加了一套较低电压的电平识别,Hi为1.4V,Lo为0.6V,这是为了使用SMBus该装置可以节省更多的成本。

了解电压后是电流,因为SMBus刚开始用在笔记本电脑上,所以省电性能优于I2C,只需100uA能持工作,I2C却要到3mA同样的低用电特性也反应在漏电流(Leakage Current)的要求上,I2C最大漏电流为10uA,SMBus为1uA,但是1uA似乎过于严厉,使运用SMBus该装置在验证测试过程中消耗了过多的成本和心力,因此之后SMBus 1.1版放宽了漏电流的上限,最高可达5uA。

而且是相关限制,I2C限制线路电容,SMBus却没有,但也有相类似的配套规范,即是电平下拉时的电流限制,当SMBus集电极开路Pin导线接地时,流经接地的电流不得超过350uA,另上电流(即相同集电极开路Pin开路时也有规范,最小不少于100uA,最高也不破350uA的。

由于对电流有限制,也很容易推断上拉电阻的电阻范围要求,I2C在5V Vdd时当大于1.6kohm,在3V Vdd时当大于1kohm,类似的SMBus于5V Vdd时当大于14kohm,3V Vdd时当大于8.5kohm,但这一定义并非牢不可破,就一般实践而言,在SMBus上也可用2.4k?3.9kohm类阻值。

附注:I2C的时钟线称SCK或SCL,数据线称SDA。SMBus的时钟线称SMBCLK,数据线称SMBDAT。

I2C与SMBus逻辑位准的电压定义不同,基本上I2C定义丰富灵活,SMBus更注重省电要求。

时差和测试

物理空间要求完成后,物理时间,即时序(Timing)方面的差别。

以操作频率为例,I2C这方面相当宽裕,最低频率可达0Hz(直流状态等于时间暂停),高可达100kHz(Standard Mode)、400kHz(Fast Mode)、乃至3.4MHz(High Speed Mode),相对的SMBus非常有限,最慢不慢于10kHz,最快不快于100kHz。很明显的,I2C与SMBus交叉运行频率为10kHz?100kHz间。

用于笔记本电脑的电池管理或PC组态管理和用电管理SMBus,很容易理解为什么不需要更高的操作频率,只要传输小数据量的监督信息,控制指令不需要太高速,而是广泛使用I2C自然希望用更高的传输来满足各种可能的需求。然而,人们可能会想,为什么SMBus要求最低速度?何不放松到和I2C同样的无最低速限制呢?

SMBus一定要维持10kHz上述操作频率主要用于管理和监控。另一个目的是在保持一定速度的情况下添加参数,轻松了解总线是否闲置(Idle)在逐一检测传输过程中,省去了停止(STOP)信号,或持续保持停止检测,辅以额外参数检测,使总线闲置后的再利用更有效、更快。

传速要求后还有数据保持时间(Data Hold Time)的要求,SMBus规定SMBCLK线路电平下降后,SMBDAT数据必须保留300nS,但I2C但对此没有同样的强制要求。

类似的,SMBus重置对接口(Reset)后期恢复时间(Timeout)一般来说,35也有要求mS,I2C这方面没有约束,可以随意延长时间。相同的SMBus无论是在主控端还是在主控端(Master)或受控端(Slave),其频率处于Lo电平时的最长持续时间不得超过限制,以免长时间停留Lo准位,导致收发两端时序脱轨(失去同步,造成后续误动作)。

还有,I2C与SMBus信号的上升时间和下降时间也有不同的细节要求,必要时必须确认,或在验证过程中稍加注意。

Smart Battery或ACPI底层需要实现、监督和控制SMBus作为后援,图为简单的多组智能电池系统,图中有Smart Battery A、B两组电池。

「已妥」与「未妥」机制的强制性差异

不仅电气和时序不同,更深层次的协议机制也不同。在I2C在中间,发送端(主控端)与接收端(控制端)通信之前,控制端的地址信息将在总线上广播,每个接收端将收到地址信息,但只有符合地址信息的接收端将在地址信息发布后发布「已妥」的回应(Acknowledge;ACK),让发送端知道相应的接收端已经准备好了,可以通信。

但是,I2C没有强制性规定接收端必须响应或保持沉默。即使它保持沉默,发送端也会继续工作,开始传输数据并发布阅读/编写指令。这种机制在一般应用中仍然是可行的,但如果是实时的话(Real Time)在性应用中,任何动作和机制都有一定的时限要求,这种可有可无的响应方法会产生问题,受控端可能无法接收信息。

同样的情况,在SMBus接收地址信息后不允许接收端回应,每次都要回应。为什么要强制回应?其实与SMBus应用密切相关,SMBus上面连接的控制装置有时是动态添加和动态删除的,例如更换新电池或连接笔记本电脑DOCK PORT等等,如果接入装置已经改变但没有响应,则主控端程序不会掌握整个系统的最新组态,这将导致误动作。

类似的情况也适用ACPI,PC通常有一些设备可以在机器内外动态添加和删除,如机器内的风扇、外部打印机等,这些设备也应强制响应主控端的群发(广播)地址信息。

地址动作不同,数据传输也不同。在I2C方面,Slave虽然对Master响应发出的地址,但在后续的数据传输中,由于某些事务必须先处理,原始传输可能无法继续,此时Slave就要对Master发出「未妥」的回应(Not Acknowledge;NACK),向Master表示Slave为他忙碌。

而SMBus方面,与I2C同样的,会NACK的回讯向Master表达Slave传递的信息还没有收妥,但是SMBus的Slave每一个都会在后续Byte所有的传输都发出NACK回样设计的原因是回复SMBus没有别的可向性Master要求重发(Resend)的表示法。更直接地说:NACK机制是SMBus任何信息传递都是必要的,不允许有遗漏。

I2C在完成地址或数据信息或数据信息的传输后发送信息(ACK)、未妥(NACK的响应,SMBus也有相同的机制,但由于应用,有更强制性的回显要求。

传输协议子集、超集

互动知会机制是否强制存在差异,协议也存在差异。SMBus事实上,通信协议和协议中使用的信息格式仅取自I2C在规范中,数据传输格式定义中的子集合(Subset)而已。所以,如果是I2C与SMBus交混连接,然后I2C装置在存取SMBus只能使用装置SMBus如果使用范畴的协议和格式I2C相反,标准存取方法无法正确存取。

另外,I2C规范中有一叫做「General Call」当发出广呼方式「0000000」所有地址信息I2C上的Slave装置的统一应对此进行反应,此机制适合用在Master要对所有的Slave进行广播性讯息更新与沟通上,是一种总体、批次的运作方式。

SMBus一样有General Call机制,但在此之外SMBus还多了一种特用的ALERT(警讯)机制,不过这必须于频率线与数据线外再追加一条线(称为:SMBSUS)才能实现,ALERT虽名为警讯但其实是中断(Interrupt)的用意,Slave可以将SMBSUS线路的电位拉低(ALERT#,#表示低电平有效),这时就等于向Master发出一个中断警讯,要求Master尽速为某一Slave提供传输服务。

Master要响应这个服务要求,是透过I2C/SMBus的频率线与数据线来通讯,但要如何知道此次的通讯只是Master对Slave的一般性通讯?还是特别针对Slave的中断需求而有的服务响应?

这主要是透过Master发出的地址信息来区别,若为回应中断的服务,地址信息必然是「0001100」,当Slave接收到「0001100」的地址信息,就知道这是Master特为中断而提供的服务通讯。

因此,软件工程师须留心,规划时必须让所有的Slave都不能占用「0001100」这个地址,以供ALERT机制运用(当然!若现在与未来都不会用上ALERT机制则可尽管占用)。事实上各种进阶的规范标准(如Smart Battery、ACCESS.bus、VESA DDC 等)都在I2C的短寻址中订立了一些为自用而保留的地址,这在最初设计与定义时就该有所留意,以免因先行占用而导致日后须改写软件的麻烦。

补充提醒的是,SMBSUS一样是开集电极外加上拉电阻的线路,所以有一个Slave将电位拉下后,其余Slave侦测到电位被拉下,表示已有Slave正在与Master进行中断需索与响应服务,须等待抢到中断服务权的Slave确实被服务完毕,重新将SMBSUS释放回高电平后,才能持续以「看谁能先将线路电平拉低?」的方式来争取中断服务。

转载自郭长祐博客

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章