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

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

3天内不再提示

I2C基础知识点汇总,I2C通信实际如何工作?

科技观察员 来源:英锐恩 作者:英锐恩 2023-07-07 11:43 次阅读

I2C通信是内部集成电路的简称,它是飞利浦半导体开发的一种通信协议,用于在中央处理器和同一电路板上的多个IC之间仅使用两条公共电线传输数据。

由于其简单性,它被广泛用于微控制器传感器阵列、显示器、物联网设备、EEPROM等之间的通信。

这是一种同步串行通信协议。这意味着数据位以参考时钟线设置的规则时间间隔一个一个地传输。

一、I2C的特征

以下是I2C通信协议的一些重要特性:

(1)只需要两条公共总线(线)即可控制I2C网络上的任何设备/IC;

(2)无需像UART通信那样事先约定数据传输速率。因此可以根据需要随时调整数据传输速度;

(3)用于验证传输数据的简单机制;

(4)使用7位寻址系统来定位I2C总线上的特定设备/IC;

(5)I2C网络易于扩展,新设备可以简单地连接到两条公共I2C总线上。

二、I2C的硬件

1、物理I2C总线

I2C总线(接口线)仅由两条线组成,称为串行时钟线(SCL)和串行数据线(SDA)。要传输的数据通过SDA线发送,并与来自SCL的时钟信号同步。I2C网络上的所有设备/IC都连接到相同的SCL和SDA线,如下所示:

20211013173237.jpg

两条I2C总线(SDA、SCL)都用作开漏驱动器。这意味着I2C网络上的任何设备/IC都可以将SDA和SCL驱动为低电平,但不能将它们驱动为高电平。因此,每条总线都使用一个上拉电阻,默认情况下将它们保持在高电平(正电压)。

使用开漏系统的原因是没有短路的可能性,当一个设备试图将线路拉高而其他设备试图将线路拉低时,可能会发生短路。

二、主从设备

连接到I2C总线的设备分为主设备或从设备。在任何时刻,只有一个主设备在I2C总线上保持活动状态。它控制SCL时钟线并决定要在SDA数据线上进行什么操作。

响应来自该主设备的指令的所有设备都是从设备。为了区分连接到同一I2C总线的多个从设备,每个从设备在物理上都分配了一个永久的7位地址。

当主设备想要向从设备传输数据或从从设备传输数据时,它会在SDA线上指定这个特定的从设备地址,然后继续传输。因此,有效的通信发生在主设备和特定从设备之间。

所有其他从设备都不会响应,除非它们的地址由SDA线上的主设备指定。

20211013173306.jpg

三、数据传输协议

主设备和从设备遵循以下协议(规则集)以在它们之间传输数据。

数据通过单个SDA数据线在主设备和从设备之间传输,通过0和1(位)的模式序列。每个0和1序列称为一个事务,每个事务中的数据结构如下:

20211013173335.jpg

1、开始条件

每当主设备/IC决定开始一个事务时,它会在SCL线从高电平切换到低电平之前将SDA线从高电压电平切换到低电压电平。

一旦主设备发送启动条件,所有从设备即使处于睡眠模式也会激活,并等待地址位。

20211013173409.jpg

2、地址块

它由7位组成,并填充主设备需要发送/接收数据的从设备地址。I2C总线上的所有从设备将这些地址位与其地址进行比较。

3、读/写位

该位指定数据传输的方向。如果主设备/IC需要向从设备发送数据,则该位设置为“0”。如果主IC需要从从设备接收数据,则将其设置为“1”。

4、ACK/NACK位

它代表已确认/未确认位。如果任何从设备的物理地址与主设备广播的地址一致,则该位的值由从设备设置为“0”。否则它保持逻辑“1”(默认)。

5、数据块

它由8位组成,它们由发送方设置,需要传输到接收方的数据位。该块后跟一个ACK??/NACK位,如果接收器成功接收到数据,则接收器将其设置为“0”。否则它保持逻辑‘1’。

这种数据块后跟ACK/NACK位的组合被重复,直到数据完全传输。

6、停止条件

在通过SDA线传输所需的数据块后,主设备先将SDA线从低电平切换到高电平,然后再将SCL线从高电平切换到低电平。

20211013173435.jpg

注意:逻辑“0”或设置一个位为“0”相当于在SDA线上施加低电压,反之亦然。

四、I2C通信实际如何工作?

I2C通信/事务由主设备发起,以向从设备发送数据或从其接收数据。让我们详细了解这两种场景的工作原理

1、向从设备发送数据

当主设备尝试通过I2C总线向特定从设备发送数据时,会发生以下操作序列:

(1)主设备发送启动条件;

(2)主设备发送与目标从设备对应的7个地址位;

(3)主设备将读/写位设置为“0”,表示写;

(4)现在有两种可能:如果没有从设备与主设备发送的地址匹配,则下一个ACK??/NACK位保持为“1”(默认)。这向主设备发出信号,表明从设备识别不成功。主时钟将通过发送停止条件或新的启动条件来结束当前事务。如果存在与主设备指定地址相同的从设备,则从设备会将ACK/NACK位设置为“0”,这会向主设备发出信号,表明从设备已成功定位。

(5)如果从设备成功定位,则主设备现在发送8位数据,这些数据仅由目标从设备考虑和接收。该数据对剩余的从设备没有任何意义。

(6)如果数据被从设备成功接收,它会将ACK/NACK位设置为“0”,这表示主设备继续。

(7)重复前两步,直到数据全部传输完毕。

(8)在所有数据发送到从设备后,主设备发送停止条件,通知所有从设备当前事务已结束。

下图表示在SDA线上发送的总体数据位以及控制每个位的设备:

20211013173510.jpg

2、从从设备读取数据

除了以下内容外,操作顺序与之前的场景相同:

(1)主设备将读/写位设置为“1”而不是“0”,这向目标从设备发出信号,表明主设备正在等待来自它的数据;

(2)数据块对应的8位由从设备发送,ACK/NACK位由主设备设置;

(3)一旦主设备接收到所需的数据,它就会发送一个NACK位。然后从设备停止发送数据并释放SDA线。

如果主设备从从设备的特定内部位置读取数据,它首先使用前面场景中的步骤将位置数据发送到从设备。然后它以重复的开始条件开始读取数据的过程。

下图表示在SDA线上发送的总体数据位以及控制每个位的设备:

20211013173533.jpg

3、时钟拉伸的概念

假设主设备启动了一个事务并发送特定从设备的地址位,然后是“1”的读取位。特定的从设备需要发送一个ACK??位,紧接着是数据。

但是如果从设备需要一些时间来获取和发送数据到主设备,在这个间隙期间,主设备会认为从设备正在发送一些数据。

为了防止这种情况,从设备将SCL时钟线保持为低电平,直到它准备好传输数据位。通过这样做,从设备向主设备发送信号以等待数据位,直到时钟线被释放。

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

    关注

    28

    文章

    1346

    浏览量

    120828
  • I2C通信
    +关注

    关注

    0

    文章

    22

    浏览量

    8756
收藏 人收藏

    评论

    相关推荐

    I2C规范,I2C总线原理

    I2C规范,I2C总线原理1 序言
    发表于 04-09 18:34

    关于I2C的VI 编写

    各位大侠大姐们,下午好!小弟刚接触I2C方面的知识,想用LABVIEW 来编写VI来控制I2C工作,有外围IC(RELAY CARD 之类的)通信
    发表于 03-31 13:17

    I2C通信问题

    //定义从机读控制字节typedef unsigned char uint8;uint8 date;***it SDA=P2^0;//定义I2C通信的数据线***it SCL=P2^1
    发表于 10-05 17:35

    到底什么是I2C

    之间的通信链路。这一解释已经很清楚了,但我还有更多的问题:它究竟是什么?什么类型的设备使用I2CI2C如何帮我解决系统中遇到的实际问题?I2C
    发表于 07-23 04:45

    i2c通信协议

    1.1 i2c通信协议通信协议:用来实现数据传输。i2c物理总线:SCL(时钟线) SDA(数据线)i2c
    发表于 03-06 16:15

    I2C总线是什么

    I2C总线】 I2C总线(读做“IC”或“I2C”)是飞利浦公司发布了一款通信总线标准。所谓
    发表于 07-21 09:03

    什么是软件I2C和硬件I2C

    学习I2C总线通信协议,完成基于I2C硬件协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。具体任务:1)解释什么是“软件I2C”和“硬件
    发表于 08-23 06:19

    关于I2C协议的知识点解析的太仔细了

    关于I2C协议的知识点解析的太仔细了
    发表于 10-12 15:31

    I2C总线传输协议的知识点,总结的太棒了

    I2C总线传输协议的知识点,总结的太棒了
    发表于 11-04 07:14

    STM32硬件I2C重新编制I2C通信流程

    怎么用软件模拟I2C?怎样去编制I2C通信流程?
    发表于 12-14 07:09

    通用GPIO模拟I2C通信实现样例分享

    STM32 模拟I2C实现#通用GPIO模拟I2C通信实现样例1 GPIO初始化``#ifdef HW_I2C1//硬件I2C初始化//PA
    发表于 01-24 06:35

    软件模拟SPI/软件模拟I2C知识点汇总,绝对实用

    软件模拟SPI/软件模拟I2C知识点汇总,绝对实用
    发表于 02-08 06:54

    I2C通信协议的原理是什么

    I2C通信协议I2C通信原理I2C通信原理:I2C
    发表于 02-17 07:16

    I2C通信详解

    关于蓝桥杯嵌入式板子的I2C,如果你以前没有接触过I2C通信。重点:懂得通过电路图判断出I2C设备的地址会看I2C读写时序图。底层驱动,考试
    发表于 02-28 11:24

    I2C到底能做什么?

    什么?什么类型的设备使用I2CI2C如何帮我解决系统中遇到的实际问题?I2C是使主设备(例如处理器,微控制器(MCU)或专用集成电路(ASIC))能够与同一双线总线上的其它外围设备
    发表于 11-15 07:31