由ATMEL公司的AT24C02举例来讲解IIC的时序。
AT24C02芯片的容量为2K bit
一般数字芯片的左下脚位GND,右上角为VCC,24Cxx容量 = xx* 1K bit
24c02的8位器件地址高四位是1010,A0、A1、A2 的引脚电平值决定低四位的值,最后一位作为读写方向位,“0”表示写方向位。
各个状态下数据发送引脚SDA和时钟引脚SCL对应的时序如下:
起始和结束状态:
应答时序图:
写入数据:
首先单片机发送起始信号,然后发送器件地址,24c02通过识别器件地址判断是自己之后,发送一个ACK应答信号。再发送要写入数据的首地址,当然24c04在接收到写入首地址信息后会发送ACK应答信号,然后单片机就开始发送数据了,24c02每接收到8位数据之后,都会发送一个应答信号。当单片机把数据发送完毕后发送终止信号。当一次发送数据超过24C04的“一次最大字节装载数”后,写入数据会覆盖前面的数据。
单字节写:
一次写入多个数据:
起始信号:当SCL为高电平时,SDA由高电平向低电平跳变。终止信号:当SCL为高电平时,SDA由低电平想高电平跳变。有且仅当在发送起始信号和终止信号时,SDA的电平发生改变,SDA其它电平的改变都发生在SCL为高电平时的状态。
读取数据:
iic有三种读取数据的方法。分别是读取当前、随机读以及有序读。光看名字似乎看不出什么意思,特别是随机读,没看出哪里随机了。
读取当前:就是从当前的地址开始读取数据。时序是先发送开始信号,再发送器件地址+1,等待24c02发送ACK信号后就开始读取数据了,读入数据完毕后发送非应答信号。然后单片机再发送终止信号。
随机读:应该叫指定地址读。读取数据顺序是单片机先发送开始信号,然后发送器件地址+0,再发送读取首地址。还要继续发送器件地址+1然后才开始读取数据,读取完数据后,单片机发送非应答信号然后发送停止信号停止数据的接收。
有序读:这个应该叫做一次读取多个数据,按我的理解,应该是在读当前和随机读基础上一次读取多个字节的数据而已。
IIC总线应答时序图:
设备地址:
写周期:
两次写之间要有一个10ms的twR间隔
参考自:http://www.21ic.com/jichuzhishi/mcu/shixu/2013-04-24/179947.html