I2C时序分析-主机控制从机
I2C是由2根线进行操作的,一个是主控时序SCL,另一根主控数据SDA
对于操作主要分成读写,读写的两个操作有部分是相似的
而时序的操作主要分为:START,DATA,ACK,STOP,NOACK
写的时序用到的时序为:STRAR,DATA,ACK,STOP
时序如图所示:
读时序用到的时序有:START,DATA,ACK,STOP,NOACK
时序如图所示:
下面对时序的说明:
IDLE:空闲的时候,尽量将SDA和SCL拉到高电平
START:保持SCL为高电平,然后SDA由H->L
DATA:数据是当SCL为低电平的时候数据有效,也就是说,SCL由L->H的时候,采集SDA的数据
ACK:在发完数据后,从设备会将SDA拉到L
NOACK:在发送完数据后,从设备不会将SDA拉低
STOP:保持SCL为高电平,然后SDA由L->H
好了,说一下时序的流程和时序图:
写时序的流程是:START –>
从设备的写地址 –> ACK –>
从设备的寄存器地址 –> ACK –>
写入的数据 –> ACK –>
STOP
写时序图:
读时序的流程是:START –>
从设备的写地址 –> ACK –>
从设备的寄存器地址 –> ACK –>
从设备的读地址 –> ACK ->
读出的数据 –> NOACK –>
STOP
读时序图:
其中要注意的是I2C的2根线上都必须接上拉电阻,阻值一般是4.7K
在获得ACK的时候,一般将SDA输出一个高阻,然后再读入ACK,好让从设备拉低SDA