历史上的今天
返回首页

历史上的今天

今天是:2025年08月05日(星期二)

正在发生

2019年08月05日 | 一文了解I2C总线工作原理、优缺点和应用

2019-08-05 来源:EEWORLD

如果您正在使用OLED显示器,气压传感器或陀螺仪/加速度计模块的项目,您可能会发现正在使用I2C总线。

I2C总线简介

I2C结合了SPI和UART的优点。使用I2C,您可以将多个从设备连接到单个主设备上(如SPI),并且可以让多个主器件控制单个或多个从器件。当您希望有多个微控制器记录数据到单个存储卡或将文本显示到单个LCD时,这非常有用。

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

图片.png?imageView2/2/w/550

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

SCL(串行时钟) - 承载时钟信号的线路。

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

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

图片.png?imageView2/2/w/550


I2C如何工作

使用I2C时,数据被转换成messages,messages则被分解为数据帧。每条messages都有一个地址帧,其中包含从站的二进制地址,以及一个或多个包含正在传输的数据的数据帧。该消息还包括每个数据帧之间的启动和停止条件,读/写位和ACK / NACK位:

图片.png?imageView2/2/w/550


启动条件:在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从高切换到低电平。

图片.png?imageView2/2/w/550


2.主设备向每个从设备发送它想要与之通信的从设备的7或10位地址,以及读/写位:

图片.png?imageView2/2/w/550


3.每个从设备将主设备发送的地址与其自己的地址进行比较。如果地址匹配,则从器件通过将SDA线拉低一位来返回ACK位。如果主设备的地址与从设备的地址不匹配,则从设备将SDA线保持为高电平。

图片.png?imageView2/2/w/550


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

图片.png?imageView2/2/w/550


5.在传输了每个数据帧之后,接收设备将另一个ACK位返回给发送方以确认成功接收到该帧:

图片.png?imageView2/2/w/550


6.要停止数据传输,主机通过在将SDA切换为高电平之前切换SCL为高电平来向从机发送停止条件:

图片.png?imageView2/2/w/550


有多个从设备的单一主设备

由于I2C使用寻址,因此可以从单个主设备控制多个从设备。使用7位地址,可以使用128(27)个唯一地址。使用10位地址并不常见,但提供1,024(210)个唯一地址。要将多个从器件连接到单个主器件,请像这样连接它们,使用4.7K欧姆上拉电阻将SDA和SCL线连接到Vcc:

图片.png?imageView2/2/w/550


有多个从设备及多个主设备

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

图片.png?imageView2/2/w/550


I2C的优点和缺点

与其他协议相比,I2C听起来很复杂,不容易在程序中实现而导致数据丢失、无应答、“死等”等问题。但却有很多优点:

优点

只使用两根电线
支持多个主服务器和多个从服务器
ACK / NACK位确认每个帧都已成功传输
硬件没有UART那么复杂
众所周知且广泛使用的协议

缺点

数据传输速率比SPI慢
数据帧的大小限制为8位
实现比SPI更复杂的硬件

推荐阅读

史海拾趣

Defender Security公司的发展小趣事

随着网络安全问题的全球化趋势日益明显,Defender Security公司开始积极拓展国际市场。他们与多家国际知名的网络安全企业建立了合作关系,共同应对全球网络安全挑战。通过技术交流和合作研发,Defender Security不断提升自己的国际竞争力,逐渐成为了全球网络安全领域的重要力量。

AMS公司的发展小趣事

物联网技术的快速发展为网络安全带来了新的挑战和机遇。Defender Security公司积极应对这一变化,加大了对物联网安全领域的投入。他们与多家物联网企业合作,共同研发了适用于物联网设备的安全防护方案。通过不断优化和升级产品,Defender Security成功帮助物联网企业解决了安全问题,同时也为自己带来了新的增长点。

Frequency Sources公司的发展小趣事

Frequency Sources公司深知质量是企业生存和发展的基石。因此,公司始终将质量控制放在首位,建立了完善的质量管理体系和检测机制。从原材料采购到生产加工、成品检验等各个环节都严格把关,确保产品质量符合客户要求和行业标准。同时,公司还注重品牌建设和客户服务体验的提升,通过提供优质的售前咨询、售中支持和售后服务赢得了客户的信赖和好评。这些努力使得公司的品牌形象深入人心,成为了行业内的佼佼者。

Bytesonic Corporation公司的发展小趣事

经过几年的艰苦打拼,Bytesonic Corporation在1987年迎来了重要的转折点。这一年9月,公司资本金增至新台币500万元,为公司的进一步扩张提供了坚实的资金基础。有了更多的资本支持,公司开始加大在研发和市场推广上的投入,逐渐在行业内树立起了一定的品牌影响力。

Elite Enterprises (H K) Co Ltd公司的发展小趣事

在产品质量得到市场认可后,Elite Enterprises开始积极拓展国内外市场。公司参加了多个国际性的电子展会,展示了其高品质的LED产品,并成功吸引了众多客户的关注。同时,公司还加强了品牌建设,通过广告宣传和口碑传播等方式提高了品牌知名度和美誉度。

恒连电子(EVERCOM)公司的发展小趣事

随着公司实力的不断增强,恒连电子开始积极拓展国内外市场。在国内市场,公司通过与各大电商平台合作,加大品牌宣传力度,提高产品的知名度和美誉度。同时,公司还积极参与各类行业展会和论坛活动,与同行交流学习,提升公司的行业影响力。在国际市场方面,恒连电子通过与国外知名企业的合作,引进先进的技术和管理经验,提升公司的国际化水平。此外,公司还积极开拓海外市场,将产品出口到多个国家和地区。

问答坊 | AI 解惑

8位、32位MCU整体研发成本比较

前言:在多数的微控器(MCU)应用中「成本」向来被视为第一设计要则,因此许多工程师倾向(或被要求)使用初阶MCU来精省成本,然这仅是精省了量产时的硬件料件成本,若从整体成本的角度来审视,结果往往会适得其反。 过去,微控器(MCU)的应用设计相 ...…

查看全部问答>

Protel DXP2004 简体中文破解版

Altium Protel DXP是第一套完整的板卡级设计系统,真正实现在单个应用程序中的集成。设计从一开始的目的就是为了支持整个设计过程,Protel DXP让你可以选择最适当的设计途径来按你想要的方式工作。Protel DXP PCB线路图设计系统完全利用了Windows X ...…

查看全部问答>

求助:电烙铁故障问题

开始用的时候可以,但是时间久了就不送锡了。 而且等锡融化时,把电烙铁头插入锡中,锡还保持着融合状态。 不知大家有没有好的办法解决?…

查看全部问答>

RS485通讯

  谁知道RS485通讯的详细资料???现在急用,谢谢!!!…

查看全部问答>

这个钟不错

http://www.tudou.com/programs/view/2dcGxif077E…

查看全部问答>

急 求破解!困惑了几个星期了!

为啥用msp430驱动不了呢?用51就可以呢?msp430用的是默认的时钟!各位帮帮忙啊! /**************宏定义***************/ #define DataDir0     P4DIR      //LCD1602 #define DataPort0    ...…

查看全部问答>

求问15pin oled的问题~~~~~

项目上要用到的 板子已经做好了 网上买了15pin的oled 中景园的 已经焊到板子上了~ oled 和接口如下图: 然后给大家看下淘宝卖家给提供的外围电路原理图: 那么问题来了 ~ 我现在外界电路已经按他给的图画好了 然后我用的mcu是430f5529 可 ...…

查看全部问答>

求 《STM32库开发实战指南》(刘火良 版)光盘资料 ?

本帖最后由 yhye2world 于 2016-10-27 15:11 编辑 见附图,为 《STM32库开发实战指南》(刘火良 版)封面截图。 请教: 哪位 有这本书的 光盘资料 呀 ?给小弟 共享下 ! 先谢谢了 ! …

查看全部问答>