I2C信号为什么需要上拉电阻

百科   2024-08-31 23:09   浙江  

I2C信号需要上拉电阻的原因与其工作原理密切相关。I2C是一种开放漏极(open-drain)或开集电极(open-collector)的通信协议,这意味着驱动器(主设备或从设备)只能将线拉低到低电平(逻辑0),但不能主动将线拉高到高电平(逻辑1)。

在I2C通信中,SDA(数据线)和SCL(时钟线)在空闲状态下都应处于高电平。为了实现这一点,需要在总线的SDA和SCL线上添加上拉电阻。当总线上的所有驱动器都处于不工作状态(高阻态)时,这些上拉电阻会将信号线拉升至电源电压,确保线路保持高电平。

当需要发送低电平信号时,设备会通过将信号线连接到地,从而克服上拉电阻,使信号线达到低电平。当设备不再驱动线时,信号线会再次被上拉电阻拉回到高电平。

具体而言,上拉电阻的作用包括以下几个方面:

  1. 确保信号线在空闲时保持高电平:I2C总线在空闲时要求信号线为高电平状态,上拉电阻实现了这一功能。

  2. 防止浮空状态:没有上拉电阻时,SDA和SCL线在设备不驱动时可能处于不确定的状态,上拉电阻可以防止这种浮空状态,确保信号线有明确的电平。

  3. 适应多设备通信:I2C总线允许多个设备连接在同一条总线上,任何一个设备都可以驱动总线。上拉电阻使得每个设备都可以在不工作时保持总线的高电平,确保通信的可靠性。

因此,上拉电阻是I2C总线正常工作和通信稳定性的重要组成部分。

一些总线有输出输出接口,本质就是OC或OD的接口。I2C(Inter Integrated Circuit,内部集成电路)总线就是典型的OD输出结构的应用,典型的I2C电路都有上拉电阻,如图所示。

I2C接口的SCLSDA都是OD输出结构输出,这样的好处是可以作为双向数据总线。OCOD电路往往是刚刚说的输入输出管脚,然而一些总线的I/O就是一些双向数据的信号,其实就是把输入和输出短接在一起,然后把输出做成OCOD。这样处理不单用一根信号实现了双向数据,既可以输出又可以输入,同时解决了双向数据如果同时发送带来的数据冲突的问题。

一般来说,芯片的输出管脚是推挽结构。如果两个芯片的推挽结构输出管脚连接在一起,某一个时刻两个芯片同为输出,一个如果输出为高、一个输出为低,则可能出现短路的现象,工作中称为“总线冲突”,如图所示。用OCOD电路可以避免短路,所有绝大多数总线都是采用这种方式设计,如I2CLPCPCI等总线的输入输出管脚都是这样的管脚类型。当然也有些总线方式,I/O端口不需要外接,是芯片内置了上拉电阻。

对于I2C总线,总线上有两个芯片或多个芯片,所有芯片的引脚输出什么状态,都不会出现短路的情况引起数据冲突,配合各自芯片内部的数据识别电路及仲裁系统,双方都可以主动给另一方发送信息。也就是说,任何一方都可以将拉低,不拉低时就是释放总线,总线上为高电平,而不会影响起数据冲突。

I2C被设计成开放漏极(Open-Drain, OD)或开集电极(Open-Collector, OC)结构的原因主要与总线的多主机、多从机通信架构和信号线的共用特点有关。具体原因包括:

1. 支持多设备共用总线

I2C总线可以连接多个主设备和从设备,这就要求多个设备可以共享同一条SDA(数据线)和SCL(时钟线)。如果信号线是由设备主动驱动到高电平或低电平(推挽结构),则当一个设备试图驱动信号线为高电平而另一个设备试图驱动信号线为低电平时,会发生电平冲突,可能会导致短路或其他问题。

开放漏极或开集电极结构允许多个设备将线拉低,而不会引起冲突。当所有设备都不工作时(即处于高阻态),上拉电阻会将信号线拉回到高电平。这样,多个设备可以安全地共用同一条I2C总线,而不会发生冲突。

2. 简化多主机仲裁

I2C协议允许多个主设备共用同一总线。在多主设备尝试同时传输数据的情况下,需要进行仲裁。开放漏极/开集电极结构使得这种仲裁变得简单可行。

  • 仲裁过程是通过监视SDA线来完成的:每个主设备在发送数据时都监视SDA线。如果一个主设备试图发送高电平,但监视到的是低电平(因为另一个设备在拉低SDA线),它就知道有另一个设备在传输数据,因此它将停止传输。这个过程使得仲裁成为可能,而不会导致信号冲突。

3. 简化电路设计

使用开放漏极或开集电极的驱动方式可以简化电路设计。因为设备只需要一个下拉开关来控制信号线的电平(拉低到地),而不需要额外的电路来推动信号线到高电平。这样,电路更加简单,也减少了功耗。

4. 适应不同电压的设备

I2C总线的开放漏极/开集电极结构允许不同电压的设备共用一条总线。例如,一个3.3V的设备和一个5V的设备可以通过上拉电阻连接到同一个I2C总线,并且上拉电阻可以选择一个中间电压(如3.3V或5V)来适应不同电压的设备。

总的来说,I2C采用开放漏极或开集电极结构是为了实现多设备安全共用总线、支持多主设备仲裁、简化电路设计以及兼容不同电压的设备。这些特性使得I2C在简单的双线通信协议中具有很大的优势。

概述

硬件不是连连线

我做硬件,进阶的几个阶段

信号

为什么需要把模拟信号放大

滤波器的基本概念

一阶RC低通滤波器

为什么需要抗混叠滤波?

高速ADC基础

数字信号的本质也是模拟信号

为什么会有这么多电平标准?

模拟信号是如何变成一个数字信号的?

处理器

CPU、SoC、MCU什么区别

RISC与CISC

为什么MCU一般跑RTOS,SoC一般跑嵌入式Linux?

国产SoC厂家

一阵腥风血雨的收购之后,MCU哪家强?

接口

为什么需要各种接口?

GPIO内部结构及工作原理

UART

SPI

I2C

视频输出接口

为什么选择UART(串口)作为调试接口,而不是I2C、SPI等其他接口

—推荐书籍—

【推荐书籍】《电路设计工程计算基础》武晔卿

【推荐书籍】硬十(开发流程篇)

【推荐书籍】硬十(无源器件篇)

【推荐书籍】硬十(电源篇)

【推荐书籍】《高速电路设计实践》王剑宇

【推荐书籍】《高速电路设计进阶》王剑宇

【推荐书籍】《ADS信号完整性仿真与实战》第二版 蒋修国

硬十
热爱技术,乐于分享
 最新文章