一种NandFlash坏块管理方法、装置及存储器与流程

文档序号:11154885阅读:1390来源:国知局
一种Nand Flash坏块管理方法、装置及存储器与制造工艺

本发明涉及闪存存储器技术领域,尤其涉及一种Nand Flash坏块管理方法、装置及存储器。



背景技术:

Nand Flash(快闪记忆体)内存是Flash内存的一种,由于Nand Flash具有数据存储速度快、容量大、可擦除次数多等优点,因此在业界得到了越来越广泛的应用。由于Nand Flash的逻辑控制比较复杂,需要相应的逻辑控制器件如单片机、CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)、FPGA(Field Programmable Gate Array,即现场可编程门阵列)等对其进行逻辑控制,其中,FPGA因具有时钟频率高、内部延时小以及丰富的逻辑资源而受到广泛应用。

图1是基于FPGA控制的Nand Flash存储器的硬件结构示意图。如图1所示,该存储器采用模块化设计,其核心是FPGA模块和Nand Flash模块,其中,FPGA作为整个存储器的控制核心,通过接收上级设备的指令控制存储器进入不同的工作状态,同时,接收并处理高速数据,将其存入Nand Flash模块(芯片)中;Nand Flash模块主要实现数据接收处理,实现接收数据的实时存储,并在数据存储完成后,对存储的数据进行回读分析。进一步的,为了提高存储速度、实现海量存储,Nand Flash模块通常由多片NAND Flash芯片组成,每个Nand Flash芯片又被分为若干个Block块。但是,由于Nand Flash模块的生产工艺限制,在其出厂时或使用过程中会出现无效的坏块,但对这些坏块进行读写操作时,会造成读写错误、以及数据的丢失,因此需要对坏块进行管理。目前,常见的坏块管理方法是,FPGA对Nand Flash模块内部的所有块进行扫描判别,然后,将所有的坏(或有效)块对应建立一个坏(或有效)块地址列表、或者包含Nand Flash模块中所有的块地址的块状态列表,利用在FPGA内部的RAM(Random Access Memory,随机存取存储器)资源,将上述列表存储在RAM中,在进行读写操作时,先根据RAM中存储的数据,寻找出有效块地址,再在相应的有效块中进行读写操作。

但是,RAM在存储块地址时至少需要12bit的字节,并且Nand Flash模块中通常包含大量的块(如4096个块),因此FPGA内部的RAM至少要占用12bit位宽、4096深度的字节,所以上述坏块管理方法,占用大量的FPGA内部RAM资源,尤其在PFGA内部资源紧张的情况下,会导致FPGA程序无法运行或者运行不正确。



技术实现要素:

为克服相关技术中存在的问题,本发明提供一种Nand Flash坏块管理方法、装置及存储器。

根据本发明实施例的第一方面,提供一种Nand Flash坏块管理方法,该方法包括:

建立与Nand Flash模块中的块数目相同的随机存取存储器RAM;

将每个所述RAM的地址分别作为所述Nand Flash模块中每个块的块地址;

对所述Nand Flash模块进行块状态检测,得到所述Nand Flash模块中的每个块的块状态;

分别将所述每个块的块状态存储在相应地址的RAM中。

可选地,当所述Nand Flash模块未经过擦除操作时,对所述Nand Flash模块进行块状态检测,得到所述Nand Flash模块中的每个块的块状态,包括:

依次读取所述Nand Flash模块中每个块对应的第一页或第二页中备用区的数据;

检测所述备用区的数据是否为FFh;

如果所述备用区的数据为FFh,则判定所述备用区的数据对应的块为有效块;

如果所述备用区的数据不是FFh,则判定所述备用区的数据对应的块为先天性坏块。

可选地,当所述Nand Flash模块已经过擦除操作时,对所述Nand Flash模块进行块状态检测,得到所述Nand Flash模块中的每个块的块状态,包括:

依次向所述Nand Flash模块中的块发送读状态寄存器指令;

接收所述Nand Flash模块中的块根据所述读状态寄存器指令反馈的状态数据;

判断所述状态数据中最低位的数值是否为预设值;

如果所述状态数据中最低位的数值为预设值,则判定所述状态数据对应的块为有效块;

如果所述状态数据中最低位的数值不为预设值,则判定所述状态数据对应的块为坏块。

可选地,当所述Nand Flash模块已经过擦除操作时,对所述Nand Flash模块进行块状态检测,得到所述Nand Flash模块中的每个块的块状态,包括:

根据所述RAM中存储的块状态,判断所述RAM对应的块是否为有效块;

如果所述RAM对应的块为有效块,则向所述RAM对应的块发送块擦除指令;

判断是否接收到所述RAM对应的块反馈的块擦除指令完成信息;

如果接收到所述RAM对应的块反馈的块擦除指令完成信息,则向所述RAM对应的块发送读状态寄存器指令;

接收所述RAM对应的块根据所述读状态寄存器指令反馈的状态数据;

判断所述状态数据中最低位的数值是否为预设值;

如果所述状态数据中最低位的数值为预设值,则判定所述状态数据对应的块为有效块;

如果所述状态数据中最低位的数值不为预设值,则判定所述状态数据对应的块为后天性坏块。

可选地,对所述Nand Flash模块进行块状态检测之前,所述方法还包括:

依次向所述Nand Flash模块中每个块发送块擦除指令;

判断是否接收到所述Nand Flash模块中的块反馈的块擦除指令完成信息;

如果接收到所述Nand Flash模块中的块反馈的块擦除指令完成信息,则对所述Nand Flash模块进行块状态检测。

可选地,分别将所述每个块的块状态存储在相应地址的RAM中,包括:

如果所述Nand Flash模块中的块为有效块,则将相应地址的RAM中的块状态标签更新为第一标签;

如果所述Nand Flash模块中的块为先天性坏块,则将相应地址的RAM中的块状态标签更新为第二标签;

如果所述Nand Flash模块中的块为后天性坏块,则将相应地址的RAM中的块状态标签更新为第三标签;

其中,所述第一标签、第二标签和第三标签均采用2比特长度的数据表示。

可选地,分别将所述每个块的块状态存储在相应地址的RAM中之后,所述方法包括:

将每个所述RAM中存储的块状态数据发送给串行闪存SPI Flash模块。

根据本发明实施例的第二方面,提供一种Nand Flash坏块管理装置,该装置包括:处理器、存储器和通信接口,所述处理器、所述存储器和所述通信接口通信总线相连;

所述通信接口,用于接收和发送信号;

所述存储器,用于存储程序代码;

所述处理器,用于读取所述存储器中存储的程序代码,并执行如本发明实施例第一方面任一方面所述的方法。

根据本发明实施例的第三方面,提供一种存储器,该存储器包括FPGA模块和Nand Flash模块,其中:

所述FPGA模块和所述Nand Flash模块电连接,所述FPGA模块包括如本发明实施例第二方面所述的装置。

可选地,所述存储器还包括串行闪存SPI Flash模块,所述SPI Flash模块和所述FPGA模块电连接。

由以上技术方案可见,本发明实施例提供的一种Nand Flash坏块管理方法、装置及存储器,通过在FPGA模块内建立与快闪记忆体Nand Flash模块中的块数目相同的随机存取存储器RAM,并将每个RAM的地址分别作为Nand Flash模块中每个块的块地址,然后,将检测得到的Nand Flash模块中的每个块的块状态存储在相应地址的RAM,这样,便可以根据各RAM的地址以及RAM中存储的块状态数据,进行相应的读写操作。本发明实施例将RAM的地址作为NAND flash模块中各block块的块地址,从而节省了RAM存储块地址占用的空间,并且RAM地址只需用一个计数器来表示,不占用FPGA模块的存储空间,所以节省了FPGA模块的内部资源。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术中一种基于FPGA控制的Nand Flash存储器的硬件结构示意图;

图2为本发明实施例提供的一种Nand Flash坏块管理方法的流程示意图;

图3为本发明实施例提供的一种对Nand Flash模块中的坏块检测方法的流程示意图;

图4为本发明实施例提供的另一种对Nand Flash模块中的坏块检测方法的流程示意图;

图5为本发明实施例提供的一种对Nand Flash模块中的坏块检测时序示意图;

图6为本发明实施例提供的又一种对Nand Flash模块中的坏块检测方法的流程示意图;

图7为本发明实施例提供的一种Nand Flash坏块管理装置的基本结构示意图;

图8为本发明实施例提供的一种存储器的基本结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

针对现有技术中,对Nand Flash模块中的坏块进行管理时,会占用大量的FPGA内部RAM资源的问题,本发明实施例提供了一种Nand Flash坏块管理方法,该方法的核心是:在FPGA模块内建立与Nand Flash模块中的块数相同的对应RAM空间,将每个RAM的地址分别作为Nand Flash模块中每个block块的块地址,并将检测的坏块状态标记到对应位置的RAM里,在读写操作时跳过RAM中标记的坏块,这样,既节省了数据处理时间又节省FPGA内部资源。

以下将结合附图对本发明实施例的Nand Flash坏块管理方法进行详细说明。

图2是本发明实施例提供的一种Nand Flash坏块管理方法的流程示意图,如图2所示,该方法主要包括如下处理步骤:

S110:建立与Nand Flash模块中的块数目相同的随机存取存储器RAM。

例如,Nand Flash模块中包含4096个block块,则对应的在FPGA模块内建立4096个RAM。

S120:将每个所述RAM的地址分别作为所述Nand Flash模块中每个块的块地址。

S130:对所述Nand Flash模块进行块状态检测,得到所述Nand Flash模块中的每个块的块状态。

在Nand Flash模块中存在先天性性坏块和后天性坏块,其中,先天性坏块是由于工艺原因,出厂时会产生坏块;后天性坏块,是在使用过程中,由于擦除次数达到极限以及电压不稳定等原因会造成读写不正常,产生坏块。针对不同的坏块,本发明实施例给出了不同的快状态检测方法。

如果上述Nand Flash模块未经过擦除操作时,如图3所示,步骤S130可以包括如下步骤:

S1301:依次读取所述Nand Flash模块中每个块对应的第一页或第二页中备用区的数据。

例如,Nand Flash芯片在出厂前,会把每块的第一页或第二页中的备用区的(如第4096列)数据写入值FFh,即将每个块中的所有单元设置为高电平,相反,如果块中存在坏单元,则不能将所有单元的电平拉高,进而备用区的(如第4096列)数据对应的值就是00h。

S1302:检测所述备用区的数据是否为FFh。

如果所述备用区的数据为FFh,则执行步骤S1303:如果所述备用区的数据不是FFh,而是00h,则执行步骤S1304。

S1303:判定所述备用区的数据对应的块为有效块;

S1304:判定所述备用区的数据对应的块为先天性坏块。

通过上述方法,便可以在向Nand Flash模块进行读写操作前,识别出Nand Flash模块中的有效块和坏块,避免对先天性坏块进行擦除和写入操作。

如果上述Nand Flash模块已经过擦除操作时,如图4所示,步骤S130可以包括如下步骤:

S1305:依次向所述Nand Flash模块中的块发送读状态寄存器指令。

具体的,可以依次向Nand Flash模块中的块发送读状态寄存器指令(70h),Nand Flash模块中的块接收到这个指令后,会返回一个字节数据。

S1306:接收所述Nand Flash模块中的块根据所述读状态寄存器指令反馈的状态数据。

S1307:判断所述状态数据中最低位的数值是否为预设值。

具体的,对反馈的状态数据的最低位进行检测,如果最低位为预设值(如I/O0=0),执行步骤S1308;如果最低位不为预设值(如I/O0=1),则执行步骤S1309。

S1308:判定所述状态数据对应的块为有效块。

S1309:判定所述状态数据对应的块为坏块。

通过上述方法,便可以检测出在Nand Flash模块使用过程中的有效块和坏块,其中的坏块包括先天性坏块和后天性坏块。

进一步的,对于使用过程中坏块,还可以在使用Block Erase(块擦除)命令进行块擦除结束后,利用块擦除的结果,再进行块状态检测,具体的,在步骤S130之前,所述方法还可以包括如下步骤:

S150:依次向所述Nand Flash模块中每个块发送块擦除指令。

具体的,可以接收来自上位机的块擦除指令,然后将该块擦除指令依次发送给Nand Flash模块中各block块。

S160:判断是否接收到所述Nand Flash模块中的块反馈的块擦除指令完成信息。

如果接收到Nand Flash模块中的块反馈的块擦除指令完成信息,则执行步骤S130。相反,如果接收到Nand Flash模块中的块反馈的块擦除指令错误信息,则可以直接将反馈该块擦除指令错误信息的块判定为坏块,并执行步骤S140。

本发明实施例,将对Nand Flash模块中的块状态检测设在块擦除之后进行,可以利用执行块擦除指令的结果,当块擦除指令执行错误时,则不再继续对该块进行状态检测,而是直接判定为坏块,进而减少了FPGA的数据处理量。

图5为本发明实施例提供的一种对Nand Flash模块中的坏块检测时序示意图,如图5所示,在进行块擦除时,首先要向Nand Flash模块写入命令,具体的,使命令控制信号CLE为1,地址控制信号ALE为0,在写数据控制信号WE上升沿时,将块擦除开始指令(60h)写入NAND FLASH模块;然后,命令控制信号CLE为0,地址控制信号ALE为1,在写数据控制信号WE的上升沿写入块地址(Row add1,Row add2,Row add3),接着命令控制信号CLE为1,地址控制信号ALE为0,在写数据控制信号WE上升沿时,将块擦除结束指令(D0h)写入Nand Flash模块,等待Nand Flash状态反馈RDY信号由1变为0,再变为1时,表示擦除指令完成,最后,再发送读状态寄存器指令(70h),并读取Nand Flash模块中的block块返回的状态(status),根据状态的最低位(IO0)来判断是好块还是坏块。

S140:分别将所述每个块的块状态存储在相应地址的RAM中。

其中,如果所述Nand Flash模块中的块为有效块,则将相应地址的RAM中的块状态标签更新为第一标签,如用标签00表示此块为有效块;如果所述Nand Flash模块中的块为先天性坏块,则将相应地址的RAM中的块状态标签更新为第二标签,如用标签01表示此块为先天性坏块;如果所述Nand Flash模块中的块为后天性坏块,则将相应地址的RAM中的块状态标签更新为第三标签,如用标签10表示此块为先天性坏块。

如表一所示,本发明实施提供的块地址结构映射表:

需要说明的是,在RAM存储块状态时,还可以用标签0和1代表块状态,例如,标签0代表有效块,标签1代表坏块(包括先天性坏块和后天性坏块),这样不再区分先天性坏块和后天性坏块,可以进一步节省RAM的用量。

本发明实施例,根据Nand Flash模块中block块的个数,相应的,建立2bit*块数目的RAM或1bit*块数目的RAM,每个RAM的地址分别对应着块地址,2或1bit对应块的状态标签,将RAM的地址作为Nand Flash模块中block块的块地址,从而节省了块地址的存储空间,大大减小了FPGA模块内部RAM的用量,解决了FPGA模块内部RAM不够用的问题。

进一步的,当Nand Flash模块已经过读写操作后,再对其进行块状态检测时,因为Nand Flash模块会存在有效块和坏块,如果继续对坏块进行状态检测,会浪费数据处理。基于上述原因,如图6所示,为本发明实施例提供的又一种对Nand Flash模块中的坏块检测方法的流程示意图,具体包括如下步骤:

S1310:根据所述RAM中存储的块状态,判断所述RAM对应的块是否为有效块。

具体的,可以先读取RAM对应地址中的状态标签数据,根据该状态标签数据判断当前块是否为有效块,如果为有效块,则执行步骤S1311,如果为无效块,则直接跳过该块,继续读取下一个block块对应RAM的状态标签数据。

S1311:向所述RAM对应的块发送块擦除指令。

S1312:判断是否接收到所述RAM对应的块反馈的块擦除指令完成信息。

如果接收到Nand Flash模块中的块反馈的块擦除指令完成信息,则执行步骤S1313;相反,如果接收到Nand Flash模块中的块反馈的块擦除指令错误信息,则可以直接将反馈该块擦除指令错误信息对应的块判定为坏块,并执行步骤S140。

S1313:向所述RAM对应的块发送读状态寄存器指令。

S1314:接收所述RAM对应的块根据所述读状态寄存器指令反馈的状态数据。

S1315:判断所述状态数据中最低位的数值是否为预设值。

具体的,对反馈的状态数据的最低位进行检测,如果最低位为预设值(如I/O0=0),执行步骤S1316;如果最低位不为预设值(如I/O0=1),则执行步骤S1317。

S1316:判定所述状态数据对应的块为有效块。

S1317:判定所述状态数据对应的块为后天性坏块。

利用本实施例提供的块状态检测方法,可以根据RAM中存储的当前块状态信息,有选择的对Nand Flash模块中的有效块进行状态检测,然后根据检测结果再对RAM中存储的块状态信息进行更新,进而可以减少FPGA模块的数据处理量。

由于RAM中的数据掉电会丢失,所以在步骤S140将所述每个块的块状态存储在相应地址的RAM中之后,本实施还提供了,将每个所述RAM中存储的块状态数据发送给串行闪存SPI Flash模块,将RAM中的数据存储在SPI flash中,以防止RAM中的数据丢失。

图6是本发明实施例提供的一种Nand Flash坏块管理装置的结构示意图。如图6所示,该Nand Flash坏块管理装置700,其结构可包括:至少一个处理器(processor)701、内存(memory)702、外围设备接口(peripheral interface)703、输入/输出子系统(I/O subsystem)704、电力线路705和通信线路706。

在图6中,箭头表示能进行计算机系统的构成要素间的通信和数据传送,且其可利用高速串行总线(high-speed serial bus)、并行总线(parallel bus)、存储区域网络(SAN,Storage Area Network)和/或其他适当的通信技术而实现。

内存702可包括操作系统712和Nand Flash坏块管理控制例程722。内存702可存储用于操作系统712和Nand Flash坏块管理控制例程722的程序编码,也就是说可包括Nand Flash坏块管理装置700的动作所需的软件模块、指令集架构或其之外的多种数据。此时,处理器701或外围设备接口706等其他控制器与内存702的存取可通过处理器701进行控制。

外围设备接口703可将Nand Flash坏块管理装置700的输入和/或输出外围设备与处理器701和内存702相结合。并且,输入/输出子系统704可将多种输入/输出外围设备与外围设备接口706相结合。电力线路705可向终端设备的电路元件的全部或部分供给电力。例如,电力线路705可包括如电力管理系统、电池或交流(AC)之一个以上的电源、充电系统、电源故障检测电路(power failure detection circuit)、电力变换器或逆变器、电力状态标记符或用于电力生成、管理、分配的任意其他电路元件。

通信线路706可利用至少一个接口与其他计算机系统进行通信,如与遥控控制系统进行通信。

处理器701通过施行存储在内存702中的软件模块或指令集架构可执行Nand Flash坏块管理装置700的多种功能且处理数据。也就是说,处理器701通过执行基本的算术、逻辑以及计算机系统的输入/输出演算,可构成为处理计算机程序的命令。

处理器701构成为用于执行上述实施例的Nand Flash坏块管理的方法。

上述构成的Nand Flash坏块管理装置700通过在FPGA模块内建立与快闪记忆体Nand Flash模块中的块数目相同的随机存取存储器RAM,并将每个RAM的地址分别作为Nand Flash模块中每个块的块地址,然后,将检测得到的Nand Flash模块中的每个块的块状态存储在相应地址的RAM,这样,便可以根据各RAM的地址以及RAM中存储的块状态数据,进行相应的读写操作。该装置将RAM的地址作为NAND flash模块中各块的块地址,从而节省了RAM存储块地址占用的空间,并且RAM地址只需用一个计数器来表示,不占用FPGA模块的存储空间,进而节省了FPGA模块的内部资源。

本发明实施例还提供了一种存储器,如图8所示,为本发明实施例提供的一种存储器的基本结构示意图,该存储器包括FPGA模块810和Nand Flash模块820,其中,FPGA模块810和Nand Flash模块820电连接,FPGA模块810包括上述实施例提供的Nand Flash坏块管理装置。

进一步的,该存储器还包括串行闪存SPI Flash模块830,该SPI Flash模块830和FPGA模块810电连接。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。

本领域技术人员在考虑说明书及实践这里发明的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未发明的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

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