I2C时序简单分析
I2C总线介绍
- 起始信号:SCL位于高饱和时,SDA由高->低,即下降沿时
- 停止信号:SCL处于高饱和时,SDA由低->高,,即上升沿
- 传输数据:SCL为低可以改变SDA数据上的替换。在SCL上升沿的过程将SDA数据传输出去
- 应答:I2C以字节(8位)的方式进行传输,总线上每传输完成一个字节后会产生一个应答信号,master需要产生对应的一个额外时钟。(SDA为应答表示应答,为高认可表示没有应答)
- 正常的I2C总线数据:开始+ I2C设备ID + R / W + ACK +数据(0)+ ACK + ... + ... +数据(n)+ ACK + STOP
波形图分析
写
主机写,从机应答,主机读取应答:写完一字节(8位)后,读取从机应答位:若为0,表示从机应答,可以继续下一步操作,若为1,表示从机非应答,不能进行下一步操作。
如图(红色是SDA):发送一个字节”0”。首先产生开始信号,然后依次发送7位设备地址(0101010)+ W(0)+ ACK(0)+ 8bitdata(00110000)+ ACK(0 )+停止信号
读
主机读,主机产生应答:读完一字节(8位)后,由主机产生应答(或非应答位):若产生应答位,表示可以继续读下一个字节,若产生非应答,表示不可以继续读下一字节操作。
如图(红色是SDA):读一个字节“ 0”。首先产生开始信号,然后依次是7位设备地址(0101010)+ W(1)+ ACK(0)。+数据(00110000)+ NACK(1)+停止信号
读取多个字节
如图(红色是SDA):读2个字节“ 01”。首先产生开始信号,然后依次是7位设备地址(0101010)+ W(1)+ ACK(0)+ data0(00110000)+ ACK( 0)data1(00110001)+ NACK(1)+停止信号