I2C 总线中的开漏概念?

电器工程 i2c
2022-01-15 17:39:56

(本人主要是软件背景,刚开始在嵌入式平台上工作。请问这是一个幼稚的问题......)

我打算为通过 I2C 总线连接到 MCU 的 EEPROM 编写驱动程序。所以我正在阅读有关 I2C 总线的教程。

教程说:

SCL 和 SDA 线都是“开漏”驱动器。这意味着芯片可以将其输出驱动为低电平,但不能将其驱动为高电平。 为了使线路能够变高,您必须为 5v 电源提供上拉电阻。从 SCL 线到 5v 线应该有一个电阻,从 SDA 线到 5v 线应该有一个电阻。整个 I2C 总线只需要一组上拉电阻,而不是每个设备,如下图所示:

在 SCL 和 SDA 上带有上拉电阻的 I2C 总线上的三个设备和 MCU 的图片

上图中的红色部分是我添加的。我想这就是整个画面的样子。

我的问题是:

  • 我添加的红色 MCU 是否正确?
  • 芯片加粗的部分是红色的MCU,对吧?
  • 为什么芯片不能把它推高是真的不能还是禁止
  • 简单的英语中的开漏是什么意思?

我搜索了一下,但似乎找不到明确的解释……也许类比会有所帮助。

4个回答

我添加的红色 MCU 是否正确?

不完全是。与其他设备一样,MCU 只是总线的另一个成员。MCU 在 I2C 总线上的运行方式并没有什么特别之处。MCU 可以识别任何一条线路何时为高电平或低电平,并且 MCU 可以拉动其中一条(或两条)线路本身,以便与总线上的所有其他设备进行通信。

芯片加粗的部分是红色的MCU,对吧?

这意味着 MCU 在某种程度上不同于 I2C 总线上的其他设备。但实际上,它并不特别。

为什么芯片不能把它推高?

如果您了解无源上拉、开漏总线的性质,您就会明白这不是一个合适的问题。您不希望任何设备将其推高,因为这将完全排除总线上的任何通信。只有当设备可以将总线拉低时,设备才能进行通信,以便总线上的所有其他设备都可以识别正在发生的活动。

open drain 用简单的英语是什么意思?

就像许多公共交通工具上使用的信号系统一样。车长有一根长长的“绳子”,沿线的任何人都可以拉下“绳子”,表示他们想在下一站下车。如果您将“绳索”固定为始终为高电平,则没有人可以拉动它来发出停止信号。

“芯片”是指任何 I2C 设备;通常,主机将驱动时钟,但 SDA 是双向的,因为从机有数据要传回。因此主从都可以拉动 SDA;除了主设备之外,高级设备也可能能够切换 SCL。

排水沟的一个简单类比是公共汽车,以及用于向驾驶员发出停车信号的绳索/安全带。公共汽车上的每个人都可以猛拉它并将其拉下,但是该线的张力会在您释放它后将其拉回。上拉的强度+线路中的电容将决定你能跑多快。

在电气上,它通常是一个带有 N 沟道 MOSFET 的引脚,可以打开以吸收电流并将线路拉低。释放 FET/将其关闭允许上拉电阻将总线值恢复为“1”。

我的问题是:

  • 我添加的红色 MCU 是否正确?
  • 芯片加粗的部分是红色的MCU,对吧?
  • 为什么芯片不能把它推高是真的不能还是禁止
  • 简单的英语中的开漏是什么意思?

我搜索了一下,但似乎找不到明确的解释......

一个非常清楚的在这里(如果你输入“open drain” ,维基百科会带你去那里)。

在此处输入图像描述

集电极开路(BJT) 或漏极开路(FET) 本质上是将 IC 引脚连接到地的 SPST 开关如果开关闭合,则引脚(和 I²C 线路)上的电压约为 0 伏。如果任何开关闭合(如果任何 IC 的任何引脚连接到同一条 SDA 或 SCL 线),则线路上的电压约为 0 伏。只有当所有开关都打开时,线路上的电压才会高(如 3.3 V),这就是线路需要单个上拉电阻的原因。

有时他们称其为"wired-OR""wired-NOR",但在我看来最准确地称为"wired-AND"当且仅当所有输出均为逻辑1时,该行的值为1如果任何输出变为逻辑0,则整行变为0

这就是开漏的意思。您的红色 MCU 只是另一个 I²C 设备,除非它可能是有线和SCL 线上的唯一驱动程序,除非发生时钟延长(任何其他 I²C 设备都可以根据需要将 SCL 线保持在低电平,这应该会阻止SDA线上的读或写周期)。

确实,任何 I²C 芯片不能不得将 SDA 或 SCL 线驱动为高电平。唯一可以将线路拉高的是连接到 +V DD的两个上拉电阻。

(感谢到目前为止的所有回复。在阅读了SparkFun 网站上的I2C 教程和各种相关材料几天后,所有这些回复现在对我来说开始有意义了。下面是我自己的总结。)

开漏或开集

这个行话只是描述了电路是如何构建的。正如链接robert bristow-johnson中所述,开漏/集电极电路在实际 IC 输出信号和暴露的 IC 引脚之间有一个。这是 BJT 的集电极或 MOSFET 的漏极暴露(我认为这就是它的意思)。上拉电阻通常连接到 IC 外部的引脚。如下所示:BJT/MOSFET open

漏极开路或集电极开路

它是拉高电压的电阻,而不是提供高压信号的 IC,所以我猜这Richard Crowley就是passive pullup.

总线争用

如果线路上所有设备的输出引脚都使用该电路,则两个设备引脚之间不可能发生电压降。所以没有2个设备会短路。