主要内容

金宝app支持I2C通信

I2C,也称为内部集成电路,是一种在集成电路和低速外设中用于通信的同步、芯片对芯片协议。一些常见的基于I2C的器件包括EEPROM、热传感器和实时时钟。的I2C主写块和I2C主读block用于与I2C设备通信。

设备上的I2C总线有一个I2C Master,它连接到两条双向线路,串行数据线(SDA)和串行时钟线(SCL)。这两条线连接到连接的I2C从设备上的一对引脚。I2C从设备有一个唯一的7位或10位地址,由制造商提供。如果地址不是唯一的,请参考设备数据表重新配置地址。

主节点生成时钟并发起与从设备的通信。从节点接收时钟并响应I2C主节点的确认。

I2C的通信方式如下:

  • 主传输:I2C主向I2C从端写入数据

  • Master Receive: I2C Master从I2C slave读取数据

  • 从端传输:I2C从端向I2C主端写入数据

  • Slave Receive: I2C Slave从I2C master读取数据

启动和停止条件

I2C消息由START位、要传输的数据和STOP位组成。

SDA从HIGH到LOW,而SCL仍然在HIGH表示一个START条件。SDA从LOW到HIGH, SCL保持在HIGH表示一个STOP条件。所有其他SDA转换在SCL处于低位时发生。

数据确认

I2C通信将数据字节定义为8位长。I2C可以传输单字节数据,也可以传输多字节数据。在数据传输过程中,每个字节后面都有一个确认ACK信号。主服务器生成ACK时钟,而接收端(主服务器或从服务器)通过下拉SDA并在确认时钟脉冲的高部分将其保持为LOW来生成ACK。

如果在确认时间内SDA没有拉低,则表示接收端未确认。如果从服务器还没有准备好发送或接收下一个数据字节,它将保持SCL LOW,使主服务器进入等待状态。一旦从服务器准备好并释放SCL,正常的数据传输就会恢复。

I2C读/写

I2C的读写操作过程如下:

  1. I2C主机通过发送一个START条件,后面跟着一个7位的从地址和第8位表示写(0)/读(1))来发起通信。

  2. 主设备释放SDA并等待从设备的ACK。

  3. 如果总线上存在从服务器,它就用一个ACK响应。

  4. 主服务器继续以发送或接收模式(根据它发送的读或写位),从服务器继续以补充模式(分别为接收或发送)。

  5. 主机通过发送STOP条件终止数据传输。

下图显示了I2C从设备上的单字节读写。

I2C寄存器读写

I2C寄存器的读写操作如下所示:

  1. I2C主机通过发送一个START条件,后面跟着一个7位的从地址和第8位表示写(0)/读(1)来发起通信。

  2. 主设备释放SDA并等待从设备的ACK。

  3. 如果总线上存在从服务器,它就用一个ACK响应。

  4. 然后,主机写入它想要访问的从机的寄存器地址。

  5. 一旦从服务器确认了寄存器地址,主服务器就会在每个字节后发送数据字节,并在每个字节后发送一个ACK以进行写/读。

  6. 主机通过发送STOP条件终止数据传输。

下图显示了I2C从设备中存在的寄存器上的单字节读写。