一种基于数据交换区的NAND Flash闪存优化管理方法
技术领域
本发明涉及一种闪存的内部数据管理方法,尤其涉及的是一种基于数据交换区的NAND Flash闪存优化管理方法。
背景技术
现有技术中的闪存已经广泛应用于移动存储装置中,如U盘,SD卡,SSD固态硬盘;NOR和NAND Flash闪存是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR Flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。1989年,东芝公司发表了NANDFlash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。由于大多数情况下闪存只是用来存储少量的代码,这时NOR Flash闪存更适合一些,而NAND Flash闪存则是大容量数据存储的理想解决方案,因此很多硬件工程师常不能分辨两者之间的根本区别。
NOR Flash的特点是芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到***RAM中。NORFlash的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。NAND Flash结构能提供极高的单元密度,并且写入和擦除的速度也很快,但应用NAND Flash的困难在于闪存内部的操作与管理并需要特殊的***接口。
NAND Flash闪存是非易失存储器,可以对称为BLOCK块的存储器单元块进行擦写和再编程。任何NAND Flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除的操作。
如图1所示,为现有技术的数据写入操作过程,假如块120和块130都为闪存中的一个标准大小的BLOCK块(块的定义可以参见图3),其中BLOCK 120为已有数据存放区域,BLOCK 130为一个空置的区域,现要将数据块110(大小应该是小于或等于一个BLOCK)写入到BLOCK 120中的逻辑A地址区域(就是数据块110的大小),在现有技术的NAND Flash闪存芯片中,在A区域的起始逻辑地址写入数据时,其操作过程包括:
A0、找到一个新的空置的BLOCK 130,将BLOCK 120的A区域以外的数据拷贝到BLOCK 130中相应位置;
B0、将要写入的数据块110直接写到BLOCK 130的A区域。
以上步骤也可以先执行步骤B0,后执行步骤A0。也可以部分执行步骤A0,然后执行步骤B0,再执行步骤A0剩下的步骤。
在A0的步骤中,即先拷贝BLOCK 120的B区域到BLOCK 130的B区域,再拷贝BLOCK 120的C区域到BLOCK 130的C区域。
随着NAND闪存供应商采用越来越小的工艺尺寸,一些较小尺寸的SLC NAND闪存的可擦除次数则从10万次降低到了5万次,MLC NAND闪存的可擦除次数从1万次下降到5千次(某些情况下甚至降低到3千次)。
目前基于NAND Flash的文件***中要写入一段数据时,首先要频繁的修改它的***文件。例如普遍使用的FAT文件***要写入一个文件,必须要先修改FAT表,FDT表,最后才是数据。事实上FAT表修改只是一个扇区,而FDT表也只是修改8个扇区,而且是连续修改几次后才写入真实数据,由于NAND Flash的特性,不能对同一页进行重复编程,必须整块先擦除后再编程(编程即数据写入)。但是在擦除一个BLOCK块时,必须先把块上的其他数据保存到新的(空置块)地址。
拷贝一个文件操作命令的数据流程如下代码所示:
CDB 2a 00 00 00-00 20 00 00-01 00 FAT 71us
CDB 2a 00 00 00-02 20 00 00-08 00 FDT 78us
CDB 2a 00 00 00-02 20 00 00-08 00 FDT 110us
CDB 2a 00 00 00-00 26 00 00-01 00 FAT 39us
CDB 2a 00 00 00-01 23 00 00-01 00 FAT 76us
CDB 2a 00 00 00-02 20 00 00-08 00 FDT 64us
CDB 2a 00 00 00-02 40 00 00-17 00 DATA 184us
CDB 2a 00 00 00-02 20 00 00-08 00 FDT 78us
CDB 2a 00 00 00-02 20 00 00-08 00 FDT 97us
CDB 2a 00 00 00-00 20 00 00-01 00 FAT 914ms
CDB 2a 00 00 00-00 26 00 00-01 00 FAT 51us
CDB 2a 00 00 00-01 23 00 00-01 00 FAT 444us
需做说明的是,上述文件操作流程是通过监测程序获得,其中的加下划线用语为添加说明,不是命令本身;CDB 2a 00 00 00-aa bb 00 00-cnt 00指的是在aa+bb*256的逻辑地址写入长度为cnt的数据。
这样,在现有技术的操作中当只拷贝一个文件时,文件***却修改了12次,也就是说执行了12次如图1所示的操作过程,即不停的在搬运数据。***文件区在这个过程被修改了11次,但是实质的数据区只修改了一次。这样由于***文件区不停的反复被读写,就造成一种严重的磨损不平衡,导致NAND Flash寿命缩短,大大降低了产品的寿命。
由于NAND Flash的性能优势,目前已经开始大范围应用于各种存储装置,并可能取代传统的硬盘成为下一代技术飞跃的核心。但目前大容量NAND Flash在低缓存消耗的情况下小文件拷贝速度过慢,以及由于FAT表区域在每次数据的传输时对每个页的数据读写都要在该区反复多次读写,导致其被快速磨损而容易造成NAND Flash文件***损坏,降低整个芯片的寿命。因此,现有读写NAND Flash的技术还有待于改进和发展。
发明内容
本发明的目的在于提供一种基于数据交换区的NAND Flash优化管理方法,特别是基于NAND Flash的文件***进行优化和改进,解决了由于***文件区域的快速磨损而导致NAND Flash的文件***损坏所造成的寿命缩减的问题,以及大大提高了大容量NAND Flash在低缓存消耗的情况下文件拷贝的速度。
本发明的技术方案包括:
一种基于数据交换区的NAND Flash闪存优化管理方法,其包括闪存控制器执行的以下步骤:
A、在NAND Flash闪存上设置至少2个BLOCK块作为数据交换区;
B、加入一个动态的数据有效性标识表项,用于记录所述数据交换区中数据的新旧程度,当数据块在设定时间内再没有被修改时,则把最近写入到数据交换区的数据块拷贝到逻辑地址重新映射后的闪存真实物理地址内。
所述逻辑地址重新映射后的真实物理地址指的是一个可存储的区域,它是一个空置块中的一个地址区域,也是数据块从逻辑地址要写入到的一个物理地址区域,一个逻辑地址在一个时刻只对应一个物理地址,但是在不同时间可能对应不同的物理地址。
所述的方法,其中,所述步骤B还包括:
当数据交换区中的任意一个BLOCK块填满之后,则可以开始把最近写入到这个BLOCK块中的数据块或部分数据块写入到逻辑地址重新映射后的闪存的真实物理地址内。
所述的方法,其中,所述步骤B还包括:
所述闪存控制器再设置一地址映射表项用于记录所述数据交换区内数据块的逻辑地址与数据交换区物理地址的对应关系以及数据块所占用的扇区数。
所述的方法,其中,所述步骤B还包括:
在所述闪存控制器处于相对闲置状态时或者上位机接口数据传输阶段性完成时,优先将所述数据交换区中的数据块写入到逻辑地址重新映射后的闪存的真实物理地址中。
所述的方法,其中,所述上位机结构为USB接口或SATA接口或SD接口或MMC接口。
所述的方法,其中,所述步骤B还包括:
B1、在所述NAND Flash中找到一空置的BLOCK块,将原来逻辑地址映射BLOCK块中要写入的数据块所对应此BLOCK块中物理地址区域以外的数据块拷贝到所述空置BLOCK块中的相应位置;
B2、将所述数据有效性标识对应的数据写入到所述空置BLOCK块的对应逻辑地址重新映射后的真实物理地址中。
所述的方法,其中,所述步骤B还包括:
对写入数据时所需的对***文件修改放在NAND Flash的数据交换区中进行。
所述的方法,其中,所述步骤B还包括:
对写入数据时所需的对用户数据修改放在NAND Flash的数据交换区中进行。
所述的方法,其中,用作所述数据交换区的BLOCK块数设置为3个以上。
所述的方法,其中,所述步骤B还包括:在写满数据交换区中的任意一个BLOCK块后,则开始向数据交换区中的下一个BLOCK块写入;闪存控制器可开始将已填满块的数据拷贝到逻辑地址重新映射后的真实物理地址,并擦除该已填满的块。
本发明所提供的一种基于数据交换区的NAND Flash优化管理方法,由于采用了通过闪存控制器在NAND Flash芯片中设置多个BLOCK块作为数据交换区,将读写中的中间过程数据进行缓冲存储,减少了对NAND Flash芯片的***文件区的写入频度,提高了芯片的读写速度,同时均衡了芯片的磨损,延长了NAND Flash的使用寿命。
附图说明
图1为现有技术的NAND Flash的数据读写过程的示意图;
图2为本发明基于数据交换区的NAND Flash优化管理方法数据读写过程的示意图;
图3为本发明方法的NAND Flash内部闪存存储结构***示意图。
具体实施方式
以下结合附图,将对本发明的各较佳实施例进行更为详细的说明。
本发明方法实现需要依赖于现有的NAND Flash闪存存储结构***,如图3所示的内部闪存存储结构***简要示意,外部由一闪存控制器实现对NAND Flash的操作,该闪存控制器通常内部会嵌入有CPU或微处理器,如8051,ARM系列等,本发明方法需要通过控制器的指令来控制实现。NAND Flash的操作特性是以页page为单位来写(或编程)或者读,一个页page不能重复的写,重复写之前必须先擦除。而擦除是以BLOCK块为单位进行的(原因是写操作可以使存储单元由1变成0,但是不能由0变成1;要使0变成1,只有擦除操作)。
为方便描述,本发明申请文件中将擦除操作的一个单位称为BLOCK块,是一种NAND Flash的物理存储结构单元;对BLOCK中的部分数据称为数据块,但数据块是小于或等于BLOCK块的,即数据块是在一个BLOCK块中实际数据存储的连续区域,也有可能是一个完整的BLOCK块。
本发明基于数据交换区的NAND Flash优化管理方法,通过闪存控制器在目前通用的NAND Flash中设置2个以上的BLOCK块固定用于数据交换,其物理地址可知。在其表项中记录数据交换区内的逻辑地址与物理地址的对应关系以及该数据块所占用的扇区个数,在收到相同的逻辑地址的数据块时,只要将对应的物理地址做修改,就可以将以前在交换区的数据自动放弃,而数据就会存放到新的物理地址。
每一数据块,需要加入动态标识表项表示该数据块的生存时间,作为数据块的有效性标识,以记录其数据块的新旧程度,当数据越被频繁修改时,表示数据就越年轻;如数据在写入后很久都没被修改,则代表数据很老。一旦闪存控制器处于相对空闲IDLE模式或者上位机接口包括但不限于如USB接口或SATA接口或SD接口或MMC接口等,阶段性的没有数据传输时,则优先将数据交换区中的数据块写入到逻辑地址重新映射后的闪存真实物理地址。当数据交换区的任意BLOCK块填满后,则将数据向其逻辑地址重新映射后的真实物理地址中写入。
本发明的上述处理方式可以使数据快速从PC上通过上位机接口如USB接口或SATA接口或SD接口或MMC接口写入到NAND Flash中,避免了数据在NAND Flash上实时空间分配所耗的时间过长从而导致拷贝过慢。
本发明所述NAND Flash在读数据的时候,可以先查找其表项是否有对应的逻辑地址,有就直接在NAND Flash的交换区中直接读取数据,以加快速度,没有则使用以前流程到真实的物理地址中去查找。当掉电后再上电时,内存中的数据交换区表项会重建,同时擦除数据交换区BLOCK块。由于数据交换区数据写入也是按页(page)为单位来进行,一旦该数据交换区的任一BLOCK块填满后,而且又把此BLOCK中的最新的数据块拷贝到真实物理地址之后,则进行块擦除。然后可再从第一个页(page)开始写,或者写入数据交换区的下一个BLOCK块的第一个页,这样就可以依次使用各个数据交换区BLOCK块,不会只对***文件的BLOCK块进行读写,可利用整体NAND Flash来实现平衡磨损。
针对一个文件拷贝,本发明方法把对***文件的修改变成把最终修改的结果写入到逻辑地址重新映射后的真实物理地址,而中间的临时操作仅在NAND Flash的数据交换区中进行,并没有频繁写入到逻辑地址所对应的一系列物理地址中。***在需要数据时就可直接在数据交换区BLOCK块中找寻,这样***文件区的磨损次数将会大大降低,从而提高NAND Flash的可用性。
本发明方法的操作如图2所示,其包括以下步骤:
A、在NAND Flash上设置2个或以上BLOCK块固定用于数据交换;当有数据要求写入某物理地址时,如图2中所示的逻辑A地址,可以是***文件区地址或者用户数据区地址,就先写入NAND Flash的数据交换区BLOCK块210中,并记下数据交换区的物理地址;
本发明方法主要是设置一个地址映射表项来记录数据交换区内数据块的逻辑地址与物理地址的对应关系以及数据块所占用的扇区个数。在收到相同的逻辑地址时,只要将其对应的数据交换区BLOCK块中的物理地址做修改,就可以将以前在缓冲的数据自动放弃,数据依次存放到所述数据交换区中新的物理地址上;
B、在写数据的过程中,尤其对***文件区的数据,会反复多次在同一地址位置进行读写数据;当每次有数据要求写入逻辑A地址时,都依次在数据交换区BLOCK块中写入,直至写满一个BLOCK块为止,然后可转向下一BLOCK块来写入,同时修改逻辑A地址所对应的数据交换区的相应地址,即根据更新的数据交换区地址保持映射到该物理A地址;
C、同时设置一动态的数据有效性标识表项,当对应A地址的数据在预定设置的时间内再没有被写入(修改)时,表明对应的数据块需要被写入到逻辑地址重新映射后的闪存真实物理地址中;
D、在所述NAND Flash中找到一新BLOCK块230,将BLOCK块220中的A地址以上部分数据块B拷贝到空置的BLOCK块230的B中;
E、将所述数据有效性标识对应需要写入的数据块AN写入到所述新BLOCK块230中A地址中;
F、将BLOCK块220的其他数据块C拷贝到该空置的BLOCK块230的相应位置C。上述步骤D、E、F完全是现有技术中NAND Flash数据写入的必须过程,每更改一次数据都要执行步骤D、E、F,只是他们的先后执行次序可以改变或调整。与现有技术相比,本发明方法减少了频繁对***文件区BLOCK块进行此种操作,提高了NAND Flash所带来的寿命和速度问题。
本发明方法可以在NAND Flash芯片上设置更多的BLOCK块作为数据交换区,例如设置NAND Flash的一半作为数据交换区的BLOCK块,这样,数据交换区BLOCK块将作为主要的频繁写入区域,但由于数据交换区BLOCK块可以依次顺序被使用,即写满一个BLOCK块后再写入相邻的下一个数据交换区BLOCK块中,从而将NAND Flash芯片中的多个BLOCK块依次使用,避免对一个固定BLOCK块的反复频繁读写,由此均衡磨损,提高整个芯片的使用寿命。
本发明方法中在拷贝一个文件时,其文件***也是修改了12次,但是并没有像之前的方法那样对NAND Flash的BLOCK块需要擦除12次,而只是把最终结果写入到相应物理地址中即可,也就是只操作了3个BLOCK块。数据每修改一次,本发明方法的***文件也只修改两次。真正达到了NAND Flash的磨损平衡,同时提高了写入速度。
本发明基于数据交换区的NAND Flash优化管理方法,主要对写入的数据进行了分别处理,区分文件***数据和用户数据。***文件的修改由于在大部分的情况下是临时的,当数据量不大的时候,可适量放在闪存控制器内存中。但是用户数据是一定要写入的,没必要占用宝贵的闪存控制器存储空间。
当更新一次用户数据时,FAT表同一地址就更新了4次,但是每次都是两个扇区,就可以把数据放在闪存控制器的内存中,处理方式同放在NAND Flash数据交换区一样。但是FDT表一次更新8个扇区,如果把它也放在控制器内存中则占用大量空间,所以放在NAND Flash中的数据交换区是合适的,当闪存控制器内存空间宽裕的情况下,也可考虑放在其内存中。
本发明方法中动态数据有效性标识可用于表示数据更新状况,但是其思想还是在于保证数据在设定时间没被修改或者一直没被修改的状况下就可被写入到真实物理地址中,以保证数据交换区利用率。
本发明基于数据交换区的NAND Flash优化管理方法,极大提高NANDFlash的文件读写速度与NAND Flash的使用寿命。
与现有技术相比,本发明方法的效率对比说明如下:现有技术中拷贝一个文件原来所消耗时间为T1:
T1=A+(B+C+D+E)*10N;
而本发明方法改进后所消耗时间T2为:
T2=A+(B+C+2*D+E)*N;
其中,A为USB(假设的上位机接口)传输到闪存控制器的时间;B为空置块分配***消耗时间;C为拷贝旧块数据到空置块的消耗时间;D为新数据的写入时间;E为旧块的擦除时间;N为写入文件个数。
现有技术的用户可视时间T11:T11=T;而本发明方法改进后用户的可视时间T21为:T21=A+D。
现有技术的磨损密度C01为:C01=(C1+C2+C3)*10N;而本发明方法改进后磨损密度C02为:C02=(C1+2*C2+C3)*N;其中,C1:为拷贝旧块中的数据到新块中造成的磨损;C2:为新数据写入新块造成的磨损;C3:为旧块擦除造成的磨损。
本发明方法所增加的闪存控制器内存消耗包括:一个交换块最大内存需要1280byte,最小内存需要为30byte。
由此可知,本发明方法确实实现了一种能够提高NAND Flash使用寿命和读写速度的NAND Flash操作方案,但应当理解的是,上述针对本发明较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本发明的专利保护范围应以所附权利要求为准。