充分利用MAXQ®处理器的非易失存储服务
摘要:需要非易失数据存储的应用通常都需要使用外部串行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收到读校准数据的请求(例如在上电时),它会读这两个单元,看哪个正在被使用。没有被擦除的单元用来配置器件到校准状态。
这种方案的最主要优点是简易性。当某些应用需要在上电时作配置时(或者其它恢复配置的情况),这种方法很适用。读程序会接收到一个字指针,并返回这个地址的内容;写程序会接收一个字指针,并尝试对这个地址写操作。擦除程序会擦除这两个单元。
这种方案的缺点是:子程序极其不智能。无法判断写操作是否成功。假如写操作失败了,不会有任何动作来解决问题。为什么这种方案只适用于对已知的空单元写操作,以上这种限制就是其原因。
存储 服务 易失 处理器 利用 MAXQ® 充分 相关文章:
- dsPIC33F系列DSC的 SD存储卡接口设计(01-05)
- 基于闪烁存储器的TMS320VC5409 DSP并行引导装载方法(05-23)
- DSP外部Flash存储器在线编程的软硬件设计(07-10)
- DSP片外高速海量SDRAM存储系统设计(01-18)
- 一种新型的多DSP红外实时图像处理系统设计(02-03)
- 浅谈Win CE应用程序的可移植性(03-02)