本帖最后由 13395410441 于 2016-2-3 14:35 编辑
24C02的I2C时序 SDA数据线 SCL时钟线(SDA和SCL都是高电平时始终处于空闲状态) 下面读写时候20C02的读写的寻址地址一定要注意了,特别是选择读的时候。而且在读24C02里面的数据结束后一定要发送一个无应答信号(就是1),24C02才能停止发送数据释放SDA,你才能通过SDA发送停止信号的。 1、寻址地址8位(1 0 1 0 A2 A1 A1 R/W’),前四位芯片固定位1010,中间三位由A0 1 2 三个引脚决定,最低位是标志位,从24C02读是1,往24C02写是0。 2、起始: 时钟SCL高时,SDA从高变低 1-0 3、结束 时钟SCL高时,SDA从低变高 0-1 4、往24C02字节写数据时序是:(一个字节一个字节的写)一般网上的代码都是这种吧 a) 起始信号 b) 写24C02的地址信号+应答(SDA从高自动拉低算是应答成功)地址:1010 0000 c) 写24C02的内存地址信号+应答 d) 往刚才写的内存地址处开始写入数据+应答(可以在代码中设置标志位忽略它,随意) e) 结束信号 5、往24C02页写数据时序是:(一次可以写16个字节) a) 起始信号 b) 写24C02的地址信号+应答(SDA从高自动拉低算是应答成功)地址:1010 0000 c) 写24C02的内存地址信号+应答 d) 往刚才写的内存地址开始写入数据+应答(可以在代码中设置标志位忽略它,随意) 最多可以执行16次。 e) 结束信号 6、从24C02立即读数据(读一个字节) a) 起始信号 b) 写24C02的地址信号+应答(SDA从高自动拉低算是应答成功)地址:1010 0001 c) 从起始内存地址处开始读数据+无应答 d) 结束信号 7、从24C02选择读数据 a) 起始信号 b) 写24C02的地址信号+应答(SDA从高自动拉低算是应答成功)地址:1010 0000 c) 写24C02的内存地址信号+应答 d) 起始信号 e) 写24C02的地址信号+应答(SDA从高自动拉低算是应答成功)地址:1010 0001 f) 从指定内存地址处开始连续读数据 g) 最后来个无应答才可以执行结束信号 h) 结束信号 8、从24C02连续读数据 a) 起始信号 b) 写24C02的地址信号+应答(SDA从高自动拉低算是应答成功)地址:1010 0001 c) 从起始内存地址处开始读数据+应答 d) 最后来个无应答才可以执行结束信号 e) 结束信号
如果到这里还不是很清楚的话,我有空上传个代码上来说一下。上一楼24楼是我为另一个帖子”大布丁丁-单片机学习常用相关外设“写的一个连接,摘抄了一点51代码,写的有点乱,当时就放在这了也没动。有问题也可以看看上一楼,应该会有帮助。
|