本發(fā)明有關(guān)于一種數(shù)據(jù)儲(chǔ)存裝置的數(shù)據(jù)維護(hù)方法;特別系關(guān)于一種三階儲(chǔ)存單元的數(shù)據(jù)維護(hù)方法。
背景技術(shù):
快閃存儲(chǔ)器為一種普遍的非揮發(fā)性數(shù)據(jù)儲(chǔ)存媒體,以電性方式抹除與程式化。以非及閘型的快閃存儲(chǔ)器(即nandflash)為例,常用作記憶卡(memorycard)、通用串行總線閃存裝置(usbflashdevice)、固態(tài)硬碟(ssd)、嵌入式快閃存儲(chǔ)器模組(emmc)…等的儲(chǔ)存媒體。
快閃存儲(chǔ)器(如,nandflash)的儲(chǔ)存陣列包括多個(gè)區(qū)塊(blocks),其中浮置柵極晶體管可用以構(gòu)成快閃存儲(chǔ)器。浮置柵極晶體管中的浮置柵極,可捕捉的電荷以儲(chǔ)存數(shù)據(jù)。然而,儲(chǔ)存于浮置柵極的電荷會(huì)由于快閃存儲(chǔ)器的操作以及各種環(huán)境參數(shù),自浮置柵極流失,造成數(shù)據(jù)保存(dataretention)的問題。其中,三階儲(chǔ)存單元(triple-levelcell,tlc)的快閃存儲(chǔ)器相較于其他快閃存儲(chǔ)器的寫入程序更為繁復(fù)。因此,如何有效地并且穩(wěn)定的進(jìn)行寫入程序是重要的課題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所提供的數(shù)據(jù)儲(chǔ)存裝置以及數(shù)據(jù)維護(hù)方法,可穩(wěn)定的提供單階備用區(qū)塊并且同時(shí)將數(shù)據(jù)寫入單階備用區(qū)塊。
本發(fā)明提供一種數(shù)據(jù)儲(chǔ)存裝置??扉W存儲(chǔ)器具有多個(gè)單階備用區(qū)塊、多個(gè)單階數(shù)據(jù)區(qū)塊以及多個(gè)三階備用區(qū)塊??刂破黜憫?yīng)于用以將一數(shù)據(jù)寫入快閃存儲(chǔ)器的一寫入命令,將數(shù)據(jù)寫入單階備用區(qū)塊,其中當(dāng)一既定條件滿足時(shí),控制器每寫入三個(gè)單階備用區(qū)塊便將單階數(shù)據(jù)區(qū)塊中存在最久的三者整理至三階備用區(qū)塊中之一者。
在一實(shí)施例中,每當(dāng)對(duì)等單階備用區(qū)塊中之一者進(jìn)行寫入前,控制器判斷單階備用區(qū)塊的數(shù)量是否小于一既定值,并且當(dāng)單階備用區(qū)塊的數(shù)量小于既定值時(shí),既定條件被滿足。另外,當(dāng)既定條件未滿足時(shí),控制器連續(xù)將數(shù)據(jù)寫入單階備用區(qū)塊中。
又一實(shí)施例中,控制器在將單階數(shù)據(jù)區(qū)塊中存在最久的三者整理至三階備用區(qū)塊中之一者后,才將所寫入的數(shù)據(jù)的至少一邏輯地址映射至所寫入的單階備用區(qū)塊并將映射至邏輯地址的單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊。
另外,單階備用區(qū)塊為不具有有效數(shù)據(jù)的單階區(qū)塊,單階數(shù)據(jù)區(qū)塊為具有有效數(shù)據(jù)的單階區(qū)塊,并且三階備用區(qū)塊為不具有有效數(shù)據(jù)的三階區(qū)塊。
本發(fā)明另提供一種數(shù)據(jù)儲(chǔ)存裝置。數(shù)據(jù)儲(chǔ)存裝置包括一快閃存儲(chǔ)器以及一控制器。快閃存儲(chǔ)器具有多個(gè)單階備用區(qū)塊、多個(gè)單階數(shù)據(jù)區(qū)塊以及多個(gè)三階備用區(qū)塊??刂破黜憫?yīng)于用以將一數(shù)據(jù)寫入快閃存儲(chǔ)器的一寫入命令,將數(shù)據(jù)寫入單階備用區(qū)塊,其中當(dāng)一既定條件滿足時(shí),控制器先將數(shù)據(jù)中的一第一部分寫入單階備用儲(chǔ)存區(qū)塊中的三個(gè)第一單階備用儲(chǔ)存區(qū)塊,并且在將數(shù)據(jù)中的其他部分寫入單階備用儲(chǔ)存區(qū)塊的其他者之前,自單階數(shù)據(jù)區(qū)塊中選擇所具有的有效數(shù)據(jù)存在最久的三個(gè)第一單階數(shù)據(jù)區(qū)塊,將第一單階數(shù)據(jù)區(qū)塊中的數(shù)據(jù)編程至三階備用區(qū)塊中之一者以釋放第一單階數(shù)據(jù)區(qū)塊。
在一實(shí)施例中,在第一單階數(shù)據(jù)區(qū)塊被釋放后,控制器將第一部分的至少一邏輯地址映射至第一單階備用區(qū)塊,并將第一單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊中之三者。另外,在第一單階備用區(qū)塊被定義為單階數(shù)據(jù)區(qū)塊中之三者后,控制器先將數(shù)據(jù)中的一第二部分寫入單階備用儲(chǔ)存區(qū)塊中的三個(gè)第二單階備用儲(chǔ)存區(qū)塊,并且在將數(shù)據(jù)中的其他部分寫入單階備用儲(chǔ)存區(qū)塊之其他者之前,自單階數(shù)據(jù)區(qū)塊中選擇所具有的有效數(shù)據(jù)存在最久的三個(gè)第二單階數(shù)據(jù)區(qū)塊,將第二單階數(shù)據(jù)區(qū)塊中的數(shù)據(jù)編程至三階備用區(qū)塊中之一者以釋放第二單階數(shù)據(jù)區(qū)塊。
本發(fā)明亦提供一種數(shù)據(jù)維護(hù)方法適用于具有一快閃存儲(chǔ)器的數(shù)據(jù)儲(chǔ)存裝置,其中快閃存儲(chǔ)器具有多個(gè)單階備用區(qū)塊、多個(gè)單階數(shù)據(jù)區(qū)塊以及多個(gè)三階備用區(qū)塊。數(shù)據(jù)維護(hù)方法包括:接收用以將一數(shù)據(jù)寫入快閃存儲(chǔ)器的一寫入命令;以及響應(yīng)于寫入命令,將數(shù)據(jù)寫入單階備用區(qū)塊。將數(shù)據(jù)寫入單階備用區(qū)塊的步驟還包括:當(dāng)一既定條件滿足時(shí),每寫入三個(gè)單階備用區(qū)塊便將單階數(shù)據(jù)區(qū)塊中存在最久之三者整理至三階備用區(qū)塊中之一者。
在一實(shí)施例中,數(shù)據(jù)維護(hù)方法還包括每當(dāng)對(duì)等單階備用區(qū)塊中之一者進(jìn)行寫入前,判斷單階備用區(qū)塊的數(shù)量是否小于一既定值,其中當(dāng)單階備用區(qū)塊的數(shù)量小于既定值時(shí),既定條件被滿足。將數(shù)據(jù)寫入單階備用區(qū)塊的步驟還包括當(dāng)既定條件未滿足時(shí),連續(xù)將數(shù)據(jù)寫入單階備用區(qū)塊中。另外,將數(shù)據(jù)寫入單階備用區(qū)塊的步驟還包括在將單階數(shù)據(jù)區(qū)塊中存在最久的三者整理至三階備用區(qū)塊中之一者后,將所寫入的數(shù)據(jù)的至少一邏輯地址映射至所寫入的單階備用區(qū)塊并將映射至邏輯地址的單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊。
本發(fā)明又提供一種數(shù)據(jù)維護(hù)方法,適用于具有一快閃存儲(chǔ)器的數(shù)據(jù)儲(chǔ)存裝置,其中快閃存儲(chǔ)器具有多個(gè)單階備用區(qū)塊、多個(gè)單階數(shù)據(jù)區(qū)塊以及多個(gè)三階備用區(qū)塊。數(shù)據(jù)維護(hù)方法包括:接收用以將一數(shù)據(jù)寫入快閃存儲(chǔ)器的一寫入命令;以及響應(yīng)于寫入命令,將數(shù)據(jù)寫入單階備用區(qū)塊,其中當(dāng)一既定條件滿足時(shí),將數(shù)據(jù)寫入單階備用區(qū)塊的步驟還包括:將數(shù)據(jù)中的一第一部分寫入單階備用儲(chǔ)存區(qū)塊中的三個(gè)第一單階備用儲(chǔ)存區(qū)塊;以及在將數(shù)據(jù)中的其他部分寫入單階備用儲(chǔ)存區(qū)塊的其他者之前,自單階數(shù)據(jù)區(qū)塊中選擇所具有的有效數(shù)據(jù)存在最久的三個(gè)第一單階數(shù)據(jù)區(qū)塊,并且將第一單階數(shù)據(jù)區(qū)塊中的數(shù)據(jù)編程至三階備用區(qū)塊中之一者以釋放第一單階數(shù)據(jù)區(qū)塊。
在一實(shí)施例中,當(dāng)既定條件滿足時(shí),將數(shù)據(jù)寫入單階備用區(qū)塊的步驟還包括:在第一單階數(shù)據(jù)區(qū)塊被釋放后,將第一部分的至少一邏輯地址映射至第一單階備用區(qū)塊,并將第一單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊中之三者。另外,當(dāng)既定條件滿足時(shí),將數(shù)據(jù)寫入單階備用區(qū)塊的步驟還包括:在第一單階備用區(qū)塊被定義為單階數(shù)據(jù)區(qū)塊中之三者后,控制器先將數(shù)據(jù)中的一第二部分寫入單階備用儲(chǔ)存區(qū)塊中的三個(gè)第二單階備用儲(chǔ)存區(qū)塊;以及在將數(shù)據(jù)中的其他部分寫入單階備用儲(chǔ)存區(qū)塊之其他者之前,自單階數(shù)據(jù)區(qū)塊中選擇所具有的有效數(shù)據(jù)存在最久的三個(gè)第二單階數(shù)據(jù)區(qū)塊,并且將第二單階數(shù)據(jù)區(qū)塊中的數(shù)據(jù)編程至三階備用區(qū)塊中之一者以釋放第二單階數(shù)據(jù)區(qū)塊。
附圖說明
圖1是本發(fā)明的一種實(shí)施例的之電子系統(tǒng)的方塊圖。
圖2是本發(fā)明的一種實(shí)施例之快閃存儲(chǔ)器的示意圖。
圖3是本發(fā)明的一種實(shí)施例的數(shù)據(jù)維護(hù)方法的流程圖。
符號(hào)說明
100電子系統(tǒng);
120主機(jī);
140數(shù)據(jù)儲(chǔ)存裝置;
160控制器;
162運(yùn)算單元;
164永久存儲(chǔ)器;
166隨機(jī)存取存儲(chǔ)器;
180快閃存儲(chǔ)器;
slc_sp_pool單階備用池;
tlc_sp_pool三階備用池;
slc_da_pool單階數(shù)據(jù)池;
tlc_da_pool三階數(shù)據(jù)池;
slc_sp_1~slc_sp_n單階備用區(qū)塊;
slc_da_1~slc_da_p單階數(shù)據(jù)區(qū)塊;
tlc_sp_1~tlc_sp_m三階備用區(qū)塊;
tlc_da_1~tlc_da_q三階數(shù)據(jù)區(qū)塊;
s300~s320步驟。
具體實(shí)施方式
以下將詳細(xì)討論本發(fā)明各種實(shí)施例的裝置及使用方法。然而值得注意的是,本發(fā)明所提供的許多可行的發(fā)明概念可實(shí)施在各種特定范圍中。這些特定實(shí)施例僅用于舉例說明本發(fā)明的裝置及使用方法,但非用于限定本發(fā)明的范圍。
圖1為本發(fā)明所提供的一電子系統(tǒng)的一種實(shí)施例的方塊圖。電子系統(tǒng)100包括一主機(jī)120以及一數(shù)據(jù)儲(chǔ)存裝置140。數(shù)據(jù)儲(chǔ)存裝置140包括一快閃存儲(chǔ)器180以及一控制器160,且可根據(jù)主機(jī)110所下達(dá)的命令操作??刂破?60包括一運(yùn)算單元162、一永久存儲(chǔ)器(如,只讀存儲(chǔ)器rom)164以及隨機(jī)存取存儲(chǔ)器(ram)166。永久存儲(chǔ)器164與所載的程式碼、數(shù)據(jù)組成固件(firmware),由運(yùn)算單元162執(zhí)行,使控制器160基于該固件控制該快閃存儲(chǔ)器180。隨機(jī)存取存儲(chǔ)器(ram)166用以載入程式碼與參數(shù)以提供控制器160根據(jù)所載入的程式碼與參數(shù)動(dòng)作??扉W存儲(chǔ)器180具有多個(gè)區(qū)塊,其中每一區(qū)塊具有多個(gè)頁面,其中快閃存儲(chǔ)器180以頁面為最小單位進(jìn)行寫入,并且以區(qū)塊為最小單位進(jìn)行抹除。
圖2是本發(fā)明的一種實(shí)施例的快閃存儲(chǔ)器的示意圖。如圖2所示,快閃存儲(chǔ)器180具有一單階備用池slc_sp_pool、一三階備用池tlc_sp_pool、一單階數(shù)據(jù)池slc_da_pool以及一三階數(shù)據(jù)池tlc_da_pool。單階備用池slc_sp_pool包括多個(gè)單階備用區(qū)塊(single-levelcell,slc)slc_sp_1~slc_sp_n,其中n為單階備用池slc_sp_pool中單階備用區(qū)塊的數(shù)量,并且每一單階備用區(qū)塊slc_sp_1~slc_sp_n的大小等同于一個(gè)區(qū)塊的大小,但本發(fā)明不限于此。換言之,單階備用區(qū)塊slc_sp_1~slc_sp_n為不具有有效數(shù)據(jù)的單階區(qū)塊,并且單階備用區(qū)塊slc_sp_1~slc_sp_n用以以單階儲(chǔ)存模式寫入數(shù)據(jù)的區(qū)塊。值得注意的是,單階備用池slc_sp_pool中的單階備用區(qū)塊slc_sp_1~slc_sp_n被寫入有效數(shù)據(jù)后,則會(huì)被定義為單階數(shù)據(jù)區(qū)塊并且被分配到推到(push)單階數(shù)據(jù)池slc_da_pool中。單階數(shù)據(jù)池slc_da_pool包括多個(gè)單階數(shù)據(jù)區(qū)塊(single-levelcell,slc)slc_da_1~slc_da_p,其中p為單階數(shù)據(jù)池slc_da_pool中的單階數(shù)據(jù)區(qū)塊的數(shù)量,并且每一單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p的大小等同于一個(gè)區(qū)塊的大小,但本發(fā)明不限于此。換言之,單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p為具有有效數(shù)據(jù)的單階區(qū)塊,并且單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p中的有效數(shù)據(jù)用以以三階儲(chǔ)存模式寫入三階備用區(qū)塊數(shù)據(jù)的區(qū)塊。值得注意的是,單階數(shù)據(jù)池slc_da_pool中的單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p中的有效數(shù)據(jù)被編程至三階備用區(qū)塊后,則會(huì)被定義為單階備用區(qū)塊并且被分配到推到(push)單階備用池slc_so_pool中。三階備用池tlc_sp_pool包括多個(gè)三階備用區(qū)塊(triple-levelcell,tlc)tlc_sp_0~tlc_sp_m,其中m為三階備用池tlc_sp_pool中三階備用區(qū)塊tlc_sp_0~tlc_sp_m的數(shù)量,并且每一三階備用區(qū)塊tlc_sp_0~tlc_sp_m的大小等同于一個(gè)區(qū)塊的大小。換言之,三階備用區(qū)塊tlc_sp_0~tlc_sp_m是不具有有效數(shù)據(jù)的三階區(qū)塊,并且三階備用區(qū)塊tlc_sp_0~tlc_sp_m系用以以三階儲(chǔ)存模式寫入數(shù)據(jù)的區(qū)塊。詳細(xì)而言,三階備用區(qū)塊tlc_sp_0~tlc_sp_m被寫入的數(shù)據(jù)為原本儲(chǔ)存于單階數(shù)據(jù)區(qū)塊的數(shù)據(jù)。值得注意的是,已被寫入有效數(shù)據(jù)的三階備用區(qū)塊tlc_sp_0~tlc_sp_m會(huì)被定義為三階數(shù)據(jù)區(qū)塊并且被推至三階數(shù)據(jù)池tlc_da_pool中。三階數(shù)據(jù)池tlc_da_pool包括多個(gè)三階數(shù)據(jù)區(qū)塊(triple-levelcell,slc)tlc_da_1~tlc_da_q,其中q為三階數(shù)據(jù)池tlc_da_pool中的三階數(shù)據(jù)區(qū)塊的數(shù)量,并且每一三階數(shù)據(jù)區(qū)塊tlc_da_1~tlc_da_p的大小等同于一個(gè)區(qū)塊的大小,但本發(fā)明不限于此。換言之,三階數(shù)據(jù)區(qū)塊tlc_da_1~tlc_da_q為具有有效數(shù)據(jù)的三階區(qū)塊,并且三階數(shù)據(jù)區(qū)塊tlc_da_1~tlc_da_q。值得注意的是,三階數(shù)據(jù)池tlc_da_pool中的三階數(shù)據(jù)區(qū)塊tlc_da_1~tlc_da_q被中的有效數(shù)據(jù)被無效后,則會(huì)被定義為三階備用區(qū)塊并且被分配到推到(push)三階備用池tlc_sp_pool中。
值得注意的是,當(dāng)沒有任何數(shù)據(jù)被寫入快閃存儲(chǔ)器180時(shí),三階數(shù)據(jù)池tlc_da_pool以及單階數(shù)據(jù)池slc_da_pool中不具有任何三階數(shù)據(jù)區(qū)塊以及單階數(shù)據(jù)區(qū)塊。
另外,三階區(qū)塊(三階數(shù)據(jù)區(qū)塊tlc_da_1~tlc_da_q以及三階備用區(qū)塊tlc_sp_1~tlc_sp_m)可儲(chǔ)存的數(shù)據(jù)量是單階區(qū)塊(單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p以及單階備用區(qū)塊slc_sp_1~slc_sp_n)的三倍。詳細(xì)而言,三階區(qū)塊以及單階區(qū)塊皆是快閃存儲(chǔ)器180中之區(qū)塊,其物理構(gòu)造是相同的。然而,三階區(qū)塊是藉由電壓對(duì)區(qū)塊進(jìn)行多次編程(program)來寫入數(shù)據(jù),而單階區(qū)塊是藉由電壓對(duì)區(qū)塊進(jìn)行一次編程(program)來寫入數(shù)據(jù)。在一實(shí)施例中,三階區(qū)塊是藉由電壓對(duì)區(qū)塊進(jìn)行三次編程(program)來寫入數(shù)據(jù)。換言之,三個(gè)具有有效數(shù)據(jù)的單階數(shù)據(jù)區(qū)塊可編程為一個(gè)三階數(shù)據(jù)區(qū)塊。
由于單階區(qū)塊相較于三階區(qū)塊較為穩(wěn)定,因此在本發(fā)明的實(shí)施例中,單階區(qū)塊(slc)是用來作為預(yù)取空間(cache),并且在單階區(qū)塊快被使用完時(shí),才開始將單階數(shù)據(jù)區(qū)塊的數(shù)據(jù)編程至三階區(qū)塊中。一次將大量的單階數(shù)據(jù)區(qū)塊的數(shù)據(jù)轉(zhuǎn)移到三階區(qū)塊,雖然可確保清出大量的單階備用區(qū)塊可使用。然而,控制器160卻會(huì)因?yàn)橐淮涡源罅康木幊坦ぷ鳠o法對(duì)寫入數(shù)據(jù)繼續(xù)進(jìn)行處理,而造成寫入效能不穩(wěn)定。因此,在本發(fā)明的一實(shí)施例中,控制器160可基于單階區(qū)塊以及三階區(qū)塊的特性,交替地執(zhí)行寫入以及清除操作,以確??扉W存儲(chǔ)器180可穩(wěn)定地提供可用的單階備用區(qū)塊也可以穩(wěn)定地進(jìn)行寫入工作。
詳細(xì)而言,當(dāng)控制器160自主機(jī)120接收到用以將一數(shù)據(jù)寫入快閃存儲(chǔ)器180的一寫入命令時(shí),控制器則響應(yīng)于寫入命令將數(shù)據(jù)寫入單階備用區(qū)塊。另外,每當(dāng)對(duì)等單階備用區(qū)塊中之一者進(jìn)行寫入前,控制器160判斷單階備用區(qū)塊slc_sp_1~slc_sp_n之?dāng)?shù)量是否小于一既定值,以判斷一既定條件是否被滿足。當(dāng)單階備用區(qū)塊slc_sp_1~slc_sp_n之?dāng)?shù)量小于既定值時(shí),既定條件被滿足。當(dāng)既定條件被滿足時(shí),控制器160則開始進(jìn)行清除單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p。換言之,當(dāng)既定條件被滿足時(shí),控制器160每寫入三個(gè)單階備用區(qū)塊便將單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p中存在最久的三者整理至三階備用區(qū)塊tlc_sp_1~tlc_sp_m中之一者。值得注意的是,在一實(shí)施例中,數(shù)據(jù)儲(chǔ)存裝置140具有一區(qū)塊維護(hù)表,用以記錄在單階數(shù)據(jù)池slc_da_pool中的每一單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p中的有效數(shù)據(jù)存在的時(shí)間,但本發(fā)明不限于此。在其他實(shí)施例中,數(shù)據(jù)儲(chǔ)存裝置140可藉由其他方式記錄每一單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p中的有效數(shù)據(jù)存在的時(shí)間。另外,當(dāng)既定條件未滿足時(shí),控制器160則接著連續(xù)將數(shù)據(jù)寫入單階備用區(qū)塊中,并且在對(duì)每個(gè)單階備用區(qū)塊進(jìn)行寫入前判斷是否滿足既定條件。在其他實(shí)施例中,既定條件可包括任何需要清理單階數(shù)據(jù)區(qū)塊的事件。
在一實(shí)施例中,控制器160是在將單階數(shù)據(jù)區(qū)塊中存在最久之三者整理至三階備用區(qū)塊tlc_sp_1~tlc_sp_m中之一者后,才將所寫入的數(shù)據(jù)的至少一邏輯地址映射至所寫入的單階備用區(qū)塊并將映射至邏輯地址的單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊。在突發(fā)的斷電事件或者其他中斷事件發(fā)生時(shí),數(shù)據(jù)雖然已被寫入三階備用區(qū)塊中,但數(shù)據(jù)的鏈結(jié)還是保存在原本的單階數(shù)據(jù)區(qū)塊。因此,數(shù)據(jù)可保存在較穩(wěn)定的單階區(qū)塊中。
舉例而言,當(dāng)既定條件滿足時(shí),控制器160先將數(shù)據(jù)中的一第一部分寫入單階備用儲(chǔ)存區(qū)塊slc_sp_1~slc_sp_n中的三個(gè)第一單階備用儲(chǔ)存區(qū)塊。接著,在將數(shù)據(jù)中的其他部分寫入單階備用儲(chǔ)存區(qū)塊slc_sp_1~slc_sp_n之其他者之前,控制器160自單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p中選擇所具有的有效數(shù)據(jù)存在最久的三個(gè)第一單階數(shù)據(jù)區(qū)塊,并且將第一單階數(shù)據(jù)區(qū)塊中的數(shù)據(jù)編程至三階備用區(qū)塊中之一者以釋放第一單階數(shù)據(jù)區(qū)塊,其中被釋放的第一單階數(shù)據(jù)區(qū)塊已失去與原數(shù)據(jù)的地址映射關(guān)系,并且被定義為單階備用區(qū)塊。接著,在第一單階數(shù)據(jù)區(qū)塊被釋放后,控制器160將第一部分的至少一邏輯地址映射至第一單階備用區(qū)塊,并將第一單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊中之三者。
在第一單階備用區(qū)塊被定義為單階數(shù)據(jù)區(qū)塊中之三者后,控制器160接著先將數(shù)據(jù)中的一第二部分寫入單階備用儲(chǔ)存區(qū)塊中的三個(gè)第二單階備用儲(chǔ)存區(qū)塊。在將數(shù)據(jù)中的其他部分寫入單階備用儲(chǔ)存區(qū)塊之其他者之前,控制器160自單階數(shù)據(jù)區(qū)塊中選擇所具有的有效數(shù)據(jù)存在最久的三個(gè)第二單階數(shù)據(jù)區(qū)塊,將第二單階數(shù)據(jù)區(qū)塊中的數(shù)據(jù)編程至三階備用區(qū)塊中之一者以釋放第二單階數(shù)據(jù)區(qū)塊,其中被釋放的第二單階數(shù)據(jù)區(qū)塊已失去與原數(shù)據(jù)的地址映射關(guān)系,并且被定義為單階備用區(qū)塊。接著,在第二單階數(shù)據(jù)區(qū)塊被釋放后,控制器160將第二部分的至少一邏輯地址映射至第二單階備用區(qū)塊,并將第二單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊中之三者。接著,控制器160重復(fù)上述步驟直到數(shù)據(jù)的所有部分皆被寫入單階備用區(qū)塊中。另外,上述數(shù)據(jù)的第一部分以及第二部分的數(shù)據(jù)量,分別等于三個(gè)單階區(qū)塊的數(shù)據(jù)量。
圖3是本發(fā)明的一種實(shí)施例的數(shù)據(jù)維護(hù)方法的流程圖。數(shù)據(jù)維護(hù)方法適用于圖1所示的數(shù)據(jù)儲(chǔ)存裝置140。流程開始于步驟s300。
在步驟s300中,控制器160自主機(jī)120接收到用以將一數(shù)據(jù)寫入快閃存儲(chǔ)器180的一寫入命令。在本實(shí)施例中,數(shù)據(jù)大于三個(gè)單階區(qū)塊的數(shù)據(jù)量,但本發(fā)明不限于此。
接著,在步驟s302中,控制器160判斷一既定條件是否滿足。在一實(shí)施例中,控制器160判斷單階備用區(qū)塊slc_sp_1~slc_sp_n的數(shù)量是否小于一既定值,以判斷一既定條件是否被滿足。當(dāng)單階備用區(qū)塊slc_sp_1~slc_sp_n的數(shù)量小于既定值時(shí),既定條件被滿足。詳細(xì)而言,當(dāng)既定條件被滿足時(shí),流程進(jìn)行至步驟s304以開始進(jìn)行清除單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p的操作。當(dāng)既定條件未被滿足時(shí),流程進(jìn)行至步驟s314。在其他實(shí)施例中,既定條件可包括任何需要清理單階數(shù)據(jù)區(qū)塊的事件。
在步驟s304中,控制器160擷取數(shù)據(jù)中尚未被寫入單階備用區(qū)塊的一部分。詳細(xì)而言,控制器160接續(xù)著前一次所擷取的數(shù)據(jù)的部分,擷取數(shù)據(jù)中尚未被寫入單階備用區(qū)塊并且等同于三個(gè)單階區(qū)塊的數(shù)據(jù)量的一部分。當(dāng)所剩余的數(shù)據(jù)小于三個(gè)單階區(qū)塊時(shí),控制器160則擷取所有剩余的數(shù)據(jù)。
接著,在步驟s306中,控制器160將所擷取的數(shù)據(jù)的部分寫入單階備用儲(chǔ)存區(qū)塊slc_sp_1~slc_sp_n中的三個(gè)第一單階備用儲(chǔ)存區(qū)塊。換言之,控制器160將在步驟s304中所擷取的數(shù)據(jù)的部分寫入單階備用儲(chǔ)存區(qū)塊slc_sp_1~slc_sp_n中之三個(gè)單階備用儲(chǔ)存區(qū)塊。
接著,在步驟s308中,控制器160自單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p中選擇所具有的有效數(shù)據(jù)存在最久的三個(gè)單階數(shù)據(jù)區(qū)塊。換言之,控制器160自單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p中選取三個(gè)具有冷數(shù)據(jù)(colddata)的三個(gè)單階數(shù)據(jù)區(qū)塊。
接著,在步驟s310中,控制器160將所選擇的三個(gè)單階數(shù)據(jù)區(qū)塊中的數(shù)據(jù)編程至三階備用區(qū)塊中之一者以釋放所選擇的三個(gè)單階數(shù)據(jù)區(qū)塊,其中被釋放的三個(gè)單階數(shù)據(jù)區(qū)塊已失去與原數(shù)據(jù)的地址映射關(guān)系,并且被定義為單階備用區(qū)塊。
接著,在步驟s312中,控制器160將所擷取的數(shù)據(jù)的部分的至少一邏輯地址映射至被寫入的單階備用區(qū)塊,并將被寫入單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊中之三者。換言之,控制器160將在步驟s304中所擷取的數(shù)據(jù)的部分的邏輯地址映射至在步驟s306被寫入的單階備用區(qū)塊,并將被寫入單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊中之三者。
在步驟s313中,控制器160判斷數(shù)據(jù)是否是全部寫入單階區(qū)塊中。當(dāng)數(shù)據(jù)未全部寫入單階區(qū)塊時(shí),流程回到步驟s304以繼續(xù)對(duì)數(shù)據(jù)進(jìn)行寫入以及清除單階數(shù)據(jù)區(qū)塊。當(dāng)數(shù)據(jù)已全部寫入單階區(qū)塊時(shí),流程結(jié)束于步驟s313。值得注意的是,在另一實(shí)施例中,當(dāng)數(shù)據(jù)未全部寫入單階區(qū)塊時(shí),流程回到步驟s302,以繼續(xù)判斷既定條件是否被滿足。
在步驟s314中,控制器160擷取數(shù)據(jù)中尚未被寫入單階備用區(qū)塊的一部分。詳細(xì)而言,控制器160接續(xù)著前一次所擷取的數(shù)據(jù)的部分,擷取數(shù)據(jù)中尚未被寫入單階備用區(qū)塊并且等同于一個(gè)單階區(qū)塊的數(shù)據(jù)量的一部分。當(dāng)所剩余的數(shù)據(jù)小于一個(gè)單階區(qū)塊時(shí),控制器160則擷取所有剩余的數(shù)據(jù)。
在步驟s316中,控制器160將所擷取的數(shù)據(jù)的部分寫入單階備用儲(chǔ)存區(qū)塊slc_sp_1~slc_sp_n中之一者。換言之,控制器160將在步驟s314中所擷取的數(shù)據(jù)的部分寫入單階備用儲(chǔ)存區(qū)塊slc_sp_1~slc_sp_n中之一者。
接著,在步驟s318中,控制器160將所擷取的數(shù)據(jù)的部分的邏輯地址映射至被寫入的單階備用區(qū)塊,并將被寫入單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊中之一者。換言之,控制器160將在步驟s314中所擷取的數(shù)據(jù)的部分的邏輯地址映射至在步驟s316被寫入的單階備用區(qū)塊,并將被寫入單階備用區(qū)塊定義為單階數(shù)據(jù)區(qū)塊中之一者。
在步驟s320中,控制器160判斷數(shù)據(jù)是否是全部寫入單階區(qū)塊中。當(dāng)數(shù)據(jù)未全部寫入單階區(qū)塊時(shí),流程回到步驟s302。當(dāng)數(shù)據(jù)已全部寫入單階區(qū)塊時(shí),流程結(jié)束于步驟s320。
綜上所述,在步驟s304~s313中,控制器160每寫入三個(gè)單階備用區(qū)塊便將單階數(shù)據(jù)區(qū)塊slc_da_1~slc_da_p中存在最久之三者整理至三階備用區(qū)塊tlc_sp_1~tlc_sp_m中之一者。在步驟s314~s320中,控制器160則接著連續(xù)將數(shù)據(jù)寫入單階備用區(qū)塊中,并且在對(duì)每個(gè)單階備用區(qū)塊進(jìn)行寫入前判斷是否滿足既定條件。
本發(fā)明所提供的數(shù)據(jù)儲(chǔ)存裝置以及數(shù)據(jù)維護(hù)方法,可穩(wěn)定的提供單階備用區(qū)塊并且同時(shí)將數(shù)據(jù)寫入單階備用區(qū)塊。
本發(fā)明的方法,或特定型態(tài)或其部份,可以以程式碼的型態(tài)存在。程式碼可儲(chǔ)存于實(shí)體媒體,如軟盤、光盤、硬盤、或是任何其他機(jī)器可讀取(如電腦可讀取)儲(chǔ)存媒體,亦或不限于外在形式的電腦程式產(chǎn)品,其中,當(dāng)程式碼被機(jī)器,如電腦載入且執(zhí)行時(shí),此機(jī)器變成用以參與本發(fā)明的裝置。程式碼也可透過一些傳送媒體,如電線或電纜、光纖、或是任何傳輸型態(tài)進(jìn)行傳送,其中,當(dāng)程式碼被機(jī)器,如電腦接收、載入且執(zhí)行時(shí),此機(jī)器變成用以參與本發(fā)明的裝置。當(dāng)在一般用途處理單元實(shí)作時(shí),程式碼結(jié)合處理單元提供一操作類似于應(yīng)用特定邏輯電路的獨(dú)特裝置。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,當(dāng)不能以此限定本發(fā)明實(shí)施的范圍,即凡依本發(fā)明申請(qǐng)專利范圍及發(fā)明說明內(nèi)容所作的簡單的等效變化與修飾,皆仍屬本發(fā)明專利涵蓋的范圍內(nèi)。另外本發(fā)明的任一實(shí)施例或申請(qǐng)專利范圍不須達(dá)成本發(fā)明所揭示的全部目的或優(yōu)點(diǎn)或特點(diǎn)。此外,摘要部分和標(biāo)題僅是用來輔助專利文件搜尋之用,并非用來限制本發(fā)明的權(quán)利范圍。