本发明涉及闪存,尤其涉及一种管理闪存模块的方法及相关的闪存控制器。
背景技术:
在采用立体nand型闪存(3dnand-typeflash)的架构中,当闪存控制器需要将数据写入至闪存模块中的多层式存储(multiple-levelcell,mlc)区块或是三层式存储(triple-levelcell,tlc)区块时,一次写入的数据量必须要很大,例如64千位组(kb)或是128kb,然而,若是闪存控制器需要写入的数据具有很小数据量(例如,4kb)的随机数据时,则闪存控制器需要加入60kb或是124kb的虚拟无效数据(dummydata)至4kb的随机数据中,以使得一次写入的数据量为64kb或是128kb。在这种情况下,若是具有很小数据量的随机数据量很多的时候,每一个区块的大部分内容都会是无效数据,因此会使得闪存模块的空间会很快地不足,进而需要频繁地进行垃圾数据回收(garbagecollection)操作,影响到系统效能。
为了避免上述情况,可以在闪存模块中另外设置一暂存区块,其用来收集这些具有很小数据量的随机数据,等到收集到足够数据量的时候再从所述暂存区块写回到上述的多层式存储区块或是三层式存储区块。然而,若是在这种数据写入的过程中发生断电后回复(poweroffrecovery,por)或是突发断电后回复(suddenpoweroffrecovery,spor)状况时,则会无法判断暂存区块与多层式存储区块或是三层式存储区块中的数据的新旧,进而造成后续重新建立地址映像表上的问题。
技术实现要素:
因此,本发明的目的之一在于公开一种管理闪存模块的方法,其可以在发生断电后回复或是突发断电后回复状况时,仍然可以正确地判断出暂存区块与多层式存储区块或是三层式存储区块中的数据的新旧,以顺利地重新建立地址映像表,以解决先前技术中的问题。
在本发明的一个实施例中,公开了一种管理一闪存模块的方法,其中所述闪存模块包括了多个闪存芯片,每一个闪存芯片包括多个第一暂存区块以及多个第二暂存区块,每一个第一暂存区块及第二暂存区块包括了多个数据页,以及所述方法包括有:将一第一数据写入至所述多个第二暂存区块中的一第二暂存区块中;当所述闪存模块的存取符合一特定条件时,将存储于所述第二暂存区块中的所述第一数据搬移至所述多个第一暂存区块中的一第一暂存区块,并在所述第一暂存区块中记录目前所述第二暂存区块的第一个空白数据页的信息。
在本发明的另一个实施例中,公开了一种管理一闪存模块的方法,其中所述闪存模块包括了多个闪存芯片,每一个闪存芯片包括多个第一暂存区块以及多个第二暂存区块,每一个第一暂存区块及第二暂存区块包括了多个数据页,以及所述方法包括有:当发生断电后回复状况时,读取一第一暂存区块中一数据页的备用区域的内容,并决定出一数据页序号;判断一第二暂存区块中位于所述数据页序号之前的所有数据页为无效数据页;以及判断所述第二暂存区块中包括所述数据页序号及之后的所有数据页为有效数据页。
在本发明的另一个实施例中,公开了一种闪存控制器,其中所述闪存控制器是用来存取一闪存模块,所述闪存模块包括了多个闪存芯片,每一个闪存芯片包括多个第一暂存区块以及多个第二暂存区块,每一个第一暂存区块及第二暂存区块包括了多个数据页,且所述闪存控制器包括有一只读存储器以及一微处理器,其中所述只读存储器用来存储一程序代码,且所述微处理器用来执行所述程序代码以控制对所述闪存模块的存取;其中所述微处理器将一第一数据写入至所述多个第二暂存区块中的一第二暂存区块中;以及当所述闪存模块的存取符合一特定条件时,所述微处理器将存储于所述第二暂存区块中的所述第一数据搬移至所述多个第一暂存区块中的一第一暂存区块,并在所述第一暂存区块中记录目前所述第二暂存区块的第一个空白数据页的信息。
在本发明的另一个实施例中,公开了一种闪存控制器,其中所述闪存控制器是用来存取一闪存模块,所述闪存模块包括了多个闪存芯片,每一个闪存芯片包括多个第一暂存区块以及多个第二暂存区块,每一个第一暂存区块及第二暂存区块包括了多个数据页,且所述闪存控制器包括有一只读存储器以及一微处理器,其中所述只读存储器用来存储一程序代码,且所述微处理器用来执行所述程序代码以控制对所述闪存模块的存取;其中当发生断电后回复状况时,所述微处理器读取一第一暂存区块中一数据页的备用区域的内容,并决定出一数据页序号;以及所述微处理器判断一第二暂存区块中位于所述数据页序号之前的所有数据页为无效数据页,且判断所述第二暂存区块中包括所述数据页序号及之后的所有数据页为有效数据页。
附图说明
图1为依据本发明一实施例的一记忆装置的示意图。
图2为根据本发明一实施例的管理闪存模块的流程图。
图3a为管理闪存模块的示意图。
图3b为根据本发明一实施例的超级区块的示意图。
图4为根据本发明一实施例的将数据写入至暂存区块以及数据区块的示意图。
图5为根据本发明另一实施例的管理闪存模块的流程图。
图6为根据本发明一实施例的重新建立暂存区块以及数据区块的地址映像表的示意图。
其中,附图标记说明如下:
100记忆装置
110闪存控制器
112微处理器
112c程序代码
112m只读存储器
114控制逻辑
116缓冲存储器
118接口逻辑
120闪存模块
130主装置
132编码器
134译码器
200~208、500~506步骤
310、320闪存芯片
352、534、536超级区块
db_0~db_m数据区块
tb_mlc_0~tb_mlc_k第一暂存区块
tb_slc_0~tb_slc_n第二暂存区块
p0~p34数据页
lba_001、lba_xxx逻辑地址
具体实施方式
参考图1,图1为依据本发明一实施例的一记忆装置100的示意图。记忆装置100包括有一闪存模块120以及一闪存控制器110,且闪存控制器110用来存取闪存模块120。依据本实施例,闪存控制器110包括一微处理器112、一只读存储器(readonlymemory,rom)112m、一控制逻辑114、一缓冲存储器116、与一接口逻辑118。只读存储器112m是用来存储一程序代码112c,而微处理器112则用来执行程序代码112c以控制对闪存模块120的存取(access)。控制逻辑114包括了一编码器132以及一译码器134,其中编码器132用来对写入到闪存模块120中的数据进行编码以产生对应的校验码(或称,错误更正码(errorcorrectioncode),ecc),而译码器134用来将从闪存模块120所读出的数据进行译码。
于典型状况下,闪存模块120包括了多个闪存芯片,而每一个闪存芯片包括多个区块(block),而所述控制器(例如:通过微处理器112执行程序代码112c的闪存控制器110)对闪存模块120进行抹除数据运作是以区块为单位来进行。另外,一区块可记录特定数量的数据页(page),其中所述控制器(例如:通过微处理器112执行程序代码112c的存储器控制器110)对闪存模块120进行写入数据的运作是以数据页为单位来进行写入。在本实施例中,闪存模块120为一立体nand型闪存(3dnand-typeflash)。
实作上,通过微处理器112执行程序代码112c的闪存控制器110可利用其本身内部的组件来进行诸多控制运作,例如:利用控制逻辑114来控制闪存模块120的存取运作(尤其是对至少一区块或至少一数据页的存取运作)、利用缓冲存储器116进行所需的缓冲处理、以及利用接口逻辑118来与一主装置(hostdevice)130沟通。
在一实施例中,记忆装置100可以是可携式记忆装置(例如:符合sd/mmc、cf、ms、xd标准的记忆卡),且主装置130为一可与记忆装置连接的电子装置,例如手机、笔记本电脑、桌面计算机…等等。而在另一实施例中,记忆装置100可以设置在一电子装置中,例如设置在手机、笔记本电脑、桌面计算机之中,而此时主装置130可以是所述电子装置的一处理器。
参考图2,其为根据本发明一实施例的管理闪存模块120的流程图。在步骤200中,流程开始。在步骤202中,闪存控制器110接收来自主装置130的一写入命令,以将一数据写入至闪存模块120的一区块中。在本实施例中,参考图3a,闪存模块120包括了多个闪存芯片310、320,每一个闪存芯片包括了多个数据区块db_0~db_m、多个第二暂存区块tb_slc_0~tb_slc_n及多个第一暂存区块tb_mlc_0~tb_mlc_k,而每一个区块均包括了多个数据页。在本实施例中,第二暂存区块tb_slc_0~tb_slc_n为单层式存储(single-levelcell,slc)区块,且数据区块db_0~db_m以及第一暂存区块tb_mlc_0~tb_mlc_k为多层式存储(mlc)区块,但不以此为限,于其他实施例中数据区块db0~db_m及/或第一暂存区块tb_mlc_0~tb_mlc_k可为三层式存储(tlc)区块。在一实施例中,第二暂存区块tb_slc_0~tb_slc_n也可使用多层式存储区块来做为单层式存储区块来使用。在闪存模块120的实际操作中,可以“超级区块”来作为数据写入的模式,具体来说,参考图3b,其为根据本发明一实施例的超级区块的示意图。如图3b所示,假设每一个闪存芯片310、320中的区块均分为两个平面(plane),且闪存模块120仅包括两个闪存芯片310、320,故闪存芯片310、320中位于不同平面的四个区块便可以构成一超级区块。在图3b中,闪存芯片310、320中的数据区块db_0、db_1构成一超级区块352、闪存芯片310、320中的第二暂存区块tb_slc_0、tb_slc_1构成一超级区块354、且闪存芯片310、320中的第一暂存区块tb_mlc_0、tb_mlc_1构成一超级区块356…以此类推。当数据需要写入到闪存模块120时,每一次都需要写入到超级区块中的每一个数据页、也就是说,四个区块的一个数据页中,举例来说,假设一区块中的一个数据页的大小为16kb,则闪存控制器110一次需要写入64kb的数据至一超级区块356的一个数据页,也就是说,将这64kb的数据依序写入到闪存芯片310中第一暂存区块tb_mlc_0的一个数据页、闪存芯片310中第一暂存区块tb_mlc_1的一个数据页、闪存芯片320中第一暂存区块tb_mlc_0的一个数据页、以及闪存芯片320中第一暂存区块tb_mlc_1的一个数据页。于其他实施例中,闪存控制器110一次需要写入128kb的数据至一超级区块356的二个数据页,也就是说,将这128kb的数据写入到闪存芯片310中第一暂存区块tb_mlc_0的二个数据页、闪存芯片310中第一暂存区块tb_mlc_1的二个数据页、闪存芯片320中第一暂存区块tb_mlc_0的二个数据页、以及闪存芯片320中第一暂存区块tb_mlc_1的二个数据页。
在本实施例中,当数据需要写入至闪存模块120时,闪存控制器110会由第一暂存区块tb_mlc_0~tb_mlc_k中选择一个来进行存储,而由于闪存控制器110对于第一暂存区块tb_mlc_0~tb_mlc_k一次写入的数据量需要大于一临界值(例如,上述的64kb),因此,在步骤204中,闪存控制器110判断闪存模块120的存取是否符合一特定条件,若否,流程进入步骤206;若是,则流程进入至步骤208。具体来说,所述特定条件指的是步骤202中所述的写入命令所对应的数据以及目前存储在第二暂存区块中且尚未搬移至第一暂存区块的数据的数据量总和是否到达所述临界值。
在步骤206中,闪存控制器110将步骤202中所述的写入命令所对应的数据写入至所述第二暂存区块中。在步骤208中,闪存控制器110将步骤202中所述的写入命令所对应的数据,连同目前存储在所述第二暂存区块中且尚未搬移至所述第一暂存区块的数据,一并写入至所述第一暂存区块中,此外,在所述第一暂存区块中记录目前所述第二暂存区块的第一个空白数据页的信息。接着,流程回到步骤202。
以下通过图4来举一例子来详细说明图2所示的流程图,需注意的是,为了方便理解,图4是以第二暂存区块tb_slc_0以及第一暂存区块tb_mlc_0来做为说明,但本领域技术人员应能了解上述暂存区块在实作上可以是图3b所示的超级区块。首先,闪存控制器110自主装置130接收到一第一写入命令,假设所述第一写入命令所对应的数据为随机数据(例如4kb)且数据量不到所述临界值,则闪存控制器110将所述第一写入命令所对应的数据写入至第二暂存区块tb_slc_0的第一个数据页p0中;接着,闪存控制器110自主装置130依序接收到一第二写入命令及一第三写入命令,假设所述第二、第三写入命令所对应的数据也是随机数据(例如4kb),则闪存控制器110会依序将所述第二、第三写入命令所对应的数据写入至第二暂存区块tb_slc_0的数据页p1、p2中。接着,闪存控制器110自主装置130接收到一第四写入命令,而假设所述第四写入命令所对应的数据为连续数据,且所述数据的数据量为大于所述临界值的548kb,则由于待写入至第一暂存区块tb_mlc_0的数据量大于所述临界值,则闪存控制器110此时会先将第二暂存区块tb_slc_0的数据页p0~p2的有效数据(共12kb)连同所述第四写入命令所对应的数据(548kb)一起写入至第一暂存区块tb_mlc_0的数据页p0~p34中。在本实施例中,闪存控制器110在将数据写入到第一暂存区块tb_mlc_0的过程中,会在每一个数据页p0~p34的一备用区域中记录目前第二暂存区块tb_slc_0的第一个空白数据页的信息(也就是数据页p3)。在本实施例中,所述备用区域的大小通常是64b或是128b,且一般是用来存储文件系统的管理信息。
一般而言,当闪存控制器110接收到所述第一、第二、第三写入命令所对应的数据时,先将所述第一、第二、第三写入命令所对应的数据暂存于缓冲存储器116中,而当闪存控制器110将所述第一、第二、第三写入命令所对应的数据写入至第二暂存区块tb_slc_0的数据页p0、p1、p2后,将删除缓冲存储器116中暂存的对应数据。于此实施例中,当闪存控制器110将所述第一、第二、第三写入命令所对应的数据写入至第二暂存区块tb_slc_0的数据页p0、p1、p2后,不删除暂存于缓冲存储器116中的所述第一、第二、第三写入命令所对应的数据。当收到所述第四写入命令时,闪存控制器110将所述第四写入命令所对应的数据暂存于缓冲存储器116后,直接从缓冲存储器116中读取所述第一至第四写入命令所对应的数据,将其一并写入至第一暂存区块tb_mlc_0的数据页p0~p34中,接着再删除缓冲存储器116中暂存的所述第一至第四写入命令所对应的数据。于其他实施例中,当闪存控制器110将所述第一、第二、第三写入命令所对应的数据写入至第二暂存区块tb_slc_0的数据页p0、p1、p2后,删除暂存于缓冲存储器116中的所述第一、第二、第三写入命令所对应的数据。当收到所述第四写入命令时,闪存控制器110将所述第四写入命令所对应的数据暂存于缓冲存储器116后,从第二暂存区块tb_slc_0的数据页p0、p1、p2读取数据至缓冲存储器116之后,再从缓冲存储器116中读取所述第一至第四写入命令所对应的数据,将其一并写入至第一暂存区块tb_mlc_0的数据页p0~p34中。
需注意的是,在上述的实施例中,第一暂存区块tb_mlc_0中所记录的第二暂存区块tb_slc_0的第一个空白数据页的信息是数据页p3,但本发明并不以此为限,在其他实施例中,所谓“第二暂存区块tb_slc_0的第一个空白数据页的信息”可以是任何可以关联到并据以决定出数据页p3的内容,例如第二暂存区块tb_slc_0的最后一个有数据写入的数据页的序号,这些设计上的变化应隶属于本发明的范畴。
接着,闪存控制器110自主装置130接收到一第五写入命令及一第六写入命令,假设所述第五、第六写入命令所对应的数据为随机数据,则闪存控制器110会依序将所述第五、第六写入命令所对应的数据写入至第二暂存区块tb_slc_0的数据页p3、p4中。在本实施例中,是假设第二暂存区块tb_slc_0的数据页p4所存储的数据是用来更新第二暂存区块tb_slc_0的数据页p1所存储的数据,也就是说,第二暂存区块tb_slc_0的数据页p1、p4与第一暂存区块tb_mlc_0的数据页p1对应到相同的逻辑地址。
在图2~4的实施例中,在第一暂存区块tb_mlc_0中的数据页p0~p34的备用区域中记录在其数据写入过程中第二暂存区块tb_slc_0的第一个空白数据页的信息的目的是为了避免后续发生断电后回复(por)或是突发断电后回复(spor)状况时无法判断第一暂存区块tb_mlc0与第二暂存区块tb_slc_0中的数据新旧问题,而造成错误。以下图5、6所示的实施例将说明如何利用第一暂存区块tb_mlc_0所记录的第二暂存区块tb_slc_0的第一个空白数据页的信息来正确地判断第一暂存区块tb_mlc_0与第二暂存区块tb_slc_0中的数据新旧。
参考图5,其为根据本发明一实施例的管理闪存模块120的方法的流程图。在步骤500中,记忆装置100遭遇到断电后回复(por)或是突发断电后回复(spor)的状况,因此,原本存储在缓冲存储器116中的地址映像表均已遗失。在步骤502中,闪存控制器110读取第一暂存区块的最后一个有数据写入的数据页的备用区域的内容,以决定出第二暂存区块的一数据页序号。在步骤504中,闪存控制器110判断第二暂存区块中从所述数据页序号开始的数据是最新的数据,而所述数据页序号之前的都是旧数据(无效数据)。在步骤506中,闪存控制器110根据步骤504的判断结果来重新建立地址映像表。
具体来说,接续着图4所示的实施例,并同时参考图6,当记忆装置100遭遇到断电后回复(por)或是突发断电后回复(spor)的状况后,闪存控制器110会需要重新建立分别对应到第二暂存区块tb_slc_0以及第一暂存区块tb_mlc_0的地址映像表。此时,闪存控制器110会直接至第一暂存区块tb_mlc_0的最后一个有数据写入的数据页(也就是p34)的备用区域读取内容,并得到一个数据页序号(也就是p3),而在建立第二暂存区块tb_slc_0的地址映像表的过程中,闪存控制器110会直接判断第二暂存区块tb_slc_0从数据页p3开始以后的数据才是新的数据,而数据页p3之前的数据都是旧的数据,因此,第二暂存区块tb_slc_0的地址映像表只会记录有关于数据页p3、p4的实体地址及对应的逻辑地址,而并不会记录有关于数据页p0~p2的地址信息。
此外,关于第一暂存区块tb_mlc_0的地址映像表,闪存控制器110则会循序地读取第一暂存区块tb_mlc_0中每一个数据页的信息以重新建立出第一暂存区块tb_mlc_0中每一个数据页p0~p34的实体地址及对应的逻辑地址。
在以上的实施例中,由于在断电后回复或是突发断电后回复的状况后所重新建立的第二暂存区块tb_slc_0的地址映像表仅会包括最新的信息,因此若是第二暂存区块tb_slc_0与第一暂存区块tb_mlc_0的地址映像表具有一相同的逻辑地址,例如图6所示的第二暂存区块tb_slc_0的数据页p4与第一暂存区块tb_mlc_0的数据页p1具有相同的逻辑地址(lba_001),则可以直接地判断第二暂存区块tb_slc_0的数据页p4是最新的数据,也就是说,第二暂存区块tb_slc_0的数据页p4的数据是用来更新第一暂存区块tb_mlc_0的数据页p1的内容。在一实施例中,若是此时闪存控制器110接收到一要求读取逻辑地址lba_001的读取命令,则闪存控制器110会直接先从第二暂存区块tb_slc_0的地址映像表来取得对应的实体地址,并自第二暂存区块tb_slc_0的数据页p4来读取数据,而并不需要去读取第一暂存区块tb_mlc_0的地址映像表的内容。
在一实施例中,当多个第一暂存区块完成数据写入之后,可以对所述多个第一暂存区块进行垃圾收集(garbagecollection)操作,以将其中的有效数据搬移至至少一数据区块(例如,db_0)中,而所述多个第一暂存区块之后则便可以被释放出来以继续供数据写入之用。
简要归纳本发明,在本发明的管理闪存模块的方法中,是使用两个暂存区块(第一暂存区块以及第二暂存区块)来存储写入至闪存模块中的数据,其中第一暂存区块主要是用来存储数据量大于一临界值(例如,64kb)的数据,而第二暂存区块则是用来存储数据量小于所述临界值的随机数据。另外,通过在第一暂存区块中记录目前第二暂存区块的最后一个空白数据页的信息,可以在发生断电后回复或是突发断电后回复的状况后能够准确地判断出第二暂存区块与第一暂存区块中的数据新旧,特别是当第一暂存区块与第二暂存区块中有数据页具有相同逻辑地址的情况,以确实解决先前技术的问题。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。