主要内容

金宝app支持I2C通信

I2C,也被称为集成电路,是用于集成电路和低速外设通信的同步芯片对芯片协议。一些常见的基于I2C的设备包括EEPROM、热传感器和实时时钟。的金宝app®金宝appArduino支持包®硬件库包括I2C写块和I2C读块,用于与I2C设备进行通信。

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

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

I2C的通信方式如下:

  • Master Transmit: I2C Master向I2C从端写入数据

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

  • Slave Transmit: I2C Slave向I2C主机写入数据

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

启动和停止条件

一个I2C消息由一个起始位、要传输的数据和一个停止位组成。

SDA从高到低而SCL仍然在高表示启动条件。SDA从低到高,而SCL保持在高表示停止条件。所有其他的SDA转变都是在SCL处于低水平时发生的。

数据确认

I2C通信将数据字节定义为8位长。I2C可以传输单个字节或多个字节的数据。在数据传输期间,一个确认ACK信号跟随每个字节。一个时钟的ACK是由主产生的,而接收机(主或从)通过拉下SDA和保持它的低在应答时钟脉冲的高部分产生ACK。

如果在应答期间SDA没有被拉低,则接收端表示NACK (not acknowledge)。如果slave没有准备好发送或接收下一个数据字节,它持有SCL LOW使master进入等待状态。一旦从服务器准备好并释放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从设备中的寄存器上读和写的单个字节。