单片机入门培训专题(十八)-i2ceeprom编程技巧.docx

单片机入门培训专题(十八)-i2ceeprom编程技巧.docx

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机入门培训专题(十八) #160;- I2CEEPROM 编程技 连载提要:上期专题中,我们讲述了 连载提要:上期专题中 ,我们讲述了 I2C 总线通信的相 关内容,专题结尾有一段 I2C-EEPROM 通信的代码,为了 更好的了解 EEPROM 的相关知识,我们今天就和大家说说 EEPROM 编程的那些事。 18.1EEPROM 的学习 在实际的应用中,保存在单片机 RAM 中的数据,掉电后数据就丢失了,保存在单片机的 FLASH 中的数据,又不能随意改变,也就是不能用它来记 录变化的数值。但是在某些场合,我们又确实需要记录下某 些数据,而它们还时常需要改变或更新,掉电之后数据还不 能丢失,比如我们的家用电表度数,我们的电视机里边的频 道记忆,一般都是使用 EEPROM 来保存数据,特点就是掉 电后不丢失。我们经常使用的是 24C02 ,是一个容量大小是 2Kbit 位,也就是 256 个字节的 EEPROM 。一般情况下, EEPROM 拥有 30 万到 100 万次的寿命, 也就是它可以反复 写入 30-100 万次,而读取次数是无限的。 24C02 是一个基于 I2C 通信协议的器件, 因此从现在开 始,我们的 I2C 和我们的 EEPROM 就要合体了。但是大家 要分清楚, I2C 是一个通信协议,它拥有严密的通信时序逻 辑要求,而 EEPROM 是一个器件, 只是这个器件采样了 I2C 协议的接口与单片机相连而已,二者并没有必然的联系, EEPROM 可以用其他接口, I2C 也可以用在其它很多器件上。 18.2EEPROM 单字节读写操作时序 18.2.1EEPROM 写数据流程 第一步,首先是 I2C 的起始 信号,接着跟上首字节,也就是我们前边讲的 I2C 的器件地 址(EERPOM),并且在读写方向上选择“写”操作。 信号, 步,发送数据的存储地址。我们 24C02 一共 256 个字节的 存储空间,地址从 0x00 到 0xFF ,我们想把数据存储在哪个 位置,此刻写的就是哪个地址。第三步,发送要存储的 位置,此刻写的就是哪个地址。 第三步,发送要存储的 注意在写数据的过程中, EEPROM 每个字节都会回应一个“应答位 0”,来告诉我们写 EEPROM 数据成功, 如果没有回应答位, 说明写入不成功。 在写数据的过程中,每成功写入一个字节, EEPROM 存储 空间的地址就会自动加 1,当加到 0xFF 后,再写一个字节, 地址会溢出又变成了 0x00 。 18.2.2EEPROM 读数据流程 第一步,首先是 I2C 的起始 信号,接着跟上首字节,也就是我们前边讲的 I2C 的器件地 信号, 址(EERPOM),并且在读写方向上选择“写”操作。这个地方 可能有同学会诧异,我们明明是读数据为何方向也要选“写” 择写操作,是为了把所要读的数据的存储地址先写进去,告 诉 EEPROM 我们要读取哪个地址的数据。这就如同我们打 电话, 先拨总机号码 (EEPROM 器件地址 ),而后还要继续拨 呢?刚才说过了,我们 24C02 呢?刚才说过了,我们 24C02 共有 256 个地址,我们选 分机号码 (数据地址 ),而拨分机号码这个动作,主机仍然是 发送方,方向依然是“写”。 第二步,发送要读取的数据 的地址,注意是地址而非存在 EEPROM EEPROM 我要哪个分机的信息。 EEPROM 我要哪个分机的信息。 第三步, 重新发送 I2C 起始信号和器件地址,并且在方向位选择“读”操作。 三步当中,每一个字节实际上都是在“写”,所以每一个字节 EEPROM 都会回应一个“应答位 0”。 第四步,读取从器 件发回的数据,读一个字节,如果还想继续读下一个字节, 就发送一个“应答位 ACK(0) ”,如果不想读了,告诉 EEPROM , 我不想要数据了,别再发数据了,那就发送一个“非应答位 NACK(1)”。 NACK(1)”。 和写操作规则一样, 我们每读一个字节, 地 址会自动加 1 ,那如果我们想继续往下读,给 EEPROM 个 ACK(0) 低电平, 那再继续给 SCL 完整的时序, EEPROM 会继续往外送数据。如果我们不想读了,要告诉 EEPROM 不要数据了,那我们直接给一个 NAK(1) 高电平即可。这个 地方大家要从逻辑上理解透彻,不能简单的靠死记硬背了, 定要理解明白。梳理一下几个要点: A、在本例中单片机 是主机,24C02是从机;B、无论是读是写,SCL始终都是 由主机控制的;C、写的时候应答信号由从机给出,表示从 机是否正确接收了数据; D、读的时候应答信号则由主机给 出,表示是否继续读下去。那我们下面写一个程序,读 出,表示是否继续读下去。 那我们下面写一个程序,读 取 EEP

文档评论(0)

wq1987 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档