📜  I2C通信协议

📅  最后修改于: 2021-06-28 09:02:58             🧑  作者: Mango

I2C代表集成电路间。它是总线接口连接协议,已集成到设备中以进行串行通信。它最初是由Philips Semiconductor于1982年设计的。最近,它是短距离通信中广泛使用的协议。它也被称为两线接口(TWI)。

I2C通信协议的工作:
它仅使用2条双向漏极开路线进行数据通信,称为SDA和SCL。这两条线都被拉高。

串行数据(SDA)–数据传输通过该引脚进行。
串行时钟(SCL)–承载时钟信号。

I2C在2种模式下运行–

  • 主模式
  • 从机模式

在SDA线上传输的每个数据位都由SCL线上每个时钟的高电平到低电平脉冲进行同步。

根据I2C协议,当时钟线为高电平时,数据线无法更改,仅当时钟线为低电平时,数据线才能更改。这两条线是漏极开路的,因此需要一个上拉电阻,以使这些线为高电平,因为I2C总线上的器件为低电平有效。数据以包括9位的数据包的形式传输。这些位的顺序是–

  1. 起始条件– 1位
  2. 从站地址– 8位
  3. 确认– 1位

启动和停止条件:

可以通过将SCL线保持高电平并更改SDA的电平来产生START和STOP。为了产生启动条件,SDA从高变为低,同时保持SCL为高。为了产生STOP条件,SDA从低变高,同时保持SCL为高,如下图所示。

启动和停止条件

重复启动条件:

在每个启动和停止条件对之间,总线被视为繁忙,并且没有主机可以控制该总线。如果主机尝试启动新的传输,并且不想在开始新的传输之前释放总线,它将发出新的START条件。这称为“重复启动”条件。

读/写位:

高读/写位表示主机正在将数据发送到从机,而低读/写位表示主机正在从从机接收数据。

ACK / NACK位:

在每个数据帧之后,跟随一个ACK / NACK位。如果成功接收到数据帧,则接收方将ACK位发送给发送方。

寻址:

地址帧是起始位之后的第一帧。主机要与之通信的从机的地址由主机发送到与其连接的每个从机。然后,从站将自己的地址与此地址进行比较,并发送ACK。

I2C封包格式:

在I2C通信协议中,数据以数据包的形式传输。这些数据包的长度为9位,其中前8位放在SDA线中,第9位保留给ACK / NACK,即接收方确认或不确认。

START条件加上地址包再加上一个数据包再加上STOP条件就构成了完整的数据传输。

I2C通信协议的功能:

  • 半双工通信协议–
    可以进行双向通信,但不能同时进行。
  • 同步通讯
    数据以帧或块的形式传输。
  • 可以在多主机配置中进行配置。
  • 时钟延展–
    当从设备未准备好通过将SCL线保持在低电平状态来延长时钟时,时钟将延长,从而使主设备无法提升时钟线。主机将无法提升时钟线,因为这些线是“与”线,并且要等到从机释放SCL线以表明它准备好传输下一位为止。
  • 仲裁
    I2C协议支持多主机总线系统,但不能同时使用多个总线。 SDA和SCL由主机监控。如果发现SDA值很高,而SDA值应该很低,则可以推断出另一个主机处于活动状态,因此它停止了数据传输。
  • 串行传输
    I2C使用串行传输进行数据传输。
  • 用于低速通信。

好处 :

  • 可以在多主机模式下配置。
  • 由于它仅使用2条双向线(与SPI通信不同),因此降低了复杂度。
  • 成本效益。
  • 由于使用了ACK / NACK功能,因此具有改进的错误处理能力。

局限性:

  • 速度较慢。
  • I2C通信协议中使用了半双工通信。