历史上的今天
返回首页

历史上的今天

今天是:2025年02月27日(星期四)

正在发生

2020年02月27日 | AVR单片机的EEPROM读写分析

2020-02-27 来源:eefocus

简介:本文介绍了AVR单片机的EEPROM读写数据时间问题,并分析了3个方法的各自优缺点。


由于AVR的EEPROM写周期比较长(一般为毫秒级),因此在编程使用过程中要特别注意.对于读EEPROM没什么好说的,读一个字节的数据要耗费4个时钟周期,可以忍受,写就比较麻烦了,虽然放在EEPROM的数据都不是频繁访问的;虽然可以用读-比较-写的机制降低EEPROM的写操作频度,但在写入过程中,过长的写入周期还是会造成一些问题,下面就分析一下几种方式的EEPROM写操作.


1. 循环查询式


将地址和数据写入EEPROM相关的寄存器,置写标志后就循环不断查询写完成标志,直到写完成,退出循环,顺序执行其他程序.在置写入标志到写完成的这段时间,程序除了不断查询写完成标志和响应硬件中断之外什么也不干,这段时间就这么浪费了,如果是个实时性要求比较高的应用,浪费的就不仅是时间了,很可能在这段时间里I/O状态的变化不能得到及时的响应,如果一下子要进行多个字节的EEPROM的写入操作,那情况会更糟.针对这种情况,有种解决办法就是,这个写完成查询放在软件的死循环中(无操作系统的情况下,系统启动后都要进入一个死循环),每循环一次查询一次写完成标志,这样就不必一直等待写操作完成而可以干别的事情了,但是这样会带来两个问题.一是,如果死循环周期无法保证,则每一次的EEPROM写操作的完成标志查询也得不到保证,从而进行一次EEPROM写操作的周期也无法保证(最长延迟时间就是一个死循环周期的最长时间);二是,在执行一次EEPROM写入操作到写完成这段时间里死循环里其它的子程序不能进行EEPROM读写操作.第一个问题如果能保证最大循环周期在延迟允许范围内就不是问题了,否则就得采取下面讲到的方式二了;第二个问题的解决方法是每次EEPROM读写操作都要在其中加入对EEPROM写完成标志寄存器的判断,如果有数据正在写入,则等待或退出,但等待和退出又会造成等待延迟和写入操作不成功的问题,解决办法是先放入一个数据缓冲区,待上一次写入操作完成,再从缓冲区里拽出一个字节进行下一次写入周期,但这又会涉及到选择合适的缓冲区大小以及的问题,这个问题在下面中断式操作里继续讨论.


2.定时查询式


在写入EEPROM地址和数据寄存器置写标志后启动定时器,定时查询写完成标志,这种方法继承了方式1的大部分优缺点,唯一的进步就是能够确定写操作延迟时间为定时周期.


3.中断式


编写EEPROM写完成中断子程序,设置一个FIFO缓冲区,要写入的数据先放入这个FIFO,如果EEPROM操作空闲,则从FIFO中揪一字节数据出来写EEPROM,置完写完成标志就返回,然后去干别的事情,EEPROM写完成产生一个中断,在中断服务程序中再从FIFO中揪一个字节去写EEPROM,如此循环直到FIFO空,这种方式虽然能在第一时间完成一次写操作,但是还是有个和和方式1中提到一样的问题,怎么选择这个FIFO的大小.小了,待写入数据可能溢出丢失,大了,多大算大,1K够不够,10K够不够,硬件上有这么多RAM空间么,这就需要根据实际资源和系统需求来定了.如果EEPROM写操作频率很低,比一次EEPROM写操作间隔还要长得多,那么几个单位的FIFO就足够了;如果EEPROM写操作频率可能很高或一次大批量连续写入数据就要求很大的FIFO,达到能够保证数据不丢失,这就要根据批量数据大小和写频率来定了,另外还要考虑可用RAM空间的限制来找出最佳值,同时有FIFO溢出一定要制定相应的应对措施.


最后注意两点:


1. 读写之前一定要检测是否已经有EEPROM写操作;在写完成之后一定要再读出写入的数据校验写入操作是否成功,不成功则EEPROM损坏,要做好应对措施.


2.如果要保存一个16位的数据,一定要保证在这16位数据分成的两字节都成功写入了EEPROM再去读该数据,否则在刚写完一个字节就去读该数据,得到的数据显然不是你想要的,如果该数据是一重要参数,后果可想而知.

推荐阅读

史海拾趣

eLED.com Corp公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,eLED.com Corp始终坚持以创新驱动为发展战略。公司不断加大研发投入,积极引进新技术、新材料和新工艺,推动产品的升级换代。同时,eLED.com Corp还积极探索新的应用领域和市场空间,如智能家居、智慧城市等领域。通过不断创新和产业升级,eLED.com Corp成功实现了从传统制造业向高新技术产业的转型。

DFI公司的发展小趣事

DFI公司自创立之初,就致力于技术创新。在电子主板领域,DFI凭借其对高性能主板的深入研究,成功开发出多款领先行业的产品。例如,在2002年,DFI推出了LanParty UT nF4 SLI-DR Venus限量版主板,这款产品凭借其出色的性能和稳定性,迅速赢得了全球玩家的青睐。这一系列的创新举措不仅提升了DFI的品牌知名度,也为其在电子主板市场占据了重要地位。

Hammond公司的发展小趣事

在稳固了国内市场地位后,DFI开始将目光投向全球市场。公司积极开拓北美、拉丁美洲和亚太地区的业务,通过参加国际展会、与当地企业建立合作关系等方式,不断提升品牌知名度和市场份额。同时,DFI还针对不同地区的市场需求,推出定制化的产品和服务,以满足客户的多样化需求。这一全球化战略使DFI在国际市场上取得了显著的成绩。

聚洵(Gainsil)公司的发展小趣事

随着市场竞争的加剧,DFI意识到单一产品的竞争力有限。因此,公司开始寻求垂直整合的机会,与罗升等公司合作,共同开发智能制造的全面性解决方案。这一举措不仅使DFI能够提供更完整的产品线,还增强了其在行业中的竞争力。通过与合作伙伴的紧密合作,DFI成功推出了一系列具有竞争力的智能制造解决方案,赢得了市场的广泛认可。

Advanced Technology Corp公司的发展小趣事

ATC公司深知质量管理对于企业发展的重要性。因此,公司建立了严格的质量管理体系,从原材料的采购到产品的生产、检测、包装等环节都进行严格控制。此外,ATC公司还注重员工的培训和教育,提升员工的质量意识和技能水平。这些措施确保了ATC公司产品的稳定性和可靠性,赢得了客户的信任和好评。

Glorious Sources Co Ltd公司的发展小趣事
采取更有效的抗干扰措施如电磁屏蔽、电源滤波等以提高电路的稳定性和可靠性。

问答坊 | AI 解惑

基于LabVIEW的信号输出与数据采集系统

基于LabVIEW的信号输出与数据采集系统…

查看全部问答>

MAX743双输出集成稳压器

MAX743双输出集成稳压器…

查看全部问答>

职业规划与职业危机

一个看上去很美的职业生涯,往往是有心人策划出来并锲而不舍地为之努力,才能成就的。然而,能在从业之初就有很明确职业规划的人,毕竟是少数,很多人的职业规划是在工作3-5年间慢慢建立起来的,甚至还有一部分人一辈子也没有明确的职业规划。   ...…

查看全部问答>

2410板子正常启动wince之后超级终端如何显示的??

小弟现在在搞wince 编译了一个内核下载到2410的开发板里面,但是现在暂时没有VGA的接口显示屏幕, 我想问一下正常启动wince在超级终端里面应该显示什么样子的??我总觉的我的有点问题ID[1] { chainInfo.dwLoadAddress: 0X00000000 chainInfo.dw ...…

查看全部问答>

dhcp client 移植问题,大家指教。

现在在做一个东西,但是手头的montavista系统带的文件系统下没有dhcp client。所以想要把一个pc机上的源码编译后用到我们的系统上。 请问这个东西要怎么做?是否有哪位高人做过这个东西,可以指点一下啊。 已经编译了dhcp client,不知还要改哪 ...…

查看全部问答>

请问wince环境下如何通过gprs远程无线与exchange服务器同步?

windowsmobile下手机上有个内置的activesync客户端一直在运行的,wince下不知道有没有这个东西,如果有,使用方式和wm下是一样的吗?谢谢…

查看全部问答>

利用2510-AT型自动调谐温度控制源表自动优化热电制冷器PID系数

概述 许多热电制冷器(TEC)控制器采用PI或PID(比例、积分、微分)环路实现温度控制。虽然这些环路可以提供精密的温度控制,但却要求适当的P(比例)、I(积分)、D(微分)值。在很多情况下,这些P(比例)、I(积分)、D(微分)值是通过试验和误 ...…

查看全部问答>

EK-LM3S811_ND Rev3在部分XP系统下驱动安装问题

首先,提一点我的EK-LM3S811_ND Rev3板载调试器用的是LMeb3601.然后呢,我就在我的XP系统上安装的驱动,一开始只能装一个就是如图所示的COM7,其余两个如何也装不上,我当时怀疑是板子的问题,查资料,询问有经验的人,两天过后突然想,是不是我的 ...…

查看全部问答>

有关LED灯珠的COB封装相对于传统SMD封装的介绍

随着固态照明技术的不断进步,COB(chip-on-board)封装技术得到越来越多的重视,由于COB光源有热阻低,光通量密度高,眩光少,发光均匀等特性,在室内外照明灯具中得到了广泛的应用,如筒灯,球泡灯,日光灯管,路灯以及工矿灯。   本文就COB封装 ...…

查看全部问答>