AVR105 高效持久保存参数到 Flash.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AVR105: 高效持久保存参数到 Flash 翻译:邵子扬 2006年8月31日 shaoziyang@ 特点 快速存储参数 高持久性存储 – 350K 次写循环 高效参数存储 任意参数大小 参数冗余存储 可选写入验证 电源失效后优化恢复 介绍 嵌入式系统在复位或掉电后依赖于保存的参数。在一些系统这个静态的参数用于初始化系统,在另外一些应用下用于记录系统的历史数据或累计数据。EEPROM 存储器可以用于这个目的,但是当一次要保存多个字节时就难以匹配 Flash 存储器的速度。 Flash 存储器对于大量参数更有效率的原因是可以使用页编程,减少了编程时间。这样在存储多个字节时对于 Flash 每个字节的编程时间就比 EEPROM 少。作为快速存储法的直接结果就是电源消耗可以减少,因为更多的时间可以进入休眠模式。 这篇应用笔记说明了使用 AVR 的自编程特性来高效参数保存的方法。利用整个 Flash 页和类似于环形缓冲区的方法,Flash 页的每个存储器单元的写入次数不像只使用一个单元那么频繁, 这增加了存储器的使用次数,保证存储区不会被“耗尽”。存储器的使用次数与参数大小和分配页面大小成正比。 理论 AVR 单片机的 megaAVR? 系列有个特性叫做“自编程”,这个特点使得 AVR 可以再次编程内部的 Flash 存储器。所有 AVR 单片机的程序存储器都可以用于存储常数,现在也可以存储参数,因为能够在运行时修改 Flash 存储器的内容。 使用 Flash 存储器存储参数不像使用 EEPROM 接口那样简单,自编程的目的主要是为了用于固件程序升级,但是其灵活性也允许用于更新 Flash 中的参数。这一小节说明了 Flash 存储器关于使用内部存储器保存参数的基本资料。 Read-While-Write Flash Flash 存储器可以用 SPM 指令再次编程。SPM 指令只能从 Boot 区运行,从应用程序区执行SPM 指令将没有任何效果。应用程序区的范围是从地址 0x0000 直到 Boot 区的起始地址(如图1)。Boot 区可以选择 4 个不同的大小,它由熔丝位来决定。Boot 大小与使用的 AVR 单片机型号有关。 图1. ATmega128 的应用程序区和 Boot 区存储器映射 Boot 区总是在 No-Read-While-Write (NRWW) 区,应用程序区包括了 Read-While-Write (RWW) 区以及 NRWW 区的一部分。当 Boot 区的大小选择为最大时,它占用了整个的 NRWW 区,这时应用程序区就只包含了 RWW 区。NRWW 和 RWW 是固定的,不受 Boot 区大小的影响。参考芯片的数据手册获得更详细的资料(注:也可以参考AVR109自编程,这篇应用笔记已经翻译过了)。 NRWW 和 RWW 区的不同在于当擦除或写入 RWW 区时,AVR 单片机可以继续执行位于 NRWW 区的程序代码。反过来则不行的:AVR 内核在修改 NRWW 区时被暂停。概括的讲,位于 Boot 区的代码可以在程序区编程时执行,这里假设被程序区修改的页面在 RWW 中。 因此,Flash 参数更新的代码必须位于 Boot 区,而 Flash 参数必须在程序区的 RWW 部分。这要求在写入参数时不能禁止中断。 擦除和编程 Flash 单元 Flash 存储器由独立的位单元组成,Flash 单元基于浮动门晶体管工艺:一个电荷“捕捉”晶体管门电路决定 Flash 单元读取的逻辑电平。Flash 的工作方式可以简单的描述为:当 “擦除” 一个单元时,对门进行充电,单元读取为逻辑 1。 “编程” Flash 等于对门电路放电,使逻辑变为 0。只能编程(放电)一个已经擦除过 (充电) 的单元。 Flash 以页的形式组织,当使用自编程擦除和编程时也是以页方式进行的。 注意位可以单独编程,因为位编程就是放电,没有被编程的位仍然保持电荷,任何没有被编程的位可以在以后进行编程。如果在编程一个字节前不先进行擦除,其结果就是旧参数和新参数的与。 例如写参数 0x01 到一个 Flash 字节需要先擦除该字节 (8 个 Flash 单元),使其变为 0xFF。写入参数时,7 个高位(Flash 单元) 被放电。如果 Flash 没有被预先擦除,结果很可能是不正确的:假设原来的参数是 0xFE,并且要编程的新参数为 0x01,编程的结果将是 0x00,因为 LSB 不能从 0 变为 1。 Flash 编程次数 实际上一个参数(1) 可以存储多次到一个 Flash 页,Flash 单元保证可以承受 10,000 次擦除/写入循环。就是说,每个单元可以擦除并编程 10,000 次。因此,如果一个参数可以在一个页面的不同位置写入

文档评论(0)

tcpe + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档