首页>>科技 >>内容

i2c总线的构成,I2C总线的工作原理以及优缺点解析

发布时间:2023-09-26 18:18:20编辑:温柔的背包来源:

很多朋友对i2c总线的构成,I2C总线的工作原理以及优缺点解析不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

i2c总线的构成,I2C总线的工作原理以及优缺点解析

如果你使用有机发光二极管显示器、气压传感器或陀螺仪/加速度计模块,你会发现你使用的是I2C总线。I2C总线介绍如果你正在使用有机发光二极管显示器、气压传感器或陀螺仪/加速度计模块,你可能会发现你正在使用I2C总线。当您希望多个微控制器将数据记录到单个存储卡或在单个LCD上显示文本时,这非常有用。像UART通信一样,I2C仅使用两条线在设备之间传输数据:

SDA(串行数据)-主站和从站发送和接收数据的线路。SCL(串行时钟)-传输时钟信号的线路。I2C是一种串行通信协议,因此数据是沿着单条线路(SDA线路)逐位传输的。与SPI一样,I2C是同步的,因此通过主机和从机共享的时钟信号,位输出与位采样同步。时钟信号总是由主机控制。

当使用I2C时,I2C是如何工作的,数据被转换成消息,消息被分解成数据帧。每个消息都有一个地址帧,其中包含从站的二进制地址,还有一个或多个数据帧,其中包含正在传输的数据。该消息还包括每个数据帧之间的开始和停止条件、读/写位和ACK/NACK位:

启动条件:在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从高电平切换到低电平。2.主设备向每个从设备发送它想要与之通信的从设备的7位或10位地址以及读/写位:

3.每个从设备将主设备发送的地址与其自身的地址进行比较。如果地址匹配,从机通过将SDA线拉低一位来返回ACK位。如果主器件的地址与从器件的地址不匹配,从器件会使SDA线保持高电平。4.主设备发送或接收数据帧:5 .发送每个数据帧后,接收设备会向发送方返回另一个ACK位,以确认成功接收到该帧:

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

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

有多个从设备和多个主设备。多个主设备可以连接到一个从设备或多个从设备。当两个主设备试图同时通过SDA线发送或接收数据时,同一系统中就会出现多个主设备的问题。为了解决这个问题,每个主机需要在发送消息之前检测SDA线是低电平还是高电平。如果SDA线为低电平,则意味着另一个主控制器已经控制了总线,主控制器应该等待发送消息。如果SDA线为高电平,则传输信息是安全的。

要将多个主器件连接到多个从器件,请使用下图,通过一个4.7K欧姆的上拉电阻将SDA和SCL线连接到Vcc:

I2C的优缺点与其他协议相比,I2C听起来非常复杂,不容易在程序中实现,造成数据丢失、无响应、“死亡”等问题。但是它有很多优点:优点只用两根线就可以支持多个主服务器和多个从服务器。ACK/NACK位确认每个帧都已成功传输。硬件没有UART复杂。众所周知和广泛使用的协议有缺点。数据传输速率比SPI慢。数据帧的大小限制在8位,以实现比SPI更复杂的硬件。

以上知识分享希望能够帮助到大家!