存取闪存模块的方法、闪存控制器以及记忆装置与流程

文档序号:18475177发布日期:2019-08-20 20:55阅读:246来源:国知局
存取闪存模块的方法、闪存控制器以及记忆装置与流程

本发明是涉及闪存,尤其涉及一种存取闪存模块的方法及相关的闪存控制器与记忆装置。



背景技术:

为了让闪存能够有更高的密度以及更大的容量,闪存的制程也朝向立体化的发展,而产生了几种不同的立体nand型闪存(3dnand-typeflash)。在立体nand型闪存中,由于整体结构的不同以及浮闸形状位置的改变,因此在数据的写入以及读取上也较传统的平面nand型闪存多出了些许的问题。举例来说,在某些立体nand型闪存中,会将多条字线(wordline)定义为一字线组,而所述字线组会共同具有部分的控制电路,进而导致当数据写入到所述字线组的一条字在线的浮闸晶体管发生失败时(写入失败),会连带导致所述字线组的其他字在线的浮闸晶体管的数据发生错误;此外,若是所述字线组中的一条字线发生断路或短路的状况时,也会连带影响到所述字线组的其他字在线的浮闸晶体管的数据发生错误,因此,如何就上述问题提出一种错误更正方式,以尽可能地维持数据的正确性,且又不会浪费存储器空间以节省成本,是一个重要的课题。



技术实现要素:

因此,本发明的目的之一在于公开一种存取一闪存模块的方法及相关的闪存控制器与记忆装置,其使用类似容错式磁盘阵列(redundantarrayofindependentdisks,raid)的错误更正方式,但是却不会大幅浪费存储器空间,以解决现有技术中的问题。

本发明的一实施例公开了一种存取一闪存模块的方法,所述方法包括:对第n笔数据进行编码以产生一第n组错误更正码,其中所述第n组错误更正码是用来对所述第n笔数据进行错误更正,其中n为一正整数;将所述第n笔资料写入至所述闪存模块中;将所述第n组错误更正码写入至所述闪存模块中;当所述第n笔数据成功写入至所述闪存模块后,删除所述闪存模块中的所述第n组错误更正码中至少一部分,但在所述闪存模块中保留所述第n笔数据。

本发明的另一实施例公开了一种存取一闪存模块的方法,所述方法包括:将第n笔数据写入至所述闪存模块中的多个闪存芯片,并对所述第n笔数据进行编码以产生一第n组错误更正码,其中所述第n组错误更正码是用来对写入至所述多个闪存芯片中的所述第n笔数据进行错误更正,其中n为一正整数;当判断所述第n笔数据已成功写入至所述多个闪存芯片中之后,保留所述第n组错误更正码;依序将第(n+1)~(n+m)笔资料分别写入至所述闪存模块中的所述多个闪存芯片,并分别对所述第(n+1)~(n+m)笔数据进行编码以产生第(n+1)~(n+m)组错误更正码,其中所述第(n+1)~(n+m)组错误更正码是分别用来对写入至所述多个闪存芯片中的所述第(n+1)~(n+m)笔数据进行错误更正,其中m为一正整数;以及当判断所述第(n+m)笔数据已成功写入至所述多个闪存芯片中时,才删除所述第n~(n+m)组错误更正码。

本发明的另一实施例公开了一种闪存控制器,其中所述闪存控制器是用来存取一闪存模块,且所述闪存控制器包括:一存储器,用来储存一程序代码;一微处理器,用来执行所述程序代码以控制对所述闪存模块的存取;以及一编码器;其中所述微处理器对第n笔数据进行编码以产生一第n组错误更正码,其中所述第n组错误更正码是用来对所述第n笔数据进行错误更正,其中n为一正整数;所述微处理器将所述第n笔资料写入至所述闪存模块中,并将所述第n组错误更正码写入至所述闪存模块中;当所述第n笔资料成功写入至所述闪存模块后,所述微处理器删除所述闪存模块中的所述第n组错误更正码中至少一部分,但在所述闪存模块中保留所述第n笔数据。

本发明的另一实施例公开了一种闪存控制器,其中所述闪存控制器是用来存取一闪存模块,且所述闪存控制器包括:一存储器,用来储存一程序代码;一微处理器,用来执行所述程序代码以控制对所述闪存模块的存取;以及一编码器;其中所述微处理器将第n笔数据写入至所述闪存模块中的多个闪存芯片,且所述编码器对所述第n笔数据进行编码以产生一第n组错误更正码,其中所述第n组错误更正码是用来对写入至所述多个闪存芯片中的所述第n笔数据进行错误更正,其中n为一正整数;当所述微处理器判断所述第n笔资料已成功写入至所述多个闪存芯片中之后,保留所述第n组错误更正码;所述微处理器依序将第(n+1)~(n+m)笔资料分别写入至所述闪存模块中的所述多个闪存芯片,且所述编码器分别对所述第(n+1)~(n+m)笔数据进行编码以产生第(n+1)~(n+m)组错误更正码,其中所述第(n+1)~(n+m)组错误更正码是分别用来对写入至所述多个闪存芯片中的所述第(n+1)~(n+m)笔数据进行错误更正,其中m为一正整数;以及当所述微处理器判断所述第(n+m)笔资料已成功写入至所述多个闪存芯片中时,才删除所述第n~(n+m)组错误更正码。

本发明的另一实施例公开了一种记忆装置,包括:一闪存模块;以及一闪存控制器,用来存取所述闪存;其中所述闪存控制器对第n笔数据进行编码以产生一第n组错误更正码,其中所述第n组错误更正码是用来对所述第n笔数据进行错误更正,其中n为一正整数;将所述第n笔资料写入至所述闪存模块中;将所述第n组错误更正码写入至所述闪存模块中;所述第n笔数据成功写入至所述闪存模块后,删除所述闪存模块中的所述第n组错误更正码中至少一部分,但在所述闪存模块中保留所述第n笔数据。

本发明的另一实施例公开了一种记忆装置,包括:一闪存模块;以及一闪存控制器,用来存取所述闪存;其中所述闪存控制器将第n笔数据写入至所述闪存模块中的多个闪存芯片,且对所述第n笔数据进行编码以产生一第n组错误更正码,其中所述第n组错误更正码是用来对写入至所述多个闪存芯片中的所述第n笔数据进行错误更正,其中n为一正整数;当所述闪存控制器判断所述第n笔数据已成功写入至所述多个闪存芯片中之后,保留所述第n组错误更正码;所述闪存控制器依序将第(n+1)~(n+m)笔资料分别写入至所述闪存模块中的所述多个闪存芯片,并分别对所述第(n+1)~(n+m)笔数据进行编码以产生第(n+1)~(n+m)组错误更正码,其中所述第(n+1)~(n+m)组错误更正码是分别用来对写入至所述多个闪存芯片中的所述第(n+1)~(n+m)笔数据进行错误更正,其中m为一正整数;以及当判断所述第(n+m)笔数据已成功写入至所述多个闪存芯片中时,所述闪存控制器才删除所述第n~(n+m)组错误更正码。

本发明的另一实施例公开了一种存取一闪存模块的方法,所述方法包括:依序将第n~(n+k)笔资料分别写入至所述闪存模块中的多个闪存芯片,并分别对所述第n~(n+k)笔数据进行编码以产生第n~(n+k)组错误更正码,其中所述第n~(n+k)组错误更正码是分别用来对写入至所述多个闪存芯片中的所述第n~(n+k)笔数据进行错误更正,其中n、k为一正整数;以及将第(n+k+1)笔数据写入至所述闪存模块中的所述多个闪存芯片,并使用所述第n~(n+k)组错误更正码中至少其一来与所述第(n+k+1)笔数据一并进行编码,以产生第(n+k+1)组错误更正码。

本发明的另一实施例公开了一种闪存控制器,其中所述闪存控制器是用来存取一闪存模块,且所述闪存控制器包括:一存储器,用来储存一程序代码;一微处理器,用来执行所述程序代码以控制对所述闪存模块的存取;以及一编码器;其中所述微处理器依序将第n~(n+k)笔资料分别写入至所述闪存模块中的多个闪存芯片,且所述编码器分别对所述第n~(n+k)笔数据进行编码以产生第n~(n+k)组错误更正码,其中所述第n~(n+k)组错误更正码是分别用来对写入至所述多个闪存芯片中的所述第n~(n+k)笔数据进行错误更正,且n、k为一正整数;以及所述微处理器将第(n+k+1)笔资料写入至所述闪存模块中的所述多个闪存芯片,且所述编码器使用所述第n~(n+k)组错误更正码中至少其一来与所述第(n+k+1)笔数据一并进行编码,以产生第(n+k+1)组错误更正码。

本发明的另一实施例公开了一种记忆装置,包括:一闪存模块;以及一闪存控制器,用来存取所述闪存;其中所述闪存控制器依序将第n~(n+k)笔数据分别写入至所述闪存模块中的多个闪存芯片,并分别对所述第n~(n+k)笔数据进行编码以产生第n~(n+k)组错误更正码,其中所述第n~(n+k)组错误更正码是分别用来对写入至所述多个闪存芯片中的所述第n~(n+k)笔数据进行错误更正,且n、k为一正整数;以及所述闪存控制器将第(n+k+1)笔数据写入至所述闪存模块中的所述多个闪存芯片,且使用所述第n~(n+k)组错误更正码中至少其一来与所述第(n+k+1)笔数据一并进行编码,以产生第(n+k+1)组错误更正码。

附图说明

图1为依据本发明一实施例的一种记忆装置的示意图。

图2为一立体nand型闪存的范例示意图。

图3为浮闸晶体管结构的概念示意图。

图4为一区块中多个字线组的示意图。

图5为闪存控制器将数据写入到闪存模块的示意图。

图6为依据本发明一第一实施例的闪存控制器将数据写入到超级区块的示意图。

图7为依据本发明一实施例的存取闪存模块的方法的流程图。

图8为依据本发明一第二实施例的闪存控制器将数据写入到超级区块的示意图。

图9为依据本发明一实施例的存取闪存模块的方法的流程图。

图10为依据本发明一第三实施例的闪存控制器将数据写入到超级区块的示意图。

图11为依据本发明一实施例的存取闪存模块的方法的流程图。

其中,附图标记说明如下:

100记忆装置

110闪存控制器

112微处理器

112c程序代码

112m只读存储器

114控制逻辑

116缓冲存储器

118接口逻辑

120闪存模块

132第一编译码器

134第二编译码器

202浮闸晶体管

510、520通道

512、514、516、518闪存芯片

530超级区块

700~708、900~904、1100~1104步骤

b1~b3位线

wl0~wl47字线

wl_g0~wl_g47字线组

具体实施方式

请参考图1,图1为依据本发明一实施例的一种记忆装置100的示意图,其中本实施例的记忆装置100尤其是可携式记忆装置(例如:符合sd/mmc、cf、ms、xd标准的记忆卡)。记忆装置100包括一闪存(flashmemory)模块120以及一闪存控制器110,且闪存控制器110用来存取闪存模块120。依据本实施例,闪存控制器110包括一微处理器112、一只读存储器(readonlymemory,rom)112m、一控制逻辑114、一缓冲存储器116、与一接口逻辑118。只读存储器是用来储存一程序代码112c,而微处理器112则用来执行程序代码112c以控制对闪存模块120的存取(access)。

于典型状况下,闪存模块120包括多个区块(block),而所述控制器(例如:通过微处理器112执行程序代码112c的闪存控制器110)对闪存模块120进行复制、抹除、合并数据等运作是以区块为单位来进行复制、抹除、合并数据。另外,一区块可记录特定数量的数据页(page),其中所述控制器(例如:通过微处理器112执行程序代码112c的存储器控制器110)对闪存模块120进行写入数据的运作是以数据页为单位来进行写入。

实作上,通过微处理器112执行程序代码112c的闪存控制器110可利用其本身内部的组件来进行诸多控制运作,例如:利用控制逻辑114来控制闪存模块120的存取运作(尤其是对至少一区块或至少一数据页的存取运作)、利用缓冲存储器116进行所需的缓冲处理、以及利用接口逻辑118来与一主装置(hostdevice)沟通。

另一方面,在本实施例中,控制逻辑114包括了一第一编译码器(codec)132以及一第二编译码器134,其中第一编译码器132是用来对写入到闪存模块120的一区块中的数据进行编码,以产生对应的错误更正码(errorcorrectioncode),其中第一编译码器132所产生的错误更正码仅是根据写入到一资料页中一区段(sector)的内容所产生的,且所产生的错误更正码会连同所述区段的数据内容一并写入到所述数据页中。另外,第二编译码器134为一容错式磁盘阵列(raid)编译码器,其是用来对写入至多个闪存芯片中的数据进行编码,以产生对应的错误更正码,其操作将于以下内容中详述。

在本实施例中,闪存模块120是一立体nand型闪存(3dnand-typeflash)模块,请参考图2,其为一立体nand型闪存的范例示意图,如图2所示,立体nand型闪存包括了多个浮闸晶体管202,其通过多条位线(图示仅绘示了bl1~bl3)及多条字线(例如图示的wl1~wl3)来构成立体nand型闪存架构。在图2中,以最上面的一个平面为例,字线wl0上的所有浮闸晶体管构成了至少一数据页,字线wl1上的所有浮闸晶体管构成了另至少一数据页,而字线wl2的所有浮闸晶体管构成了再另至少一资料页…以此类堆。此外,根据闪存写入方式的不同,字线wl0与数据页(逻辑数据页)之间的定义也会有所不同,详细来说,当使用单层式储存(single-levelcell,slc)的方式写入时,字线wl0上的所有浮闸晶体管仅对应到单一逻辑数据页;当使用多层式储存(multiple-levelcell,mlc)的方式写入时,字线wl0上的所有浮闸晶体管仅对应到两个逻辑数据页;当使用三层式储存(triple-levelcell,tlc)的方式写入时,字线wl0上的所有浮闸晶体管仅对应到三个逻辑数据页;以及当使用四层式储存(quad-levelcell,qlc)的方式写入时,字线wl0上的所有浮闸晶体管仅对应到四个逻辑数据页。由于本技术领域中具有通常知识者应能了解立体nand型闪存的结构以及字线及数据页之间的关系,故相关的细节在此不予赘述。另外,在闪存控制器110的操作中,“数据页”为一最小写入单位,且“区块”为一最小抹除单位。

请参考图3,其为浮闸晶体管202结构的概念示意图,如图3所示,每一个浮闸晶体管的闸极及浮闸是围绕在源极与汲极周围(gateallaround),以增强通道感应能力。

需注意的是,图2、3所示的仅为立体nand型闪存与浮闸晶体管202的范例,而并非是作为本发明的限制,本技术领域中具有通常知识者应能了解立体nand型闪存尚有其他种型式,例如部分的字线可彼此连接..等等,且浮闸晶体管202的设计也能有些许的改变。

如现有技术中所述,在某些立体nand型闪存中,会将多条字线定义为一字线组,而所述字线组会共同具有部分的控制电路,进而导致当数据写入到所述字线组的一条字在线的浮闸晶体管发生失败时(写入失败),会连带导致所述字线组的其他字在线的浮闸晶体管的数据发生错误。举例来说,請参考图4,其为一区块中多个字线组的示意图,在图4中是假设所述区块包括了192条字在线的所有浮闸晶体管,且一个字线组包括了4条字线,因此,在图4中的区块是包括了48个字线组wl_g0~wl_g47;另外,在图4中所述区块为三层式储存(tlc)区块,也就是说,每一条字在线的浮闸晶体管可用来储存三个数据页的数据,如图4所示,以字线组wl_g0为例,其包括的字线wl0上的浮闸晶体管可用来储存低数据页p0l、中间数据页p0m及高数据页p0u,字线wl1上的浮闸晶体管可用来储存低数据页p1l、中间数据页p1m及高数据页p1u,字线wl2上的浮闸晶体管可用来储存低数据页p2l、中间数据页p2m及高数据页p2u,以及字线wl3上的浮闸晶体管可用来储存低数据页p3l、中间数据页p3m及高数据页p3u。当控制器中将数据写入到字线组wl_g0的数据页中时,是循序将数据写入到字线wl0、wl1、wl2、wl3中的浮闸晶体管,而假设字线wl0、wl1上的数据都成功写入正确,但是当数据写入字线wl2时发生写入错误,则会连带使得字线wl0、wl1上原本写入成功的数据也发生错误,因此,在以下的实施例中将叙述如何修正此一错误的方法。

先参考图5,图5为闪存控制器110将数据写入到闪存模块120的示意图。如图5所示,闪存模块120包括了多个通道(在本实施例中,是以两个通道510、520为例),且每一个通道在闪存控制器110中有各自的串行传输器(sequencer)且均包括了多个闪存芯片,而在本实施例中通道510包括了闪存芯片512、514,且通道520包括了闪存芯片522、524。另外,每一个闪存芯片512、514、522、524中的一个区块会被组态为一个超级区块(superblock)530,而闪存控制器110会将数据以超级区块530为单位来进行写入。

请同时参考图5、6,其中图6为依据本发明一第一实施例的闪存控制器110将数据写入到超级区块530的示意图,其中在以下的叙述中,每一笔数据是写入到闪存芯片512、514、522、524的一个数据页,也就是说,第1笔数据会被写入到每一个闪存芯片512、514、522、524中的第一个资料页p0,第2笔资料会被写入到每一个闪存芯片512、514、522、524中的第二个资料页p1,…,第n笔资料会被写入到每一个闪存芯片512、514、522、524中的第n个资料页p(n-1)。参考图6,当闪存控制器110需要将第1笔数据写入至超级区块530中时,首先,闪存控制器110中的第二编译码器134会先对第1笔数据进行编码以产生第1组错误更正码s0,其中第二编译码器134可以采用里德-所罗门(reedsolomon,rs)编码方式或是互斥或(exclusive-or,xor)运算来对写入到每一个闪存芯片512、514、522、524中的第一个数据页p0的数据进行编码,以产生第1组错误更正码s0;接着,第一编译码器132分别对第1笔数据进行编码以产生对应的错误更正码,并将第一笔数据与第一编译码器132所产生的错误更正码一并写入到每一个闪存芯片512、514、522、524中的第一个资料页p0中,详细来说,第一编译码器132对第1笔数据中第一部分数据进行编码以产生错误更正码,并将第一部分数据与其错误更正码写入到闪存芯片512的第一个数据页p0;第一编译码器132对第1笔数据中第二部分数据进行编码以产生错误更正码,并将第二部分数据与其错误更正码写入到闪存芯片514的第一个数据页p0;第一编译码器132对第1笔数据中第三部分数据进行编码以产生错误更正码,并将第三部分数据与其错误更正码写入到闪存芯片522的第一个数据页p0;以及第一编译码器132对第1笔数据中第四部分数据(最后一部分数据)进行编码以产生错误更正码,并将第四部分数据与其错误更正码写入到闪存芯片524的第一个数据页p0。

第二编译码器134所产生的第1组错误更正码s0是用来当闪存芯片512、514、522或524中的第一个数据页p0发生数据错误时进行错误更正,举例来说,假设当闪存芯片512中的第一个数据页p0的数据发生无法利用本身的数据进行更正的错误时,第二编译码器134可以读取闪存芯片512、514、522、524中所有第一个数据页p0的数据,再加上第1组错误更正码s0,来进行错误更正。

另外,在第1笔数据写入的过程中,闪存控制器110会对写入的数据进行读取检查的操作,以确定数据是否成功写入,而在闪存控制器110判断第1笔数据已经成功写入到闪存芯片512、514、522、524中第一个数据页p0后,闪存控制器110保留第1组错误更正码s0。其中,闪存控制器110可以先暂时将第1组错误更正码s0储存在本身的存储器中,或是将第1组错误更正码s0通过第一编译码器132进行编码后存入到闪存芯片512、514、522、524中的一特定区块中,且所述特定区块不属于超级区块530中的资料页。

接着,当闪存控制器110需要将第2笔数据写入至超级区块530中时,首先,闪存控制器110中的第二编译码器134会先对第2笔数据进行编码以产生第2组错误更正码s1,其中第二编译码器134可以采用里德-所罗门编码方式或是互斥或运算来对写入到每一个闪存芯片512、514、522、524中的第二个数据页p1的数据进行编码,以产生第2组错误更正码s1;接着,第一编译码器132分别对第2笔数据进行编码以产生对应的错误更正码,并将第二笔数据与第一编译码器132所产生的错误更正码一并写入到每一个闪存芯片512、514、522、524中的第二个资料页p1中。另外,在第2笔数据写入的过程中,闪存控制器110会对写入的数据进行读取检查的操作,以确定数据是否成功写入,而在闪存控制器110判断第2笔数据已经成功写入到闪存芯片512、514、522、524中第二个数据页p1后,闪存控制器110保留第2组错误更正码s1。其中,闪存控制器110可以先暂时将第2组错误更正码s1储存在本身的存储器中,或是将第2组错误更正码s1存入到闪存芯片512、514、522、524中的所述特定区块中,且所述特定区块不属于超级区块530。

当第2笔数据写入的过程中也发生写入错误的情形,则由于p1、p0是属于同一个字线组wl_g0,因此,闪存芯片512、514、522、524中的数据页p0也有可能发生损坏。举例来说,假设闪存芯片514的数据页p1在数据写入的过程中发生错误,则现有以成功写入的闪存芯片514的数据页p0也会发生错误,因此,现有所保留下来的第1组错误更正码s0便可以在之后用来更正数据页p0的错误。

接着,当闪存控制器110需要将第3笔数据写入至超级区块530中时,首先,闪存控制器110中的第二编译码器134会先对第3笔数据进行编码以产生第3组错误更正码s2,其中第二编译码器134可以采用里德-所罗门编码方式或是互斥或运算来对写入到每一个闪存芯片512、514、522、524中的第三个数据页p2的数据进行编码,以产生第3组错误更正码s2;接着,第一编译码器132分别对第3笔数据进行编码以产生对应的错误更正码,并将第三笔数据与第一编译码器132所产生的错误更正码一并写入到每一个闪存芯片512、514、522、524中的第三个资料页p2中。另外,在第3笔数据写入的过程中,闪存控制器110会对写入的数据进行读取检查的操作,以确定数据是否成功写入,而在闪存控制器110判断第3笔数据已经成功写入到闪存芯片512、514、522、524中第三个数据页p2后,闪存控制器110保留第3组错误更正码s2。其中,闪存控制器110可以先暂时将第3组错误更正码s2储存在本身的存储器中,或是将第3组错误更正码s2存入到闪存芯片512、514、522、524中的所述特定区块中,且所述特定区块不属于超级区块530。

接着,当闪存控制器110需要将第4笔数据写入至超级区块530中时,首先,闪存控制器110中的第二编译码器134会先对第4笔数据进行编码以产生第4组错误更正码s3,其中第二编译码器134可以采用里德-所罗门编码方式或是互斥或运算来对写入到每一个闪存芯片512、514、522、524中的第四个数据页p3的数据进行编码,以产生第4组错误更正码s3;接着,第一编译码器132分别对第4笔数据进行编码以产生对应的错误更正码,并将第四笔数据与第一编译码器132所产生的错误更正码一并写入到每一个闪存芯片512、514、522、524中的第四个资料页p3中。另外,在第4笔数据写入的过程中,闪存控制器110会对写入的数据进行读取检查的操作,以确定数据是否成功写入,而在闪存控制器110判断第4笔数据已经成功写入到闪存芯片512、514、522、524中第四个数据页p2后,闪存控制器110保留第4组错误更正码s3。其中,闪存控制器110可以先暂时将第4组错误更正码s3储存在本身的存储器中,或是将第4组错误更正码s3存入到闪存芯片512、514、522、524中的所述特定区块中,且所述特定区块不属于超级区块530。

同样地,当第3、4笔数据写入的过程中也发生写入错误的情形,则由于p0、p1、p3、p4是属于同一个字线组wl_g0,因此,闪存芯片512、514、522、524中的数据页p0、p1也有可能发生损坏。举例来说,假设闪存芯片524的数据页p3在数据写入的过程中发生错误,则现有以成功写入的闪存芯片524的数据页p0、p1、p2也会发生错误,因此,现有所保留下来的第1、2、3组错误更正码s0、s1、s2便可以在之后分别用来更正数据页p0、p1、p2的错误。

在字线组wl_g0上的页面都已经写完数据之后,现有所保留的错误更正码s0、s1、s2、s3若是储存在闪存控制器110中的存储器时,则可以将的搬移到所述特定区块中,以减少闪存控制器110中存储器的容量需求。

接着,类似以上步骤,闪存控制器110将接下来的第5~192笔数据写入至闪存芯片512、514、522、524中,并对所述第5~192笔数据进行编码以分别产生第5~192组错误更正码s4~s191。

当超级区块530在数据写入的过程中发生错误时,由于闪存无法直接对已写入的数据做修正,故需要将已写入的数据读出之后再使用储存在所述特定区块中的错误更正码进行更正,并将更正后的数据连同其他不需更正的数据一并写入到另一个区块中。

由于错误更正码s0~s191需要很大的容量且也占据了所述特定区块的空间,因此,在确定超级区块530中的所有数据都已经成功写入之后,所述特定区块中所储存的错误更正码s0~s191便可以删除,也就是说,闪存控制器110会抹除所述特定区块以删除错误更正码s0~s191(在对应的数据第一次被读取之前)。需注意的是,上述“删除”错误更正码s0~s191并不代表要立刻将所述特定区块立刻抹除,而是可以将所述特定区块标示为“无效化”,等到后续适合的时间(例如,闪存控制器110空闲的时候)再将所述特定区块整个抹除。

需注意的是,图6所绘示的p0~p191所代表的可能不只是一个数据页,而可能是1~4个数据页。详细来说,当是单层式储存(slc)的区块时,则一个字在线的浮闸晶体管则构成一个数据页(例如字线wl0仅包括一个数据页p0);当是多层式储存(mlc)的区块时,则一个字在线的浮闸晶体管则构成二个数据页(例如图标的p0包括两个数据页);当是三层式储存(tlc)的区块时,则一个字在线的浮闸晶体管则构成三个数据页(例如图标的p0包括图所示的三个数据页p0l、p0m、p0u);以及当是四层式储存(qlc)的区块时,则一个字在线的浮闸晶体管则构成四个数据页。

在本实施例中,超级区块530可以是多层式储存区块、三层式储存区块或是四层式储存区块,然而,由于用来储存错误更正码s0~s191的所述特定区块会频繁地被写入与抹除,因此,为了增加所述特定区块的寿命,所述特定区块会采用单层式储存的写入方式。另一方面,需注意的是,当超级区块530是采用三层式储存方式时,则由于每一个字线会对应到三个数据页,因此错误更正码s0~s191实际上会需要由三个特定区块(单层式储存区块)来储存。

需注意的是,在以上的实施例中,是假设超级区块530是一空白区块,且闪存控制器110是将数据由每一个闪存芯片的第一个数据页开始写起,然而,本发明并不以此为限,在其他实施例中,超级区块530可以已经存有其他资料,而闪存控制器110将数据循序存进超级区块530的剩下数据页中,并产生对应错误更正码(s0~sn),这些设计上的变化均应隶属于本发明的范畴。

另一方面,在以上的实施例中,数据会先经过第二编译码器134的编码之后,才会再进行第一编译码器132的编码以写入到闪存模块120之中,然而,在其他实施例中,第一编译码器132与第二编译码器134的执行顺序亦可相反,以达到相同的结果。

请参考图7,其为依据本发明一实施例的存取闪存模块120的方法的流程图,参考图1~7及以上所公开的内容,流程叙述如下:

步骤700:流程开始。

步骤702:将第n笔数据写入至所述闪存模块中的多个闪存芯片,并对所述第n笔数据进行编码以产生一第n组错误更正码,其中所述第n组错误更正码是用来对写入至所述多个闪存芯片中的所述第n笔数据进行错误更正;

步骤704:当判断所述第n笔数据已成功写入至所述多个闪存芯片中之后,保留所述第n组错误更正码;

步骤706:依序将第(n+1)~(n+m)笔资料分别写入至所述闪存模块中的所述多个闪存芯片,并分别对所述第(n+1)~(n+m)笔数据进行编码以产生第(n+1)~(n+m)组错误更正码,其中所述第(n+1)~(n+m)组错误更正码是分别用来对写入至所述多个闪存芯片中的所述第(n+1)~(n+m)笔数据进行错误更正;以及

步骤708:当判断所述第(n+m)笔资料已成功写入至所述多个闪存芯片中时,才删除所述第n~(n+m)组错误更正码。

通过以上所公开的实施例,可以确实地更正立体nand型闪存在资料写入时发生的错误,且由于错误更正码s0~s191在确定超级区块530中的数据都完全成功写入之后便可以抹除,因此便也可以节省存储器的空间。

另外,在某些情况下,已经成功写入的数据可能在后续的读取中会发生无法读取或是读取错误的情形,例如闪存512、514、522、524中可能有部分的字线发生断路(open)的情形,因而造成无法读取数据的情形。此外,如现有所述,一个字线组中只要有一条字线发生断路,便会造成整个字线组的数据都会发生错误。因此,本发明另提出以下的实施例来避免后续因为字线断路而造成数据读取错误的情形。

为了方便叙述,以下实施例一样采用图4~5的例子,也就是说,闪存控制器110要将数据写入到超级区块530中。参考图8,其为依据本发明一第二实施例的闪存控制器110将数据写入到超级区块530的示意图,为了方便以下实施例的说明,在以下的叙述中,一笔资料指的是写入到一个字线组的数据,而非是图6的实施例所述的一个字在线的数据,然而,此定义并非是作为本发明的限制。当闪存控制器110需要将第1笔数据写入至超级区块530中时,类似图6的实施例所述,闪存控制器110中的第二编译码器134会对第1笔数据进行编码以产生第1组错误更正码s0~s3,且将第1笔数据分别写入到每一个闪存芯片512、514、522、524中的数据页p0~p3中,并将错误更正码s0~s3存入到闪存芯片512、514、522或524中的一特定区块中,且所述特定区块不属于超级区块530。

接着,当闪存控制器110需要将第2笔数据(包括4个数据页的数据)写入至超级区块530中时,首先,闪存控制器110中的第二编译码器134会先对要写入到闪存芯片512、514、522、524的数据页p4的数据以及错误更正码s0进行编码以产生错误更正码s4,其中第二编译码器134可以采用里德-所罗门编码方式或是互斥或运算来对写入到每一个闪存芯片512、514、522、524中的第五个数据页p4的数据以及错误更正码s0进行编码,以产生错误更正码s4;接着,第一编译码器132分别对要写入到闪存芯片512、514、522、524的数据页p4的数据进行编码以产生对应的错误更正码,并将此数据与第一编译码器132所产生的错误更正码一并写入到每一个闪存芯片512、514、522、524中的第五个资料页p4中。其中,闪存控制器110可以先暂时将错误更正码s4储存在本身的存储器中,或是将错误更正码s4存入到闪存芯片512、514、522、524中的所述特定区块中,且所述特定区块不属于超级区块530。如上所述,与错误更正码s0~s3比较不同的是,错误更正码s4的产生过程中有使用到错误更正码s0。

接着,存储器控制器110需要将第2笔数据中要写入到闪存芯片512、514、522、524的数据页p5~p7的资料写入至超级区块530中,并同时产生了错误更正码s5~s7,其中错误更正码s5~s7的产生过程中有分别使用到错误更正码s1~s3。

再接着,存储器控制器110需要将第3笔数据写入至超级区块530中,并同时产生了第3组错误更正码s8~s11,其中类似第2组错误更正码s4~s7,第3组错误更正码s8~s11的产生过程中有分别使用到第2组错误更正码s4~s7。

类似以上步骤,闪存控制器110将接下来的第4~48笔数据写入至闪存芯片512、514、522、524中,并对所述第4~48笔数据进行编码以分别产生第4~48组错误更正码s12~s191。

当超级区块530在数据写入的过程中发生错误时,由于闪存无法直接对已写入的数据做修正,故需要将已写入的数据读出之后再使用储存在所述特定区块中的错误更正码进行更正,并将更正后的数据连同其他不需更正的数据一并写入到另一个区块中。

需注意的是,由于上述每一组错误更正码都是参考前一组错误更正码的内容所产生的,因此,第48组错误更正码s188~s191便带有现有每一组错误更正码的信息,也就是说,每一组错误更正码的信息都可由第48组错误更正码所得到。举例来说,错误更正码s184可以由第二编译码器134根据闪存芯片512、514、522、524的数据页p188的内容以及错误更正码s188而得到,错误更正码s180可以由第二编译码器134根据闪存芯片512、514、522、524的数据页p184的内容以及错误更正码s184而得到,错误更正码s176可以由第二编译码器134根据闪存芯片512、514、522、524的数据页p180的内容以及错误更正码s180而得到…如此不断计算最后便可以得到错误更正码s0。因此,为了节省存储器空间,在确定超级区块530中的所有数据都已经成功写入之后,闪存控制器110仅需要将错误更正码s188~s191复制到另外一个区块中,并可以将所述特定区块整个抹除以节省存储器空间。

如上所述,由于闪存控制器110有保留错误更正码s188~s191,且错误更正码s188~s191可以用来获得错误更正码s0~s187,因此,即使后续闪存芯片512、514、522、524有一个闪存芯片发生字线发生断路(open)的情形,也可以通过相对应的错误更正码s0~s191来进行更正,而不会发生数据无法修复的情形。

在本实施例中,超级区块530可以是多层式储存(mlc)区块、三层式储存(tlc)区块或是四层式储存(qlc)区块,然而,由于用来储存错误更正码s0~s191的所述特定区块会频繁地被写入与抹除,因此,为了增加所述特定区块的寿命,所述特定区块会采用单层式储存(slc)的写入方式。另一方面,需注意的是,当超级区块530是采用三层式储存方式时,则由于每一个字线会对应到三个数据页,因此错误更正码s0~s191实际上会需要由三个特定区块(单层式储存区块)来储存。此外,在闪存控制器110将错误更正码s188~191复制的过程中,可以错误更正码s188~s191复制到一个三层式储存区块,以进一步地节省存储器空间。

需注意的是,图8所绘示的p0~p191所代表的可能不只是一个数据页,而可能是1~4个数据页。详细来说,当是单层式储存的区块时,则一个字在线的浮闸晶体管则构成一个数据页(例如字线wl0仅包括一个数据页p0);当是多层式储存的区块时,则一个字在线的浮闸晶体管则构成二个数据页(例如图标的p0包括两个数据页);当是三层式储存的区块时,则一个字在线的浮闸晶体管则构成三个数据页(例如图标的p0包括图所示的三个数据页p0l、p0m、p0u);以及当是四层式储存的区块时,则一个字在线的浮闸晶体管则构成四个数据页。

请参考图9,其为依据本发明一实施例的存取闪存模块120的方法的流程图,参考图8、9及以上所公开的内容,流程叙述如下:

步骤900:流程开始。

步骤902:依序将第n~(n+k)笔资料分别写入至所述闪存模块中的多个闪存芯片,并分别对所述第n~(n+k)笔数据进行编码以产生第n~(n+k)组错误更正码,其中所述第n~(n+k)组错误更正码是分别用来对写入至所述多个闪存芯片中的所述第n~(n+k)笔数据进行错误更正;以及

步骤904:将第(n+k+1)笔资料写入至所述闪存模块中的所述多个闪存芯片,并使用所述第(n+k)组错误更正码来与所述第(n+k+1)笔数据一并进行编码,以产生第(n+k+1)组错误更正码,其中k是1。

以上8~9圖的实施例可以避免闪存芯片512、514、522、524有一个闪存芯片发生字线发生断路而造成数据无法修复的情形,然而,若是两个字线组中的两条相邻的字线发生短路(short),例如图8中闪存芯片512的字线wl3与wl4发生短路,则会造成闪存芯片512中的两个字线组wl_g0与wl_g1上的数据均无法成功读取,因此,以下提出一实施例以克服两个字线组中的两条相邻的字线发生短路(short)的情形。

为了方便叙述,以下实施例一样采用图4~5的例子,也就是说,闪存控制器110要将数据写入到超级区块530中。参考图10,其为依据本发明一第三实施例的闪存控制器110将数据写入到超级区块530的示意图,为了方便以下实施例的说明,在以下的叙述中,一笔资料指的是写入到一个字线组的数据,而非是图6的实施例所述的一个字在线的数据,然而,此定义并非是作为本发明的限制。当闪存控制器110需要将第1笔数据写入至超级区块530中时,类似图6的实施例所述,闪存控制器110中的第二编译码器134会对第1笔数据进行编码以产生第1组错误更正码s0~s3,且将第1笔数据分别写入到每一个闪存芯片512、514、522、524中的数据页p0~p3中,并将错误更正码s0~s3存入到闪存芯片512、514、522或524中的一特定区块中,且所述特定区块不属于超级区块530。接着,第二编译码器134会对第2笔数据进行编码以产生第2组错误更正码s0~s3,且将第2笔数据分别写入到每一个闪存芯片512、514、522、524中的数据页p4~p7中,并将错误更正码s4~s7存入到所述特定区块中。

接着,当闪存控制器110需要将第3笔数据(包括4个数据页的数据)写入至超级区块530中时,首先,闪存控制器110中的第二编译码器134会先对要写入到闪存芯片512、514、522、524的数据页p8的数据以及错误更正码s0进行编码以产生错误更正码s8,其中第二编译码器134可以采用里德-所罗门编码方式或是互斥或运算来对写入到每一个闪存芯片512、514、522、524中的第九个数据页p8的数据以及错误更正码s0进行编码,以产生错误更正码s8;接着,第一编译码器132分别对要写入到闪存芯片512、514、522、524的数据页p8的数据进行编码以产生对应的错误更正码,并将此数据与第一编译码器132所产生的错误更正码一并写入到每一个闪存芯片512、514、522、524中的第九个资料页p8中。其中,闪存控制器110可以先暂时将错误更正码s8储存在本身的存储器中,或是将错误更正码s8存入到闪存芯片512、514、522、524中的所述特定区块中,且所述特定区块不属于超级区块530。如上所述,与错误更正码s0~s7比较不同的是,错误更正码s8的产生过程中有使用到错误更正码s0。

接着,存储器控制器110需要将第3笔数据中要写入到闪存芯片512、514、522、524的数据页p9~p11的资料写入至超级区块530中,并同时产生了错误更正码s9~s11,其中错误更正码s9~s11的产生过程中有分别使用到错误更正码s1~s3。

再接着,存储器控制器110需要将第4笔数据写入至超级区块530中,并同时产生了第4组错误更正码s12~s15,其中类似第3组错误更正码s8~s11,第4组错误更正码s12~s15的产生过程中有分别使用到第2组错误更正码s4~s7。

类似以上步骤,闪存控制器110将接下来的第5~48笔数据写入至闪存芯片512、514、522、524中,并对所述第5~48笔数据进行编码以分别产生第5~48组错误更正码s16~s191。

当超级区块530在数据写入的过程中发生错误时,由于闪存无法直接对已写入的数据做修正,故需要将已写入的数据读出之后再使用储存在所述特定区块中的错误更正码进行更正,并将更正后的数据连同其他不需更正的数据一并写入到另一个区块中。

需注意的是,由于上述每一组错误更正码都是参考前前组错误更正码的内容所产生的,因此,第47、48组错误更正码s188~s191便带有现有每一组错误更正码的信息,也就是说,每一组错误更正码的信息都可由第47组或第48组错误更正码所得到。举例来说,错误更正码s180可以由第二编译码器134根据闪存芯片512、514、522、524的数据页p188的内容以及错误更正码s188而得到,错误更正码s172可以由第二编译码器134根据闪存芯片512、514、522、524的数据页p180的内容以及错误更正码s180而得到,错误更正码s164可以由第二编译码器134根据闪存芯片512、514、522、524的数据页p172的内容以及错误更正码s172而得到…如此不断计算最后便可以得到错误更正码s0。因此,为了节省存储器空间,在确定超级区块530中的所有数据都已经成功写入之后,闪存控制器110仅需要将第47、48组错误更正码s184~s191复制到另外一个区块中,并可以将所述特定区块整个抹除以节省存储器空间。

如上所述,由于闪存控制器110有保留错误更正码s184~s191,且错误更正码s184~s191可以用来获得错误更正码s0~s183,因此,即使后续闪存芯片512、514、522、524有一个闪存芯片发生字线发生短路的情形,也可以通过相对应的错误更正码s0~191来进行更正,而不会发生数据无法修复的情形。

在本实施例中,超级区块530可以是多层式储存(mlc)区块、三层式储存(tlc)区块或是四层式储存(qlc)区块,然而,由于用来储存错误更正码s0~s191的所述特定区块会频繁地被写入与抹除,因此,为了增加所述特定区块的寿命,所述特定区块会采用单层式储存(slc)的写入方式。另一方面,需注意的是,当超级区块530是采用三层式储存方式时,则由于每一个字线会对应到三个数据页,因此错误更正码s0~s191实际上会需要由三个特定区块(单层式储存区块)来储存。此外,在闪存控制器110将错误更正码s184~s191复制的过程中,可以错误更正码s184~s191复制到一个三层式储存区块,以进一步地节省存储器空间。

需注意的是,图10所绘示的p0~p191所代表的可能不只是一个数据页,而可能是1~4个数据页。详细来说,当是单层式储存的区块时,则一个字在线的浮闸晶体管则构成一个数据页(例如字线wl0仅包括一个数据页p0);当是多层式储存的区块时,则一个字在线的浮闸晶体管则构成二个数据页(例如图标的p0包括两个数据页);当是三层式储存的区块时,则一个字在线的浮闸晶体管则构成三个数据页(例如图标的p0包括图所示的三个数据页p0l、p0m、p0u);以及当是四层式储存的区块时,则一个字在线的浮闸晶体管则构成四个数据页。

请参考图11,其为依据本发明一实施例的存取闪存模块120的方法的流程图,参考图10、11及以上所公开的内容,流程叙述如下:

步骤1100:流程开始。

步骤1102:依序将第n~(n+k)笔资料分别写入至所述闪存模块中的多个闪存芯片,并分别对所述第n~(n+k)笔数据进行编码以产生第n~(n+k)组错误更正码,其中所述第n~(n+k)组错误更正码是分别用来对写入至所述多个闪存芯片中的所述第n~(n+k)笔数据进行错误更正;以及

步骤1104:将第(n+k+1)笔资料写入至所述闪存模块中的所述多个闪存芯片,并使用所述第n组错误更正码来与所述第(n+k+1)笔数据一并进行编码,以产生第(n+k+1)组错误更正码,其中k是1。

需注意的是,在以上的实施例说明中,闪存模块120为一立体nand型闪存模块,然而,在其他实施例中,闪存模块120亦可为平面nand型闪存模块,由于本领域技术人员应可轻易了解如何将上述实施例应用在平面nand型闪存模块中,故相关细节不再赘述。

简要归纳本发明,在本发明的存取一闪存模块的方法中,是使用类似容错式磁盘阵列的错误更正方式来产生错误更正码,以解决立体nand型闪存中写入错误的情形,且上述错误更正码可以暂时地储存在闪存中,并等到区块数据都成功写入之后再删除,因此可以有效地节省闪存控制器中的存储器需求,且也不会浪费闪存模块中的空间。此外,上述产生的错误更正码可以仅保留其中一部分来更正后续因为字线断路/短路时所发生的错误,因此除了可以更进一步确保资料的安全性之外,也不会太浪费闪存模块中的储存空间。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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