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

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

3天内不再提示

I2C通信协议及其工作原理

柴火创客空间 来源:柴火创客空间 2023-04-19 09:36 次阅读

"也许你听说过I2C,或者你也正在使用I2C,但你有没有了解过什么是I2C?I2C是如何工作的?让我们一起了解一下什么是I2C?以及它的工作原理吧!"

什么是I2C

I²C(Inter-Integrated Circuit)是一种使用多主从结构的串行通信总线。它是由飞利浦在20世纪80年代初设计的。I2C对于主板、嵌入式系统手机和外围元件之间的通信是很方便的。由于其简单性,I2C被广泛用于微控制器传感器、显示器、物联网设备、EEPROM等的通信。I2C由两条线组成,SCL和SDA,这两条数据线需要连接到上拉电阻,当总线处于空闲状态时,SCL和SDA处于高电平,I2C总线按照一定的协议工作。

接下来,让我们看一下I2C协议。I2C支持多个从属设备,也就是说,多个I2C从属设备可以连接到一个I2C控制器上。这些不同的I2C从属设备有不同的设备地址,这样I2C主控制器可以通过I2C设备的设备地址访问指定的设备地址,一条I2C总线连接多个I2C设备,如图所示:

317192ee-ddf5-11ed-bfe3-dac502259ad0.png

SDA和SCL链接必须连接到一个上拉电阻,通常是4.7KΩ。其余的I2C从机与SDA和SCL线相连接,这样就可以通过SDA和SCL线访问多个I2C设备。

3186416c-ddf5-11ed-bfe3-dac502259ad0.png

I2C的特点

1. 只需要一条数据线SDA和一条时钟线SCL,SDA(串行数据线)和SCL(串行时钟线)都是双向的I/O线

SCL(串行时钟):串行时钟线,用于传输CLK信号,一般由主设备提供给从设备

SDA(串行数据):串行数据线,传输通信数据

2. 实现真正的多主总线,任何设备都可以同时作为主设备和从设备,但同时只能有一个主设备

3. 可以通过外部连接进行检测,便于系统故障诊断和调试

4. 连接在同一总线上的IC只受限于总线的最大电容,串行8位双向数据传输比特率在标准模式下可达100Kbit/s,在快速模式下可达400Kbit/s,在高速模式下可达3.4Mbit/s。

5. 总线上消耗的电流非常小。因此,在总线上扩展的设备数量主要由电容性负载决定,它可以抵抗高噪音干扰。增加一个总线驱动器可以使总线电容扩大10倍,传输距离可以达到15米;兼容不同电压等级的设备,工作温度范围广

6.接口电路是一个开路输出。它需要通过一个上拉电阻连接到电源VCC。当总线处于空闲状态时,两条线都是高电平。连接到总线上的外部器件是CMOS器件。输出端也是一个开路电路。

CORPORATE CULTURE

数据传输

主设备和从设备遵循以下协议格式进行数据传输。数据在主设备和从设备之间通过SDA数据线传输0和1的串行数据,一个串行数据序列的结构可以分为:

起始位

地址位(7bit或10bit)。

读和写位(1bit)

响应位(1bit)

数据位+响应位(数据位8bit;响应位1bit;数据+响应可反复多次传输,直至遇到停止位)

停止位

31a3c48a-ddf5-11ed-bfe3-dac502259ad0.png

启动位

当主设备决定开始通信时,它需要发送一个启动信号,并需要进行以下操作

首先,将SDA从VOH切换到VOL

然后将SCL从VOH切换到VOL

在主设备发出信号和启动条件后,所有的从属设备即使在睡眠模式下也会变得活跃,并等待接收一个地址位。

31b225de-ddf5-11ed-bfe3-dac502259ad0.png

地址位

地址位支持7位和10位,如果主站需要向从站发送/接收数据,必须先发送地址,然后从站才会对应,再与安装在总线上的从站地址相匹配。

响应位

响应位有2种类型:

ACK:从机正确接收数据或地址位+读写位

NACK:从机不回答,工作不正常。

每次主设备发送数据和读写位时,它将等待从属设备的响应信号ACK。

如果从属设备发来响应位信号ACK

如果没有响应信号NACK,SDA将输出一个VOH,这将导致主设备重新启动或停止

31c3ee9a-ddf5-11ed-bfe3-dac502259ad0.png

数据位

每次传输的数据总共有8位,由发送方设置,它需要将数据位传输给接收方。

传输后有一个ACK/NACK位,如果接收方成功接收了数据,从属方就发送一个ACK。否则,从机发送一个NACK。

数据可以多次发送,直到收到一个停止位。

停止位

当主设备决定结束通信时,它需要发送结束信号,并需要执行以下操作。

首先将SDA从VOL切换到VOH

然后SCL从VOH切换到VOL

31da9668-ddf5-11ed-bfe3-dac502259ad0.png

下面是显示完成的I2C时序图:

31ebb4b6-ddf5-11ed-bfe3-dac502259ad0.png

SCL线的同步化(时钟同步化)

SCL的同步是由于总线线 "AND"(开漏输出)的逻辑功能,也就是说,只要有一个节点发送低电平,总线就会显示为低电平。只有当所有节点都发送高电平时,总线才能出现高电平。正是由于线路 "AND "逻辑功能的原理,当多个节点同时发送时钟信号时,总线上会显示一个统一的时钟信号,这就是SCL的同步原理。

31fb5d8a-ddf5-11ed-bfe3-dac502259ad0.png

CORPORATE CULTURE

SDA仲裁

SDA仲裁

SDA线的仲裁也是基于总线具有线路 "AND "逻辑功能的原则。节点发送1位数据后,比较总线上呈现的数据是否与它发送的内容一致(类似于CAN总线的回读机制),一致继续发送否则退出竞争。SDA线的仲裁可以确保I2C总线系统正常通信,当多个主节点试图同时控制总线时,数据不会丢失。总线系统通过仲裁只允许一个主节点继续占用总线。

仲裁过程

DATA1和DATA2分别是主节点发送给总线的数据信号,SDA是总线上呈现的数据信号,SCL是总线上呈现的时钟信号。当主节点1和2同时发送启动信号时,两个主节点都发送高电平信号,这时,总线上的信号为高电平,两个主节点检测到总线上的信号与自己发送的信号相同,继续发送数据。在第二个时钟周期,两个主节点都发送低电平信号,总线上呈现的信号为低电平,继续发送数据。在第3个时钟周期,主节点1发送一个高电平信号,而主节点2发送一个低电平信号,根据总线的 "AND "线的逻辑功能,总线上的信号是低电平。这时,主节点1检测到总线上的数据与自己发送的数据不同,并断开数据的输出阶段,转向从机接收状态,这样主节点2赢得了总线数据没有丢失,即总线上的数据与主节点2发送的数据相同,主节点1转为从节点后继续接收数据,也没有丢失SDA线。因此在仲裁过程中,数据不会丢失。

小结:SDA仲裁和SCL时钟同步处理不是顺序进行的,而是同时进行的。在实际使用中,I2C很容易出现死锁。有两种常见的情况会发生死锁:

一种情况是,当从属设备回复ACK时,主设备异常复位。

另一种情况是,当从属设备回复的数据位为0时,主设备异常复位。

这两种情况的相同点是,当主设备被异常复位时,SDA处于被从属设备拉低的状态,而SCL在主设备复位后处于VOH(空闲状态)。此时,从设备将等待主设备将SCL拉低,以获取ACK或数据位,而主设备将等待从设备释放SDA线。主设备和从设备互相等待,在空中互相对视,进入死锁状态。

下面是一些解决死锁问题的常用方法:主设备检测到SDA线后,从设备就会释放SDA线。

主设备检测到SDA被拉低超过一段时间后,会主动复位从设备释放SDA。这种方法的前提是,从属设备有一个复位引脚,MCU可以控制从属设备的复位引脚使其复位。

在主设备检测到SDA被拉低超过一段时间后,它向时钟总线推送9个时钟,并占用从属设备的ACK位,这样从属设备就会释放SDA到一个VOH。

在主设备和从设备之间串联一个I2C缓冲器,它可以自动检测死锁情况。当检测到死锁时,它将主动断开与主设备的连接,并向从设备发送9个时钟。在从属设备释放SDA线后,它将重新与主设备建立连接。

I2C死锁问题不能从根本上避免,除了由MCU的异常复位引起的I2C死锁外,在正常的通信过程中,从属设备也可能异常地拉下SDA而引起死锁。因此,当死锁发生时,软件应设计成能够从死锁中恢复,从而使I2C通信能够继续。

CORPORATE CULTURE 时钟拉伸

时钟拉伸

什么是I2C时钟拉伸?在I2C的主从通信过程中,总线上的SCL时钟总是由主站产生和控制,但如果从站不能跟上主站的速度,I2C协议规定从站可以拉低SCL时钟线。传输会暂停,直到从机释放SCL线,然后继续传输。

320e963e-ddf5-11ed-bfe3-dac502259ad0.png

时钟拉伸是从属设备的一个可选配置。如果不启用,从机不能控制SCL;如果启用,从机可以通过强行将SCL拉低来降低传输速度。在SCL为VOL的期间,主机只能等待从机释放SCL。

CORPORATE CULTURE

重复启动

有时,主站需要在一次通信中进行多次信息交换,如与不同的从站传输信息,或切换读写操作,而又不想在此期间被其他主站干扰,那么可以使用 "重复启动条件"--在一次通信中,主站可以产生多个启动条件来完成多个信息交换,最后产生一个停止条件来结束整个通信过程。由于在此期间没有停止条件,所以主站一直占据着窃听器,而其他主站无法切换进来。

322290bc-ddf5-11ed-bfe3-dac502259ad0.png

CORPORATE CULTURE

下面是UART、I2c和SPI之间的区别

322fe4d8-ddf5-11ed-bfe3-dac502259ad0.png

你可能想知道,这三种通信方式中哪一种是最好的?是UART、I2C,还是SPI?

实际是没有最好的通信外设,每个通信外设都有自己的优点和缺点。

因此,用户应该选择最适合他们项目的通信外设。例如,如果你想要最快的通信外设,SPI将是最理想的。另一方面,如果用户想连接多个设备而又不太复杂,I2C将是最理想的,因为它可以连接多达127个设备,而且易于管理。

以下是一些支持I2C通信协议的产品

Seeeduino XIAO 系列

所有支持I2C、UART或SPI的XIAO系列单片机,这里有链接你可以查看Seeed Studio XIAO系列产品。

以下是XIAO系列的一些特点

拇指大小的外形尺寸,只有20×17.5毫米。专为空间受限的情况而制造。

多达11个可用IO支持多种接口,包括模拟、数字、IIC、UART、SPI等。

强大的内核,性能强大,适合多样化和复杂的应用。

轻松地将XIAO集成到其他板子上,实现大规模生产。

Wio Terminal

Wio Terminal是一个基于ATSAMD51的微控制器,具有蓝牙Wi-Fi无线连接功能,由Realtek RTL8720DN提供支持,与Arduino和MicroPython兼容。

以下是Wio终端的一些特点

强大的MCU:Microchip ATSAMD51P19的ARM Cortex-M4F内核,运行频率为120MHz。

可靠的无线连接:配备Realtek RTL8720DN,双频2.4Ghz/5Ghz Wi-Fi

完整的系统配备有屏幕+开发板+输入/输出接口+外壳

树莓派40针兼容的GPIO,可以作为树莓派的外围设备进行安装

支持Arduino、CircuitPython、Micropython、ArduPy(什么是ArduPy)、AT固件、Visual Studio代码

支持USB OTG

CORPORATE CULTURE

写在最后

I2C(Inter-Integrated circuit)协议是电子传输信号中常用的一种协议。

它是一种两线式串行双向总线,用于连接微控制器和外部设备,也因为它所需的引脚数只需要两条(CLK和DATA),硬件实现简单,可扩展性强,所以被广泛应用于系统内多个集成电路IC间的通信。

审核编辑:汤梓红

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

    关注

    112

    文章

    16332

    浏览量

    177803
  • 通信协议
    +关注

    关注

    28

    文章

    879

    浏览量

    40297
  • 总线
    +关注

    关注

    10

    文章

    2878

    浏览量

    88051
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1484

    浏览量

    123618
  • SDA
    SDA
    +关注

    关注

    0

    文章

    124

    浏览量

    28127

原文标题:网络通信 | I2C通信协议及其工作原理

文章出处:【微信号:ChaiHuoMakerSpace,微信公众号:柴火创客空间】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    I2C总线的工作原理和应用

    深入探讨I2C总线的工作原理与应用,带您了解这个在电子领域中扮演着重要角色的通信技术。 一、简介 I2C(Inter-Integrated Circuit)总线是一种由Philips公
    的头像 发表于 08-21 09:24 2101次阅读
    <b class='flag-5'>I2C</b>总线的<b class='flag-5'>工作原理</b>和应用

    3分钟理解通信协议I2C总线 #通信协议

    通信协议I2CI2C总线总线/接口技术
    硬声课堂
    发布于 :2021年10月18日 10:39:12

    i2c通信协议

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

    I2C通信协议硬软件

    目录12C通信协议硬软件I2CAHT20测温湿度参考12C通信协议I2C
    发表于 08-23 07:42

    I2C通信协议的原理是什么

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

    I2C总线协议及其应用(图)

    I2C总线协议及其应用
    发表于 06-01 20:22 7029次阅读

    I2C总线协议及其应用

    I2C总线协议及其应用 一、I2C总线介绍: ---- 由于大规模集成电路技术的发展,在单个芯片集成CPU以及组成一个单独工作系统
    发表于 02-08 11:23 1567次阅读
    <b class='flag-5'>I2C</b>总线<b class='flag-5'>协议</b><b class='flag-5'>及其</b>应用

    实验八-I2C通信协议

    实验八-I2C通信协议,感兴趣的可以瞧一瞧。
    发表于 09-22 16:42 2次下载

    I2C通信协议应该如何学习

    我最近刚做完I2C通信协议的编写与调试,下面介绍一下我从一开始理解夏老师的程序,修改程序,直到下板调试整个的学习过程,希望对大家学习 I2C 有一定的帮助。一、 分析源代码学习 I2C
    发表于 04-28 08:00 21次下载
    <b class='flag-5'>I2C</b><b class='flag-5'>通信协议</b>应该如何学习

    什么是I2C通信协议

    在本教程中,我们将学习如何在Raspberry Pi Pico中使用I2C引脚并遍历I2C扫描器代码。
    的头像 发表于 04-26 15:08 7775次阅读
    什么是<b class='flag-5'>I2C</b><b class='flag-5'>通信协议</b>?

    MPU6050的I2C通信协议

    不同硬件有不同的I2C协议
    发表于 12-06 12:21 3次下载
    MPU6050的<b class='flag-5'>I2C</b><b class='flag-5'>通信协议</b>

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

    I2C,即Inter-Integrated Circuit,是一种常用的串行通信协议,用于在器件之间——特别是两个或两个以上不同电路之间建立通信I2C Primer是最常用的
    的头像 发表于 06-15 15:29 5692次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>通信协议</b>:了解<b class='flag-5'>I2C</b> Primer、 PMBus和SMBus

    SPI和I2C通信协议:应用与区别

    本文深入解析了SPI和I2C这两种通信协议的特点、工作原理和应用场景。SPI适用于高速数据传输,常用于存储器芯片和显示器驱动等领域;I2C适用于低速控制和传感器数据传输,常用于温度传感
    的头像 发表于 04-22 16:45 1801次阅读

    I2C总线协议工作原理和寻址格式

    等特点,在嵌入式系统设计中得到了广泛应用。本文将详细介绍I2C总线协议工作原理和寻址格式,帮助读者深入理解该协议
    的头像 发表于 05-27 15:47 1719次阅读

    简单认识I2C通信协议

    I2C(Inter-Integrated Circuit)通信协议是由飞利浦公司(现为恩智浦半导体)开发的一种简单、双向二线制同步串行总线协议。自1982年发布以来,I2C
    的头像 发表于 07-25 18:06 1433次阅读