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

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

3天内不再提示

I2C 为什么只要两根线就能搞定通信?

信盈达 2026-01-04 09:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

到目前为止,我们已经讨论了 SPI 通信UART 通信的基础知识,现在让我们讨论本系列的最后一个协议,即集成电路间协议(I2C)。

如果您曾经构建过使用 OLED 显示器 、 气压传感器陀螺仪/加速度计模块的项目,您可能会发现自己正在使用 I2C。


I2C 通信简介

I2C 结合了 SPI 和 UART 的最佳特性。使用 I2C,您可以将多个从机连接到单个主机(类似 SPI),并且可以让多个主机控制一个或多个从机。当您希望使用多个微控制器将数据记录到单个存储卡或将文本显示到单个 LCD 时,这非常有用。


与 UART 通信一样,I2C 仅使用两根线在设备之间传输数据:

c149eb64-e90a-11f0-8ce9-92fbcf53809c.jpg

SDA(串行数据) ——主机和从机发送和接收数据的线路。

SCL(串行时钟) ——传输时钟信号的线路。

I2C 是一种串行通信协议,因此数据沿着单根线(SDA 线)逐位传输。

与 SPI 类似,I2C 也是同步的,因此位的输出与位的采样通过主机和从机共享的时钟信号同步。该时钟信号始终由主机控制。

c161df58-e90a-11f0-8ce9-92fbcf53809c.jpg

I2C 的工作原理

使用 I2C 时,数据以消息形式传输。 消息被分解成数据帧 。每条消息包含一个地址帧(包含从设备的二进制地址)以及一个或多个数据帧(包含正在传输的数据)。消息还包含起始和停止条件、读/写位以及每个数据帧之间的 ACK/NACK 位:

c169641c-e90a-11f0-8ce9-92fbcf53809c.jpg

起始条件: 在 SCL 线从高电平切换为低电平之前, SDA 线从高电平切换为低电平。

停止条件: SCL 线从低电平变为高电平后, SDA 线也从低电平变为高电平。

地址帧: 每个从机独有的 7 位或 10 位序列,用于在主机想要与从机对话时识别该从机。

读/写位: 单个位指定主机是否向从机发送数据(低电压电平)或向从机请求数据(高电压电平)。

ACK/NACK 位: 消息中的每一帧后面都有一个确认/不确认位。如果成功接收地址帧或数据帧,接收设备会向发送方返回一个 ACK 位。


寻址

I2C 没有像 SPI 那样的从机选择线,因此它需要另一种方式让从机知道数据正在发送给它,而不是其他从机。它通过寻址来实现这一点。地址帧始终是新消息中起始位之后的第一个帧。

主设备将其想要通信的从设备的地址发送给与其连接的每个从设备。然后,每个从设备将主设备发送的地址与其自身的地址进行比较。如果地址匹配,则向主设备发送一个低电压 ACK 位。如果地址不匹配,则从设备不执行任何操作,SDA 线保持高电平。


读/写位

地址帧末尾包含一个位,用于告知从机主设备是要向其写入数据还是从其接收数据。如果主设备要向从机发送数据,则读/写位为低电平。如果主设备正在向从机请求数据,则该位为高电平。


数据框

主机检测到从机的 ACK 位后,即可准备发送第一个数据帧。

数据帧始终为 8 位长,并以最高有效位优先发送。每个数据帧后紧接着一个 ACK/NACK 位,用于验证该帧是否已成功接收。主设备或从设备(取决于发送数据的设备)必须接收到 ACK 位,才能发送下一个数据帧。

所有数据帧发送完毕后,主机可以向从机发送停止条件,以停止传输。停止条件是指 SCL 线电压由低变高后,SDA 线电压由低变高,而 SCL 线电压保持高电平。


I2C 数据传输步骤

1、主机通过将 SDA 线从高电平切换到低电平, 然后将 SCL 线从高电平切换到低电平,向每个连接的从机发送启动条件:c17cfe78-e90a-11f0-8ce9-92fbcf53809c.jpg
2、主设备向每个从设备发送其想要与之通信的从设备的 7 位或 10 位地址,以及读/写位:c195f8d8-e90a-11f0-8ce9-92fbcf53809c.jpg


3、每个从机将主机发送的地址与自身地址进行比较。如果地址匹配,从机将 SDA 线拉低一位,返回 ACK 位。如果主机发送的地址与从机自身的地址不匹配,从机将 SDA 线保持高电平。c1b28534-e90a-11f0-8ce9-92fbcf53809c.jpg

4.主机发送或接收数据帧:

c1c1ee52-e90a-11f0-8ce9-92fbcf53809c.jpg


5、每个数据帧传输完成后,接收设备都会向发送方返回另一个 ACK 位,以确认成功接收该帧:c1dd2ae6-e90a-11f0-8ce9-92fbcf53809c.jpg


6、要停止数据传输,主机在切换 SDA 为高之前,通过将 SCL 切换为高来向从机发送停止条件:c1e6cb8c-e90a-11f0-8ce9-92fbcf53809c.jpg


单主多从

由于 I2C 使用寻址技术,因此一个主设备可以控制多个从设备。使用 7 位地址,可以提供 128(2 ^7 )个唯一地址。使用 10 位地址并不常见,但可以提供 1,024(2 ^10 )个唯一地址。要将多个从设备连接到一个主设备,请按如下方式连接它们,并使用 4.7K 欧姆上拉电阻将 SDA 和 SCL 线连接到 Vcc:

c1ffc07e-e90a-11f0-8ce9-92fbcf53809c.jpg

多主多从

多个主设备可以连接到一个或多个从设备。同一系统中多个主设备的问题在于,当两个主设备尝试同时通过 SDA 线发送或接收数据时。为了解决这个问题,每个主设备在发送消息之前都需要检测 SDA 线是低电平还是高电平。如果 SDA 线为低电平,则表示另一个主设备已控制总线,该主设备应等待发送消息。如果 SDA 线为高电平,则表示可以安全发送消息。要将多个主设备连接到多个从设备,请使用下图,并使用 4.7K 欧姆上拉电阻将 SDA 和 SCL 线连接到 Vcc:

c208460e-e90a-11f0-8ce9-92fbcf53809c.jpg

I2C 的优点和缺点

与其他协议相比,I2C 有很多方面可能听起来比较复杂,但有一些很好的理由可以解释为什么您可能想或不想使用 I2C 来连接特定设备:

优点

仅使用两根电线

支持多主多从

ACK/NACK 位确认每个帧已成功传输

硬件比 UART 简单

著名且广泛使用的协议


缺点

数据传输速率比 SPI 慢

数据帧的大小限制为8位

实现所需的硬件比 SPI 更复杂

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

    关注

    18

    文章

    6488

    浏览量

    140350
  • 主机
    +关注

    关注

    0

    文章

    1075

    浏览量

    36889
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1566

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    i2c总线是什么意思 i2c通信咋样 i2c通信的详细讲解

    I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
    发表于 07-27 14:23 2466次阅读
    <b class='flag-5'>i2c</b>总线是什么意思 <b class='flag-5'>i2c</b><b class='flag-5'>通信</b>咋样 <b class='flag-5'>i2c</b><b class='flag-5'>通信</b>的详细讲解

    【NuMaker-M2354试用】I2C测试分享

    I2C( Inter Integrated Circuit)总线是 PHILIPS 公司开发的一种半双工、双向二线制同步串行总线。I2C 总线传输数据时只需两根信号
    发表于 07-27 15:38 1118次阅读
    【NuMaker-M2354试用】<b class='flag-5'>I2C</b>测试分享

    基于MM32F0140的I2C与24C02通信

    I2C(Inter-Integrated Circuit)是一种通用的总线协议,实现I2C需要两根信号线完成信息交换
    的头像 发表于 09-28 16:52 4094次阅读
    基于MM32F0140的<b class='flag-5'>I2C</b>与24<b class='flag-5'>C</b>02<b class='flag-5'>通信</b>

    I2C的简介

    的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。I2C是半双工通信I2C只有两根双向通信
    发表于 08-20 06:58

    I2C总线的原理是什么

    采用串行总线技术可以大大简化硬件的设计,体积减少,可靠性高。常见的总线,I2C(inter IC bus),单总线,SPI总线。I2C串行总线:(1)进行多主机通信2
    发表于 01-18 07:36

    i2c总线相关知识

    I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序
    发表于 12-06 10:48 4653次阅读
    <b class='flag-5'>i2c</b>总线相关知识

    浅谈I2C总线,I2C接口和SPI接口的作用相同

    SDA 和 SCL 都是双向的。SPI 总线有两根单独的线,分别用于个方向的通信,而 I2C 总线不同,它使用同一
    的头像 发表于 03-21 10:24 2.6w次阅读
    浅谈<b class='flag-5'>I2C</b>总线,<b class='flag-5'>I2C</b>接口和SPI接口的作用相同

    如何使用示波器解决I2C通信开发中遇到的问题

    I2C总线仅需采用两根通信线(一为串行数据线“SDA”,一
    发表于 09-26 16:16 8722次阅读
    如何使用示波器解决<b class='flag-5'>I2C</b><b class='flag-5'>通信</b>开发中遇到的问题

    I2C总线控制系统的构成_I2C总线控制系统的特点

    I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
    发表于 01-06 14:48 2126次阅读
    <b class='flag-5'>I2C</b>总线控制系统的构成_<b class='flag-5'>I2C</b>总线控制系统的特点

    I2C总线物理拓扑结构_I2C总线协议解析

    I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时
    的头像 发表于 09-24 14:12 7464次阅读
    <b class='flag-5'>I2C</b>总线物理拓扑结构_<b class='flag-5'>I2C</b>总线协议解析

    你不能不知的I2C总线

    4.8 I2C总线I2C总线(Inter-Integrated Circuit Bus)是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根
    发表于 12-05 12:36 14次下载
    你不能不知的<b class='flag-5'>I2C</b>总线

    简述I2C总线协议

    I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时
    的头像 发表于 02-13 10:14 2553次阅读
    简述<b class='flag-5'>I2C</b>总线协议

    I2C模块的用法干货分享

    I2C总线是一种双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
    发表于 06-06 15:10 1707次阅读
    <b class='flag-5'>I2C</b>模块的用法干货分享

    I2C通信时序应用案例解析

    I2C总线是一种十分流行并且强大的总线,其多用于一个主机(或多个)与单个或多个从设备通讯的场景。图1表明了多种不同的外设可以共享这种只需要两根线便可以连接到处理器的总线,相对于其他接口来说,这也是
    发表于 06-09 10:05 1885次阅读
    <b class='flag-5'>I2C</b>的<b class='flag-5'>通信</b>时序应用案例解析

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

    一、I2C总线简介I2C(Inter-IntegratedCircuit)总线是一种双向串行通信总线,由两根线组成:SDA(数据
    的头像 发表于 05-16 08:10 1.2w次阅读
    <b class='flag-5'>I2C</b>通讯为什么要用开漏输出和上拉电阻?