本發(fā)明是關(guān)于一種存儲(chǔ)器裝置的數(shù)據(jù)維護(hù)方法;特別是關(guān)于一種將寫入數(shù)據(jù)編碼的數(shù)據(jù)維護(hù)方法。
背景技術(shù):
快閃存儲(chǔ)器為一種普遍的非易失性數(shù)據(jù)儲(chǔ)存裝置,是以電性方式抹除與編程。以非與門型的快閃存儲(chǔ)器(即NAND FLASH)為例,常用作存儲(chǔ)卡(memory card)、通用串行總線閃存裝置(USB flash device)、固態(tài)硬盤(SSD)、嵌入式快閃存儲(chǔ)器模塊(eMMC)…等使用。
快閃存儲(chǔ)器(如,NAND FLASH)的儲(chǔ)存陣列包括多個(gè)區(qū)塊(blocks)。各區(qū)塊包括多個(gè)頁(yè)面(pages),其中在快閃存儲(chǔ)器中數(shù)據(jù)寫入的單位是頁(yè)面,數(shù)據(jù)抹除的最小單位為區(qū)塊。由于快閃存儲(chǔ)器的存取過程中對(duì)同一頁(yè)面或者同一區(qū)塊反復(fù)存取,可能會(huì)發(fā)生數(shù)據(jù)內(nèi)容的錯(cuò)誤。所以需要一種數(shù)據(jù)維護(hù)方法來避免對(duì)快閃存儲(chǔ)器中的數(shù)據(jù)錯(cuò)誤。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所提供的數(shù)據(jù)儲(chǔ)存裝置可降低頁(yè)面損壞的幾率。
本發(fā)明提供一種數(shù)據(jù)儲(chǔ)存裝置。數(shù)據(jù)儲(chǔ)存裝置包括一快閃存儲(chǔ)器以及一控制器??扉W存儲(chǔ)器包括多個(gè)區(qū)塊,每一區(qū)塊具有多個(gè)頁(yè)面??刂破饔靡越邮諏⒍鄠€(gè)數(shù)據(jù)段分別寫入?yún)^(qū)塊中的一第一區(qū)塊的多個(gè)第一頁(yè)面的一寫入命令,根據(jù)第一區(qū)塊的一第一抹除次數(shù),計(jì)算一偏移指標(biāo),根據(jù)偏移指標(biāo)擷取一隨機(jī)種子表中的多個(gè)種子,使用所擷取的種子對(duì)數(shù)據(jù)段進(jìn)行編碼以獲得多個(gè)編碼后數(shù)據(jù)段,并且將編碼后數(shù)據(jù)段寫入第一頁(yè)面。
在一實(shí)施例中,控制器還用以記錄每一區(qū)塊被抹除的次數(shù),并且第一抹除次數(shù)為第一區(qū)塊被抹除的次數(shù)??刂破魇菍?duì)第一抹除次數(shù)進(jìn)行一哈希演算法,以獲得偏移指標(biāo)。在一實(shí)施例中,哈希演算法中的除數(shù)為一個(gè)區(qū)塊中的頁(yè)面的數(shù)量。
又另一實(shí)施例中,種子是依照一既定順序排列于隨機(jī)種子表中,控制器用以根據(jù)偏移指標(biāo)定位至種子中的一指標(biāo)種子,并且自指標(biāo)種子開始依照既定順序擷取種子,以依序?qū)?shù)據(jù)段進(jìn)行編碼。另外,一個(gè)種子用以對(duì)一個(gè)數(shù)據(jù)段進(jìn)行編碼,并且一個(gè)數(shù)據(jù)段用以儲(chǔ)存至一個(gè)第一頁(yè)面。在一實(shí)施例中,數(shù)據(jù)段彼此相同,種子彼此不相同,并且編碼后數(shù)據(jù)段彼此不相同。
本發(fā)明亦提供另一種數(shù)據(jù)儲(chǔ)存裝置。數(shù)據(jù)儲(chǔ)存裝置包括一快閃存儲(chǔ)器以及控制器??扉W存儲(chǔ)器包括多個(gè)區(qū)塊,每一區(qū)塊具有多個(gè)頁(yè)面。控制器用以將一數(shù)據(jù)段重復(fù)寫入?yún)^(qū)塊中的頁(yè)面,其中當(dāng)控制器對(duì)區(qū)塊中的一第一區(qū)塊進(jìn)行寫入時(shí),控制器根據(jù)第一區(qū)塊被抹除的次數(shù),計(jì)算一偏移指標(biāo),并且根據(jù)偏移指標(biāo)對(duì)數(shù)據(jù)段進(jìn)行編碼以產(chǎn)生多個(gè)編碼后數(shù)據(jù)段,并且將編碼后數(shù)據(jù)段依序?qū)懭氲谝粎^(qū)塊中的多個(gè)第一頁(yè)面。
在一實(shí)施例中,數(shù)據(jù)儲(chǔ)存裝置更包括一隨機(jī)種子表,隨機(jī)種子表中具有依照一既定順序排列的多個(gè)種子,其中控制器更用以根據(jù)偏移指標(biāo)在隨機(jī)種子表中定位一指標(biāo)種子以對(duì)數(shù)據(jù)段進(jìn)行編碼。控制器更用以自指標(biāo)種子開始依照既定順序擷取種子,以使用所擷取的種子對(duì)數(shù)據(jù)段進(jìn)行編碼,其中每一種子用以對(duì)數(shù)據(jù)段進(jìn)行編碼并產(chǎn)生一個(gè)編碼后數(shù)據(jù)段,每一編碼后數(shù)據(jù)段彼此不相同,并且一個(gè)第一頁(yè)面用以儲(chǔ)存一個(gè)編碼后數(shù)據(jù)段。
在一實(shí)施例中,控制器是對(duì)第一抹除次數(shù)進(jìn)行一哈希演算法,以獲得偏移指標(biāo)。哈希演算法中的除數(shù)為一個(gè)區(qū)塊中的頁(yè)面的數(shù)量。
本發(fā)明更提供一種數(shù)據(jù)維護(hù)方法,適用于一數(shù)據(jù)儲(chǔ)存裝置,其中數(shù)據(jù)儲(chǔ)存裝置具有多個(gè)區(qū)塊,每一區(qū)塊包括多個(gè)頁(yè)面。數(shù)據(jù)維護(hù)方法包括:接收將多個(gè)數(shù)據(jù)段分別寫入?yún)^(qū)塊中的一第一區(qū)塊的多個(gè)第一頁(yè)面的一寫入命令;讀取第一區(qū)塊的一第一抹除次數(shù),以根據(jù)第一抹除次數(shù)計(jì)算一偏移指標(biāo);根據(jù)偏移指標(biāo)擷取一隨機(jī)種子表中的多個(gè)種子,以使用所擷取的種子對(duì)數(shù)據(jù)段進(jìn)行編碼以獲得多個(gè)編碼后數(shù)據(jù)段;以及將編碼后數(shù)據(jù)段寫入第一頁(yè)面。第一抹除次數(shù)為第一區(qū)塊被抹除的次數(shù)。
在一實(shí)施例中,根據(jù)第一區(qū)塊的第一抹除次數(shù),計(jì)算偏移指標(biāo)的步驟更包括對(duì)第一抹除次數(shù)進(jìn)行一哈希演算法,以獲得偏移指標(biāo),其中哈希演算法中的除數(shù)為一個(gè)區(qū)塊中的頁(yè)面的數(shù)量。
又另一實(shí)施例中,種子是依照一既定順序排列于隨機(jī)種子表中,并且根據(jù)偏移指標(biāo)擷取隨機(jī)種子表中的種子,以使用所擷取的種子對(duì)數(shù)據(jù)段進(jìn)行編碼以獲得編碼后數(shù)據(jù)段的步驟更包括:根據(jù)偏移指標(biāo)定位至種子中的一指標(biāo)種子;以及自指標(biāo)種子開始依照既定順序擷取種子,以依序?qū)?shù)據(jù)段進(jìn)行編碼。一個(gè)種子用以對(duì)一個(gè)數(shù)據(jù)段進(jìn)行編碼,并且一個(gè)數(shù)據(jù)段用以儲(chǔ)存至一個(gè)第一頁(yè)面。在一實(shí)施例中,數(shù)據(jù)段彼此相同,種子彼此不相同,并且編碼后數(shù)據(jù)段彼此不相同。
本發(fā)明更提供一種數(shù)據(jù)維護(hù)方法,適用于一數(shù)據(jù)儲(chǔ)存裝置,其中數(shù)據(jù)儲(chǔ)存裝置具有多個(gè)區(qū)塊,每一區(qū)塊包括多個(gè)頁(yè)面。數(shù)據(jù)維護(hù)方法包括:接收用以將一數(shù)據(jù)段重復(fù)寫入?yún)^(qū)塊中的一第一區(qū)塊的多個(gè)第一頁(yè)面的一寫入命令;根據(jù)寫入命令,讀取第一區(qū)塊的一第一抹除次數(shù),以判斷第一區(qū)塊被抹除的次數(shù);根據(jù)第一區(qū)塊被抹除的次數(shù),計(jì)算一偏移指標(biāo);根據(jù)偏移指標(biāo)對(duì)數(shù)據(jù)段進(jìn)行編碼以產(chǎn)生多個(gè)編碼后數(shù)據(jù)段;以及將編碼后數(shù)據(jù)段依序?qū)懭氲谝粎^(qū)塊中的多個(gè)第一頁(yè)面。
根據(jù)偏移指標(biāo)對(duì)數(shù)據(jù)段進(jìn)行編碼以產(chǎn)生編碼后數(shù)據(jù)段的步驟更包括根據(jù)偏移指標(biāo)在一隨機(jī)種子表中定位一指標(biāo)種子以對(duì)數(shù)據(jù)段進(jìn)行編碼,其中隨機(jī)種子表中具有依照既定順序排列的多個(gè)種子。根據(jù)偏移指標(biāo)對(duì)數(shù)據(jù)段進(jìn)行編碼以產(chǎn)生編碼后數(shù)據(jù)段的步驟更包括自指標(biāo)種子開始依照既定順序擷取種子,以使用所擷取的種子對(duì)數(shù)據(jù)段進(jìn)行編碼,其中每一種子用以對(duì)數(shù)據(jù)段進(jìn)行編碼并產(chǎn)生一個(gè)編碼后數(shù)據(jù)段,每一編碼后數(shù)據(jù)段彼此不相同,并且一個(gè)第一頁(yè)面用以儲(chǔ)存一個(gè)編碼后數(shù)據(jù)段。
另外,根據(jù)第一區(qū)塊被抹除的次數(shù),計(jì)算偏移指標(biāo)的步驟更包括對(duì)第一抹除次數(shù)進(jìn)行一哈希演算法,以獲得偏移指標(biāo)。哈希演算法中的除數(shù)為一個(gè)區(qū)塊中的頁(yè)面的數(shù)量。
附圖說明
為讓本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,以下結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式作詳細(xì)說明,其中:
圖1是本發(fā)明的一種實(shí)施例的電子系統(tǒng)的方塊圖。
圖2是本發(fā)明的一種實(shí)施例的快閃存儲(chǔ)器的示意圖。
圖3是本發(fā)明的一種實(shí)施例的隨機(jī)種子表的示意圖。
圖4是本發(fā)明的一種實(shí)施例的選取種子的操作的示意圖。
圖5是本發(fā)明的另一種實(shí)施例的選取種子的操作的示意圖。
圖6是本發(fā)明的一種實(shí)施例的數(shù)據(jù)維護(hù)方法的流程圖。
圖7是本發(fā)明的一種實(shí)施例的數(shù)據(jù)維護(hù)方法的流程圖。
圖中元件標(biāo)號(hào)說明:
100 電子系統(tǒng);
120 主機(jī);
140 數(shù)據(jù)儲(chǔ)存裝置;
160 控制器;
162 運(yùn)算單元;
164 永久存儲(chǔ)器;
166 動(dòng)態(tài)隨機(jī)存取器;
180 快閃存儲(chǔ)器;
B0~BN 區(qū)塊;
P0~PN 頁(yè)面;
RST 隨機(jī)種子表;
RS_0~RS_N 種子;
ECD0~ECD7 編碼后數(shù)據(jù)段;
DS 數(shù)據(jù)段;
S600~S604、S700~S706 步驟。
具體實(shí)施方式
以下將詳細(xì)討論本發(fā)明各種實(shí)施例的裝置及使用方法。然而值得注意的是,本發(fā)明所提供的許多可行的發(fā)明概念可實(shí)施在各種特定范圍中。這些特定實(shí)施例僅用于舉例說明本發(fā)明的裝置及使用方法,但非用于限定本發(fā)明的范圍。
圖1是本發(fā)明的一種實(shí)施例的電子系統(tǒng)的方塊圖。電子系統(tǒng)100包括一主機(jī)120以及一數(shù)據(jù)儲(chǔ)存裝置140。數(shù)據(jù)儲(chǔ)存裝置140包括一快閃存儲(chǔ)器180以及一控制器160,且可根據(jù)主機(jī)120所下達(dá)的命令操作。
控制器160包括一運(yùn)算單元162、一永久存儲(chǔ)器(如,唯讀存儲(chǔ)器ROM)164以及一動(dòng)態(tài)隨機(jī)存取器(RAM)166。永久存儲(chǔ)器164與所載的程序碼、數(shù)據(jù)組成固件(firmware),由運(yùn)算單元162執(zhí)行,使控制器160基于該固件控制該快閃存儲(chǔ)器180。
快閃存儲(chǔ)器180包括多個(gè)區(qū)塊B0~BN,每一區(qū)塊B0~BN中包括多個(gè)頁(yè)面P0~PN,如圖2所示。值得注意的是,快閃存儲(chǔ)器180的最小寫入單位為頁(yè)面,并且快閃存儲(chǔ)器180最小的抹除單位為區(qū)塊。在本發(fā)明的一實(shí)施例中,控制器160更用以記錄每一區(qū)塊B0~BN被抹除的次數(shù)。換言之,快閃存儲(chǔ)器180或者永久存儲(chǔ)器164中具有一抹除次數(shù)表,用以記錄快閃存儲(chǔ)器180中每一區(qū)塊B0~BN從第一次使用開始被抹除的次數(shù),但本發(fā)明不限于此。在其他實(shí)施例中,每一區(qū)塊B0~BN的抹除次數(shù)亦可分別儲(chǔ)存于所相應(yīng)的區(qū)塊B0~BN中。另外,快閃存儲(chǔ)器180更包括一隨機(jī)種子表RST,如圖3所示。
圖3是本發(fā)明的一種實(shí)施例的隨機(jī)種子表的示意圖。隨機(jī)種子表RST具有多個(gè)種子RS_0~RS_N,其中種子RS_0~RS_N是依照一既定順序排列于隨機(jī)種子RS_0~RS_N表RST中,如圖3所示。換言之,隨機(jī)種子RS_0~RS_N是依序儲(chǔ)存于隨機(jī)種子表RST中。隨機(jī)種子表RST是用以提供控制器160種子RS_0~RS_N,使得控制器160可使用不同的種子對(duì)數(shù)據(jù)進(jìn)行編碼,以產(chǎn)生不同的編碼數(shù)據(jù)。在本發(fā)明的一實(shí)施例中,隨機(jī)種子RS_0~RS_N的數(shù)量與一個(gè)區(qū)塊中的頁(yè)面P0~PN的數(shù)量相同,但本發(fā)明不限于此。在其他實(shí)施例中,隨機(jī)種子RS_0~RS_N的數(shù)量亦可大于一個(gè)區(qū)塊中的頁(yè)面P0~PN的數(shù)量,或者小于一個(gè)區(qū)塊中的頁(yè)面P0~PN的數(shù)量。在某些實(shí)施例中,一個(gè)區(qū)塊可具有128個(gè)頁(yè)面,但本發(fā)明不限于此。不同的快閃存儲(chǔ)器180可具有不同的頁(yè)面數(shù)量以及區(qū)塊數(shù)量。
在某些情況下,控制器160需要將數(shù)據(jù)重復(fù)地寫入頁(yè)面中。然而,快閃存儲(chǔ)器180中的頁(yè)面若重復(fù)被寫入相同的數(shù)據(jù)或者相鄰的頁(yè)面被寫入相同的數(shù)據(jù),則容易造成頁(yè)面損壞。有鑒于此,控制器160可借由隨機(jī)種子表RST中的種子RS_0~RS_N隨機(jī)打亂所寫入的數(shù)據(jù),以避免頁(yè)面損壞。
詳細(xì)而言,當(dāng)控制器160接收到將多個(gè)數(shù)據(jù)段分別寫入?yún)^(qū)塊中的一第一區(qū)塊的多個(gè)第一頁(yè)面的一寫入命令時(shí),控制器160根據(jù)第一區(qū)塊的一第一抹除次數(shù),計(jì)算一偏移指標(biāo)。接著,控制器160根據(jù)偏移指標(biāo)擷取一隨機(jī)種子表RST中的多個(gè)種子RS_0~RS_N,并且使用所擷取的種子RS_0~RS_N分別對(duì)數(shù)據(jù)段進(jìn)行編碼以獲得多個(gè)編碼后數(shù)據(jù)段。最后,控制器160將編碼后數(shù)據(jù)段寫入第一頁(yè)面。值得注意的是,在本實(shí)施例中,數(shù)據(jù)段之內(nèi)容可相同亦可彼此不同,本發(fā)明不限于此。
在本發(fā)明的一實(shí)施例中,控制器160是對(duì)第一抹除次數(shù)進(jìn)行一哈希演算法(Hash),以獲得偏移指標(biāo),其中哈希演算法中的除數(shù)(Divisor)為一個(gè)區(qū)塊中的頁(yè)面的數(shù)量,但本發(fā)明不限于此。在其他實(shí)施例中,控制器160亦使用其他演算法借由第一抹除次數(shù),計(jì)算出偏移指標(biāo)。接著,控制器160根據(jù)偏移指標(biāo),在隨機(jī)種子表RST中定位至種子RS_0~RS_N中的一者,以作為指標(biāo)種子。接著,控制器160自指標(biāo)種子開始依照種子RS_0~RS_N所排列的既定順序,擷取種子RS_0~RS_N,以依序?qū)?shù)據(jù)段進(jìn)行編碼。值得注意的是,一個(gè)種子RS_0~RS_N用以對(duì)一個(gè)數(shù)據(jù)段進(jìn)行編碼,并且一個(gè)數(shù)據(jù)段用以儲(chǔ)存至一個(gè)第一頁(yè)面。另外,在一實(shí)施例中,數(shù)據(jù)段彼此相同,種子RS_0~RS_N彼此不相同,并且編碼后數(shù)據(jù)段彼此不相同。
換言之,在數(shù)據(jù)段彼此相同的實(shí)施例中,控制器160是用以將數(shù)據(jù)段重復(fù)寫入?yún)^(qū)塊中的頁(yè)面。舉例而言,當(dāng)測(cè)試快閃存儲(chǔ)器180的性能時(shí),控制器160往往被指示對(duì)快閃存儲(chǔ)器180重復(fù)地寫入一相同的數(shù)據(jù),并且在快閃存儲(chǔ)器180被寫滿后抹除掉快閃存儲(chǔ)器180中的數(shù)據(jù)以繼續(xù)重復(fù)地寫入相同的數(shù)據(jù)。因此,在上述的情況下,區(qū)塊中相鄰的頁(yè)面以及被重復(fù)寫入的同樣區(qū)塊容易損壞。因此,借由本發(fā)明的一實(shí)施例,控制器160可借由隨機(jī)種子表RST中的種子RS_0~RS_N打斷所要寫入的數(shù)據(jù)以達(dá)到保護(hù)快閃存儲(chǔ)器180的效果。
詳細(xì)而言,當(dāng)控制器160對(duì)區(qū)塊中的一第一區(qū)塊進(jìn)行寫入時(shí),控制器160根據(jù)第一區(qū)塊被抹除的次數(shù)(第一抹除次數(shù)),計(jì)算一偏移指標(biāo)。接著,控制器160根據(jù)偏移指標(biāo)對(duì)數(shù)據(jù)段進(jìn)行編碼以產(chǎn)生多個(gè)編碼后數(shù)據(jù)段,并且將編碼后數(shù)據(jù)段依序?qū)懭氲谝粎^(qū)塊中的多個(gè)第一頁(yè)面。如上所述,控制器160是對(duì)第一抹除次數(shù)進(jìn)行哈希演算法,以獲得偏移指標(biāo),其中哈希演算法中的除數(shù)為一個(gè)區(qū)塊中的頁(yè)面的數(shù)量,但本發(fā)明不限于此。另外,控制器160是用以根據(jù)偏移指標(biāo)在隨機(jī)種子表RST中定位一指標(biāo)種子以對(duì)數(shù)據(jù)段進(jìn)行編碼。如上所述,在一實(shí)施例中,控制器160是用以自指標(biāo)種子RS_0~RS_N開始依照既定順序擷取種子RS_0~RS_N,以使用所擷取的種子RS_0~RS_N對(duì)數(shù)據(jù)段進(jìn)行編碼,其中每一種子RS_0~RS_N用以對(duì)數(shù)據(jù)段進(jìn)行編碼并產(chǎn)生一個(gè)編碼后數(shù)據(jù)段,每一編碼后數(shù)據(jù)段彼此不相同,并且一個(gè)第一頁(yè)面用以儲(chǔ)存一個(gè)編碼后數(shù)據(jù)段。
另外,當(dāng)控制器160又再次對(duì)區(qū)塊中的第一區(qū)塊進(jìn)行寫入時(shí),第一區(qū)塊的第一抹除次數(shù)必然大于上一次控制器160所讀取的數(shù)值。因此,當(dāng)?shù)谝粎^(qū)塊被重復(fù)寫入數(shù)據(jù)段時(shí),控制器160根據(jù)第一區(qū)塊已增加的第一抹除次數(shù),獲得不同于前次的偏移指標(biāo)。因此,控制器160根據(jù)偏移指標(biāo),會(huì)以不同的順序擷取隨機(jī)種子表RST中的種子RS_0~RS_N。換言之,頁(yè)面中被寫入的編碼后數(shù)據(jù)段會(huì)不同于前次相同頁(yè)面被寫入的編碼后數(shù)據(jù)段。
圖4是本發(fā)明的一種實(shí)施例的選取種子的操作的示意圖。舉例而言,如圖4所示,快閃存儲(chǔ)器180中的每一區(qū)塊B0~BN分別具有八個(gè)頁(yè)面P0~P7,并且隨機(jī)種子表RST具有依照既定順序排列的八個(gè)種子RS0~RS7。當(dāng)控制器160對(duì)區(qū)塊中的區(qū)塊B0進(jìn)行寫入時(shí),控制器160根據(jù)區(qū)塊B0被抹除的次數(shù),計(jì)算一偏移指標(biāo)。假設(shè),區(qū)塊B0的抹除次數(shù)為2,哈希演算法中的除數(shù)為8??刂破?60則可根據(jù)哈希演算法將2除以8,以獲得余數(shù)為2,并且將余數(shù)“2”作為偏移指標(biāo)OFS。接著,控制器160根據(jù)偏移指標(biāo)OFS,在隨機(jī)種子表RST中定位至偏移量為2的種子RS2以做為指標(biāo)種子。接著,控制器160擷取種子RS2以對(duì)數(shù)據(jù)段DS進(jìn)行編碼,并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD2寫入?yún)^(qū)塊B0的第一個(gè)頁(yè)面P0。接著,控制器160依照種子RS0~RS7所排列的既定順序擷取下一個(gè)種子RS3,并且控制器160使用種子RS3對(duì)數(shù)據(jù)段DS進(jìn)行編碼,并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD3寫入?yún)^(qū)塊B0的第二個(gè)頁(yè)面P1。接著,控制器160依照種子RS0~RS7所排列的既定順序擷取下一個(gè)種子RS4,并且控制器160使用種子RS4對(duì)數(shù)據(jù)段DS進(jìn)行編碼,并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD4寫入?yún)^(qū)塊B0的第三個(gè)頁(yè)面P2,依此類推。直到控制器160使用隨機(jī)種子表RST中最后一個(gè)種子RS7對(duì)數(shù)據(jù)段DS進(jìn)行編碼并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD7寫入?yún)^(qū)塊B0的第六個(gè)頁(yè)面P5后,控制器160回頭擷取隨機(jī)種子表RST中的第一個(gè)種子RS0,以對(duì)數(shù)據(jù)段DS進(jìn)行編碼并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD0寫入?yún)^(qū)塊B0的第七個(gè)頁(yè)面P6。接著,控制器160重復(fù)上述動(dòng)作直到區(qū)塊B0中的所有頁(yè)面都被寫滿為止。值得注意的是,由于種子RS0~RS7皆不相同,故所產(chǎn)生的編碼后數(shù)據(jù)段ECD0~ECD7亦彼此不同。
當(dāng)控制器160寫完區(qū)塊B0后,控制器160可依照指令繼續(xù)以相同的方式對(duì)其他區(qū)塊進(jìn)行寫入,但本發(fā)明不限于此。由于存儲(chǔ)器空間不足、接收到主機(jī)所產(chǎn)生的指令或者基于數(shù)據(jù)維護(hù)的原因,區(qū)塊B0可能在被控制器160寫完后被抹除,并且重新歸屬到可寫入的數(shù)據(jù)區(qū)塊。值得注意的是,當(dāng)區(qū)塊B0被抹除時(shí),控制器160將區(qū)塊B0的抹除次數(shù)加1。當(dāng)控制器160又再次選取到區(qū)塊B0并且進(jìn)行寫入時(shí),控制器160則會(huì)借由不同的抹除次數(shù)獲得到不同的偏移指標(biāo)。如圖5所示,相同地快閃存儲(chǔ)器180中的每一區(qū)塊B0~BN分別具有八個(gè)頁(yè)面P0~P7,并且隨機(jī)種子表RST具有依照既定順序排列的八個(gè)種子RS0~RS7。當(dāng)控制器160再次對(duì)區(qū)塊中的區(qū)塊B0進(jìn)行寫入時(shí),控制器160根據(jù)區(qū)塊B0被抹除的次數(shù),計(jì)算一偏移指標(biāo)。在本實(shí)施例中,區(qū)塊B0的抹除次數(shù)已增加為3。因此,控制器160根據(jù)哈希演算法將3除以8,以獲得余數(shù)為3,并且將余數(shù)“3”作為偏移指標(biāo)OFS。接著,控制器160根據(jù)偏移指標(biāo)OFS,在隨機(jī)種子表RST中定位至偏移量為3的種子RS3以做為指標(biāo)種子。接著,控制器160擷取種子RS3以對(duì)數(shù)據(jù)段DS進(jìn)行編碼,并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD3寫入?yún)^(qū)塊B0的第一個(gè)頁(yè)面P0。接著,控制器160依照種子RS0~RS7所排列的既定順序擷取下一個(gè)種子RS4,并且控制器160使用種子RS4對(duì)數(shù)據(jù)段DS進(jìn)行編碼,并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD4寫入?yún)^(qū)塊B0的第二個(gè)頁(yè)面P1。接著,控制器160依照種子RS0~RS7所排列的既定順序擷取下一個(gè)種子RS5,并且控制器160使用種子RS5對(duì)數(shù)據(jù)段DS進(jìn)行編碼,并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD5寫入?yún)^(qū)塊B0的第三個(gè)頁(yè)面P2,依此類推。直到控制器160使用隨機(jī)種子表RST中最后一個(gè)種子RS7對(duì)數(shù)據(jù)段DS進(jìn)行編碼并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD7寫入?yún)^(qū)塊B0的第五個(gè)頁(yè)面P4后,控制器160回頭擷取隨機(jī)種子表RST中的第一個(gè)種子RS0,以對(duì)數(shù)據(jù)段DS進(jìn)行編碼并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD0寫入?yún)^(qū)塊B0的第六個(gè)頁(yè)面P5。接著,控制器160重復(fù)上述動(dòng)作直到區(qū)塊B0中的所有頁(yè)面都被寫滿為止。比較圖4以及圖5可知,當(dāng)偏移指標(biāo)不同時(shí),頁(yè)面所被寫入的數(shù)據(jù)也就不同。換言之,由于偏移指標(biāo)是由抹除次數(shù)所決定的,故區(qū)塊在重復(fù)被寫入時(shí)也可避免相同的數(shù)據(jù)重復(fù)被寫入到同一個(gè)頁(yè)面。值得注意的是,在其他實(shí)施例中,寫入每一頁(yè)面的數(shù)據(jù)段亦可不相同。借由上述的方法,不相同的數(shù)據(jù)段可更隨機(jī)的被打亂并且寫入頁(yè)面中,以達(dá)到存入不規(guī)則數(shù)據(jù)或者數(shù)據(jù)安全的需求。
圖6是本發(fā)明的一種實(shí)施例的數(shù)據(jù)維護(hù)方法的流程圖。數(shù)據(jù)維護(hù)方法適用于圖1所示的數(shù)據(jù)儲(chǔ)存裝置140。流程開始于步驟S600。
在步驟S600中,控制器160自主機(jī)120或者其他裝置接收將多個(gè)數(shù)據(jù)段分別寫入?yún)^(qū)塊中的一第一區(qū)塊的多個(gè)第一頁(yè)面的一寫入命令。值得注意的是,在本實(shí)施例中,數(shù)據(jù)段之內(nèi)容可相同亦可彼此不同,本發(fā)明不限于此。換言之,在數(shù)據(jù)段彼此相同的實(shí)施例中,控制器160是接收用以將數(shù)據(jù)段重復(fù)寫入?yún)^(qū)塊中的一第一區(qū)塊的第一頁(yè)面的寫入命令。
接著,在步驟S602中,控制器160讀取第一區(qū)塊的一第一抹除次數(shù)以判斷第一區(qū)塊被抹除的次數(shù),并且根據(jù)第一抹除次數(shù)計(jì)算一偏移指標(biāo)。換言之,快閃存儲(chǔ)器180或者永久存儲(chǔ)器164中具有一抹除次數(shù)表,用以記錄快閃存儲(chǔ)器180中每一區(qū)塊B0~BN從第一次使用開始被抹除的次數(shù),但本發(fā)明不限于此。在其他實(shí)施例中,每一區(qū)塊B0~BN的抹除次數(shù)亦可分別儲(chǔ)存于所相應(yīng)的區(qū)塊B0~BN中。在本發(fā)明的一實(shí)施例中,控制器160是對(duì)第一抹除次數(shù)進(jìn)行一哈希演算法(Hash),以獲得偏移指標(biāo),其中哈希演算法中的除數(shù)(Divisor)為一個(gè)區(qū)塊中的頁(yè)面的數(shù)量,但本發(fā)明不限于此。以圖4為例,快閃存儲(chǔ)器180中的每一區(qū)塊B0~BN分別具有八個(gè)頁(yè)面P0~P7,并且隨機(jī)種子表RST具有依照既定順序排列的八個(gè)種子RS0~RS7。當(dāng)控制器160對(duì)區(qū)塊中的區(qū)塊B0進(jìn)行寫入時(shí),控制器160根據(jù)區(qū)塊B0被抹除的次數(shù),計(jì)算一偏移指標(biāo)(步驟S602)。假設(shè),區(qū)塊B0的抹除次數(shù)為2,哈希演算法中的除數(shù)為8。控制器160則可根據(jù)哈希演算法將2除以8,以獲得余數(shù)為2,并且將余數(shù)”2”作為偏移指標(biāo)OFS,但本發(fā)明不限于此。
接著,在步驟S604中,控制器160根據(jù)偏移指標(biāo)對(duì)數(shù)據(jù)段進(jìn)行編碼以產(chǎn)生多個(gè)編碼后數(shù)據(jù)段,并將所產(chǎn)生的編碼后數(shù)據(jù)段依序儲(chǔ)存至第一區(qū)塊的第一頁(yè)面。流程結(jié)束于步驟S604。
圖7是本發(fā)明的一種實(shí)施例的數(shù)據(jù)維護(hù)方法的流程圖。數(shù)據(jù)維護(hù)方法適用于圖1所示的數(shù)據(jù)儲(chǔ)存裝置140。流程開始于步驟S700。值得注意的是,圖7的數(shù)據(jù)維護(hù)方法為圖6的步驟S604的詳細(xì)步驟。
在步驟S700中,控制器160根據(jù)偏移指標(biāo)擷取一隨機(jī)種子表RST中的多個(gè)種子RS_0~RS_N中的一者。詳細(xì)而言,種子RS_0~RS_N是依照一既定順序排列于隨機(jī)種子表RST中,如圖3所示??刂破?60是根據(jù)偏移指標(biāo)定位至種子RS_0~RS_N中的一指標(biāo)種子RS_0~RS_N,以自指標(biāo)種子開始依照種子RS_0~RS_N所排列的既定順序擷取種子RS_0~RS_N。值得注意的是,在步驟S700中一次僅擷取一個(gè)種子,在下一次流程回到步驟S700后才會(huì)自指標(biāo)種子開始依照種子RS_0~RS_N所排列的既定順序擷取下一個(gè)種子。
接著,在步驟S702中,控制器160使用所擷取的種子對(duì)數(shù)據(jù)段進(jìn)行編碼以獲得一編碼后數(shù)據(jù)段。
接著,在步驟S704中,控制器160將所獲得的編碼后數(shù)據(jù)段依序?qū)懭氲谝豁?yè)面。值得注意的是,一個(gè)第一頁(yè)面用以儲(chǔ)存一個(gè)編碼后數(shù)據(jù)段。一個(gè)種子RS_0~RS_N用以對(duì)一個(gè)數(shù)據(jù)段進(jìn)行編碼,并且一個(gè)數(shù)據(jù)段用以儲(chǔ)存至一個(gè)第一頁(yè)面。在一實(shí)施例中,數(shù)據(jù)段彼此相同,種子RS_0~RS_N彼此不相同,并且編碼后數(shù)據(jù)段彼此不相同。
接著,在步驟S706中,控制器160判斷第一區(qū)塊是否有其他頁(yè)面需要寫入。當(dāng)控制器160判斷第一區(qū)塊有其他頁(yè)面需要寫入時(shí),流程回到步驟S700;否則,流程結(jié)束于步驟S706。以圖4為例,假設(shè)控制器160則根據(jù)哈希演算法獲得偏移指標(biāo)OFS為“2”。接著,在步驟S700中,控制器160根據(jù)偏移指標(biāo)OFS,在隨機(jī)種子表RST中定位至偏移量為2的種子RS2以做為指標(biāo)種子。接著,控制器160擷取種子RS2以對(duì)數(shù)據(jù)段DS進(jìn)行編碼(步驟S702),并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD2寫入?yún)^(qū)塊B0的第一個(gè)頁(yè)面P0(步驟S704)。由于區(qū)塊B0中尚有頁(yè)面P1~P7需要寫入數(shù)據(jù)。因此,流程回到步驟S700,控制器160依照種子RS0~RS7所排列的既定順序擷取指標(biāo)種子的下一個(gè)種子RS3,并且控制器160使用種子RS3對(duì)數(shù)據(jù)段DS進(jìn)行編碼(步驟S702),并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD3寫入?yún)^(qū)塊B0的第二個(gè)頁(yè)面P1(步驟S704)。由于區(qū)塊B0中尚有頁(yè)面P2~P7需要寫入數(shù)據(jù)。因此,流程回到步驟S700,控制器160依照種子RS0~RS7所排列的既定順序擷取指標(biāo)種子的下兩個(gè)種子RS4,并且控制器160使用種子RS4對(duì)數(shù)據(jù)段DS進(jìn)行編碼(步驟S702),并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD4寫入?yún)^(qū)塊B0的第三個(gè)頁(yè)面P2(步驟S704),依此類推。直到控制器160使用隨機(jī)種子表RST中最后一個(gè)種子RS7對(duì)數(shù)據(jù)段DS進(jìn)行編碼并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD7寫入?yún)^(qū)塊B0的第六個(gè)頁(yè)面P5后,控制器160在步驟S700中,回頭擷取隨機(jī)種子表RST中的第一個(gè)種子RS0,以對(duì)數(shù)據(jù)段DS進(jìn)行編碼并將所產(chǎn)生的編碼后數(shù)據(jù)段ECD0寫入?yún)^(qū)塊B0的第七個(gè)頁(yè)面P6(步驟S702~S704)。接著,控制器160重復(fù)上述動(dòng)作直到區(qū)塊B0中的所有頁(yè)面都被寫滿為止。值得注意的是,由于種子RS0~RS7皆不相同,故所產(chǎn)生的編碼后數(shù)據(jù)段ECD0~ECD7亦彼此不同。
本發(fā)明所提供的數(shù)據(jù)儲(chǔ)存裝置以及數(shù)據(jù)維護(hù)方法可降低頁(yè)面損壞的幾率。
本發(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í)施例揭示如上,然其并非用以限定本發(fā)明,任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作些許的修改和完善,因此本發(fā)明的保護(hù)范圍當(dāng)以權(quán)利要求書所界定的為準(zhǔn)。