为什么I²C仅具有上拉电阻(采访问题)?


15

采访者想知道为什么当也可以实现相反的逻辑时,为什么在SDA和SCL上使用上拉电阻。对于为什么选择上拉电阻的选择有解释吗?



就像评论中一样,超快速模式I2C总线协议确实可以作为推挽配置工作,请参见nxp.com/documents/user_manual/UM10204.pdf,第3.2节“超快速模式I2C总线协议
Kvegaoro

我不知道为什么恩智浦没有指定使用双向SDA和单向SCK的超快速I2C协议,当要输出高电平时让主驱动器SDA变硬,而让主驱动器等待足够长的时间以将线拉高如果它关心奴隶不得不说些什么?
2015年

面试官是否给出了答案的版本?
copper.hat 2015年

Answers:


14

为了进一步扩展乔恩的答案:

是的,这与您要使用的MOSFET有关。

N沟道MOSFET在开关逻辑方面比P沟道好得多,因为:

  • 它们的电阻通常要低得多(RDSON
  • 他们打开和关闭更快

因此,对于漏极开路配置(I2C就是这种情况),使用带有N沟道MOSFET的“高怠速”配置,而不是使用P沟道MOSFET的“低怠速”配置,更便宜,更容易。

第三种选择是使用N沟道MOSFET的“空闲低”,但是为此,您需要高压栅极驱动器来将栅极电压升高到足够高于源极电压的水平,以使MOSFET能够导通。对于小型通信总线不切实际,但是这种配置实际上在用于H桥的电机驱动中非常普遍,因为您希望在H桥的高侧和低侧之间具有相同(或相似)的响应。在H桥中使用P通道和N通道对通常意味着您必须在关闭P通道和打开N通道之间包含一个死区,因为这会花费更长的时间,并且降低了电源效率。

但是对于需要高速,低成本和简单易用的小型通信总线(如I2C),迄今为止,具有N沟道MOSFET和上拉电阻的“空闲高”是最经济的。


我不同意I2C(至少在其初始设计中)将“高速”作为考虑因素。如果这是目标,那么电阻上拉几乎不是实现高速的方法。
Photon

1
不要将更高速度的切换与更高的带宽混淆。高速切换为您提供了更清晰的边缘,这意味着更可靠的通信。
Majenko

1
电阻上拉也不是实现更高开关速度的方法。
Photon

这就是为什么为I2C选择正确的电阻值很重要的原因,以及为什么Arduino对于默认使用内部上拉电路有害。
Majenko

是的,您可以选择电阻以获得更好的上升时间。但是整个系统仍然比图腾柱驱动器更慢和/或使用更多功率(这当然会增加其他成本)。
Photon

12

被动上拉/主动下拉的另一个优点是,它可以在一定范围的电源电压下工作。请注意,IIC明确指定了数字高电平和低电平。这些电平足够低,无法使用3.3 V上拉电阻。因此,可以构建可同时使用5 V和3.3 V电源的设备。实际上,IIC总线可以上拉至3.3 V,这将与总线上混合使用不同电压分别供电的设备一起工作。


我几乎是100%这是他们想要的答案,我有一个朋友在一次大型CPU制造公司的采访中被问到(猜测是哪一家),这就是他们想要的答案。
user34920'5

6

尽管就速度/面积而言,NMOS确实比PMOS具有优势,但是当您谈论一个或两个引脚上的驱动器时,这种差异实际上是很小的。毕竟,大多数输出​​驱动器实际上是需要NMOS和PMOS的图腾柱类型,因此,无论选择下拉还是上拉配置,它们最终都会得到比图腾小的输出驱动器。极点驱动器。

但是,与PMOS开漏相比,NMOS开漏输出有一个好处,它并不直接适用于I2C:当VCC为正时,NMOS开漏允许具有不同VCC电平的芯片相互连接。这就是为什么有许多NMOS开漏离散逻辑IC可用的(部分)原因。

另一方面,我不知道市场上有任何可用的PMOS开漏芯片。实际上,我不相信我曾在任何芯片上遇到过PMOS开漏输出。(我已经使用ECL多次,它具有NPN漏极开路输出,其行为与PMOS漏极开路相似)

NMOS开漏离散逻辑芯片的可用性使电子设计人员比PMOS开漏更熟悉NMOS开漏。

分立芯片的熟悉度和可用性(例如,用于原型设计)都可能影响I2C的设计人员选择NMOS开漏配置。


6

我猜答案可以归结为我们为什么首先使用否定接地惯例(在半导体时代之前,这肯定不是普遍存在的)。原因是由于N沟道设备中使用的多数载流子类型的物理特性,其性能优于P沟道设备。

在集成电路的早期,这是一个严重的局限性,因此,人们首选使用N沟道(或NPN)晶体管来实现可能的最高性能。由此,我们得到了一个负接地系统和集电极开路输出,这需要使用上拉电阻而不是下拉电阻。

当然,I2C总线几乎不是高速的,因此没有理由不能使用下拉电阻来实现,但也没有优势。因此,我们坚持约定,并且使用上拉。


2

这是一些(基于历史的)推测。

当您具有上拉(而不是推挽)时,显然可以有多个设备争用总线,而不会产生过多的电流(这是一件好事-但通过下拉即可实现相同的功能)。

在双极型晶体管的“旧时代”中,最简单的TTL逻辑使用带NPN晶体管的集电极开路-一切都接地,这使得无论总线电压如何,触发电平都易于定义。而且,NPN比PNP更快。

如果我有自己的电源电压工作的多个设备以及电源电压不是恒定的,然后有上拉,而不是一个下拉变得势在必行。如果有多个设备试图将总线拉到各自的供电轨,则电流将不受限制,并且可能会发生故障。至少他们都同意地面的价值,因此不会出现此问题。

有了CMOS,情况就发生了变化-现在的触发电平是中轨。但是EE可以是传统的一堆。当然,由于上述原因,从晶体管早期开始,我什至从未质疑过上拉电阻的选择。

正如我所说,这只是猜测。


1

这可能是历史性的事情。

实际上,旧晶体管和集成电路在5 V时消耗的功率比在0 V时要少。由于两个电平之间存在显着差异,设计人员选择将“空闲”状态设为5V。然后,随着时间的流逝,晶体管和IC不断改进,使两种状态消耗的电量大致相同,但没有真正的理由更改标准。

现在,您看到很多类似的事情-空闲状态为5 V-只是因为标准从未改变。


大多数IC消耗的功率多于其提供的功率,这仍然是事实,因此它仍然适用。
乔尔·B

1

自从阅读I2C规范已有很多年了,但是我记得它最初使用时人们经常将其称为2线开放收集器总线。它使连接和碰撞检测超级容易,即使发生位撞也是如此。即使在20年前,它也不被认为是高性能总线,只是便宜又容易。


1

我会说这是因为I2C被定义为总线,所有连接的单元都应为漏极开路或集电极开路。这意味着它只能将总线驱动为低电平,而不能驱动为高电平。(当输出驱动晶体管关闭时,该引脚处于高阻抗状态。)

该方案提供了一些不错的好处,例如,您可以连接具有不同信号电压的设备,并且总线可以根据通信错误进行自我修复。

显然,该标准可以反过来定义为空闲/低/高激活配置,这里的其他答案很好地触及了该元素。

来源:Vincent Himpe撰写的LabWorX 1,《掌握I2C总线》。关于I2C的一本非常好的书,它具有历史背景,如何在硬件中实现它以及如何在软件中使用它和调试实现。


1

尚未有人充分解决的真正答案是,它允许您连接由不同电压供电的设备(只要I / O引脚可以承受)。例如,只要1.8V设备的IO可以承受最高3.3V的电压,则3.3V设备可以与断电1.8V的设备通信。当然,每个设备都可以驱动0V,但并不是每个设备都可以驱动上拉电阻上的电压。

此外,大多数IC吸收的电流多于其提供的电流。这是因为散热。因此,相对于向下拉电阻提供电流(驱动高压),该器件从上拉吸收电流(驱动接地)要容易得多。

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.