登录/注册

I2C通信基本原理是什么

I2C是inter-integrated circuit的缩写,又名为TWI,只需要用两条物理线进行传输,分别命名为SDA和SCL, 用于传输serial data和serial clock。I2C工作时分为主从工作模式,而在同总线上可以存在多个主机。每一个连接到总线的器件都可以通过唯一的地址与总线连接,主机控制主机为发送器模式或是接收器模式。

更多

好的,很高兴为你讲解 I²C 通信的基本原理。简单来说,I²C 是一种同步、串行、半双工、基于主从架构的通信总线协议。它只需要两根线(时钟线 SCL 和数据线 SDA)就能连接多个设备。

以下是其基本原理的核心要点:

  1. 两条总线线缆 (Two-Wire Interface):

    • SCL (Serial Clock Line - 串行时钟线):主设备(Master)产生和控制的时钟信号线。它同步所有设备之间的数据传输速率。
    • SDA (Serial Data Line - 串行数据线): 承载实际传输数据的双向线。主设备和从设备(Slave)都可以在特定时刻驱动这条线(但同一时刻只能有一个设备驱动),数据在时钟上升沿或下降沿(取决于模式)被采样。
  2. 主从架构 (Master-Slave Architecture):

    • 主设备 (Master): 控制通信的发起者。它负责:
      • 生成时钟信号 (SCL)。
      • 发起数据传输(启动和停止通信)。
      • 指定与哪个从设备通信(通过地址)。
      • 控制数据传输的方向(读或写)。
      • 通常是一个微控制器(MCU)或 SoC。
    • 从设备 (Slave): 响应主设备命令的设备。它:
      • 侦听总线上的启动条件(Start Condition)。
      • 识别主设备发送的自身唯一地址
      • 接收主设备发送的数据或向主设备发送数据。
      • 在通信过程中对接收到的字节给出确认信号(ACK)。
      • 通常是各种外设,如传感器(温度、湿度、加速度计)、存储器(EEPROM)、实时时钟(RTC)、IO 扩展芯片等。
    • 一个 I²C 总线上只能有一个主设备同一时刻控制总线(但可以有多个主设备,需配合仲裁机制),但可以连接多个从设备(只要地址唯一)。
  3. 开漏输出和上拉电阻 (Open-Drain Outputs and Pull-up Resistors):

    • 连接到 SCL 和 SDA 线的器件通常使用开漏(或开集)输出驱动
    • 两根总线都通过上拉电阻连接到正电源电压(VDD)。
    • 这种结构意味着:
      • 任何设备都可以将线路拉低(驱动为逻辑 ‘0’)。
      • 当没有设备驱动线路时,上拉电阻将其拉高到逻辑 ‘1’(空闲状态)。
      • 天然实现了“线与”(Wire-AND) 功能:只有当所有设备都不拉低线路时,线路才为高电平;只要有一个设备拉低,线路就为低电平。这个特性对实现总线仲裁(Arbitration)时钟同步(Clock Synchronization)至关重要。
  4. 地址机制 (Addressing Mechanism):

    • 每个从设备在出厂时或在系统中被配置有一个唯一的 7 位(最常见)或 10 位 I²C 地址。
    • 主设备在启动通信后发送的第一帧完整数据就是目标从设备的地址(通常包含 7 位地址 + 1 位读写方向位)。
    • 所有从设备都会侦听这个地址。只有地址匹配的那个从设备才会在后续通信中响应主设备(发送 ACK/NACK 和数据),其他设备保持静默。
  5. 通信流程: 一次典型的 I²C 数据传输由以下几部分组成:

    • 起始条件 (Start Condition): 主设备在 SCL 为高电平时将 SDA 线从高电平拉到低电平。这个独特的边沿跳变告知所有从设备:通信开始/重新开始。
    • 地址帧 + R/W 位 (Address Frame + R/W Bit): 主设备发送 7 位(或 10 位)的从设备地址,紧接着发送 1 位数据方向位(Read/Write Bit:0 表示主设备要到从设备;1 表示主设备要从设备的数据)。
    • 应答位 (Acknowledge Bit - ACK/NACK): 每传输完一个完整的地址帧或数据帧(8位)后,接收方(地址帧时是目标从设备;数据帧时可能是主或从,取决于方向)必须在第 9 个时钟脉冲期间驱动 SDA 线为低电平(ACK),表示成功收到并准备继续。如果接收方在第 9 个时钟期间保持 SDA 为高电平,表示 NACK(未应答)。
    • 数据帧 (Data Frame): 在地址和 ACK 之后,开始传输数据帧。每帧 8 位(一个字节)。在每字节传输完后都有一个 ACK/NACK。传输方向由地址帧中的 R/W 位决定。
    • 停止条件 (Stop Condition): 主设备在 SCL 为高电平时将 SDA 线从低电平释放(拉回)到高电平。这个边沿跳变表示通信结束。
  6. 时钟同步和仲裁 (Clock Synchronization and Arbitration):

    • 时钟同步 (Clock Synchronization): 当多个可能的主设备(多主系统)同时尝试驱动总线时,SCL 线上的“线与”特性允许较慢的设备通过保持 SCL 为低电平(时钟拉伸,Clock Stretching)来延迟通信,直到它准备好处理下一个数据位。最终 SCL 时钟的频率由最慢的那个决定该位周期的设备决定。
    • 总线仲裁 (Bus Arbitration): 发生在主设备们同时尝试占用总线时(通过同时发出起始条件)。通过竞争 SDA 线上的数据位来裁决。在发送过程中,每个主设备都会同时比较它发送的位和 SDA 线上实际的电平(也是“线与”的结果)。如果主设备发送的是 ‘1’(不拉低 SDA),但检测到 SDA 被别的设备拉低成了 ‘0’,则该主设备知道它仲裁失败,立即释放 SDA 线(转为输入模式)并停止尝试发送,让赢得仲裁的主设备继续通信,整个过程数据不会丢失或损坏。

总结:

I²C 的核心是利用两根线(SCL, SDA),在主设备控制下,通过精确定义的启动、停止条件和地址帧,实现一个主设备与多个具有唯一地址的从设备之间的半双工通信。依靠开漏输出、上拉电阻、ACK/NACK 机制确保可靠传输,并通过时钟同步和总线仲裁支持多主环境。其简单性、低成本和连接设备多(地址限制内)的优势使其在嵌入式系统中广泛应用。

希望这个中文解释能清晰地说明 I²C 的基本原理!

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

I2C总线通信原理 I2C(Inter-Integrated Circuit)总线是一种用于集成电路之间进行

2025-01-31 15:01:00

I2C总线信号与测试案例(二)

前面一章讲解了I2C总线的基本原理,那么在电路设计完成打板回来,肯定要做信号测试来验证设计

2023-11-20 15:49:41

i2c采样是上升沿吗?

数据。在本文中,我们将详细讨论I2C采样的工作原理,采样时机以及如何进行I2C采样。 I2C采样的原理

2023-09-19 17:16:05

硬件I2C与模拟I2C

硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C

资料下载 佚名 2021-12-28 19:14:11

MCU实现I2C通信

当时接手这项工作时,对方给我一周的时间,我是自信可以在两三天内完成。因为对I2C的通信协议还是非常熟悉的,看下定时芯片RX-8025SA的规格书应该就可以搞定了。呵呵,又可以提前完成了!现在总结一下

资料下载 佚名 2021-11-01 16:24:42

判断I2C总线通信的异常及及解决方法

此问题由某客户提出,应用处理器AP 与MCU 进行I2C 通信,通信会经常发生异常,需要定位原因.

资料下载 佚名 2021-05-14 10:00:38

I2C通信协议应该如何学习

我最近刚做完I2C通信协议的编写与调试,下面介绍一下我从一开始理解夏老师的程序,修改程序,直到下板调试整个的学习过程,希望对大家学习 I2C 有

资料下载 Lynne 2020-04-28 08:00:00

Arduino教程之I2C模块使用教程资料免费下载

为什么叫I2C模块?和一元硬币差不多大小的一块PCB上放了三个芯片,分管三个功能:时间计算、温度侦测、数据存储。这三个芯片都是通过I2C总线通信

资料下载 佚名 2019-01-22 16:59:25

I2C通信协议:了解I2C Primer、 PMBus和SMBus

I2C Primer的基本特性和标准,并重点说明在通信实现过程中如何正确使用该协议。从I2C的

2023-06-15 15:29:01

I2C通信介绍及软测方法

本文主要讲解I2C通信介绍以及如何使用软件工具抓取通信波形,帮助开发人员更好的去理解I

2023-04-17 16:35:00

了解I2C Primer、PMBus和SMBus通信协议

I2C或内部集成电路是建立设备之间通信的常用串行通信协议,特别是对于两个或多个不同的电路。

2022-12-12 16:58:47

I2C总线的基本通信总结

在电子设计开发中I2C大家已经很熟悉了,每一种电子产品小到电子开关,大到卫星通信都会利用的I2C总线。据统计

2021-08-26 14:08:36

I2C通信的详细讲解

)I2C属于串行通信,所有的数据以位为单位在SDA线上串行传输。

2021-06-25 17:19:42

什么是I2C通信协议?

在本教程中,我们将学习如何在Raspberry Pi Pico中使用I2C引脚并遍历I2C扫描器代码。

2021-04-26 15:08:01

i2c通信的详细讲解

I2C属于串行通信,所有的数据以位为单位在SDA上串行传输

2020-11-24 14:09:59

7天热门专题 换一换
相关标签