- 同步串行总线
- SCL(串行时钟线)、SDA(串行数据线)
- 每个连到总线上的器件都可由软件以唯一的地址寻址,并建立简单的主从关系主器件(发送器、接收器)
- 真正的多主总线,带有竞争检测、仲裁电路,可是多主机任意同时发送而不破坏总线上的数据
- 同步时钟允许器件通过总线以不同的波特率进行通信
- 同步时钟可以作为停止和重新启动串行口发送的握手方式
- 启动I2C条件:SCL:1,SDA:出现一个下降沿
SDA=1
SCL=1
SDA=0
-
停止使用I2C:SCL:1,SDA:出现一个上升沿
SDA=0
SCL=1
SDA=1
-
在启动和终止条件之间可转送的数据不受限制(高低电平),每个字节8位,先传送高位,每个字节之后有一个响应位。
-
ACK(应答信号):主器件收发每个字节后产生一个时钟应答脉冲,在该脉冲期间,发送器必须保证SDA为高,由接收器将SDA拉低。
SCL=0
SDA=0//电平被拉低
SCL=1
SCL=0
SDA=1
- NOT ACK(非应答信号):主器件为接收器时,在接收了最后一个字节后不发应答信号。即,SDA为1,不被拉低。
- 读应答函数
SCL=0
SDA=1
SCL=1
SDA==0(跳出循环的条件)或者询问255次
SCL=0
返回SDA(1非应答,0应答)
- 总线中每个器件都有自己唯一确定的地址
- 启动条件后主机发送的第一个字节(被读写的从器件地址):该字节的第8位为方向位,0(W):主器件发送;1(R):主器件接收
- 总线上每个器件在启动条件后都把自己的地址与前7位相比较,如果相同则被选中,产生应答,并根据读写位决定在数据传送中是接收还是发送