首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
充分利用MAXQ®处理器的非易失存储服务
来源:本站整理  作者:佚名  2011-05-23 08:55:31



摘要:需要非易失数据存储的应用通常都需要使用外部串行EEPROM。这篇文章介绍了仅使用MAXQ微控制器中已有的闪存提供非易失数据存储的方法。

 

引言

需要微控制器的应用通常也需要一些机制,即使在掉电的情况下也可以保存设置。例如,一台收音机,假如在更换电池的时候会丢失之前的电台设置,肯定不会在当今的市场上获得成功。客户期望喜欢的频道、温度预设值、参数首选项和其他持久性的信息能够一直被保存。

为满足客户对非易失数据存储的要求,设计师通常会使用一个串行EEPROM。这些EEPROM器件体积很小、价格便宜、而且在市场上已经被长期使用,设计工程师使用这些器件非常便利。但是在当今对成本非常敏感的市场领域,增加一个并不昂贵的EEPROM可能会使设计超出预算。

很多处理器使用闪存存储程序代码,使用静态RAM存储数据信息。尽管充分利用闪存未使用的部分作为非易失数据存储很有吸引力,但是传统的哈佛架构制约了这种应用。MAXQ架构属于哈佛架构,具有独立的代码和数据总线。但MAXQ器件包含的硬件部分可以实现伪冯诺依曼架构,如同访问数据空间一样访问代码空间。这种额外的多功能性,结合MAXQ的效用函数,可实现存储器的擦写服务,为完整的可读写非易失存储子系统提供了解决方案。

 

关于闪存的基本考虑

闪存是一种电子可擦除存储。通常也被认为是“主读”。简言之,尽管闪存是可写的,但数据更新并不会很频繁,多数的操作都是读操作。多数闪存器件从字面意思来讲都是可写的,但每次只能整块擦除。这使得那些存储器件通常都不适合用于易变存储,只适合用作从不改变内容的固定数据存储。

有两种类型的闪存:NAND闪存和NOR闪存。NAND闪存用在存储卡和U盘中。通常,由于数据按时钟串行传输,从NAND器件中读数据需要数个周期。这种有序的操作使NAND闪存不适合用作程序代码存储,因为读取时间会太长。相反,NOR闪存类似传统字节宽度或字宽度存储。读取NOR闪存就像读取ROM器件:先发器件选择和地址命令,在等待足够的存取时间之后,从总线上读取数据。NOR闪存用于MAXQ处理器中。

 

MAXQ处理器的闪存

MAXQ处理器中使用的闪存单元被擦除时会变成“1”状态。因此,在擦除后,存储单元中的每个位置都将包含0xFFFF。对某一存储位置进行编程会把某些位从“1”变成“0”状态。为了使被编程过的位重新变回“1”状态,整个单元必须被擦除。

任何电擦除的存储器件必须面临的问题是持久性。根据特定的技术,一个闪存单元在完全失效之前,可以忍耐的擦除次数少达1,000次,多达1,000,000次。因此,使用闪存做数据存储的任何应用都必须保证写操作循环在整个阵列中均匀分布,不允许某一个位置的擦除编程次数比其他位置多很多。

多数闪存器件都允许把之前已经编程过的位置中的没有编程过的位从“1”变成“0”状态。例如,对于多数器件,允许对某个位置编程,把数据从0xFFFE变为0x7FFE,在这个编程过程中,没有任一个位从“0”变成“1”。然而,MAXQ系列器件中使用的闪存,不允许对已经编程过的位置再编程,即使没有发生从“0”到“1”的变化。这样的写操作会失败,保持数据在0xFFFE状态。

MAXQ器件编程受限制的理由如下。正在被编程的存储单元起初是作为代码空间的,所以必须很谨慎,禁止对已写过的位置的任何写操作。0xFFFF指令指一条无效的源代码,它不太可能出现在有效的代码单元内。因此,阻止对已编程过的位置的写操作能够帮助保持代码单元的完整性。

 

使用MAXQ2000的设计方案

在这篇文章中,我们主要讨论一个MAXQ器件:MAXQ2000。这个微处理器具有64kB的程序存储空间,具体划分为128个单元,每个单元具有256个16位的字。下面介绍两种设计方案。第一种方案适用于信息写一次后在产品的生命周期内不会再频繁改动,例如校准数据、版本信息和特征参数等等。第二种方案针对更普通的装置,这种设计要允许数据频繁改动,例如使用信息或者详细记录等。

 

方案1

问题:校准数据需要存储在产品中。产品会一直需要重新校准,所以校准数据必须保存在一个可改写的存储空间中。

解决方案:这实际上是可以想象的到的最简单的情况。MAXQ2000程序存储空间中预留了两个单元用于存储校准数据,一个是字地址0x7E00,另一个是0x7F00。当MAXQ2000第一次收到保存校准数据的命令,它就会检查这两个单元并确保它们是空的。校准数据被保存到第一个单元。

当MAXQ2000第二次收到保存校准数据的命令,它会再次检查这两个单元。当发现0单元已被使用,它会把校准数据复制到1单元,接着擦除0单元。

当MAXQ2000收到读校准数据的请求(例如在上电时),它会读这两个单元,看哪个正在被使用。没有被擦除的单元用来配置器件到校准状态。

这种方案的最主要优点是简易性。当某些应用需要在上电时作配置时(或者其它恢复配置的情况),这种方法很适用。读程序会接收到一个字指针,并返回这个地址的内容;写程序会接收一个字指针,并尝试对这个地址写操作。擦除程序会擦除这两个单元。

这种方案的缺点是:子程序极其不智能。无法判断写操作是否成功。假如写操作失败了,不会有任何动作来解决问题。为什么这种方案只适用于对已知的空单元写操作,以上这种限制就是其原因。

 

方案2

问题:非易失存储用来跟踪用电量和其它会经常改变的数据。更新的频率从一周数次到一天数次。电表是一个很好的应用举例。

解决方案:在这种情况下即时传统的EEPROM也需要另求帮助。问题在于:频繁的更新、和可擦除存储技术固有的有限电擦除寿命,排除了使用单个EEPROM频繁写擦除操作的可能性。假如这种应用需要每小时更新一次。具有10,000次写擦除次数限制的EEPROM只能工作一年,远远低于电表应用所需的10年寿命设计目标。

这个问题的解决方案是实现“损耗平衡”。也就是指不对单一位置重复写操作。相反,在整个存储阵列中执行均匀分布的写操作。

正是基于此目的,损耗平衡技术被接受,并在闪存存储设备中使用。它的算法非常复杂难以理解。但对于我们,介绍简单的机理就足够了。

在这种设计中,存储阵列中的数据条目并不是以地址作参考,而是以数据元编号为参考。数据元编号是一个和数据元素一一对应的任意8位数值。所以在这个方案中最大可以有255个数据元(数据元0预留)。每个数据元包含:包括数据元编号和数据元长度的双字节报头(图1);指示1、2、3或者4个16位字的两位码,以保留足够的剩余空间进行错误管理。

图1. 数据单元报头结构
图1. 数据单元报头结构

写数据单元时,写子程序必须知道要写的数据、数据单元的长度和数据要写的位置。很容易可以知道数据写在哪个地址;无论是新数据单元还是更新已有的数据单元,都会写在存储阵列的末尾。写命令会搜索阵列的末尾,紧接着在最后一个记录后写入新的数据单元。假如在当前的存储页面没有足够的空间保存特定长度的数据元,就会出现页面结束标志并打开一个新页面。图2是这种典型的数据页面的结构。

在这个数据页面中,先写数据单元1,并更新。接着写数据单元4,但从不更新。随后是数据单元3,共更新7次。最后写入数据单元2,从不更新。

页面结束标志的出现表明曾执行写操作,但数据单元太长不能填入当前页面。会打开一个新页面以填写数据单元。在整个数据结构的末尾会分配一个空单元,这里本该是一个数据单元的报头。

图2. 典型的数据页面
图2. 典型的数据页面

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:6,285.15600 毫秒