0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

I2C通讯为什么要用开漏输出和上拉电阻?

朱老师物联网大讲堂 2024-05-16 08:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、I2C总线简介

I2C(Inter-Integrated Circuit)总线是一种双向串行通信总线,由两根线组成:SDA(数据线)和SCL(时钟线)。这两根线都是双向的,并且是开漏输出的,这意味着每个设备都可以将线拉低(Ground),但不能将线拉高(Vcc)。这种设计使得多个设备可以共享同一条总线,以进行通信。

b9fa7726-1318-11ef-9118-92fbcf53809c.png

二、I2C接口接外部上拉电阻的原因

I2C(Inter-Integrated Circuit)接口在使用时需要连接外部上拉电阻,主要原因包括以下几点:
开漏(Open-drain)或开集电极(Open-collector)输出:I2C总线上的设备如主设备和从设备使用开漏或开集电极的输出方式来驱动总线。这意味着,设备只能将线路拉低(接地),而不能直接将线路拉高至供电电压。因此,需要外部上拉电阻来将线路拉高。多主设备配置:I2C允许多个主设备存在于同一总线上。为了防止输出冲突(例如,一个设备尝试将线路拉高,而另一个设备尝试将线路拉低),I2C设计为只能通过外部上拉电阻来将信号线拉高,从而简化了总线管理。逻辑状态的稳定和可靠性:外部上拉电阻确保在没有设备主动驱动线路时,数据线(SDA)和时钟线(SCL)能稳定地保持在高电平状态。这有助于提高信号的可靠性和减少误读。灵活的电压级别:由于I2C设备可以支持不同的逻辑电平,使用外部上拉电阻可以方便地匹配总线电平到特定的系统电压,例如3.3V或5V等,从而使得不同电压等级的设备可以共存于同一总线。电气特性的优化:通过选择合适的上拉电阻值,可以优化总线的电气特性,如上拉速率、功耗和噪声容限。电阻值太低会增加功耗和可能导致总线驱动器过载,而电阻值太高则可能导致信号上升时间过长,影响总线速率。所以综上所述,外部上拉电阻在I2C通信中发挥着至关重要的作用,保证了通信的稳定性和灵活性。在I2C通信中,使用推挽(push-pull)输出并不是标准的实现方式,因为这种输出方式与I2C设计的开漏(open-drain)或开集电极(open-collector)输出方式存在本质上的差异。下面详细解释为什么通常不使用推挽输出:总线冲突的风险:I2C总线设计为多主设备和多从设备可以共享同一总线。如果使用推挽输出,当一个设备试图将总线拉高而另一个设备试图将其拉低时,将会发生总线冲突,可能导致设备损坏。信号完整性问题:推挽输出可以同时驱动高电平和低电平,这在总线空闲和活跃时都维持总线状态。然而,这种方式缺乏开漏输出的灵活性,例如在总线检测和仲裁过程中动态改变控制权,这是I2C协议重要的一部分。电平匹配和灵活性降低:使用推挽输出意味着所有设备必须在相同的电压级别上操作,这限制了不同电压级别设备的互操作性。相比之下,开漏输出允许通过外部上拉电阻选择适当的电压级别,以匹配不同设备的电压要求。仲裁和时钟同步问题:I2C支持总线仲裁和时钟同步,这依赖于能够检测总线上的高电平和低电平状态。如果总线使用推挽输出,总线上的电平状态将由最后一个发送信号的设备完全控制,从而使得仲裁和同步变得困难或不可能。因此,尽管理论上可以通过某些特定设计让I2C总线上的设备使用推挽输出,但这样做通常需要额外的硬件支持和复杂的总线管理策略,且违背了I2C协议的基本设计原则。如果需要在I2C总线上实现类似推挽的功能,通常建议使用其他通信协议,如SPI或UART,这些协议本身就设计为支持推挽输出。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 上拉电阻
    +关注

    关注

    5

    文章

    366

    浏览量

    31553
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1547

    浏览量

    130489
  • 串行通信
    +关注

    关注

    4

    文章

    602

    浏览量

    36985
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    I2C死锁的问题

    产生8个时钟脉冲,然后低SCL信号为低电平,在这个时候,从设备输出应答信号,将SDA信号为低电平。 如果这个时候主设备异常复位,SCL就会被释放为高电平。此时,如果从设备没有复位,就会继续
    发表于 12-04 06:00

    I2C的缺点介绍

    距离限制: I2C 主要设计用于单个电路板内或位置较近的组件之间的短距离通信。总线的电容和电阻电阻限制了可实现的最大通信距离。随着
    发表于 11-27 06:10

    深入剖析I2C协议

    I2C是由Philips开发的简单的双向两线总线,在深入浅出理解SPI协议中,我们区分了单工,半双工,全双工协议数据流向的区别,根据特征,I2C协议属于半双工协议(即同一时刻,数据单向流动)。此外
    的头像 发表于 08-21 15:10 3276次阅读
    深入剖析<b class='flag-5'>I2C</b>协议

    请问I2C和驱动能力怎么修改?

    我想关闭芯片内部I2C并调整引脚的驱动能力,软件怎么操作呢?
    发表于 08-11 06:54

    AS32系列MCU芯片I2C模块性能解析与调试

    实现了IIC协议的标准模式和快速模式,支持多主机IIC总线架构。其中标准模式为100K,快速模式400K。 硬件设计 I2C 总线内部使用极开路输出驱动器,因此 SDA和 SCL 可以被
    的头像 发表于 06-20 16:31 765次阅读
    AS32系列MCU芯片<b class='flag-5'>I2C</b>模块性能解析与调试

    【技术说明】数字输出压力传感器的I2C通信

    地址进行软件寻址,且主从关系始终存在。总线连接设备的输出级采用架构设计,因此必须在总线上提供电阻
    的头像 发表于 06-19 11:02 1535次阅读
    【技术说明】数字<b class='flag-5'>输出</b>压力传感器的<b class='flag-5'>I2C</b>通信

    CYUSB3065 (CX3) GPIO 所有输出都是推挽还是? 需要配置外部/下拉电阻吗?

    CYUSB3065 (CX3) GPIO 所有输出都是推挽还是? 需要配置外部/下拉电阻
    发表于 05-12 07:42

    嵌入式硬件杂谈:推挽、、高阻态、电阻

    对于嵌入式硬件这个庞大的知识体系而言,太多离散的知识点很容易疏漏,因此对于这些容易忘记甚至不明白的知识点做成一个梳理,供大家参考以及学习,本文主要针对推挽、、高阻态、
    的头像 发表于 04-17 19:31 1820次阅读
    嵌入式硬件杂谈:推挽、<b class='flag-5'>开</b><b class='flag-5'>漏</b>、高阻态、<b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>电阻</b>

    I2C总线复用

    帝晶智慧屏I2C总线复用
    的头像 发表于 03-11 17:20 1855次阅读

    I2C总线通信原理 如何设计I2C总线电路

    、高效的通信接口标准。I2C总线通信原理主要包括以下要点: 总线结构 : I2C总线仅使用两条信号线,即串行数据线(SDA)和串行时钟线(SCL)。 SDA线路用于传输实际的数据信息,而SCL线路则用于同步通信的时钟信号。 通信过程 : 主设备发起总线开始信号:将SDA线
    的头像 发表于 01-31 15:01 1886次阅读

    如何选择I2C总线电阻

    I2C总线是一种广泛使用的串行通信协议,它允许多个设备通过两条线(数据线SDA和时钟线SCL)进行通信。为了确保数据信号的稳定性和减少反射,I2C总线的数据线SDA和时钟线SCL都需要适当的
    的头像 发表于 01-17 15:43 1103次阅读

    I2C总线应用实例分析

    在现代电子系统中,I2C总线因其简单、灵活和高效的特点而被广泛应用于各种设备之间的通信。 I2C总线概述 I2C总线由Philips(现为NXP)在1980年代初期开发,最初用于音频和视频设备
    的头像 发表于 01-17 15:09 1244次阅读

    I2C总线上电阻阻值如何确定?

    导读I2C总线在产品设计中被广泛应用,尽管其结构简单,但经常发生电阻设计不合理的问题。本文将对I2C
    的头像 发表于 12-27 11:34 2397次阅读
    <b class='flag-5'>I2C</b>总线上<b class='flag-5'>拉</b><b class='flag-5'>电阻</b>阻值如何确定?

    使用GPIO模拟I2C的电路设计

    使用GPIO模拟I2C协议时,SDA和SCL线应配置为输出模式,来满足线“与”的功能,不建议配置为推挽输出模式,参考电路如下: 特殊情况
    发表于 12-23 11:20

    tpl0102使用gpio模拟i2c通讯通讯不通的原因?

    主芯片使用gpio模拟i2c通讯i2c信号使用4.7k的电阻拉到3.3v,原理图如图一;通讯
    发表于 12-17 07:15