NandFlash块管理方法和系统与流程

文档序号:11154211阅读:1132来源:国知局
Nand Flash块管理方法和系统与制造工艺

本发明涉及存储器技术领域,特别是涉及一种Nand Flash块管理方法和系统。



背景技术:

NAND Flash是非易失性存储器的一种,其内部采用非线性宏单元模式,能达到极高的单元密度及存储密度.然而,NAND Flash与其他高密度存储媒介一样不可避免地存在坏块的问题。于是在应用NAND Flash时必须对其存在的坏块进行规避和管理。

NAND Flash的坏块问题是影响存储可靠性的重要问题。目前,NAND坏块管理方法可分为如下两类:基于FTL芯片的坏块管理和基于NAND文件系统的坏块管理。其中,基于FTL芯片的坏块管理是使用一个额外的FTL(Flash Translation Layer)芯片对NAND进行管理,对外部屏蔽了坏块信息,U盘、SD卡、MMC卡以及固态硬盘都使用这种管理方法;该方式基于FTL芯片,因此需要额外的硬件成本。基于NAND文件系统的坏块管理是直接引入专门针对NAND的文件系统也可以实现对NAND坏块的管理,如JFFS2、YAFFS2、FlashFx、UBIFS等文件系统;该方式存在需要占用系统很大的内存,并且代码复杂、效率低、访问速度慢等不足。

可见,目前的NAND坏块管理方法还有待改进。



技术实现要素:

基于此,本发明实施例提供了Nand Flash块管理方法和系统,能够降低系统的复杂度,且无需占用较大的内存,具有较强的可移植性及通用性。

本发明一方面提供Nand Flash块管理方法,包括:

接收应用层的访问指令,所述访问指令中包含逻辑块地址;查询预设的地址映射表,获取所述逻辑块地址对应的物理块地址,所述地址映射表中存储有与各个逻辑块地址对应的Nand Flash物理块地址;

查询预设的坏块列表,检测所述物理块地址指向的存储块是否可用;在所述坏块列表中对所述Nand Flash中所有不可用的存储块进行了标记;

若所述物理存储地址指向的存储块不可用,根据预设的地址映射算法重新确定与所述逻辑块地址对应的Nand Flash物理块地址,更新所述地址映射表,并根据所述访问指令对重新确定的物理块地址指向的存储块进行操作。

本发明另一方面提供一种Nand Flash块管理系统,包括:

指令及地址确认模块,用于接收应用层的访问指令,所述访问指令中包含逻辑块地址;查询预设的地址映射表,获取所述逻辑块地址对应的物理块地址,所述地址映射表中存储有与各个逻辑块地址对应的Nand Flash物理块地址;

块状态检测模块,用于查询预设的坏块列表,检测所述物理块地址指向的存储块是否可用;在所述坏块列表中对所述Nand Flash中所有不可用的存储块进行了标记;

映射管理模块,用于若所述物理存储地址指向的存储块不可用,根据预设的地址映射算法重新确定与所述逻辑块地址对应的Nand Flash物理块地址,更新所述地址映射表,并根据所述访问指令对重新确定的物理块地址指向的存储块进行操作。

基于上述实施例提供的Nand Flash块管理方法和系统,接收应用层的访问指令时,所述访问指令中包含逻辑块地址;查询预设的地址映射表,获取所述逻辑块地址对应的物理块地址;查询预设的坏块列表,检测所述物理块地址指向的存储块是否可用;若所述物理存储地址指向的存储块不可用,根据预设的地址映射算法重新确定与所述逻辑块地址对应的Nand Flash物理块地址,并根据所述访问指令对重新确定的物理块地址指向的存储块进行操作。由此将坏块管理放在驱动层实现,断绝Nand Flash块和应用层的直接联系,具有较强的可移植性及通用性;同时免去了加载文件系统或初始化中间件的时间,且无需占用较大的内存。

附图说明

图1为一个实施例中的本发明方案的工作环境示意图;

图2为一实施例的Nand Flash块管理方法的示意性流程图;

图3为一实施例的Nand Flash块管理系统的示意性结构图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

图1为一个实施例中的本发明方案的工作环境示意图。如图1所示,本发明实施例在Nand Flash的应用层与Nand Flash物理层之间还有Nand Flash驱动层。所述Nand Flash物理层包括若干个物理存储块,所述物理存储块中包含可用的块和不可用的块,所述不可用的块包括坏块和被占用块,可见Nand Flash存储块的可靠性难以保障。所述Nand Flash驱动层中涉及虚拟的可靠的逻辑存储块、坏块列表以及地址映射表;所述坏块列表中记录有当前为不可用状态的存储块的物理块地址;所述地址映射表中存储有与各个逻辑块地址对应的Nand Flash物理块地址;应用层直接面对的是可靠的逻辑存储块,由于在所述逻辑存储块中不存在坏块。通过将不可靠的Nand Flash存储块虚拟为可靠的逻辑存储块,并且应用层仅对虚拟后的存储块访问,通过所述Nand Flash驱动层断绝了应用层与Nand Flash物理层的直接联系,具有较强的可移植性及通用性,且能够保证应用层访问的块均为可靠的可用块。其中,Nand Flash中的存储块分为非替换类存储块和保留块(也称作替换类存储块),所述非替换类存储块的数量等于驱动层的逻辑块的数量。

结合图1及上述对工作环境的说明,以下对Nand Flash块管理方法的实施例进行说明。

图2为一实施例的Nand Flash块管理方法的示意性流程图;如图2所示,本实施例中的Nand Flash块管理方法包括步骤:

S11,接收应用层的访问指令,所述访问指令中包含逻辑块地址;查询预设的地址映射表,获取所述逻辑块地址对应的物理块地址,所述地址映射表中存储有与各个逻辑块地址对应的Nand Flash物理块地址;

本实施例中,应用层直接面向的时驱动层的虚拟的逻辑块,因此所述访问指令中包含逻辑块地址。每一个逻辑块地址均与一个Nand Flash物理块地址对应。

在一优选实施例中,还包括初始化地址映射表的步骤,具体可包括:获取Nand Flash中非替换的可用存储块的物理块地址,建立各逻辑块地址与所述非替换的可用存储块的物理块地址的一一对应关系,根据所述对应关系构建地址映射表。

S12,查询预设的坏块列表,检测所述物理块地址指向的存储块是否可用;在所述坏块列表中对所述Nand Flash中所有不可用的存储块进行了标记;

在一优选实施例中,所述Nand Flash块管理方法还包括步骤:扫描Nand Flash中的全部存储块,记录所述Nand Flash中各存储块的状态,构建所述Nand Flash对应的坏块列表。所述坏块列表中可仅记录当前不可用的存储块信息;或者既记录当前不可用的存储块信息,也记录当前可用的存储块信息。优选的,在创建坏块列表之后,还可按照设定时间周期性的进行扫描,以实施更新所述坏块列表。

S13,若所述物理存储地址指向的存储块不可用,根据预设的地址映射算法重新确定与所述逻辑块地址对应的Nand Flash物理块地址,更新所述地址映射表,并根据所述访问指令对重新确定的物理块地址指向的存储块进行操作。

在一优选实施例中,若所述物理存储地址指向的存储块为可用状态,根据所述访问指令对所述Nand Flash块中对应的存储块进行操作。

在一优选实施例中,根据预设的地址映射算法重新确定与所述逻辑块地址对应的Nand Flash物理块地址的实现方式可包括:随机获取Nand Flash中任一保留块的物理块地址,建立所述逻辑块地址与所述任一保留块的物理块地址的对应关系;或者,获取物理块地址最小的保留块,建立所述逻辑块地址与该保留块的物理块地址的对应关系;其中,所述保留块为Nand Flash中非替换的存储块之外的可用存储块。

可以理解的是,上述步骤S11~S13的执行主体可均为Nand Flash驱动层。

基于上述实施例提供的Nand Flash块管理方法,接收应用层的访问指令时,查询预设的地址映射表,获取逻辑块地址对应的物理块地址;查询预设的坏块列表,检测所述物理块地址指向的存储块是否可用;若所述物理存储地址指向的存储块不可用,根据预设的地址映射算法重新确定与所述逻辑块地址对应的Nand Flash物理块地址,更新所述地址映射表,并根据所述访问指令对重新确定的物理块地址指向的存储块进行操作。由于将坏块管理放在驱动层实现,较好的断绝Nand Flash块和应用层的直接联系,具有较强的可移植性及通用性;同时免去了加载文件系统或初始化中间件的时间,且无需占用较大的内存。

在一优选实施例中,为了节省资源,将所述坏块列表设置为按位标记不可用块,例如:对应的位为1表示这是一个可用块,对应的位为0表示这是一个坏块或这个块已被占用,这样的坏块列表也称为坏块位图,这样在更新坏块列表的时候就不用频繁擦除Flash。当Nand Flash块管理系统首次上电时,系统需要扫描整片Nand Flash,以初始化坏块位图,记录Nand Flash的物理存储块情况,以便预留出可用的保留块,用于“修复”Nand Flash中已经存在的坏块以及将来运行过程中动态产生的坏块。

优选的,所述坏块位图的结构定义及说明可参考表1所示:

表1

在一优选实施例中,以三星K9F1G08PCB0为例,一片Nand Flash芯片共有1024个块,块地址为0~0x3FF。为了实现从逻辑块到物理块的地址映射,需要构建一张块地址映射表。优选的,可以将地址映射表定义为一个数据类型为unsigned short的一维数组,以数组的下标表示逻辑块地址。例如,所述地址映射表的结构定义可参考表2所示:

表2

基于上述所述地址映射表的定义,当GusBlockReMap[usIndex]的值为0xFFFF时,则表示物理块地址为usIndex的块为可用存储块,于是可用存储块的逻辑块地址与物理块地址的映射关系为:

Addr逻辑块=Addr物理块=usIndex

即可用存储块对于的逻辑块地址与其自身的物理块地址相同。

当GusBlockReMap[usIndex]不为0xFFFF时,则表示物理块地址为usIndex的块为不可用存储块,其对应的映射关系将按如程序清单1所示算法确定:

程序清单1逻辑地址重映射算法

优选的,本实施例中将保留块分配在整个Nand Flash存储区间的末端,并且仅有驱动层可以对其进行直接访问,而应用层可以访问最大逻辑块地址应小于所述保留块的物理块地址,这样可以避免一个保留块对应多个逻辑块。即所述逻辑块的数量少于所述Nand Flash中的物理块的数量,使得当检测到某一物理块在使用过程中成为坏块时,可将其他的物理块替换坏块虚拟为一逻辑块供应用层使用,因此,所述地址映射表中包含的最大逻辑块地址小于所述Nand Flash中保留块的物理块地址。

由于若将坏块位图及地址映射表存储在Nand Flash芯片中,需占据一定的存储空间,不利于推广到普遍的Nand Flash芯片中。

为了进一步解决该问题,在一优选实施例中,所述Nand Flash块管理方法还包括预先建立所述Nand Flash对应的结构常量的步骤,所述结构常量中包含有坏块列表的起始地址、地址映射表的起始地址以及用于描述所述Nand Flash的属性信息;将所述结构常量存放在所述Nand Flash中的指定位置,将所述地址映射表以及所述坏块列表存储到所述Nand Flash之外的存储单元,根据所述结构常量访问所述地址映射表以及所述坏块列表。

例如,所述结构常量为预先建立的一个数据结构字段,用于描述NAND Flash属性,其结构定义可参考程序清单2如所示:

程序清单2结构常量NANDFLASH的结构定义

由于结构常量NANDFLASH只有24字节,实际应用中可以将结构常量NANDFLASH存放在Nand Flash的第0块的固定位置,比如0xE000位置,而将坏块位图及映射表存放于其他位置,那么不论是128KB/块还是16KB/块的Nand Flash都可以共用同一种坏块管理算法。当然,所述结构常量还可存储在其他块中,或者,所述结构常量、所述坏块位图以及地址映射表均存放在额外的存储单元。

上述实施例的Nand Flash块管理方法,将坏块管理机制相关的坏块位图、地址映射表以及用于描述Nand Flash属性的NANDFLASH结构常量直接存储在现有的存储单元中,无需额外增加硬件成本;并且实现这种块管理方法的代码量篇幅不大、内存占用不多、访问速度快、效率高,对于小Flash容量的嵌入式单片机系统也适用。此外,通过保留块的映射机制,还便于提供擦写负载平均的支持。

需要说明的是,对于前述的各方法实施例,为了简便描述,将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。此外,还可对上述实施例进行任意组合,得到其他的实施例。

基于与上述实施例中的Nand Flash块管理方法相同的思想,本发明还提供Nand Flash块管理系统,该系统可用于执行上述Nand Flash块管理方法。为了便于说明,Nand Flash块管理系统实施例的结构示意图中,仅仅示出了与本发明实施例相关的部分,本领域技术人员可以理解,图示结构并不构成对系统的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

图3为本发明一实施例的Nand Flash块管理系统的示意性结构图;如图3所示,本实施例的Nand Flash块管理系统包括:指令及地址确认模块310、块状态检测模块320以及映射管理模块330,各模块详述如下:

所述指令及地址确认模块310,用于接收应用层的访问指令,所述访问指令中包含逻辑块地址;查询预设的地址映射表,获取所述逻辑块地址对应的物理块地址,所述地址映射表中存储有与各个逻辑块地址对应的Nand Flash物理块地址;

所述块状态检测模块320,用于查询预设的坏块列表,检测所述物理块地址指向的存储块是否可用;在所述坏块列表中对所述Nand Flash中所有不可用的存储块进行了标记;

所述映射管理模块330,用于若所述物理存储地址指向的存储块不可用,根据预设的地址映射算法重新确定与所述逻辑块地址对应的Nand Flash物理块地址,更新所述地址映射表,根据所述访问指令对重新确定的物理块地址指向的存储块进行操作。

在一优选实施例中,所述的Nand Flash块管理系统还包括:坏块列表建立模块340,用于在Nand Flash块管理系统上电时,扫描Nand Flash中的全部存储块,记录所述Nand Flash中的存储块的状态,构建所述Nand Flash对应的坏块列表。所述的Nand Flash块管理系统还可包括:地址映射表建立模块350,用于获取Nand Flash中非替换的可用存储块的物理块地址,建立各逻辑块地址与所述非替换的可用存储块的物理块地址的一一对应关系,根据所述对应关系构建地址映射表

在一优选实施例中,所述的Nand Flash块管理系统还包括:结构常量建立模块360,用于预先建立所述Nand Flash对应的结构常量,所述结构常量中包含有坏块列表的起始地址、地址映射表的起始地址以及用于描述所述Nand Flash的属性信息。以及,存储管理模块(图3中未示出),用于将所述结构常量存放在所述Nand Flash中的指定位置,将所述地址映射表以及所述坏块列表存储到所述Nand Flash之外的存储单元,以根据所述结构常量访问所述地址映射表以及所述坏块列表。

基于所述Nand Flash块管理系统,将坏块管理做在驱动层,彻底断绝物理层和应用层的联系,不光适用于前后台应用,也适用与操作系统应用;并且它也不依赖于任何第三方的库,在资源紧张的嵌入式系统中也适用;此外,对于其他使用文件系统和非文件系统的应用同样可以使用;可见所述Nand Flash块管理系统具有较强的可移植性及通用性。

需要说明的是,上述示例的Nand Flash块管理系统的实施方式中,各模块之间的信息交互、执行过程等内容,由于与本发明前述方法实施例基于同一构思,其带来的技术效果与本发明前述方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

此外,上述示例的Nand Flash块管理系统的实施方式中,各功能模块的逻辑划分仅是举例说明,实际应用中可以根据需要,例如出于相应硬件的配置要求或者软件的实现的便利考虑,将上述功能分配由不同的功能模块完成,即将所述Nand Flash块管理系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。其中各功能模既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,作为独立的产品销售或使用。所述程序在执行时,可执行如上述各方法的实施例的全部或部分步骤。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上所述实施例仅表达了本发明的几种实施方式,不能理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1