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

    文章

    359

    浏览量

    30585
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1482

    浏览量

    123430
  • 串行通信
    +关注

    关注

    4

    文章

    569

    浏览量

    35320
收藏 人收藏

    评论

    相关推荐

    I2C总线为什么要接上电阻

    I2C为什么要接上电阻?因为它是输出。 为什么是
    的头像 发表于 11-20 10:07 325次阅读
    <b class='flag-5'>I2C</b>总线为什么要接上<b class='flag-5'>拉</b><b class='flag-5'>电阻</b>

    I2C协议的基础知识

    本文从I2C协议的概述开始,描述协议的历史、不同速度模式、物理层和数据帧结构,最后介绍I2C混合电压系统中电平兼容性以及电阻大小计算。
    的头像 发表于 10-22 15:51 339次阅读
    <b class='flag-5'>I2C</b>协议的基础知识

    请问TPA3130D2 FAULTZ是输出吗?

    ,TPA3130锁死,怎么让他自恢复呢? 通过MCU怎么控制? 3、FAULTZ 是 输出吗? FAULTZ直接串联10k电阻
    发表于 10-10 08:16

    I2C总线上电阻计算

    电子发烧友网站提供《I2C总线上电阻计算.pdf》资料免费下载
    发表于 10-08 09:54 1次下载
    <b class='flag-5'>I2C</b>总线上<b class='flag-5'>拉</b><b class='flag-5'>电阻</b>计算

    如何计算上电阻的值

    ,但在对性能有更高要求或特定条件下,则需要通过更为精确的计算来确定电阻值。本文将详细介绍如何计算上电阻的值。 首先,我们需要理解
    的头像 发表于 09-09 17:20 427次阅读

    I2C总线上电阻的必要性

    在电子通信领域,I2C总线作为一种广泛应用的双向串行通信协议,其稳定性和效率对于整个系统的性能至关重要。为了确保数据传输的可靠性,I2C总线设计时采用了
    的头像 发表于 09-09 17:16 823次阅读

    输出为什么加上电阻

    受到限制。为了提高输出的性能和可靠性,通常需要在电路中加入电阻
    的头像 发表于 07-14 10:46 1915次阅读

    求助,Proteus是否无法正确仿真STM32的输出

    Proteus仿真。通过STM32CubeMX将上述MCU的PB8、PB9引脚配置为输出且无内部/下拉电阻,并将两个引脚分别与PCF8
    发表于 05-29 06:29

    I2C组成原理及通讯模式

    SDA与SCL都外接了电阻,所以当SDA空闲时刻输出的永远是高电平,它对外设也有一定要求,要求外设的输出模式也是
    发表于 04-28 17:33 5702次阅读
    <b class='flag-5'>I2C</b>组成原理及<b class='flag-5'>通讯</b>模式

    STM32cubemx在和推挽输出模式下电阻和下拉电阻有什么作用和区别?

    只配置过输入的时候和下拉电阻。不知道在和推挽输出模式下
    发表于 03-27 07:20

    PSoc4 I2C配置下不起作用的原因是什么?

    I2C 为 4.7kΩ,驱动模式设置为极\"开路,驱动器低电平\" 但是,使用此设置,I2C 不会发出任何信号。 但是当设置为 “\"
    发表于 01-24 06:27

    请问如何让PSoc4的I2C配置下工作?

    当设置为 \" 时,低速行驶 \" 没有信号。 你知道这是什么原因吗? 设备:cyble-014008-00 I2C CLK:100kHz I2C SDA:P3 [4
    发表于 01-22 06:14

    XV4001BC车载用SPI/I2C输出接口的数字输出

    XV4001BC车载用SPI/I2C输出接口的数字输出,可实现角速度输出和温度传感器输出,满足汽车导航和
    发表于 01-02 16:33 0次下载

    最简单的总线通讯I2C通讯总线的原理原来这么好懂

    通讯I2C
    安泰仪器维修
    发布于 :2024年01月02日 11:16:31

    关于I2C总线的6个问题分析

    I2C总线上的电阻范围是多少? 回答: 总线电容是走线部分、连接部分、管脚部分的电容的总和。总线电容限制了
    发表于 12-25 09:19 1546次阅读