一文了解I2C总线工作原理、优缺点和应用

发布者:EEWorld资讯最新更新时间:2019-08-05 来源: EEWORLD关键字:I2C  总线 手机看文章 扫描二维码
随时随地手机看文章

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

I2C总线简介

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

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

图片.png

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

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

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

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

图片.png


I2C如何工作

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

图片.png


启动条件:在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


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

图片.png


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

图片.png


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

图片.png


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

图片.png


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

图片.png


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

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

图片.png


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

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

图片.png


I2C的优点和缺点

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

优点

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

缺点

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

关键字:I2C  总线 引用地址:一文了解I2C总线工作原理、优缺点和应用

上一篇:一文了解UART总线工作原理、优缺点和应用
下一篇:电力线通信设备常用的网络接口及原理解析

推荐阅读最新更新时间:2024-11-02 16:33

stm32 i2c通信 [操作寄存器+库函数]
I2C总线是由NXP(原PHILIPS)公司设计,有十分简洁的物理层定义,其特性如下: 只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL; 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器; 它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏; 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s; 连接到相同总线的IC 数量只受到总线的最大电容400pF 限制。 其典型的接口连线如下: I2C的协议
[单片机]
stm32 <font color='red'>i2c</font>通信 [操作寄存器+库函数]
PTH08T241W - 具备TurboTrans 的10 A 、4.5V 至14V 输入、陶瓷电容器版本、宽泛输出的非隔离式可调节电源模块
PTH08T240/241W 是一种额定电流为 10 A 的高性能非隔离式电源模块。这些模块拥有更小型的封装以及更多的功能特性,是第二代流行的 PTH 系列电源模块的典型代表。PTH08T241W 经过精心优化,可与各种陶瓷电容器协同工作。 PTH08T240/241W 的工作输入电压范围介于 4.5 V ~ 14 V 之间,要求采用单个电阻器就能将输出电压设置为 0.69 V 到 5.5 V 范围内的任意值。宽泛的输入电压范围使 PTH08T240/241W 尤其适用于采用松散调节的 8 V 至 12 V 中间分布总线的高级计算与服务器应用。此外,宽泛的输入电压范围还能支持 5 V、8 V 或 12 V 精确稳压的中间总线架构
[新品]
STM8硬件I2C配置
首先感谢网上分享的朋友分享资料,网上有很多教程配置STM8硬件I2C,但是也有说STM8硬件I2C有问题的,不过我还是通过实际项目已经调通STM8硬件I2C,所以在此分享经验; 1.选项字节配置 void Flash_Init_I2c(void) { FLASH_DeInit(); //恢复FLASH相关寄存器到默认值 FLASH_Unlock(FLASH_MEMTYPE_DATA); //解锁数据EEPROM FLASH_ProgramOptionByte(0x4803,0x40); //选项字节打开PB5,PB4的 I2C 复用功能 FLASH_Lock(FL
[单片机]
KINCO总线型HMI的特点及在电池管理系统中应用
一、概述 汽车是现代社会的重要交通工具,为人们提供了便捷、舒适的出行服务,然而传统燃油车辆在使用过程中产生了大量的有害废气,并加剧了对不可再生资源石油的依赖。作为能源消费大国,我国形势更为严峻,能源大量进口危及到国民经济正常运行和国家能源安全。在环境方面,交通能源消耗也是造成局部环境 污染 和全球温室气体排放的主要原因之一。 为了应对全球能源危机和气候变化,近年来世界各国纷纷加速推进汽车产业的转型升级,电动汽车作为传统燃油汽车的替代方案逐渐成为研究热点。但是 电池 及电池管理却是制约电动汽车发展的瓶颈,在电池自身容量已经确定的情况下,对电池组有效地 监控 、管理,成为延长电池组使用寿命,从而提升电动汽车续行里程的重要手段。
[汽车电子]
KINCO<font color='red'>总线</font>型HMI的特点及在电池管理系统中应用
单片机常用名词解释
总线: 指能为多个部件服务的信息传送线,在微机系统中各个部件通过总线相互通信。 地址总线: 它是传送由CPU发出的用于选择要访问的器件或部件的地址。 数据总线: 它是用来传送微型机系统内的各种类型的数据。 汇编: 是能完成一定任务的机器指令的集合。 二进制数: 只有0和1两个数码,基数为二。 十六进制数: 采用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F等16个数码,其中A-F相应的十进数为10-15,基数是16。 指令: 是计算机所能执行的一种基本操作的描述,是计算机软件的基本单元。 存储器: 用来存放计算机中的所有信息:包括程序、原始数据、运算的中间结果及最终结果等。 暂存器: 用来暂存由数据
[单片机]
SPI总线的程序设计
  本设计的程序流程如图所示。   图 程序流程   实现代码如下。 (1)首先包含必要的头文件,然后定义程序中用到的全局变量及宏。    (2)初始化SPI,通过寄存器的配置设置SPI功能,并设定SPI工作在主控方式下。    (3)把端口A设为输出端口,并关闭所有中断,为了后面数据的锁存,把LACK置为低电平。    (4)通过在SSPBUF中写入数据,把需要发送的数据送到SPI数据线上,每次发送完毕之后清楚发送标志。    (5)主函数,在其中实现各个子函数的调用,实现SPI方式驱动数码管显示数据的功能。
[嵌入式]
CAN总线在张紧器驱动监控系统中的应用
  铺管船用张紧器是海底油气管道铺设的关键配套设备,由夹紧系统、驱动系统、监控系统组成,我国从上世纪 90年代开始铺管船用张紧器的研究, 1998年完成胜利油田滩海铺管船用张紧器项目,2007年开始深水铺管张紧器的研究。张紧器驱动系统由上下两套履带驱动系统组成,在滩海铺管船用张紧器中,采用上下两履带各用两个液压马达驱动的方式来输送管线,但深水铺管的张紧力远远大于滩海铺管所需的张紧力,若采用液压马达驱动,则进出油管直径较大,由泵站到马达的管路设计、布置难度大。相对而言,电机安装方便、控制方式简单,所以采用四个交流伺服电机代替液压马达驱动张紧器。张紧器在工作过程中上下履带同步运动,并确保管线的张力在一定范围内,这就要求监控系统对交流伺
[嵌入式]
可处理高数据率的创新型串行总线测试方法
在高端运算(先进的微处理器)和消费电子(图形和游戏芯片组)设备中采用的半导体器件一般通过高速串行总线接口提供高达6.4Gbps的数据率,例如PCI Express 和 HyperTransport。根据2005年的国际半导体发展路线图(ITRS),到2010年,10Gbps以及更高速率的接口将被广泛采用。而业界一些专家预测在10年内,数据率将高达20Gbps,因此一些基本方法必须改变。远端环回是一种极具成本效益的创新技术。通过有效地帮助半导体厂商降低测试成本并缩短新一代半导体的开发周期,远端环回必将加速上述发展趋势。 目前高性能集成电路方面正在发生的架构改变将影响半导体产品的方方面面,包括从设计到终测和封装。这
[测试测量]
可处理高数据率的创新型串行<font color='red'>总线</font>测试方法
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved