完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
3个回答
|
|
楼主自己先看一下数据表、教材或网上搜一下吧,很多东西都是很容易找到的,关键是你要自己仔细阅读理解。(结合时序图)
51单片机入门 - EEPROM(24C02的使用) 1、EEPROM写数据流程 第一步,首先是 I2C 的起始信号,接着跟上首字节,也就是我们前边讲的 I2C 的器件地址,并且在读写方向上选择“写”操作。 第二步,发送数据的存储地址。24C02一共 256 个字节的存储空间,地址从0x00~0xFF,我们想把数据存储在哪个位置,此刻写的就是哪个地址。 第三步,发送要存储的数据第一个字节、第二个字节„„注意在写数据的过程中, EEPROM 每个字节都会回应一个“应答位 0”,来告诉我们写 EEPROM 数据成功,如果没有回应答位,说明写入不成功。 在写数据的过程中,每成功写入一个字节,EEPROM 存储空间的地址就会自动加1,当加到 0xFF 后,再写一个字节,地址会溢出又变成了 0x00。 2、EEPROM读数据流程 第一步,首先是 I2C 的起始信号,接着跟上首字节,也就是我们前边讲的 I2C 的器件地址,并且在读写方向上选择“写”操作。这个地方可能有同学会诧异,我们明明是读数据为何方向也要选“写”呢?刚才说过了,24C02 一共有 256 个地址,我们选择写操作,是为了把所要读的数据的存储地址先写进去,告诉 EEPROM 我们要读取哪个地址的数据。这就如同我们打电话,先拨总机号码(EEPROM 器件地址),而后还要继续拨分机号码(数据地址),而拨分机号码这个动作,主机仍然是发送方,方向依然是“写”。 第二步,发送要读取的数据的地址,注意是地址而非存在EEPROM 中的数据,通知EEPROM 我要哪个分机的信息 第三步,重新发送 I2C 起始信号和器件地址,并且在方向位选择“读”操作。 这三步当中,每一个字节实际上都是在“写”,所以每一个字节EEPROM 都会回应一个“应答位 0”。 第四步,读取从器件发回的数据,读一个字节,如果还想继续读下一个字节,就发送一个“应答位ACK(0)”,如果不想读了,告诉 EEPROM,我不想要数据了,别再发数据了,那就发送一个“非应答位NAK(1)”。 和写操作规则一样,我们每读一个字节,地址会自动加 1,那如果我们想继续往下读,给EEPROM 一个 ACK(0)低电平,那再继续给 SCL 完整的时序,EEPROM 会继续往外送数据。如果我们不想读了,要告诉 EEPROM 不要数据了,那我们直接给一个NAK(1)高电平即可。这个地方大家要从逻辑上理解透彻,不能简单的靠死记硬背了,一定要理解明白。梳理一下几个要点: A、在本例中单片机是主机,24C02 是从机; B、无论是读是写, SCL 始终都是由主机控制的; C、写的时候应答信号由从机给出,表示从机是否正确接收了数据; D、读的时候应答信号则由主机给出,表示是否继续读下去。 另一个解释: 首先我们应该了解的是I2C是两线串行总线(数据线SDA和时钟线SCL)。它主要是在CPU与被控IC之间、IC与IC之间双向传送。高速的I2IC一般可达到00KHZ以上,一般的则在100KHZ。 了解了I2C的一些定义后,要想写代码必须知道它的时序。 一、空闲状态,I2C在空闲状态时SDA和SCL都是处于高电平。 二、开始信号,当SCL电平不发生变化的时候,SDA由高电平变为低电平的这一个过程是开始信号。 三、停止信号,当SCL电平不变的时候,SDA有低电平变为高电平的这一过程是停止信号。 四、应答信号,当8个时钟脉冲完的时候,第九个时钟脉冲来到之前SDA变为低电平,直达第九个时钟脉冲结束。(八个时钟脉冲也可以理解为一个字节的数据传输完成)五、数据的有效性,当SCL变为高电平之前,SDA上的数据(0或1)应该提前准备好,且在SDA变为低电平之后才可变化。 如果理解了上面的文字,那么你就理解了I2C了,将时序理解透彻,那么就可以开始写IIC的程序了。 学会了I2C这种通信自后,我们应该需要把他利用起来,比如数据传输后我们应该放到那里。在标题中我们可以看到一种EEPROM(24C02)。 24C02中的02表示可存储2K的数据,256字节的数据。而他的设备地址则只由你需要读写而改变,因为容量固定,地址也固定了(1 0 1 0 A2 A1 A0 R/W)如果是读则最后位为1,若是写最后位为0。上面换成16进制则是0XA1/0XA0。 以上就是24C02的基本知识,如果想要写程序,那么必须知道的是它的工作时序。24C02的时序就三个,一个是写,一个是读,还有一个是检测。掌握了这三个就意味着掌握了24C02。 首先是写时序: 1.起始信号; 2.写写的设备地址; 3.等待应答; 4.写读的地址 5.等待应答 6.写数据 7.等待应答 8.停止信号 其次是读时序: 1.起始信号 2.写写的设备地址; 3.等待应答; 4.写读的地址 5.等待应答 6.起始信号 7.写读的设备地址 8.等待应答 9.写数据 10.停止信号 最后是检测时序: 先读取地址255的数据,若为0x55则检测通过,若不等于就写一个0x55给地址255, 然后在读取地址为255的数据,若为0x55则通过,否则返回检测失败。(当然0x55只是我写的一个数据而已,也可以不用这个)
最佳答案
|
|
2 条评论
|
|
|
|
|
|
2 条评论
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
512 浏览 0 评论
778 浏览 1 评论
746 浏览 1 评论
电路小知识 | 交流电路复数的基础知识以及相位差和电抗的计算
601 浏览 0 评论
1815 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 22:08 , Processed in 0.471850 second(s), Total 55, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号