i²c总线和smbus™是流行的2线总线,基本上相互兼容。通常,设备(主机和从设备)可以在两条总线之间自由互换。两条总线都具有可寻址从站(尽管两者之间的特定地址分配可能有所不同)。总线以相同的速度工作,最高可达100khz,但i²c总线具有400khz和2mhz版本。两条总线之间的完全兼容性仅在100khz以下得到保证。本应用笔记重点介绍i²c和smb之间的显著差异。
i²c总线和smbus是流行的2线总线,基本上相互兼容。通常,设备(主机和从设备)可以在两条总线之间自由互换。两条总线都具有可寻址从站(尽管两条总线之间的特定地址分配可能有所不同)。总线以相同的速度工作,最高可达100khz,但i²c总线具有400khz和2mhz版本。显然,使用所有器件的两条总线之间的完全兼容性仅在100khz以下才能得到保证。
本应用笔记重点介绍两条总线之间的显著差异。虽然假设读者对i²c总线和/或smbus有一定的了解,但让我们首先回顾一些协议基础知识:
启动和停止事件。这些尤其重要,因为 它们是向接口发出信号的方式,表明它需要转到 已初始化或重置状态。
数据和时钟必须很高才能生成启动和停止。一位大师 无法生成启动或停止,除非数据(i²c的sda和 smbdata for smbus)和时钟(scl 用于 i²c,smbclk 用于 smbus)线路 是自由的(不是拉低的)。这是成为开放收藏家的结果 总线。
启动和停止条件是唯一的时间 在时钟为高电平时成为数据线上的过渡。
仅当通信期间时钟为低电平时,数据才能更改状态。 数据上的数据必须始终在时钟高电平之前准备就绪 并且仅在时钟变低后更改(除了 启动和停止)。
图1.典型的通信,显示启动和停止条件。
超时和时钟速度
超时和(由于超时)最小时钟速度是i²c总线和smbus之间最重要的区别。
i²c 总线 = 直流 (无超时)
smbus = 10khz (35ms 超时)
超时是指每当时钟变为低电平的时间超过超时时间(通常为 35 毫秒)时,从设备就会重置其接口。超时的使用也决定了时钟的最低速度,因为它永远不会静止。因此,smbus 具有最低时钟速度规格。相比之下,i²c总线可以无限期地变为静态。在i²c总线中,主站或从站都可以根据需要保持时钟低电平以处理数据。
所有这些都是两条总线如何处理从站错误并从这些错误中恢复的结果。要了解错误恢复,请考虑有两种状态,即启动和停止,在正确设计的i²c或smbus从机上,这两种状态指示从接口进入特定状态。在 start 的情况下,接口应自行初始化并准备好接收通信。无论启动条件之前是什么,都应该发生这种情况(例如,如果从站处于通信过程中,主设备感到困惑并不得不重新开始)。在 stop 的情况下,接口应再次初始化自身,但应在任何新通信之前期待启动。“开始”和“停止”都是时钟为高电平时发生的唯一数据转换。为了使数据上的转换发生,数据线(和时钟线)必须是“自由的”,以允许主站根据需要在线上放置高点和低点。
在i²c总线中,如果从机锁定并保持时钟或数据低电平,则无法进行错误恢复。实际上很少有从设备能够保持时钟。因此,最常见的总线错误是从设备最终处于数据(数据线)低电平的状态。在i²c总线中,主机通过时钟时钟直到数据为高电平,然后发出启动后停止信号来完成错误恢复。
与i²c总线相比,只要时钟处于低电平,时间超过smbus规范中规定的35ms超时,smbus从站就会复位其接口。因此,英特尔 piix4 等 smbus 主站没有内置任何错误恢复例程。实际上,从设备需要检查时钟和数据,即使smbus规范没有规定这一点。应该这样做,因为经验表明,处于错误状态的从站可以保持低数据,即使时钟可能很高。完全按照 smbus 规范实现超时并不能解决此错误模式。
i²c slave smb slave
i²c slave
i²c master i²c master
smb master potential for bus lockup smb master
smbus的时钟速度限制为100khz,而i²c允许高达400khz的速度。
逻辑电平
尽管两条总线之间的逻辑电平规格存在差异,但通常器件可以混合使用,并可以放弃匹配。事实证明,smbus或i²c总线很少因电平差异而发生故障。当我们比较相应的电平规格时,这可能会令人惊讶,如图1所示。
图2.这是i²c总线和smbus之间电平规格的比较。i²c-vdd显示了 3 v 至 5 v 电源的相关高值和低值范围。
为了进一步比较,表 2 一起列出了规格。
high i2c vdd dependent 0.7 × vdd
i²c fixed 3.0v
smbus 2.1v
low i2c vdd dependent 0.3 × vdd
i2c fixed 1.5v
smbus 0.8v
尽管电平规格之间似乎存在相当大的差异,但在这方面,器件互换性并未被证明是一个问题。这是因为主机和从站的输出电压摆幅几乎总是接近全电源电压。
上拉电阻和电流电平
在讨论电压电平时,不明显的是,这些电平也由总线之间的不同电流指定。smbus的最小灌电流为100μa,最大灌电流为350μa,而i²c总线的最小灌电流为3ma。这反过来又将确定上拉电阻的最低可接受值,其示例如下表所示。
3v vdd 5v vdd
i2c 总线 > 1k > 1.6k
smbus > 8.5k > 14k
实际上,在smbus系统中遇到上拉电阻值并不罕见,因为上拉电阻值低于推荐值,因此违反了此规范。即使在某些smbus系统中,上拉电阻值的一个非常普遍的范围似乎是2.4k至3.9k。
一般呼叫和警报响应
i²c总线有一个称为通用呼叫的地址,即0000 000,所有设计用于响应通用呼叫的从站都将相应地采取行动。这是一种可以同时与系统上的多个设备通信的方法。
smbus还规定了一条名为alert#的线路,不要与i²c通用呼叫地址混淆。此行充当 smbus 主服务器的中断。收到中断后,smbus 主服务器可以发出警报响应。此警报响应被发送到地址 0001 100,任何生成中断的从设备都试图通过将自己的地址放在总线上来识别自己。地址最低的设备将占主导地位(由于集电极开路总线)。如果它被维修和清除,主服务器可以重复该过程并通过可能发生的任何其他中断进行处理。
其他小细节
有一些与上升和下降时间和总线电容有关的微妙问题通常不是问题。此外,在使用“确认”和“不确认”条件方面,还存在一些很少遇到的协议差异。对于大多数主流的主人和从属选择,这些因素通常都不是问题。
显著差异总结
超时和最小时钟速度
电压等级
上拉电阻值和电流水平
i2c smbus
timeout no yes
minimum clock speed dc 10khz
maximum clock speed 100khz (400khz and 2mhz also available) 100khz
vhigh 0.7 × vdd, 3.0v fixed 2.1v
vlow 0.3 × vdd, 1.5v fixed 0.8v
max i 3ma 350µa
clock nomenclature scl smbclk
data nomenclature sda smbdat
general call yes yes
alert# no yes
如何将多个温度计连接到同一引脚并获取温度计OneWire地址
鸿海发射两颗“珍珠号”,将为通讯科技带来革命性突破
通俗易懂!高手带你理解嵌入式Linux中高端内存与低端内存
Linux防火墙配置(iptables和firewalld)
采用TB62734FMG的白光LED驱动器项目
I²C总线与SMBus的比较指南
0-100km/h仅需5秒,深度解析保时捷卡宴E-Hybrid技术
从Tesla与BMW看无人工厂 连Musk都坦承的错误
涨价潮的背后,剖析硅片市场的供需结构
中国大陆手机品牌降价促销 被动元件厂有望迎急单
一种新型调频连续波高度表
苹果WWDC22:帮助开发者更好的和工程师沟通
国际科研团队研发新技术精准控制光纤光学电路,助推量子计算发展
华为如何牵动东莞和深圳两地政府的心?
固体继电器的优缺点分析
未来的人脸识别数据库中应减少面部表情偏差
麒麟960处理器详解 对比Exynos8895/Helio X30如何?
采用STC89C52单片机水陆两栖救灾车系统电路模块设计
三星GDDR5显存停产,GDDR6显存将是主流
2019年上半年假机排行榜,iPhone 8和X成最“假”机型!