由ATMEL公司的AT24C02举例来讲解IIC的时序。

    AT24C02芯片的容量为2K bit 

                I2C时序详解_单片机 SPI

    一般数字芯片的左下脚位GND,右上角为VCC,24Cxx容量 = xx* 1K bit

    24c02的8位器件地址高四位是1010,A0、A1、A2 的引脚电平值决定低四位的值,最后一位作为读写方向位,“0”表示写方向位。


    各个状态下数据发送引脚SDA和时钟引脚SCL对应的时序如下:


    起始和结束状态:

       

I2C时序详解_单片机 SPI_02


    应答时序图:

I2C时序详解_单片机 SPI_03

   

 

    写入数据:

    首先单片机发送起始信号,然后发送器件地址,24c02通过识别器件地址判断是自己之后,发送一个ACK应答信号。再发送要写入数据的首地址,当然24c04在接收到写入首地址信息后会发送ACK应答信号,然后单片机就开始发送数据了,24c02每接收到8位数据之后,都会发送一个应答信号。当单片机把数据发送完毕后发送终止信号。当一次发送数据超过24C04的“一次最大字节装载数”后,写入数据会覆盖前面的数据。

   

I2C时序详解_单片机 SPI_04

单字节写:

I2C时序详解_单片机 SPI_05


一次写入多个数据:    

I2C时序详解_单片机 SPI_06

    起始信号:当SCL为高电平时,SDA由高电平向低电平跳变。终止信号:当SCL为高电平时,SDA由低电平想高电平跳变。有且仅当在发送起始信号和终止信号时,SDA的电平发生改变,SDA其它电平的改变都发生在SCL为高电平时的状态。

   

    读取数据:

    iic有三种读取数据的方法。分别是读取当前、随机读以及有序读。光看名字似乎看不出什么意思,特别是随机读,没看出哪里随机了。

I2C时序详解_单片机 SPI_07

    

读取当前:就是从当前的地址开始读取数据。时序是先发送开始信号,再发送器件地址+1,等待24c02发送ACK信号后就开始读取数据了,读入数据完毕后发送非应答信号。然后单片机再发送终止信号。


I2C时序详解_单片机 SPI_08

    随机读:应该叫指定地址读。读取数据顺序是单片机先发送开始信号,然后发送器件地址+0,再发送读取首地址。还要继续发送器件地址+1然后才开始读取数据,读取完数据后,单片机发送非应答信号然后发送停止信号停止数据的接收。

I2C时序详解_单片机 SPI_09

    有序读:这个应该叫做一次读取多个数据,按我的理解,应该是在读当前和随机读基础上一次读取多个字节的数据而已。

      

I2C时序详解_单片机 SPI_10


IIC总线应答时序图:

 

I2C时序详解_单片机 SPI_11

设备地址:

I2C时序详解_单片机 SPI_12

写周期:

I2C时序详解_单片机 SPI_13

两次写之间要有一个10ms的twR间隔


参考自:http://www.21ic.com/jichuzhishi/mcu/shixu/2013-04-24/179947.html