CN104778127B - 一种nand flash写数据的方法和装置 - Google Patents
一种nand flash写数据的方法和装置 Download PDFInfo
- Publication number
- CN104778127B CN104778127B CN201510133476.7A CN201510133476A CN104778127B CN 104778127 B CN104778127 B CN 104778127B CN 201510133476 A CN201510133476 A CN 201510133476A CN 104778127 B CN104778127 B CN 104778127B
- Authority
- CN
- China
- Prior art keywords
- block
- physical block
- chained list
- physical
- bad
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种NAND FLASH写数据的方法,其中NAND FLASH包括物理块,所述物理块具有一一映射的逻辑块,所述逻辑块包括映射表以及空闲链表,所述的方法包括:确定待写的第一逻辑块;从所述空闲链表中获取擦写次数最少的物理块作为第一物理块;判断所述第一物理块是否为坏块,若是,则将当前第一物理块标记为坏块,并更换第一物理块;将待写入数据写入所述第一物理块;在所述映射表中记录所述第一逻辑块的映射至所述第一物理块。本申请通过利用空闲链表,以实现磨损平衡;将写操作中发现的坏块映射至坏块空间,重新从空闲链表中获取擦除次数最少的物理块进行写操作,以结合坏块管理与磨损平衡。
Description
技术领域
本申请涉及数据存储技术领域,特别是涉及一种NAND FLASH写数据的方法和一种NAND FLASH写数据的装置。
背景技术
NAND FLASH是一种非易失闪存,可以在给定的芯片尺寸内提供较高的容量。它以页为基本单元进行存储,以块为基本单元进行擦除,具有很快的写入和擦除速度,是一种比硬盘驱动器更好的存储设备。
在拥有诸多优点的同时,NAND FLASH由于生产工艺的问题,其在生产及使用过程中都有可能产生坏块,这将使得系统变得不稳定。当写入或擦除坏块时,会造成写入或擦除操作时的错误。应用中一般采用跳块策略来管理坏块,但它不能解决系统运行中产生的坏块情况。同时,NAND FLASH存储器的寿命是有限的,不能无限次擦写。因此,在采用NANDFLASH的应用中必须采用一定的机制,保证各个物理块近似均衡使用,避免某些块提前损耗达到使用寿命,这个问题称为磨损平衡。
发明内容
本申请实施例所要解决的技术问题是提供一种NAND FLASH写数据的方法,以实现磨损平衡并且对写操作中发现的坏块进行管理。
相应的,本申请实施例还提供了一种NAND FLASH写数据装置,用以保证上述方法的实现及应用。
为了解决上述问题,本申请公开了一种NAND FLASH写数据的方法,所述NANDFLASH包括物理块,所述物理块具有一一映射的逻辑块,所述逻辑块包括映射表以及空闲链表,所述的方法包括:
确定待写的第一逻辑块;
从所述空闲链表中获取擦写次数最少的物理块作为第一物理块;
判断所述第一物理块是否为坏块,若是,则将当前第一物理块标记为坏块,并更换第一物理块;
将待写入数据写入所述第一物理块;
在所述映射表中记录所述第一逻辑块的映射至所述第一物理块。
优选的,所述第一逻辑块具有初始映射的第二物理块,所述第一物理块具有初始映射的第二逻辑块,所述方法还包括:
在所述映射表中记录所述第二逻辑块的映射至所述第二物理块。
优选的,所述方法还包括:
判断所述第二物理块是否为空;
若否,则对所述第二物理块进行数据迁移,并在数据迁移后对所述第二物理块进行擦除操作;
若是,则将空的第二物理块写入空闲链表。
优选的,所述对所述第二物理块进行数据迁移的步骤包括:
获取待写的第二物理块的起始地址;
将所述第二物理块中处于所述起始地址前面的数据复制到所述第一物理块中;
获取数据写入后在第二物理块的结束地址;
将所述第二物理块中处于所述结束地址之后的数据复制到所述第一物理块中。
优选的,所述方法还包括:
判断所述第二物理块是否为坏块;
若是,则将所述第二物理块标记为坏块;
若否,则将所述第二物理块写入空闲链表。
优选的,所述逻辑块中包括坏块空间,所述方法还包括:
将被标记为坏块的物理块映射到坏块空间。
优选的,所述空闲链表从头节点起按各个未使用的物理块的擦写次数从小到大进行排列;
所述从所述空闲链表中获取擦写次数最少的物理块作为第一物理块为:
从空闲链表的头节点中获取擦写次数最少的物理块作为第一物理块。
优选的,所述更换第一物理块的步骤包括:
删除当前空闲链表的头节点;
将当前空闲链表的第二个节点作为新的头节点;
从新的空闲链表的头节点获取第一物理块。
同时,本申请还公开了一种NAND FLASH写数据的装置,所述NANDFLASH包括物理块,所述物理块具有一一映射的逻辑块,所述逻辑块包括映射表以及空闲链表,所述的装置包括:
确定模块,用于确定待写的第一逻辑块;
获取模块,用于从所述空闲链表中获取擦写次数最少的物理块作为第一物理块;
第一坏块判断模块,用于判断所述第一物理块是否为坏块;
第一标记模块,用于当所述第一坏块判断模块的判断结果为是时,将当前第一物理块标记为坏块,
更换模块,用于当所述第一坏块判断模块的判断结果为是时,更换第一物理块;
写模块,用于将待写入数据写入所述第一物理块;
第一映射记录模块,用于在所述映射表中记录所述第一逻辑块的映射至所述第一物理块。
优选的,所述第一逻辑块具有初始映射的第二物理块,所述第一物理块具有初始映射的第二逻辑块,所述装置还包括:
第二映射记录模块,用于在所述映射表中记录所述第二逻辑块的映射至所述第二物理块。
优选的,所述装置还包括:
第二空块判断模块,用于判断所述第二物理块是否为空;
数据迁移模块,用于当所述第二空块判断模块的判断结果为否时,对所述第二物理块进行数据迁移;
擦除模块,用于在数据迁移后对所述第二物理块进行擦除操作;
空闲链表写入模块,用于当所述第二空块判断模块的判断结果为是时,将空的第二物理块写入空闲链表。
优选的,所述数据迁移模块包括:
起始地址获取子模块,用于获取待写的第二物理块的起始地址;
起始复制子模块,用于将所述第二物理块中处于所述起始地址前面的数据复制到所述第一物理块中;
结束地址获取子模块,获取数据写入后在第二物理块的结束地址;
结束复制子模块,用于将所述第二物理块中处于所述结束地址之后的数据复制到所述第一物理块中。
优选的,所述装置还包括:
第二坏块判断模块,用于判断所述第二物理块是否为坏块;
第二标记模块,用于当所述第二坏块判断模块的判断结果为是时,则将所述第二物理块标记为坏块;
所述空闲链表写入模块,还用于当所述第二坏块判断模块的判断结果为否时,将所述第二物理块写入空闲链表。
优选的,所述逻辑块中包括坏块空间,所述装置还包括:
坏块映射模块,用于将被标记为坏块的物理块映射到坏块空间。
优选的,所述空闲链表从头节点起按各个未使用的物理块的擦写次数从小到大进行排列;
所述获取模块从所述空闲链表中获取擦写次数最少的物理块作为第一物理块为:
从空闲链表的头节点中获取擦写次数最少的物理块作为第一物理块。
优选的,所述更换模块包括:
删除子模块,用于删除当前空闲链表的头节点;
头节点更换子模块,用于将当前空闲链表的第二个节点作为新的头节点;
头节点获取子模块,用于从新的空闲链表的头节点获取第一物理块。
与现有技术相比,本申请实施例包括以下优点:
本申请通过利用空闲链表按擦除次数由小到大的规则存储未使用的物理块并且将擦除操作后非坏块的物理块加入空闲链表,以实现磨损平衡;
将写操作中发现的坏块映射至坏块空间,重新从空闲链表中获取擦除次数最少的物理块进行写操作,以结合坏块管理与磨损平衡。
附图说明
图1是本申请实施例中逻辑块与物理块的基本映射关系图;
图2是本申请实施例中映射表元素的结构图;
图3是本申请的一种NAND FLASH写数据的方法实施例的步骤流程图;
图4是本申请实施例中空闲链表的工作示意图;
图5是本申请实施例中更新映射表的工作示意图;
图6是本申请实施例中数据迁移的工作示意图;
图7是本申请实施例中将坏块加入到坏块空间的工作示意图;
图8是本申请NAND FLASH写数据的方法实施例的步骤流程图;
图9是本申请一种NAND FLASH写数据的装置实施例的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请实施例的核心构思之一在于,写操作的过程中,将逻辑地址的映射转换到一个擦除次数最少的物理块,从而实现这个写操作是在一个擦除次数最少的物理块上进行的。同时如果发现要写入数据的块是坏块,则把此块加入坏块空间,重新从空闲链表中找到擦除次数最少的块进行写操作。
NAND FLASH是一种非易失闪存,NAND FLASH被分成若干个zone(区域),每个zone分为若干个block(块),每个block分为若个page(页),page分为data区(数据区)与spare区(空闲区),spare区通常被用于存放ECC(错误检查和纠正)、wear leveling(磨损平衡)以及其他软件开销,一般而言zone,block,page之间的关系会随着芯片的不同而不同,每个page的大小也会随着芯片的不同而有可能不同。
从数据存储的角度来看,组成NAND FLASH的块称为物理块。从文件管理的角度来看,块称为逻辑块。即物理块具有一一映射的逻辑块。参照图1是本申请实施例中逻辑块与物理块的基本映射关系。在本申请中,把NAND FLASH的整个逻辑空间,划分为了基本空间、坏块空间和存储空间,基本空间为用户可以看到的空间,坏块空间为待映射物理坏块的空间,存储空间为存放LUT表(映射表)和空闲链表的空间。
因为在使用NAND FLASH的过程中,会不断有坏块产生。坏块空间可以采用从下往上的增长方式,采用由下往上的增长方式的好处是,可以实现坏块空间的动态增长,但是坏块空间直接从下往上的动态增长的话,会产生下面的问题,假如坏块空间的顶端指针为x,刚好(x-1)被用户写入数据了,这样再有坏块产生的时候,坏块空间就会把用户的数据覆盖掉了,所以为了避免这样情况,本文把坏块空间的大小设定了为固定的值,这样基本空间的大小也固定了,用户的数据和坏块空间便不会重合。其中识别坏块的操作可以在一定程度上缓解坏块数目超过坏块空间的压力。
如果想要解决坏块数目超过坏块空间的问题,可以先把坏块空间的大小设定为固定的大小,当坏块数目超过坏块空间时,再增加坏块空间的大小,在增加坏块空间大小之前要先判断被增加为坏块空间的基本空间部分是否有数据写入,如果没有则直接增加坏块空间大小,如果有,则可以提示用户,是选择放弃增加坏块空间还是选择覆盖原来的数据。坏块空间的大小可以设置为占总空间大小的百分之二(用户可以根据自己的需要调整)。
存储空间为逻辑地址的最后一块,因为NAND FLASH一般第一块稳定性较好,所以让逻辑的地址的最后一块映射到物理的第一块,用于存放LUT表(映射表)和FreeLink(空闲链表)。
参照图2是本申请实施例中映射表元素的结构图。其中USED标志表示该逻辑块对应的物理块是否被用,FREE标志表示该逻辑块对应的物理块是否空闲,BAD标志表示该逻辑块对应的物理块是否为坏块。
在读写的过程中为了保证磨损平衡。本文把所有的空闲块,组成一个空闲链表,空闲链表从头节点起按每个空闲块的擦写次数从小到大进行排列,链表的表头所指的块就是擦写次数最少的物理块。空闲链表也存放存储空间中。空闲链表的结构可以包括:空闲块的物理块号、此块的擦写次数、指向的下一个空闲块。
NAND FLASH的每个block的第一页(或其他页,也可多个页)的spare区可以存储以下内容:
1)标志位:
坏块标记:判断这个Block是否为坏块。
空闲标记:判断这个Block是否是空闲的。
已用标记:判断这个Block是否已经被使用。
2)逻辑地址:这个Block是由映射表中的某个逻辑地址映射的。
3)擦写次数:该块被擦写的次数,每擦或写一次该块,此值都被加1。
参照图3是本申请的一种NAND FLASH写数据的方法实施例的步骤流程图。具体可以包括:
步骤301,确定待写的第一逻辑块;
步骤302,从所述空闲链表中获取擦写次数最少的物理块作为第一物理块;
步骤303,判断所述第一物理块是否为坏块,若是,则将当前第一物理块标记为坏块,并更换第一物理块;
步骤304,将待写入数据写入所述第一物理块;
步骤305,在所述映射表中记录所述第一逻辑块的映射至所述第一物理块。
用户的写数据的时候,会给出一个地址,比如说用户要在xxx字节(这个地址即为逻辑地址)处存储一些数据,程序就会根据当前NAND FLASH规定的zone,block,page大小,计算用户要操作的这个地址处于NAND FLASH的哪个zone的哪个block中,我们称这个计算出来的block为用户给出的逻辑块号。程序会从第0个物理块中取出对应这个zone的LUT表和空闲链表,然后根据这个逻辑块号在LUT表中找到其映射的物理块。并且由于空闲链表的建立规则是从头节点起按各个未使用的物理块的擦写次数从小到大进行排列,因此,从所述空闲链表中获取擦写次数最少的物理块作为第一物理块的步骤具体可以为从空闲链表的头节点中获取擦写次数最少的物理块作为第一物理块。
参照图4是本申请实施例中空闲链表的工作示意图。在本申请实施例中,假设PhyBlockNum m为擦写次数最少的物理块,空闲链表的头节点Head中,FreeBlockNum 1所指向的就是PhyBlockNum m,EraseWriteNum即PhyBlockNum m的擦写次数,NextFreeBlockNum即指向的下一个空闲块。
在本申请实施例中,通过判断写数据操作是否成功,可以判断第一物理块是否为坏块。如果写操作失败则将当前第一物理块标记为坏块,并映射到坏块空间,同时,需要更换第一物理块,再次进行写操作。
其中,更换第一物理块的操作可以包括:
删除当前空闲链表的头节点;
将当前空闲链表的第二个节点作为新的头节点;
从新的空闲链表的头节点获取第一物理块。
将数据写入第一物理块后,需要将第一逻辑块映射至第一物理块,并记录在映射表中。在本申请实施例中,所述第一逻辑块具有初始映射的第二物理块,所述第一物理块具有初始映射的第二逻辑块,所述方法还可以包括:在所述映射表中记录所述第二逻辑块的映射至所述第二物理块。
本申请实质上是一个逻辑块与物理块之前相互交换映射关系的方法,在第一逻辑块映射至第一物理块后,还需要将第二逻辑块映射至第二物理块,并记录在映射表中。
参照图5是本申请实施例中更新映射表的工作示意图。其中,LogicBlockNum i为待写的第一逻辑块,PhyBlockNum j为LogicBlockNum i初始映射的第二物理块。PhyBlockNum m为空闲链表中获取擦写次数最少的物理块,即第一物理块,LogicBlockNumk为PhyBlockNum m初始映射的第二逻辑块。实线表示初始的映射关系,虚线表示写数据之后的映射关系。
写数据时,将待写的LogicBlockNum i映射至PhyBlockNum m;查找映射表,找到LogicBlockNum i初始映射的PhyBlockNum j以及PhyBlockNum m初始映射的LogicBlockNum k;将LogicBlockNum k映射至PhyBlockNum j。
在本申请实施例中,在更新映射表中逻辑块与物理块的映射关系之前,还可以包括:
判断所述第二物理块是否为空;
若否,则对所述第二物理块进行数据迁移,并在数据迁移后对所述第二物理块进行擦除操作;
若是,则将空的第二物理块写入空闲链表。
在第二物理块不为空时,为了保证第一逻辑块所对应的数据不丢失,需要将第二物理中的数据迁移到第一物理块中。
其中,数据迁移的步骤可以包括:
获取待写的第二物理块的起始地址;
将所述第二物理块中处于所述起始地址前面的数据复制到所述第一物理块中;
获取数据写入后在第二物理块的结束地址;
将所述第二物理块中处于所述结束地址之后的数据复制到所述第一物理块中。
搬移数据之前会先根据要写入数据的起始地址和所写数据量的大小来判断哪些内容是不被覆盖的,搬移的数据在原物理块的地址和写入数据是不重合的,所以搬移的数据并不会在新映射块中覆盖写入的数据。参照图6是本申请实施例中数据迁移的工作示意图。其中,(a)为原物理块PhyBlockNum j,图中竖条纹部分表示该区域存储了数据。(b)为用户将待写入的数据写入到物理块PhyBlockNum m中的结果图,横条纹区域表示用户当前写入数据的存储区域。(c)为将物理块PhyBlockNum j中不会被覆盖掉的数据复制到物理块PhyBlockNum m后的结果图。
数据迁移的步骤可以包括:
①将用户要写的数据根据地址直接写入空闲链表表头对应的物理块PhyBlockNumm中;
②将原物理块PhyBlockNum i中处于这个写地址前面数据复制到PhyBlockNum m物理块对应的地址区域;
③将用户写完数据之后的地址空间填充为原物理块对应的信息内容。
在本申请实施例中,还可以包括:
判断所述第二物理块是否为坏块;
若是,则将所述第二物理块标记为坏块;
若否,则将所述第二物理块写入空闲链表。
在对第二物理块进行擦除操作时,若擦除成功,则当前第二物理块不是坏块,第二物理块擦除成功后变为空块,增加该块的擦写次数,将该第二物理块写入空闲链表。在空闲链表中加入空闲块的方法可以为:将空闲块根据擦写次数由小到大的原则加入空闲链表。若擦除操作不成功,则将当前第二物理块判断为坏块,将该第二物理块标记为坏块。
值得注意的是,在NAND FLASH的使用过程中,会不断的有坏块产生,难免会把一些好块当成了坏块,这些坏块被称为伪坏块。当空闲链表中的空闲块个数(即节点个数)小于整个zone中Block数的N%时,就会去判断当前zone中所有被标记为坏块是否为真正的坏块,如果为伪坏块,则擦除之后,加入空闲链表中。这样做的好处是不必每次读写都去执行识别伪坏块的算法,节省了每次读写的速度。
在本申请实施例中,逻辑块包括了坏块空间,所述方法还可以包括:将被标记为坏块的物理块映射到坏块空间。
坏块空间的映射具体可以为,定义一个指针来指向当前LUT中可以映射到坏块位置,随着坏块的增加,该指针会在坏块空间从由下往上移动,即每在坏块空间添加一个坏块,该指针就会往上移一个位置,这样当下一次有块号要添加进来时,就可以直接在这个指针所指的位置进行坏块的映射。
参照图7是本申请实施例中将坏块加入到坏块空间的工作示意图。其中,0到x为基本空间,(x-1)到(n-1)为坏块空间,n为存储空间。在程序的运行过程中,已经产生了两个坏块,第一次产生的坏块就会由坏块空间的逻辑第n-1块映射,第二次产生的坏块由逻辑第n-2块映射。此时的坏块指针应该指向逻辑的n-3块。在还没有产生坏块的情况下,逻辑的n-3块还是会映射在一个空闲的物理块上,因为用户不可能往坏块空间写数据。
在本申请实施例中假设物理块Y被判断为坏块,将坏块加入坏块空间的具体步骤可以包括:读出逻辑块n-3所映射的物理块号(n-1),物理块n-1实际上是一个空闲块;在物理块Y的spare区将该块标记为坏块,同时也将逻辑块n-3映射到这个坏块(物理块Y);将原来映射到物理块Y的逻辑块1重新映射到物理块n-1上。
参照图8是本申请NAND FLASH写数据的方法实施例的步骤流程图。
步骤801,根据用户给出的逻辑地址得到逻辑块号i,记为LogicBlockNum i;查找映射表,得到逻辑块i映射的物理块号j,记为PhyBlockNum j;
步骤802,将待写入的数据,写入空闲链表的第一个节点所对应的物理块m。
从空闲链表FreeLink中找到表头擦写次数最少的物理块号FreeBlockNum1;查找LUT表获取物理块号FreeBlockNum1对应的逻辑块号以及标志位等信息,这里假设空闲链表FreeLink表头结点的空闲物理块(FreeBlockNum1即为PhyBlockNum m)对应的逻辑块号LogicBlockNum k
步骤803,判断写数据是否成功;
若写数据失败,则进行步骤804;
若写数据成功,则进行步骤805;
步骤804,把m块加入坏块空间,在空闲链表中删除第一个节点,将第二节点作为链表新的头节点;
向PhyBlockNum m(即FreeBlockNum1)写数据失败,则把PhyBlockNum m标记为坏块,并将该块加入坏块空间,同时将空闲链表FeeLink中FreeBlockNum1这个节点删除,更新LUT表,更新空闲链表。然后把FreeBlockNum2作为待写入块。
步骤805,判断判断物理块j是否为空;
若为空,则进行步骤806;
若不为空,则进行步骤807;
步骤806,更新映射表和空闲链表。
如果PhyBlockNum j为空。修改PhyBlockNum m这个物理块spare区:逻辑地址为第i块(LogicBlockNum i)、将该块标记为已用块。修改LUT表:将LUT表中逻辑块i映射到物理块PhyBlockNum m;将LUT表中逻辑块k(LogicBlockNum k)映射到空闲的物理块PhyBlockNum j。修改空闲链表FreeLink:删除该链表的第一个节点。
步骤807,把j块中未被覆盖的数据迁移到m块对应地址中。
其中,把j块中未被覆盖的数据迁移到m块对应地址中的步骤可以包括:将用户要写的数据根据地址直接写入空闲链表表头对应的物理块PhyBlockNum m中;将原物理块PhyBlockNum i中处于这个写地址前面数据复制到PhyBlockNum m物理块对应的地址区域;将用户写完数据之后的地址空间填充为原物理块对应的信息内容。
步骤808,擦除物理块j。
在数据迁移后,擦除物理块号PhyBlockNum j,将这块标记为空闲块,并且将该块的擦写次数增1,然后将这些信息存入该块的spare区。
步骤809,判断j块是否擦除成功;
若成功,则进行步骤810;
若不成功,则进行步骤811;
步骤810,更新映射表和空闲链表。
修改PhyBlockNum m这个物理块spare区:逻辑地址为第i块(LogicBlockNum i)、将该块标记为已用块。修改LUT表:将LUT表中逻辑块i映射到物理块PhyBlockNum m;将LUT表中逻辑块k映射到步骤b)中擦除的空闲物理块PhyBlockNum j。修改空闲链表FreeLink:删除该链表的第一个节点,并将PhyBlockNum j这个物理块作为一个新的空闲块根据擦除次数由小到大的原则加入FreeLink链表中。
步骤810与步骤806的区别是,更新空闲链表的步骤中,除了删除空闲链表的第一个节点外,还包括将擦除成功的块j作为新的空闲块根据擦除次数由小到大的原则加入空闲链表中。
步骤811,把j块加入坏块空间,更新映射表和空闲链表。
在PhyBlockNum j不为空的情况下,如果擦除PhyBlockNum j失败,则把PhyBlockNum j加入坏块区,更新LUT表,更新空闲链表,更新过程与步骤806类似。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
参照图9是本申请一种NAND FLASH写数据的装置实施例的结构框图,其中,NANDFLASH包括物理块,所述物理块具有一一映射的逻辑块,所述逻辑块包括映射表以及空闲链表,所述装置可以包括如下模块:
确定模块901,用于确定待写的第一逻辑块;
获取模块902,用于从所述空闲链表中获取擦写次数最少的物理块作为第一物理块;
第一坏块判断模块903,用于判断所述第一物理块是否为坏块;
第一标记模块904,用于当所述第一坏块判断模块的判断结果为是时,将当前第一物理块标记为坏块,
更换模块905,用于当所述第一坏块判断模块的判断结果为是时,更换第一物理块;
写模块906,用于将待写入数据写入所述第一物理块;
第一映射记录模块907,用于在所述映射表中记录所述第一逻辑块的映射至所述第一物理块。
在本申请实施例中,所述第一逻辑块具有初始映射的第二物理块,所述第一物理块具有初始映射的第二逻辑块,所述装置还可以包括:
第二映射记录模块,用于在所述映射表中记录所述第二逻辑块的映射至所述第二物理块。
在本申请实施例中,所述装置还可以包括:
第二空块判断模块,用于判断所述第二物理块是否为空;
数据迁移模块,用于当所述第二空块判断模块的判断结果为否时,对所述第二物理块进行数据迁移;
擦除模块,用于在数据迁移后对所述第二物理块进行擦除操作;
空闲链表写入模块,用于当所述第二空块判断模块的判断结果为是时,将空的第二物理块写入空闲链表。
在本申请实施例中,所述数据迁移模块可以包括:
起始地址获取子模块,用于获取待写的第二物理块的起始地址;
起始复制子模块,用于将所述第二物理块中处于所述起始地址前面的数据复制到所述第一物理块中;
结束地址获取子模块,获取数据写入后在第二物理块的结束地址;
结束复制子模块,用于将所述第二物理块中处于所述结束地址之后的数据复制到所述第一物理块中。
在本申请实施例中,所述装置还可以包括:
第二坏块判断模块,用于判断所述第二物理块是否为坏块;
第二标记模块,用于当所述第二坏块判断模块的判断结果为是时,则将所述第二物理块标记为坏块;
所述空闲链表写入模块,还用于当所述第二坏块判断模块的判断结果为否时,将所述第二物理块写入空闲链表。
在本申请实施例中,所述逻辑块中可以包括坏块空间,所述装置还可以包括:
坏块映射模块,用于将被标记为坏块的物理块映射到坏块空间。
在本申请实施例中,所述空闲链表从头节点起按各个未使用的物理块的擦写次数从小到大进行排列;
所述获取模块从所述空闲链表中获取擦写次数最少的物理块作为第一物理块为:
从空闲链表的头节点中获取擦写次数最少的物理块作为第一物理块。
在本申请实施例中,所述更换模块可以包括:
删除子模块,用于删除当前空闲链表的头节点;
头节点更换子模块,用于将当前空闲链表的第二个节点作为新的头节点;
头节点获取子模块,用于从新的空闲链表的头节点获取第一物理块。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种NAND FLASH写数据的方法和一种NAND FLASH写数据的装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种NAND FLASH写数据的方法,其特征在于,所述NAND FLASH包括物理块,所述物理块具有一一映射的逻辑块,所述逻辑块包括映射表以及空闲链表,所述的方法包括:
确定待写的第一逻辑块;
从所述空闲链表中获取擦写次数最少的物理块作为第一物理块;所述第一逻辑块具有初始映射的第二物理块,所述第一物理块具有初始映射的第二逻辑块;
判断所述第一物理块是否为坏块,若是,则将当前第一物理块标记为坏块,并更换第一物理块;
将待写入数据写入所述第一物理块;
在所述映射表中记录所述第一逻辑块的映射至所述第一物理块;
在所述映射表中记录所述第二逻辑块的映射至所述第二物理块;
所述在所述映射表中记录所述第二逻辑块的映射至所述第二物理块之前,所述的方法还包括:
判断所述第二物理块是否为空;
若是,则将空的第二物理块写入空闲链表;
若否,则对所述第二物理块进行数据迁移,并在数据迁移后对所述第二物理块进行擦除操作;
所述进行擦除操作的步骤包括:
判断所述第二物理块是否为坏块;
若是,则将所述第二物理块标记为坏块;
若否,则将所述第二物理块写入空闲链表。
2.根据权利要求1所述的方法,其特征在于,所述对所述第二物理块进行数据迁移的步骤包括:
获取待写的第二物理块的起始地址;
将所述第二物理块中处于所述起始地址前面的数据复制到所述第一物理块中;
获取数据写入后在第二物理块的结束地址;
将所述第二物理块中处于所述结束地址之后的数据复制到所述第一物理块中。
3.根据权利要求1所述的方法,其特征在于,所述逻辑块中包括坏块空间,所述方法还包括:
将被标记为坏块的物理块映射到坏块空间。
4.根据权利要求3所述的方法,其特征在于,所述空闲链表从头节点起按各个未使用的物理块的擦写次数从小到大进行排列;
所述从所述空闲链表中获取擦写次数最少的物理块作为第一物理块为:
从空闲链表的头节点中获取擦写次数最少的物理块作为第一物理块。
5.根据权利要求4所述的方法,其特征在于,所述更换第一物理块的步骤包括:
删除当前空闲链表的头节点;
将当前空闲链表的第二个节点作为新的头节点;
从新的空闲链表的头节点获取第一物理块。
6.一种NAND FLASH写数据的装置,其特征在于,所述NAND FLASH包括物理块,所述物理块具有一一映射的逻辑块,所述逻辑块包括映射表以及空闲链表,所述的装置包括:
确定模块,用于确定待写的第一逻辑块;
获取模块,用于从所述空闲链表中获取擦写次数最少的物理块作为第一物理块;所述第一逻辑块具有初始映射的第二物理块,所述第一物理块具有初始映射的第二逻辑块;
第一坏块判断模块,用于判断所述第一物理块是否为坏块;
第一标记模块,用于当所述第一坏块判断模块的判断结果为是时,将当前第一物理块标记为坏块,
更换模块,用于当所述第一坏块判断模块的判断结果为是时,更换第一物理块;
写模块,用于将待写入数据写入所述第一物理块;
第一映射记录模块,用于在所述映射表中记录所述第一逻辑块的映射至所述第一物理块;
第二映射记录模块,用于在所述映射表中记录所述第二逻辑块的映射至所述第二物理块;
第二空块判断模块,用于判断所述第二物理块是否为空;
数据迁移模块,用于当所述第二空块判断模块的判断结果为否时,对所述第二物理块进行数据迁移;
擦除模块,用于在数据迁移后对所述第二物理块进行擦除操作;
空闲链表写入模块,用于当所述第二空块判断模块的判断结果为是时,将空的第二物理块写入空闲链表;
第二坏块判断模块,用于判断所述第二物理块是否为坏块;
第二标记模块,用于当所述第二坏块判断模块的判断结果为是时,则将所述第二物理块标记为坏块;
所述空闲链表写入模块,还用于当所述第二坏块判断模块的判断结果为否时,将所述第二物理块写入空闲链表。
7.根据权利要求6所述的装置,其特征在于,所述数据迁移模块包括:
起始地址获取子模块,用于获取待写的第二物理块的起始地址;
起始复制子模块,用于将所述第二物理块中处于所述起始地址前面的数据复制到所述第一物理块中;
结束地址获取子模块,获取数据写入后在第二物理块的结束地址;
结束复制子模块,用于将所述第二物理块中处于所述结束地址之后的数据复制到所述第一物理块中。
8.根据权利要求6所述的装置,其特征在于,所述逻辑块中包括坏块空间,所述装置还包括:
坏块映射模块,用于将被标记为坏块的物理块映射到坏块空间。
9.根据权利要求8所述的装置,其特征在于,所述空闲链表从头节点起按各个未使用的物理块的擦写次数从小到大进行排列;
所述获取模块从所述空闲链表中获取擦写次数最少的物理块作为第一物理块为:
从空闲链表的头节点中获取擦写次数最少的物理块作为第一物理块。
10.根据权利要求9所述的装置,其特征在于,所述更换模块包括:
删除子模块,用于删除当前空闲链表的头节点;
头节点更换子模块,用于将当前空闲链表的第二个节点作为新的头节点;
头节点获取子模块,用于从新的空闲链表的头节点获取第一物理块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510133476.7A CN104778127B (zh) | 2015-03-25 | 2015-03-25 | 一种nand flash写数据的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510133476.7A CN104778127B (zh) | 2015-03-25 | 2015-03-25 | 一种nand flash写数据的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104778127A CN104778127A (zh) | 2015-07-15 |
CN104778127B true CN104778127B (zh) | 2018-04-13 |
Family
ID=53619606
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510133476.7A Active CN104778127B (zh) | 2015-03-25 | 2015-03-25 | 一种nand flash写数据的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104778127B (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106294195B (zh) * | 2016-07-19 | 2019-06-21 | 深圳市领存技术有限公司 | 一种3d闪存的控制方法和系统 |
CN106598484A (zh) * | 2016-11-17 | 2017-04-26 | 华为技术有限公司 | 数据的存储方法、闪存芯片以及存储装置 |
CN108614743A (zh) * | 2016-12-09 | 2018-10-02 | 北京京存技术有限公司 | 基于NAND flash的超级数据块处理方法和装置 |
CN107015764B (zh) * | 2017-03-17 | 2020-03-27 | 深圳市江波龙电子股份有限公司 | Nand flash的数据处理方法、装置和一种Nand flash |
CN107562381A (zh) * | 2017-08-30 | 2018-01-09 | 紫光华山信息技术有限公司 | 一种数据处理方法及装置 |
CN107992430A (zh) * | 2017-12-20 | 2018-05-04 | 北京京存技术有限公司 | 闪存芯片的管理方法、装置及计算机可读存储介质 |
CN111324288B (zh) * | 2018-12-14 | 2024-02-23 | 兆易创新科技集团股份有限公司 | 一种存储器 |
CN111324284B (zh) * | 2018-12-14 | 2024-02-23 | 兆易创新科技集团股份有限公司 | 一种存储器 |
CN112181276B (zh) * | 2019-07-03 | 2023-06-20 | 北京忆恒创源科技股份有限公司 | 提升存储设备服务质量的大块构造、分配方法及其存储设备 |
CN112578993A (zh) * | 2019-09-27 | 2021-03-30 | 北京忆恒创源科技有限公司 | 多平面nvm处理编程出错的方法与存储设备 |
CN112579328A (zh) * | 2019-09-27 | 2021-03-30 | 北京忆恒创源科技有限公司 | 处理编程出错的方法与存储设备 |
CN113050878A (zh) * | 2019-12-27 | 2021-06-29 | 北京兆易创新科技股份有限公司 | 一种开卡划分块的方法和装置 |
CN113311989B (zh) * | 2020-02-26 | 2023-09-22 | 北京君正集成电路股份有限公司 | 一种基于并行使用的双片nand flash坏块管理方法 |
CN113391755B (zh) * | 2020-02-26 | 2023-09-22 | 北京君正集成电路股份有限公司 | 一种并行双片nand flash中物理擦除块动态关联的方法 |
CN111966299A (zh) * | 2020-08-24 | 2020-11-20 | 深圳三地一芯电子有限责任公司 | 一种用于Nand Flash的磨损均衡方法及装置 |
CN111966302A (zh) * | 2020-08-26 | 2020-11-20 | 南京扬贺扬微电子科技有限公司 | 一种基于逻辑物理映射表的SPI Nand数据写入方法 |
CN112162934A (zh) * | 2020-09-29 | 2021-01-01 | 深圳市时创意电子有限公司 | 存储块异常磨损处理方法、装置、电子设备及存储介质 |
CN112379831A (zh) * | 2020-11-05 | 2021-02-19 | 京信通信系统(中国)有限公司 | 数据管理方法、装置、计算机设备和存储介质 |
CN113625973B (zh) * | 2021-08-30 | 2024-01-16 | 得一微电子股份有限公司 | 数据写入方法、装置、电子设备及计算机可读存储介质 |
CN117130951B (zh) * | 2023-10-24 | 2024-02-27 | 联和存储科技(江苏)有限公司 | 调整nand闪存伪坏块地址的方法和电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279712A (zh) * | 2011-08-10 | 2011-12-14 | 北京百度网讯科技有限公司 | 一种适用于互联网存储系统的存储控制方法、系统和装置 |
CN102880570A (zh) * | 2012-09-05 | 2013-01-16 | 记忆科技(深圳)有限公司 | 固态硬盘的加权磨损均衡方法及系统 |
CN103678141A (zh) * | 2012-09-05 | 2014-03-26 | 深圳市中兴移动通信有限公司 | 闪存的管理方法和管理系统 |
CN104063186A (zh) * | 2014-06-30 | 2014-09-24 | 成都万维图新信息技术有限公司 | 一种电子设备的数据访问方法 |
CN104360957A (zh) * | 2014-11-26 | 2015-02-18 | 上海爱信诺航芯电子科技有限公司 | 一种维持闪存损耗均衡的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9201786B2 (en) * | 2012-12-21 | 2015-12-01 | Kabushiki Kaisha Toshiba | Memory controller and memory system |
-
2015
- 2015-03-25 CN CN201510133476.7A patent/CN104778127B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279712A (zh) * | 2011-08-10 | 2011-12-14 | 北京百度网讯科技有限公司 | 一种适用于互联网存储系统的存储控制方法、系统和装置 |
CN102880570A (zh) * | 2012-09-05 | 2013-01-16 | 记忆科技(深圳)有限公司 | 固态硬盘的加权磨损均衡方法及系统 |
CN103678141A (zh) * | 2012-09-05 | 2014-03-26 | 深圳市中兴移动通信有限公司 | 闪存的管理方法和管理系统 |
CN104063186A (zh) * | 2014-06-30 | 2014-09-24 | 成都万维图新信息技术有限公司 | 一种电子设备的数据访问方法 |
CN104360957A (zh) * | 2014-11-26 | 2015-02-18 | 上海爱信诺航芯电子科技有限公司 | 一种维持闪存损耗均衡的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104778127A (zh) | 2015-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104778127B (zh) | 一种nand flash写数据的方法和装置 | |
JP4812739B2 (ja) | 不揮発性データ保存装置の静的データ領域の検出方法、磨耗度平準化方法及びデータユニットの併合方法とその装置 | |
CN105573681B (zh) | 一种ssd盘片内部raid组建方法及系统 | |
CN104934062B (zh) | 非易失性存储器及写入方法 | |
US8041883B2 (en) | Restoring storage devices based on flash memories and related circuit, system, and method | |
US8392797B2 (en) | Error correcting controller, flash memory chip system, and error correcting method thereof | |
JP4987997B2 (ja) | メモリシステム | |
US8433844B2 (en) | Method for managing a memory device having multiple channels and multiple ways, and associated memory device and controller thereof | |
KR20080063466A (ko) | 플래시 메모리 관리 | |
CN112289360A (zh) | 读取重试阈值电压选择 | |
CN104615594A (zh) | 一种数据更新方法及装置 | |
US8074128B2 (en) | Block management and replacement method, flash memory storage system and controller using the same | |
TW201117218A (en) | Methods for measuring usable lifespan and replacing an in-system programming code of a memory device, and data storage system using the same | |
CN108897492A (zh) | 一种数据写入方法和装置 | |
CN112596668A (zh) | 一种存储器的坏块处理方法及系统 | |
US9009442B2 (en) | Data writing method, memory controller and memory storage apparatus | |
CN114968096A (zh) | 一种存储器的控制方法、存储器与存储系统 | |
US20080168215A1 (en) | Storing Information in a Memory | |
JP5180957B2 (ja) | メモリコントローラ、半導体記録装置及び書き換え回数通知方法 | |
US20070005929A1 (en) | Method, system, and article of manufacture for sector mapping in a flash device | |
CN110532195A (zh) | 存储器系统的工作负荷分簇及执行其的方法 | |
US20140089566A1 (en) | Data storing method, and memory controller and memory storage apparatus using the same | |
CN115237351B (zh) | Nand块动态重映射、读写命令处理方法及存储设备 | |
JP2007148965A (ja) | フラッシュディスク装置のエラーブロック管理方法及び装置 | |
CN103456354B (zh) | 一种非易失性存储器差分存储格的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 230601 Building 1, Pearl Plaza, Hefei Economic and Technological Development Zone, Anhui Province Patentee after: HEFEI GEYI INTEGRATED CIRCUIT Co.,Ltd. Patentee after: Zhaoyi Innovation Technology Group Co.,Ltd. Address before: 230601 Building 1, Pearl Plaza, Hefei Economic and Technological Development Zone, Anhui Province Patentee before: HEFEI GEYI INTEGRATED CIRCUIT Co.,Ltd. Patentee before: GIGADEVICE SEMICONDUCTOR(BEIJING) Inc. |
|
CP01 | Change in the name or title of a patent holder |