闪存管理的基本知识

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

闪存管理的基本知识

闪存是一种电可擦除的存储器,通常主要用于读操作,也就是说,虽然是可写的,但它不希望很频繁地更新数据,因此对这种存储器的操作大部分是读操作。大多数闪存器件是以字(word)为单位写入数据的,但一次只能擦除整个块。这使得它们不适用于频繁变化的存储应用,只适合存储那些永远不变的常数表。

一共有两种闪存:NAND闪存和NOR闪存。NAND闪存经常用于存储卡和闪盘。一般来说,从NAND器件读取数据需要几个周期,并且大部分是用串行方式完成的。

因此NAND闪存不适于存储程序代码,因为存取时间太长。而NOR闪存更像是传统的字节或字宽的存储器。可以像读ROM器件那样读NOR 闪存中的数据:使片选和地址线有效,然后等待一段访问时间后从总线上读取数据。

闪存块通常被擦除到“1”状态,因此经过擦除后,块中的每个位置都是0xFFFF。“编程”一个闪存位置是把某些位从“1”状态改变为“0”状态。为了使编程过的位返回到“1”状态,整个块必须被擦除。

任何电可擦除的存储器件都面临寿命的问题。根据所用技术的不同,一个闪存单元在永久失效以前可以承受的擦除-编程次数少则1000次,多则100万次。使用闪存存储数据的任何方案都必须确保写入次数在整个单元阵列上获得均匀分布,没有一个位置会出现太多的擦除和编程次数。

大多数闪存器件都允许将前次编程中那些未被编程的位从“1”改为“0”状态。例如,大多数器件允许用0xFFFE编程过的那个位置再用0x7FFE进行编程,因为这种操作不会将任何位从“0”改变到“1”。然而如图1所示的处理器架构中使用的闪存不允许这样做。这种写入操作的结果是失败,内存中的数据仍然是0xFFFE。

理由很简单:因为要被编程的存储块主要用作代码空间,通常禁止对前面写过的位置作任何写操作。因为指令0xFFFF代表的是无效的源子译码(source sub-decode),不可能出现在有效的代码块中。这样,阻止向以前编过程的位置写入数据有助于保持代码块的完整性。

相关文档
最新文档