为什么I2C设计为使用上拉电阻而不使用下拉电阻?


22

我了解在I2C中,SCL和SDA线使用上拉电阻,并且引脚驱动器是开路集电极NPN器件,可以将引脚驱动到地。这给I2C带来了一个优势,即同一根总线现在可以与多个从机共享,即使两个或多个从机意外尝试同时驱动该总线,也不会对系统造成任何损害。

但这也可以通过在SDA和SCL线上使用PNP开漏驱动器下拉电阻来完成。时钟延展和多主机仲裁之类的事情也可以实现。

I2C协议的当前实现是否比上述建议的替代实现有任何好处?


1
在80年代,集电极开路晶体管似乎占大多数。
PlasmaHH

9
@PlasmaHH我认为原因是由于基板中较高的电子迁移率,NPN(据我模糊地记得)在单位面积上具有更大的电流容量,因此更容易建立“强”输出级。
马库斯·穆勒

7
@MarcusMüller确实,这是(现在仍然是)。当NPN和NMOS Fets的大小相同时,它们“更强”。在CMOS中,典型值为2到3倍。对于PNP与NPN,这取决于制造工艺,但几乎总是PNP比NPN困难和复杂得多。同样,从P掺杂衬底开始(大多数工艺都这样做)也强调了这一点(更好的NPN)。
Bimpelrekkie

@Bimpelrekkie我记得从我的固态物理学课到今天为止的系数是2.3 :-)
温尼

1
如果现有的I2C总线由于任何原因意外接地,那么您将仅汲取上拉电阻器电流。通过高电平有效驱动器和下拉电阻的互补设置,您将在I2C开始的几年内损坏简单的驱动器。在电路板之间切换时,应考虑到机箱短路。但这只是驱动低拉至上拉的众多原因之一,下面其他人对此做了回答。
TonyM '17

Answers:


30

从电气上讲,这是有意义的,因为接地是IIC总线上所有设备的通用连接。与强制电源成为所有IIC设备的通用连接相比,这要少得多的限制,如果通过下拉将线驱动为高电平并将其浮动为低电平,则需要这样做。

请注意,IIC设备并不需要全部由相同的网络或相同的电压供电。如果必须将两条总线都驱动到单个公共电源电压,则情况并非如此。


5
并非我的选票,您必须拥有与我一样多年的I2C经验,所以我的观点可能是一个误解,但是:“ IIC设备不需要全部由相同的电压供电 ”被视为暗示5V供电和3V供电的I2C设备(例如)可以共享相同的I2C总线,而无需任何其他组件或预防措施(因为您没有提到电平转换器)。当然,他们不能这样做,因为现在每个设备的I2C逻辑阈值都引用到它们自己的Vcc。也许缺少对级别转换器的明确提及会导致投票否决?
SamGibson

13
根据所使用的上拉电阻和I / O引脚,I2C式通信可以在5V和3.3V器件之间平稳运行。例如,使用10K上拉至5V,将允许使用3.3V器件(如果它们具有5V 耐压非钳位输入,或者它们能够将150uA容忍到其保护二极管中)。对于至少具有2.5V或更低输入高阈值的5V器件接口,至少在较慢的速度下使用3.3V上拉将起作用。
超级猫

7
@Sam:实际上5 V和3.3 V IIC设备可以在同一IIC总线上。IIC规范中特别提到并认可了具有固定电压电平的设备,无论其电源电压如何。
奥林·拉斯罗普

5
在Philips的旧文档“ I2C总线及其使用方法”中,第10.0节提到了早期(通常为NMOS)5V I2C器件的固定输入阈值。然后说:“ 具有与VDD相关的输入电平的I2C总线设备必须具有一条公共电源线,并且上拉电阻器也要连接到该电源线 ”(我的粗体)。@supercat-您提到过:“ 具有2.5V或更低的输入高阈值的5V设备 ”可以举一个这样的设备示例来帮助我吗?阅读旧的I2C文档,我只能找到那些旧的5V器件的最低3V I2C Vih固定值。谢谢。
SamGibson

2
@SamGibson:具有与VDD相关的输入电平的设备可能需要在彼此一定范围内的电压下工作。它们必须接近多少取决于电压与VDD的关系。在PIC16F877的Microchip数据手册(任意选择的5V器件)中,其正常引脚的V(IH)列为0.25VDD + 0.8V,但对于施密特触发器输入则更高。在VDD = 5.2V时,正常输入的指定V(IH)为2.1伏。我没有看到硬件I2C V(IH)的规格,尽管典型的性能图表明它介于正常输入和ST输入之间。
超级猫

24

在过去的好日子里,TTL驱动器在拉低信号方面比拉高信号要好得多。因此,诸如I2C之类的协议,以及中断线,复位等协议,都使用具有分布式下拉功能的上拉实现。


8
在更好的现代时代,这仍然是正确的,因为它是半导体的固有特性。如今,获得功能更强大的上拉晶体管来处理相同的电流并不需要花费太多。
阿森纳

2
有人告诉我,使用CMOS可以更容易地接近电源轨电压。TTL正在苦苦挣扎的另一个“问题”。(也许我们应该为此感到幸运,因为它允许3V3 CMOS与TTL接口)
Oldfart

14

在可能具有变化的电源电压的子系统之间,更容易使用接地作为公共参考。如果使用PNP晶体管上拉至电源电压,则所有子系统都必须连接到同一电源。


8

这里有很多好的答案,但是还有另一个原因。

如果总线的静态状态为地面,则无法判断总线是否已连接或仅悬挂在太空中。

上拉通常位于主设备上。从站通常没有上拉。这是因为断言低电平所需的下拉电流会随着连接到总线的设备数量的增加而增加。

从属设备插入总线后,可以检测到该线被拉高(假设未使用),并知道该总线实际上在那儿并且安静。带有接地偏置总线的情况并非如此。


为了检测总线被拉高,从站必须首先将其拉低。我不确定为什么在相反的极性下不可能执行类似的步骤。
德米特里·格里戈里耶夫

@DmitryGrigoryev为什么需要拉一些已经很低的东西?
Trevor_G

5

如果我正确地理解了问题,一方面是:

  • 为什么使用上拉电阻和NPN晶体管代替下拉电阻和PNP晶体管?

首先,您应该注意的是,您没有使用双极晶体管(NPN,PNP),而是使用了MOSFET(有四个不同的版本)。

使用“上拉和NPN ”变体的设备使用n沟道增强 MOSFET。由于该MOSFET的源极接地,因此栅极-源极电压(控制电流)等于栅极与地之间的电压。因此,可以使用介于0和Vdd之间的电压来控制MOSFET。

实现“ 下拉和PNP ”变体将有三种可能性:

  • 使用p沟道增强MOSFET

    在NMOS或CMOS IC上,具有类似特性(电阻等)的p沟道MOSFET比n沟道MOSFET需要更多的空间。

    在微电子领域中,钱是有钱的,因此,尽可能避免使用p沟道MOSFET。

  • 使用n沟道增强 MOSFET

    这将要求驱动晶体管的逻辑电路的输出具有电源电压的“低”电压(例如,+ 5V)和高于电源电压的“高”电压(例如,当电路的其余部分被提供时为+ 10V) + 5V)。

    原因:当MOSFET导通时,源极-地电压将为Vdd。栅极-源极电压必须为正,因此栅极与地之间的电压甚至必须更高。

    您将需要两个电源-一个电路将逻辑电路的输出从0 ... + 5V转换为+ 5V ... + 10V ...

  • 使用n沟道耗尽 MOSFET

    不幸的是,我不能告诉您太多有关此解决方案的信息。但是,我在Google的某页上发现,耗尽型MOSFET比增强型MOSFET更难生产,因此可以避免使用。

    我从功率电子器件(不是微电子学)知道,上述的“两个电源”变体甚至比耗尽型MOSFET更可取。(但是我不能告诉你为什么。)

    编辑使用n沟道耗尽MOSFET时,您可能需要一个负电压(例如-5V),因此您还需要两个电源电压...


0

具有公共接地线和上拉数据线(与具有公共VCC和下拉电路相比)还有另外一个好处:

即使最初的意图是仅在几英寸的跨度上将设备连接在同一块PCB上,它还是成功的,所以现在将线长几英尺并连接“设备”(可能是计算机或相等的设备)并不少见。某些设备具有自己的电源(质量不同,例如您将墙上插头供电的设备与电池供电的设备连接在一起),从而使设备变得非常复杂。更好的是,即使在不理想且超出规格的条件下,连接也“至少良好”。

而且许多此类连接的设备也可能通过其他方式以某种方式连接,仅通过I2C通信即可。通常,将设备连接在一起时,common ground有时会与它连接-有时是其他功能的一部分,有时仅仅是因为它安装在金属外壳上,并且这些设备也与外壳(或与普通散热器或类似的东西)接地连接。内有接地屏蔽的屏蔽电缆-也连接接地。

如果您还直接连接此类设备的电源线(VCC),则当这些电源线自然处于不同电压下时,您会遇到问题(请确保它在此处和那里可能表示5V,但取决于电源的构造和部分容差)如果它是由电池供电并且有时运行一些电动机,则功率可能也会变为4.9V或5.2V甚至变化,这会使功率随时间下降和上升。

在这种情况下,部分伏特的电源之间实际上会发生短路,并且根据电源(以及方式的阻力),可能会流过相对较高的电流,这不仅会导致能源浪费和热量上升,甚至会造成损坏(或缩短寿命)。哪个不好

具有共用的接地和上拉可以避免此类问题-接地,并且即使设备上的VCC相差很大,上拉电阻也仅允许很小的交叉电流。


1
这与Dave Tweed的回答基本相同。
Janka

-2

如果上拉了,您不必通过芯片发送太多功率。

由于该芯片不驱动任何东西,它只是在制造短路以使总线为0,并在断开以使其为1。

如果拉低,则必须通过芯片发送功率以将总线驱动至1。如果总线偶然发生短路,则驱动该芯片以试图推动该总线可能会消耗大量功率最多1。

免责声明:目前,我是一个非常糟糕的EE。


3
欢迎来到EE.SE。“ 如果上拉,则不必通过芯片发送太多的功率。 ”如果上拉和下拉电阻的大小相同,则电流将相同。上拉将需要电流从被驱动芯片提供并沉入驱动芯片。下拉将要求电流从驱动芯片提供并被驱动芯片吸收。意外短路可能是V +或接地。
晶体管
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.