Nandflash的数据处理方法、装置和一种Nandflash与流程

文档序号:11620344阅读:208来源:国知局
Nand flash的数据处理方法、装置和一种Nand flash与流程

本发明涉及存储介质技术领域,尤其涉及nandflash的数据处理方法、装置和一种nandflash。



背景技术:

现有nandflash(nand型闪存)存储针对nandflash特性采用了ftl(flashtranslationlayer,闪存转换层)方法,其一般包括以下处理机制:

1)建立坏nandflash块表;

2)建立nandflash块映射表;

3)建立nandflash页映射表;

4)采用平衡磨损算法提高整体使用寿命;

5)垃圾回收机制;

6)重读机制。

通过上述系列复杂的算法保证整体使用寿命和快速使用存储数据。

然而,当nandflash用来存储一些数据量少(例如少于nandflash的一个物理页)且又不经常写的数据时,采用上述复杂的处理机制不仅增加额外的存储负担,降低了数据的存取处理速度,而且减少了nandflash的使用寿命。



技术实现要素:

本发明实施例提供了nandflash的数据处理方法、装置和一种nandflash,能够快速完成nandflash对少量数据的存取处理操作,大大减轻nandflash处理少量数据时的存储负担,延长nandflash的使用寿命。

第一方面,提供了一种nandflash的数据处理方法,应用于在所述nandflash中指定的nandflash块;

所述nandflash的数据处理方法包括:

获取待写入数据;

若所述待写入数据的数据量小于预设阈值,则根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

建立分配给所述待写入数据的逻辑号与最新可用物理号之间的映射关系,所述最新可用物理号为所述当前nandflash块中最新的可用物理页对应的物理号;

将建立的所述映射关系添加至所述映射表中,生成新的映射表;

根据所述新的映射表和所述待写入数据生成新的数据包;

将所述新的数据包写入所述最新可用物理号对应的物理页内。

第二方面,提供了一种nandflash的数据处理方法,应用于在所述nandflash中指定的nandflash块,所述nandflash块中存储有预设格式的数据包;

所述nandflash的数据处理方法包括:

获取待读取数据包的读取指令;

根据所述读取指令确定所述待读取数据包的逻辑号;

根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

根据所述逻辑号和所述映射表确定所述待读取数据包的物理号;

读取确定的所述物理号对应物理页中的数据包。

第三方面,提供了一种nandflash的数据处理方法,应用于在所述nandflash中指定的nandflash块,所述nandflash块中存储有预设格式的数据包;

所述nandflash的数据处理方法包括:

获取待修改数据包的修改指令以及待修改的数据;

根据所述修改指令确定所述待修改数据包的逻辑号;

根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

根据所述逻辑号和所述映射表确定所述待修改数据包的物理号;

读取确定的所述物理号对应物理页中的数据包;

将所述映射表中所述逻辑号对应的物理号更新为最新可用物理号,得到新的映射表,所述最新可用物理号为所述当前nandflash块中最新的可用物理页对应的物理号;

采用所述待修改的数据修改读取的所述数据包中的数据;

根据修改后的数据和所述新的映射表生成新的数据包;

将所述新的数据包写入所述最新可用物理号对应的物理页内。

第四方面,提供了一种nandflash的数据处理方法,应用于在所述nandflash中指定的nandflash块,所述nandflash块中存储有预设格式的数据包;

所述nandflash的数据处理方法包括:

获取待删除数据包的删除指令;

根据所述删除指令确定所述待删除数据包的逻辑号;

根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

从所述映射表中删除所述逻辑号与对应的物理号之间的映射关系,得到新的映射表;

根据所述新的映射表生成新的数据包;

将所述新的数据包写入最新可用物理号对应的物理页内,所述最新可用物理号为所述当前nandflash块中最新的可用物理页对应的物理号。

第五方面,提供了一种基于上述的nandflash的数据处理方法的nandflash块处理方法,所述nandflash中设有由两个以上指定的nandflash块组成的块循环池;

在根据最新数据包索引号读取当前nandflash块的最新数据包之前,所述nandflash块处理方法还包括:

判断所述当前nandflash块是否已满;

若所述当前nandflash块未满,则执行根据最新数据包索引号读取当前nandflash块的最新数据包的步骤;

若所述当前nandflash块已满,则执行换块操作,然后执行根据最新数据包索引号读取当前nandflash块的最新数据包的步骤;

所述换块操作具体包括以下步骤:

擦除所述块循环池中的下一个nandflash块;

根据最新数据包索引号读取所述当前nandflash块的最新数据包;

获取所述最新数据包中的映射表;

初始化第一逻辑号的值;

通过调整所述第一逻辑号的值依据所述映射表依次读取所述当前nandflash块中的各个数据包,并将读取到的所述各个数据包依次写入所述下一个nandflash块,直到所述当前nandflash块中的各个数据包均写入至所述下一个nandflash块;

将所述下一个nandflash块确定为当前nandflash块。

第六方面,提供了一种nandflash的数据处理装置,应用于在所述nandflash中指定的nandflash块;

所述nandflash的数据处理装置包括:

写入数据获取模块,用于获取待写入数据;

第一最新数据包读取模块,用于若所述待写入数据的数据量小于预设阈值,则根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

第一映射表获取模块,用于获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

映射关系建立模块,用于建立分配给所述待写入数据的逻辑号与最新可用物理号之间的映射关系,所述最新可用物理号为所述当前nandflash块中最新的可用物理页对应的物理号;

第一新映射表生成模块,用于将建立的所述映射关系添加至所述映射表中,生成新的映射表;

第一新数据包生成模块,用于根据所述新的映射表和所述待写入数据生成新的数据包;

第一写入模块,用于将所述新的数据包写入所述最新可用物理号对应的物理页内。

第七方面,提供了一种nandflash的数据处理装置,应用于在所述nandflash中指定的nandflash块,所述nandflash块中存储有预设格式的数据包;

所述nandflash的数据处理装置包括:

读取指令获取模块,用于获取待读取数据包的读取指令;

第一包号确定模块,用于根据所述读取指令确定所述待读取数据包的逻辑号;

第二最新数据包读取模块,用于根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

第二映射表获取模块,用于获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

第一物理号确定模块,用于根据所述逻辑号和所述映射表确定所述待读取数据包的物理号;

第一数据包读取单元,用于读取确定的所述物理号对应物理页中的数据包。

第八方面,提供了一种nandflash的数据处理装置,应用于在所述nandflash中指定的nandflash块,所述nandflash块中存储有预设格式的数据包;

所述nandflash的数据处理装置包括:

修改指令获取模块,用于获取待修改数据包的修改指令以及待修改的数据;

第二包号确定模块,用于根据所述修改指令确定所述待修改数据包的逻辑号;

第三最新数据包读取模块,用于根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

第三映射表获取模块,用于获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

第二物理号确定模块,用于根据所述逻辑号和所述映射表确定所述待修改数据包的物理号;

第二数据包读取单元,用于读取确定的所述物理号对应物理页中的数据包;

第二新映射表生成模块,用于将所述映射表中所述逻辑号对应的物理号更新为最新可用物理号,得到新的映射表,所述最新可用物理号为所述当前nandflash块中最新的可用物理页对应的物理号;

数据修改模块,用于采用所述待修改的数据修改读取的所述数据包中的数据;

第二新数据包生成模块,用于根据修改后的数据和所述新的映射表生成新的数据包;

第二写入模块,用于将所述新的数据包写入所述最新可用物理号对应的物理页内。

第九方面,提供了一种nandflash的数据处理装置,应用于在所述nandflash中指定的nandflash块,所述nandflash块中存储有预设格式的数据包;

所述nandflash的数据处理装置包括:

删除指令获取模块,用于获取待删除数据包的删除指令;

第三包号确定模块,用于根据所述删除指令确定所述待删除数据包的逻辑号;

第四最新数据包读取模块,用于根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

第四映射表获取模块,用于获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

第三新映射表生成模块,用于从所述映射表中删除所述逻辑号与对应的物理号之间的映射关系,得到新的映射表;

第三新数据包生成模块,用于根据所述新的映射表生成新的数据包;

第三写入模块,用于将所述新的数据包写入最新可用物理号对应的物理页内,所述最新可用物理号为所述当前nandflash块中最新的可用物理页对应的物理号。

第十方面,提供了一种nandflash,包括上述的nandflash的数据处理装置。

从以上技术方案可以看出,本发明实施例具有以下优点:

本发明实施例中,通过将少量的数据打包成预设的数据包格式,并在数据包中建立逻辑号与物理号之间的映射关系,可以快速完成nandflash对少量数据的存取处理操作,大大减轻了nandflash处理少量数据时的存储负担,延长nandflash的使用寿命。

附图说明

图1为本发明实施例中数据包的数据结构示意图;

图2为本发明实施例中最新数据包索引号获取过程的流程图;

图3为本发明实施例中数据包的写入过程的流程图;

图4为本发明实施例中换块操作过程的流程图;

图5为本发明实施例中数据包的读取过程的流程图;

图6为本发明实施例中数据包的修改过程的流程图;

图7为本发明实施例中数据包的删除过程的流程图;

图8为本发明实施例中nandflash的数据处理装置实施例二的结构图;

图9为本发明实施例中nandflash的数据处理装置实施例三的结构图;

图10为本发明实施例中nandflash的数据处理装置实施例四的结构图;

图11为本发明实施例中nandflash的数据处理装置实施例五的结构图;

图12为本发明实施例中nandflash块处理装置实施例六的结构图。

具体实施方式

本发明实施例提供了nandflash的数据处理方法、装置和一种nandflash,用于解决现有nandflash在存储少量数据时容易增加额外的存储负担,降低存取处理速度的问题。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

实施例一:

本实施例提供了一种nandflash的数据处理方法是针对nandflash特性的一种简易存储方法。该方法主要采用逻辑号和物理号的一级映射法,是一种以数据包为单元进行nandflash页读、nandflash页写、nandflash页编辑以及整个nandflash块擦除的简易存储方法。

首先,在实施例一中,为便于描述,使用如下述语进行描述:

nandflash:一种非易失的存储器件;

kbyte:1024字节;

nandflash页:nandflash的一种存储单位,一个nandflash页的大小可以是4kbyte、8kbyte、16kbyte,等等;

nandflash块:nandflash的一种存储单位,包含有几十个nandflash页到几百个nandflash页不等;

少量数据:指少于一个nandflash页的数据;

预设格式的数据包:如图1所示,由包头和少量数据组成,如果数据包少于一个物理页的数据,可以为数据包填充随机数。所述包头可以由包标识码、逻辑号到物理号的映射表、包信息、用户信息组成。其中,对于本实施例中的数据包来说,映射表是必须的,而少量数据、包信息、用户信息等可以根据实际使用需要选择性加入;

逻辑号:数据包存取的编号。当上位机需要读nandflash中的数据包时,上位机下发的读指令中包括有该数据包对应的逻辑号;

物理号:实际存储数据包的物理页的序号,即nandflash物理页在nandflash块内的序号;

最新数据包索引号:指的是存储最新写入的数据包的物理页的物理号;

不经常写的数据:在写入后很少修改的数据;

最大物理号:不超过nandflash块内的物理页总数的设定数;

ftl:nandflash转换层;

包标识码:具有一定规则的一串数据,用以获取最新数据包索引号。该包标识码主要用于判别nandflash页是否已经被使用,进而确定最新数据包索引号。关于上述的逻辑号到物理号的映射法,该逻辑号和物理号都是从0开始顺序编排的自然数序列,建立逻辑号映射到物理号的映射关系,则可以生成对应的映射表,即逻辑号到物理号的映射表。这种映射方法是一种一级映射方法,映射表的更新就是指逻辑号对物理号的映射关系的更新。

在本实施例中,nandflash的写是以页为单位的,每个nandflash页具有几kbyte至十几kbyte的存储空间,在存储少量数据时,完全可以做到一次性存取。针对这个特点,本实施例提供的nandflash数据处理方法具有以下特点:

1)建立数据包;

2)采用两个以上的nandflash块建立块循环池,在必要时进行数据包的换块操作;

3)最新写入的数据包记录有最新的映射表;

4)在存取数据操作前,通过判断是否有包标识码以获取最新数据包索引号,继而根据最新数据包索引号获取最新的映射表,根据逻辑号在获取的最新的映射表中找到其对应的物理号,最后通过物理号可以实现数据包的存取;

5)在一个nandflash块用于存储至最大物理号所对应的物理页已被使用后,则使用块循环块池中的下一个nandflash块;

6)映射表的更新发生在数据包的写、修改和删除等操作。

下面将对本实施例提供的nandflash的数据处理方法中关于数据包的写、读、修改、删除等操作进行详细描述。

需要说明的是,为便于描述,在下述内容中,package_index表示最新数据包索引号,max_phy_number表示最大物理号,phy_num表示物理号,ln_ind表示逻辑号,tb_size表示映射表的大小。

最新数据包索引号的获取:

由于在对数据包进行写、读、修改、删除等操作时,大多需要获取当前的nandflash块中的最新数据包索引号,因此本实施例先介绍该“最新数据包索引号”的获取过程,如图2所示,可以包括以下步骤:

201、初始化最新数据包索引号的值,package_index=max_phy_number,phy_num=0;

202、判断phy_num是否小于max_phy_number,若是,则执行步骤203,若否,则结束;

203、读取phy_num物理页下的数据包;

204、判断读取的数据包中是否具有包标识码,若是,则执行步骤205,若否,则执行步骤206;

205、phy_num=phy_num+1,并返回执行步骤202;

206、若phy_num大于0,则package_index=phy_num-1;若phy_num不大于0,则package_index=0;然后结束。

对于上述步骤201~206,通过对当前nandflash块中物理号从0开始遍历,直到物理号对应读取到的数据包不具有包标识码,则表明当前物理号的物理页中未写入数据包。从而可知前一个物理号(phy_num-1)则为最新写入数据包的物理号,也即得到了最新写入数据包的索引号package_index。特别地,当phy_num=0时,读取的数据包也不具有包标识码,则表明当前的nandflash块为一个“新”块,因此确定package_index=0。

数据包的写操作:

当需要写入数据时,首先需要判断该数据是否属于少量数据,也即是否适合采用本实施例提供的nandflash的数据处理方法,若是,则进行数据包的写操作。如图3所示,数据包的写入过程可以包括如下步骤:

301、获取需要写入nandflash的待写入数据;

302、判断所述待写入数据的数据量是否小于预设阈值,若是,则执行步骤303,若否,则采用一般存储方法对待写入数据进行写入操作;

303、根据package_index读取当前nandflash块的最新数据包;

304、获取读取的最新数据包中的映射表;

305、判断是否package_index=0且读取的最新数据包中不具有包标识码,若是,则执行步骤306,若否,则执行步骤307;

306、将所述package_index确定为新的数据包的物理号,并将分配的逻辑号与所述新的数据包的物理号的映射关系添加至所述映射表的表尾,生成新的映射表,然后执行步骤308;

307、将package_index+1确定为新的数据包的物理号,并将分配的逻辑号与所述新的数据包的物理号的映射关系添加至所述映射表的表尾,生成新的映射表;

308、根据所述待写入数据、所述新的映射表、包信息、用户信息生成所述新的数据包;

309、将所述新的数据包写入至其物理号对应的物理页内,数据包写入完成。

对于上述步骤302,上述的“预设阈值”可以是1个nandflash页的数据,一个nandflash页的大小可以是4kbyte、8kbyte、16kbyte等。可以理解的是,本实施例提供的nandflash的数据处理方法更适合用于处理少量数据。因此,当待写入数据不小于预设阈值时,可以认为当前待写入数据并非少量数据,从而可以采用一般存储方法进行写入处理。这里说的一般存储方法是指现有技术中的关于nandflash的数据存储方法,例如ftl方法。

对于步骤303,package_index的获取方法在上述内容中已经进行了详细描述,此处不再赘述。

对于步骤305,可以理解的是,当package_index=0且读取的最新数据包中不具有包标识码时,表明当前的nandflash块为新块,未存在写入的数据包,因此在创建数据包时执行步骤306。

对于步骤306,package_index对应的物理页不具有包标识码,说明该物理页是空的,因此,该package_index即为最新可用物理号,直接将该package_index确定为新的数据包的物理号,建立该新的数据包的物理号与分配的逻辑号之间的映射关系,将该映射关系记录到映射表中。可以理解的是,若无映射表,则可以创建一个新的映射表。

对于步骤306,需要说明的是,所述分配的逻辑号可以由nandflash为该新的数据包自动分配,也可以通过要求写入所述待写入数据的指令或请求进行确定、分配,本实施例对此不作限定。

对于步骤307,当当前的nandflash块并非新块时,由于package_index对应的物理页已被数据占用,因此为新的数据包分配物理页时,应该选取package_index+1位置的物理页,即package_index+1为最新可用物理号。

对于步骤308,本实施例中,该包信息和用户信息可以根据待写入数据的来源确定,也可以由获取到的所述最新数据包中的包信息和用户信息更新得来,或者可以采用默认的方式写入这两个信息,对此,本实施例不作限定。

对于步骤309,在将新的数据包写入至其物理号对应的物理页之后,为便于下一次的处理操作,还可以设置package_index=package_index+1。

需要说明的是,在步骤303之前,还可以判断当前nandflash块的package_index是否等于max_phy_number,若是,则表明当前nandflash块已满,需要执行换块操作,将块循环池中的下一个nandflash块确定为当前nandflash块,然后继续执行步骤303;若否,则执行步骤303。

为便于理解,下面将对换块操作进行详细描述。本实施例中,在nandflash块的使用过程中,会产生无效的物理页,例如将原先存储有数据包的物理页中的数据包删除,而这些无效的物理页会占用nandflash块的存储空间,因此,无效的物理页会越来越多,直到nandflash块已满(即package_index=max_phy_number),此时,则进行块循环池的换块操作,将当前nandflash块的所有数据搬移至下一个nandflash块。如图4所示,换块操作的过程可以包括以下步骤:

401、擦除块循环池中的下一个nandflash块,所述下一个nandflash块的phy_num=0;

402、根据package_index读取当前nandflash块的最新数据包,并获取所述最新数据包的映射表;

403、初始化逻辑号ln_ind的值;

404、判断ln_ind是否小于tb_size,若是,则执行步骤405,若否,则执行步骤408;

405、根据所述映射表获取ln_ind对应的物理号,并根据获取到的物理号读取数据包;

406、将读取到的数据包的映射表中所述ln_ind对应的物理号更换为所述下一个nandflash块的phy_num;

407、将读取到的所述数据包写入phy_num对应的物理页内,phy_num=phy_num+1,ln_ind=ln_ind+1,然后返回步骤404;

408、package_index=phy_num,确定所述下一个nandflash块为当前nandflash块,换块操作完成,结束。

对于上述步骤401~408,先将下一个nandflash块的数据擦除,从而可以清除该下一个nandflash块中原有的无效物理页,使得其成为一个新块。然后将根据最新数据包的映射表将当前nandflash块中的所有有效数据包逐一写入至下一个nandflash块中,并分别修改各个数据包的映射关系。完成数据的搬迁之后,则可以将下一个nandflash块确定为当前nandflash块,完成本次换块操作。

数据包的读操作:

本实施例中,对于已写入nandflash块中的数据包,可以根据上位机下发的读指令进行读取,如图5所示,具体包括以下步骤:

501、获取待读取数据包的读取指令;

502、根据所述读取指令确定所述待读取数据包的逻辑号;

503、根据package_index读取当前nandflash块中的最新数据包,并获取所述最新数据包中的映射表;

504、根据所述逻辑号和所述映射表确定所述待读取数据包的物理号;

505、读取确定的所述物理号对应物理页中的数据包。

对于上述步骤501,该读取指令可以由与nandflash连接的上位机发出。

对于步骤502,可以理解的是,该读取指令中可以包含有该逻辑号,也可以包含有用于确定该逻辑号的数据包信息,然后根据数据包信息确定该逻辑号,对此不作限定。

对于步骤504,根据映射表中的映射关系,可以确定与该逻辑号对应的该待读取数据包的物理号。可以理解的是,由于本实施例中数据包的写入机制,最新数据包中的映射表包含有当前nandflash块中所有数据包的逻辑号和物理号的映射关系。

对于步骤505,在确定出物理号之后,可以直接根据该物理号读取到所需的数据包,也即该待读取数据包。然后可以将该数据包发送至发出该读取指令的上位机或者其它设备上。

数据包的修改操作:

当需要修改数据包中的数据时,上位机或其它设备可以通过下发修改指令使得当前nandflash块执行修改操作。如图6所示,数据包的修改过程可以包括以下步骤:

601、获取待修改数据包的修改指令以及待修改的数据;

602、根据所述修改指令确定所述待修改数据包的逻辑号;

603、根据package_index读取当前nandflash块中的最新数据包,并获取所述最新数据包中的映射表;

604、根据所述逻辑号和所述映射表确定所述待修改数据包的物理号;

605、读取确定的所述物理号对应物理页中的数据包;

606、将package_index+1更新为所述映射表中所述逻辑号对应的物理号,得到新的映射表;

607、采用所述待修改的数据修改读取的所述数据包中的数据;

608、根据修改后的数据、所述新的映射表、包信息以及用户信息生成新的数据包;

609、将所述新的数据包写入至其物理号对应的物理页内,数据包修改完成。

对于步骤601,该修改指令可以由与nandflash连接的上位机发出。并且,在获取修改指令的同时,可以获取到数据包待修改的数据,也即需要更新的数据。

对于步骤602,可以理解的是,该修改指令中可以包含有该逻辑号,也可以包含有用于确定该逻辑号的数据包信息,然后根据数据包信息确定该逻辑号,对此不作限定。

对于步骤604,根据映射表中的映射关系,可以确定与该逻辑号对应的该待修改数据包的物理号。可以理解的是,由于本实施例中数据包的写入机制,最新数据包中的映射表包含有当前nandflash块中所有数据包的逻辑号和物理号的映射关系。

对于步骤605,在确定出物理号之后,可以直接根据该物理号读取到所需的数据包,也即该待修改数据包。

对于步骤606,在本实施例中,在修改数据包时,并非在原物理页上直接进行数据的修改,而是将更新后的数据以写入的方式写入至空的物理页中。因此,将package_index+1作为该数据包的物理号,相当于为修改后的数据包分配最新的物理页。

对于步骤607,在读取待修改的数据包之后,使用待修改的数据修改该数据包中的数据,实现数据的更新。

对于步骤608,根据修改后的数据和新的映射表,以及包信息、用户信息生成新的数据包。其中,该包信息和用户信息可以根据修改指令来确定,也可以由读取到的待修改数据包中的包信息和用户信息更新得来,或者可以采用默认的方式写入这两个信息,对此,本实施例不作限定。

对于步骤609,在生成新的数据包,也即修改后的数据包之后,可以将所述新的数据包写入至其物理号对应的物理页内,也即package_index+1对应的物理页内,数据包修改完成。

需要说明的是,在步骤603之前,还可以判断当前nandflash块的package_index是否等于max_phy_number,若是,则表明当前nandflash块已满,需要执行换块操作,将块循环池中的下一个nandflash块确定为当前nandflash块,然后再执行步骤603;若否,则执行步骤603。

由上述步骤601~609可知,对数据包进行修改之后,由于修改前的数据包占用的物理页被“放弃”,修改后的数据包重新写入最新的物理页中,从而会导致当前的nandflash块增加一个无效页(即被“放弃”的物理页)。

数据包的删除操作:

当需要删除数据包时,上位机或其它设备可以通过下发删除指令使得当前nandflash块执行删除操作。如图7所示,数据包的删除过程可以包括以下步骤:

701、获取待删除数据包的删除指令;

702、根据所述删除指令确定所述待删除数据包的逻辑号;

703、根据package_index读取当前nandflash块中的最新数据包,并获取所述最新数据包中的映射表;

704、从所述映射表中删除所述逻辑号与对应的物理号之间的映射关系,得到新的映射表;

705、根据所述新的映射表和包信息生成新的数据包;

706、将所述新的数据包写入至package_index+1对应的物理页内,数据包删除完成。

对于步骤701,该删除指令可以由与nandflash连接的上位机发出。

对于步骤702,可以理解的是,该删除指令中可以包含有该逻辑号,也可以包含有用于确定该逻辑号的数据包信息,然后根据数据包信息确定该逻辑号,对此不作限定。

对于步骤704,可以理解的是,在删除nandflash块中的数据包时,只需要删除该数据包的逻辑号与物理号之间的映射关系即可,因为当映射关系删除后,对于nandflash以外的设备来说,已删除的数据包是不可知的。而由于当前nandflash块中所有数据包的确定均通过最新数据包中的映射表来查询,因此需要删除了该映射关系后,生成新的映射表并执行步骤705,生成一个新的数据包。

对于步骤705,可知,生成的新的数据包里面不具有可用的有效数据,其作用在于记录新的映射表,并让该新的映射表在需要时可被读取到。

对于步骤706,在生成新的数据包之后,将该新的数据包写入到最新的物理页中,也即package_index+1对应的物理页内,数据包删除操作完成。

需要说明的是,在步骤703之前,还可以判断当前nandflash块的package_index是否等于max_phy_number,若是,则表明当前nandflash块已满,需要执行换块操作,将块循环池中的下一个nandflash块确定为当前nandflash块,然后再执行步骤703;若否,则执行步骤703。

由上述步骤701~706可知,对数据包进行删除之后,由于删除前的数据包占用的物理页被“放弃”,删除后生成的记录新的映射表的数据包写入最新的物理页中,从而会导致当前的nandflash块增加一个无效页(即被“放弃”的物理页)。

可见,本实施例中,随着对数据包的修改操作和删除操作的增多,当前nandflash块中的无效页会越来越多,最后导致nandflash块已满,从而需要执行换块操作。而由于换块操作时将下一个nandflash块进行擦除处理,因此,即便将当前nandflash块的所有有效数据包搬移至下一个nandflash块中,该换块操作也是有意义的,相当于把下一个nandflash块中的无效页清理掉。

需要说明的是,在本实施例中,可以在nandflash上执行上述的写、读、修改、删除、换块等操作,可以只单独执行其中的某一个或多个操作,例如对某个nandflash执行写操作,再执行修改操作、删除操作。应当可以理解的是,在nandflash上可以执行上述写、读、修改、删除、换块等操作的任意组合,以及这些操作之间的执行次序均没有限定。

实施例二:

本实施例还提供一种nandflash的数据处理装置,其应用于在所述nandflash中指定的nandflash块,主要进行nandflash块的数据写入处理。如图8所示,所述nandflash的数据处理装置包括:

写入数据获取模块801,用于获取待写入数据;

第一最新数据包读取模块802,用于若所述待写入数据的数据量小于预设阈值,则根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

第一映射表获取模块803,用于获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

映射关系建立模块804,用于建立分配给所述待写入数据的逻辑号与最新可用物理号之间的映射关系,所述最新可用物理号为所述当前nandflash块中最新的可用物理页对应的物理号;

第一新映射表生成模块805,用于将建立的所述映射关系添加至所述映射表中,生成新的映射表;

第一新数据包生成模块806,用于根据所述新的映射表和所述待写入数据生成新的数据包;

第一写入模块807,用于将所述新的数据包写入所述最新可用物理号对应的物理页内。

实施例三:

本实施例还提供一种nandflash的数据处理装置,其应用于在所述nandflash中指定的nandflash块,所述nandflash块中存储有预设格式的数据包。该nandflash的数据处理装置主要进行nandflash块的数据读取处理。如图9所示,所述nandflash的数据处理装置包括:

读取指令获取模块901,用于获取待读取数据包的读取指令;

第一包号确定模块902,用于根据所述读取指令确定所述待读取数据包的逻辑号;

第二最新数据包读取模块903,用于根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

第二映射表获取模块904,用于获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

第一物理号确定模块905,用于根据所述逻辑号和所述映射表确定所述待读取数据包的物理号;

第一数据包读取单元906,用于读取确定的所述物理号对应物理页中的数据包。

实施例四:

本实施例还提供一种nandflash的数据处理装置,其应用于在所述nandflash中指定的nandflash块,所述nandflash块中存储有预设格式的数据包。该nandflash的数据处理装置主要进行nandflash块的数据修改处理。如图10所示,所述nandflash的数据处理装置包括:

修改指令获取模块1001,用于获取待修改数据包的修改指令以及待修改的数据;

第二包号确定模块1002,用于根据所述修改指令确定所述待修改数据包的逻辑号;

第三最新数据包读取模块1003,用于根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

第三映射表获取模块1004,用于获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

第二物理号确定模块1005,用于根据所述逻辑号和所述映射表确定所述待修改数据包的物理号;

第二数据包读取单元1006,用于读取确定的所述物理号对应物理页中的数据包;

第二新映射表生成模块1007,用于将所述映射表中所述逻辑号对应的物理号更新为最新可用物理号,得到新的映射表,所述最新可用物理号为所述当前nandflash块中最新的可用物理页对应的物理号;

数据修改模块1008,用于采用所述待修改的数据修改读取的所述数据包中的数据;

第二新数据包生成模块1009,用于根据修改后的数据和所述新的映射表生成新的数据包;

第二写入模块1010,用于将所述新的数据包写入所述最新可用物理号对应的物理页内。

实施例五:

本实施例还提供一种nandflash的数据处理装置,其应用于在所述nandflash中指定的nandflash块,所述nandflash块中存储有预设格式的数据包。该nandflash的数据处理装置主要进行nandflash块的数据读取处理。如图11所示,所述nandflash的数据处理装置包括:

删除指令获取模块111,用于获取待删除数据包的删除指令;

第三包号确定模块112,用于根据所述删除指令确定所述待删除数据包的逻辑号;

第四最新数据包读取模块113,用于根据最新数据包索引号读取当前nandflash块的最新数据包,所述最新数据包索引号为所述当前nandflash块中存储最新写入的数据包的物理页对应的物理号;

第四映射表获取模块114,用于获取所述最新数据包中的映射表,所述映射表记录有所述当前nandflash块中存储的各个数据包的逻辑号与物理号之间的映射关系;

第三新映射表生成模块115,用于从所述映射表中删除所述逻辑号与对应的物理号之间的映射关系,得到新的映射表;

第三新数据包生成模块116,用于根据所述新的映射表生成新的数据包;

第三写入模块117,用于将所述新的数据包写入最新可用物理号对应的物理页内,所述最新可用物理号为所述当前nandflash块中最新的可用物理页对应的物理号。

实施例六:

本实施例还提供一种在上述图8、图10或图11对应实施例中描述的任意一种nandflash的数据处理装置的基础上进一步改进的nandflash块处理装置。在实施例六描述的nandflash块处理装置中,所述nandflash中设有由两个以上指定的nandflash块组成的块循环池。如图12所示,该nandflash块处理装置还包括:

满载判断模块121,用于判断所述当前nandflash块是否已满;

第一触发模块122,用于若所述满载判断模块121的判断结果为否,则触发上述的第一最新数据包读取模块802、第三最新数据包读取模块1003或第四最新数据包读取模块113;

第二触发模块123,用于若所述满载判断模块121的判断结果为是,则触发换块模块124,然后触发上述的第一最新数据包读取模块802、第三最新数据包读取模块1003或第四最新数据包读取模块113;

所述换块模块124具体可以包括以下单元:

块擦除单元1241,用于擦除所述块循环池中的下一个nandflash块;

最新数据包读取单元1242,用于根据最新数据包索引号读取所述当前nandflash块的最新数据包;

映射表获取单元1243,用于获取所述最新数据包中的映射表;

初始化单元1244,用于初始化第一逻辑号的值;

数据包搬移单元1245,用于通过调整所述第一逻辑号的值依据所述映射表依次读取所述当前nandflash块中的各个数据包,并将读取到的所述各个数据包依次写入所述下一个nandflash块,直到所述当前nandflash块中的各个数据包均写入至所述下一个nandflash块;

当前块确定单元1246,用于将所述下一个nandflash块确定为当前nandflash块。

实施例七:

本实施例还提供一种nandflash,其包括图8至图11对应实施例中描述的任意一种nandflash的数据处理装置,和/或,包括图12对应实施例中描述的任意一种nandflash块处理装置。特别地,该nandflash也可以包括上述图8至图12对应实施例中描述的所有形式的nandflash的数据处理装置和nandflash块处理装置。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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