以ATMEL的AT24C02为例,说明IIC的时序.
AT24C02芯片的容量为2K位
通用数字芯片的左下角引脚是GND,右上角是VCC,24Cxx容量= xx * 1K位
8位设备地址24c02的高四位为1010.A0,A1和A2的引脚电平值确定低四位的值. 最后一位用作读写方向位.
与每种状态相对应的数据传输引脚SDA和时钟引脚SCL的时序如下:
开始和结束状态:
响应时序图:
写数据:
首先,MCU发送启动信号,然后发送设备地址. 通过24c02识别设备地址后,它发送一个ACK响应信号. 然后发送要写入的数据的第一个地址. 当然,24c04在收到写入的第一个地址信息后将发送ACK响应信号,然后MCU将开始发送数据. 接收到8位数据后,24c02将发送响应信号. MCU完成发送数据后,将发送终止信号. 当一次发送的数据超过24C04的“一次加载的最大字节数”时,写入的数据将覆盖先前的数据.
单字节写入:
一次写入多个数据:
启动信号: 当SCL为高电平时,SDA从高电平转换为低电平. 终止信号: 当SCL为高电平时,SDA从低电平转换为高电平. 仅当发送起始信号和结束信号时,SDA的电平才会改变i2c时序分析,而SCL为高电平时,SDA的其他电平才会改变.
读取数据:
iic有三种读取数据的方式. 它们是当前读取,随机读取和有序读取. 只看名字似乎没有任何意义,尤其是随机阅读,我看不出它是随机的.
读取当前: 从当前地址读取数据. 时序是先发送起始信号,然后发送设备地址+1,等待24c02发送ACK信号,然后开始读取数据. 读取数据后,发送无响应信号. 然后微控制器发送一个终止信号.
随机读取: 应称为指定地址读取. 读取数据的顺序是,微控制器首先发送起始信号,然后发送设备地址+0i2c时序分析,然后发送读取的第一个地址. 在开始读取数据之前,继续发送设备地址+1. 读取数据后,微控制器发送一个无响应信号,然后发送一个停止信号以停止数据接收.
有序读取: 这应该称为一次读取多个数据. 根据我的理解,应该基于读取当前数据和随机读取一次读取多个字节的数据.
IIC总线响应时序图:
设备地址:
写周期:
两次写入之间必须有10ms的twR间隔
引用来自:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/dianqi/article-177058-1.html
看得也太透彻
台湾如果敢宣布独立
中国统一的日子也就到了