串行通讯 -- IIC通讯原理

前言

I2C是最常见的串行通讯,广泛应用于芯片之间通讯。常见的有EEPROM,温度传感器,触摸屏等。本文力求简单明了把I2C通讯协议说清楚。后面文章会举一些I2C器件示例,让大家更深入理解I2C。

  • I2C通讯规则
  1. 采用2条通讯线:时钟线SCL,数据线SDA。
  2. 主从方式通讯,一个主机(一般是单片机),可以多个从机(器件)。
  3. 不在通讯状态(总线空闲时),SCL和SDA都是高电平。

  • 通讯说明

通讯的目的是主机把一个数据(8bit)传给从机或者读从机的一个数据。数据是一个bit一个bit传输,那么哪个是通信开始的第一个比特?I2C协议规定了一个起始信号。

起始信号:SCL高电平时,主机控制SDA从高->低。

bdb49d4a276c43bf9d74588695de6d1f.png     

主机发送给从机一个字节:

开始信号后,主机拉低SCL电平,然后主机输出bit7的SDA电平(bit7==1,SDA输出高,bit7==0,SDA输出低)。

4b133c064e354e4db63343828c67f2ba.png

主机拉高SCL电平,此时从机会检测SDA电平,从机就知道主机发送的bit7是0还是1?bit7发送完成。

主机再次拉低SCL电平,然后主机输出bit6的SDA电平(bit6==1,SDA输出高,bit6==0,SDA输出低)。

f757f855dc2b4ed99aceb060fdad25fd.png

主机再次拉高SCL电平,此时从机会检测SDA电平,从机就知道主机发送的bit6是0还是1?bit6发送完成。

Bit5-bit0一样发送。

00c3abb0cd164608bc1b709e47a723a5.png

当发送完成bit0后,需要一个从机的应答信号。

从机应答信号:主机再次拉低SCL,此时SDA线主机释放(IO输入模式),如果从机正确收到了数据,从机拉低SDA电平,表示收到数据正确。如果不正确,从机不会拉低SDA线,SDA线是高电平。

主机拉高SCL线,然后检测SDA线电平,如果是低表示从机应答正确,继续发送下一个字节数据,如果SDA高,从机应答不正确,结束通讯。

641c6fd405bc4d7f95a2c0685d9c237c.png

         结束信号:SCL高电平时,SDA从低->高。

b52892b37c1b453db261c752099dd9f2.png

        总结:

        1、虚线代表从机控制SDA总线,实线表示主机控制总线。

        2、SCL高电平时,SDA电平变化代表开始信号或结束信号。所以在传输数据时,数据只能            在SCL低电平时改变。

        3、SCL上升沿后,从机读取SDA电平,读取1bit数据。

        4、第9个bit是从机应答(ACK)信号,如果是低说明从机正确接收(ACK),如果是高说明没          有正确接收或从机故障(NAK)。

猜你喜欢

转载自blog.csdn.net/ccwaff/article/details/127426213