基于闪存的星载大容量存储器的研究与实现:通用闪存存储

基于闪存的星载大容量存储器的研究与实现

基于闪存的星载大容量存储器的研究与实现 基于闪存的星载大容量存储器的研究和实现 摘要:就闪存应用于星载大容量存储器时的写入速度慢、存在无效块 等关键问题探讨了可行性解决方案,并在方案讨论的基础上论述了一个基于闪存 的大容量存储器的演示样机的实现。

关键词:闪速存储器 固态记录器 并行 流水线 无效块 空间飞行器的数据记录设备是卫星上的关键设备之一。自20世纪9 0年代初起,各航天大国开始研制固态记录器(Solid State Rec order,简称SSR)。由于SSR使用半导体存储芯片作为存储介质,所 以其存储密度高、无转动部件、可靠性高、体积小、重量轻,因而逐渐成为空间 飞行器的数据记录器的主流方案。闪速存储器(简称闪存)作为一种新兴的半导 体存储器件,以其独有的特点得到了迅猛的发展,其主要特点有:(1)具有非 易失性,掉电时数据不丢失,可靠性高;
(2)功耗小,不加电的情况下可长期 保持数据信息;
(3)寿命长,可以在在线工作情况下进行写入和擦除,标准擦 写次数可达十万次;
(4)密度大、成本低,存储单元由一个晶体管构成,具有 很高的容量密度,且价格也在不断降低;
(5)适应恶劣的空间环境,具有抗震 动、抗冲击、温度适应范围宽等特点。由于闪存的这些特点,使它受到了航天领 域研究人员的关注。20世纪90年代中期,Firechild公司就曾为F -16侦察星成功设计了SSR  2  ,使用的主要存储芯片就是闪存;
国内的 FY-2卫星也曾采用闪存作为该星的固态存储器的存储介质。虽然有这些成功 的应用案例,但是闪存也存在一些明显的缺点,如写入速度较慢、使用过程中会 出现无效块等。本文将探讨如何解决和突破这些缺点,并依此给出一个具体的系 统实现方案。

1 闪存构成星载大容量存储器的关键问题 1.1 写入速度问题 目前闪存有多种技术架构,其中以NOR技术和NAND技术为主流 技术  3  。NOR型闪存是随机存取的设备,适用于代码存储;
NAND型闪 存是线性存取的设备,适用于大容量数据存储  4  。NAND型闪存有一定的 工业标准,具有一些统一的特点,现以三星公司的K9K1G08U0M型芯片为例进行介绍。该芯片容量为1Gbit,由8192个块组成,每块又由32 个页组成,一页有(512+16)×8bit,该片的8位I/O总线是命令、 地址、数据复用的。读写操作均以页为单位,擦除操作则以块为单位,写入每页 的典型时间为200μs  4  ,平均每写一个字节约需400ns,即约20 Mb/s。这样的写入(编程)速度对于要求高速的应用场合来讲是难以满足的, 因此必须采取一定的技术措施。

1.1.1 并行总线技术 并行总线技术亦称宽带总线技术,即通过拓宽数据总线的带宽实现数 据宏观上的并行操作。比如,由四片K9K1G08U0M型闪存芯片组成一个 32位宽的闪存子模块,它们共用相同的控制信号,包括片选信号、读写信号、 芯片内部地址等。子模块总是被看做一个整体而进行相同的操作,只是数据加载 的时候是不同的数据。这样,数据量将是使用单独一块芯片时的4倍,所以理论 上速度也将是非并行时的4倍。

1.1.2 流水线技术 借鉴现今高性能计算机中的流水线操作原理,可在时间片上实现微观 并行。针对闪存的写入速度慢的问题,可以对其进行流水处理。K9K1G08 U0M型闪存的写入操作可分为三个步骤:(1)加载操作,即完成命令、地址 和数据的载入工作;
(2)自动编程操作,即由闪存芯片自动完成编程操作,将 载入到页寄存器的数据写到内部存储单元的;
(3)检测操作,即在自动编程结 束后检测写入的数据是否正确。如果不正确,需要重新编程;
如果正确,继续下 一步的操作。写流水原理图如图1所示。由图1可以看到,流水线运行起来后, 在任一时间片上总有若干小操作在同时进行,即在时间片上实现了复用,因此从 整体上看速度将会提高。

1.2 无效块的管理 三星闪存芯片在使用过程中会出现无效块。无效块是指一个块中存在 一个或多个无效位,其可靠性不能得到保证,必须加以标识和旁路(当然无效块 不会影响到其它块的有效性)  4  并进行数据备份。为了对无效块实现管理, 可以建立一张无效块到冗余区有效块的映射表。映射表结构如图2所示。映射原 理如下:
开始是一张初始无效块映射表,这张表可以根据三星公司技术手册给 出的算法建立起来。按照图示的映射数据结构对整个存储区进行编号,并根据这个编号对映射表进行排序。进行写操作时,按照上述的映射结构将写地址与映射 表进行比较,比较到块级即可。如果是无效块,将待写入的数据写到被映射到的 块;
如果不是,则直接写入该块。如果在写某块的某页时出现编程错误,则将该 块添加进无效块映射表(当编程出错时就表明出错页对应的块无效),同时从该 出错页开始,将该块后面的页数据都写入到对应的映射块。这样,在数据读出时, 可将读地址与映射表比较,并且需要比较到页级以确定每一页的确切存放位置。

如果该页编程正确,则直接读出;
如果错误,则到被映射的块的对应页读数据, 并且该页之后的页也从被映射块中读数据。根据三星的技术资料,对无效块进行 读操作是允许的,即对于编程出错页前面的那些编程正确的页是可以正确读出的, 而对无效块进行编程和擦除的操作是不推荐的,因为有时这些操作会使邻近的块 也失效  4  。所以读操作要查找到每一页的对应存放位置,而写操作只要查找 到块就行。查找时采用二分查找算法。擦除完后,将擦除出错的块也添加进无效 块映射表。无效块映射表需要不断维护和更新。

2 闪存构成星载大容量存储器的系统实现方案 2.1 系统的组成 该实现方案将上述关键问题的解决方法融合进来,系统由存储区模块、 接口模块、数据缓冲模块及主控模块四部分组成,系统原理图如图3所示。

2.1.1 存储区模块 为了实现并行和流水技术,整个存储区模块按如下方式构成:由4片 K9K1G08U0M型三星闪存芯片组成一个子模块,8个子模块组成8级流 水的大模块,而这个大模块即是整个存储区,其总容量为32Gbit。无效块 备份的冗余区可以设在每个子模块内部,即从子模块的每块芯片中预留出一部分 空间。这种模块化管理的方式既便于系统扩展,又可以在不影响系统正常工作的 情况下旁路已损坏的存储块。