本發(fā)明是涉及閃存,尤其涉及一種存取閃存模塊的方法及相關(guān)的閃存控制器與記憶裝置。
背景技術(shù):
為了讓閃存能夠有更高的密度以及更大的容量,閃存的制程也朝向立體化的發(fā)展,而產(chǎn)生了幾種不同的立體NAND型閃存(3D NAND-type flash)。在立體NAND型閃存中,由于整體結(jié)構(gòu)的不同以及浮閘形狀位置的改變,因此在數(shù)據(jù)的寫入以及讀取上也較傳統(tǒng)的平面NAND型閃存多出了些許的問題。舉例來說,在某些立體NAND型閃存中,會(huì)將多條字線(word line)定義為一字線組,而所述字線組會(huì)共同具有部分的控制電路,進(jìn)而導(dǎo)致當(dāng)數(shù)據(jù)寫入到所述字線組的一條字在線的浮閘晶體管發(fā)生失敗時(shí)(寫入失敗),會(huì)連帶導(dǎo)致所述字線組的其他字在線的浮閘晶體管的數(shù)據(jù)發(fā)生錯(cuò)誤;此外,若是所述字線組中的一條字線發(fā)生斷路或短路的狀況時(shí),也會(huì)連帶影響到所述字線組的其他字在線的浮閘晶體管的數(shù)據(jù)發(fā)生錯(cuò)誤,因此,如何就上述問題提出一種錯(cuò)誤更正方式,以盡可能地維持?jǐn)?shù)據(jù)的正確性,且又不會(huì)浪費(fèi)存儲(chǔ)器空間以節(jié)省成本,是一個(gè)重要的課題。
技術(shù)實(shí)現(xiàn)要素:
因此,本發(fā)明的目的之一在于公開一種存取一閃存模塊的方法及相關(guān)的閃存控制器與記憶裝置,其使用類似容錯(cuò)式磁盤陣列(Redundant Array of Independent Disks,RAID)的錯(cuò)誤更正方式,但是卻不會(huì)大幅浪費(fèi)存儲(chǔ)器空間,以解決現(xiàn)有技術(shù)中的問題。
本發(fā)明的一實(shí)施例公開了一種存取一閃存模塊的方法,所述方法包括:對(duì)第N筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生一第N組錯(cuò)誤更正碼,其中所述第N組錯(cuò)誤更正碼是用來對(duì)所述第N筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,其中N為一正整數(shù);將所述第N筆資料寫入至所述閃存模塊中;將所述第N組錯(cuò)誤更正碼寫入至所述閃存模塊中;當(dāng)所述第N筆數(shù)據(jù)成功寫入至所述閃存模塊后,刪除所述閃存模塊中的所述第N組錯(cuò)誤更正碼中至少一部分,但在所述閃存模塊中保留所述第N筆數(shù)據(jù)。
本發(fā)明的另一實(shí)施例公開了一種存取一閃存模塊的方法,所述方法包括:將第N筆數(shù)據(jù)寫入至所述閃存模塊中的多個(gè)閃存芯片,并對(duì)所述第N筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生一第N組錯(cuò)誤更正碼,其中所述第N組錯(cuò)誤更正碼是用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第N筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,其中N為一正整數(shù);當(dāng)判斷所述第N筆數(shù)據(jù)已成功寫入至所述多個(gè)閃存芯片中之后,保留所述第N組錯(cuò)誤更正碼;依序?qū)⒌?N+1)~(N+M)筆資料分別寫入至所述閃存模塊中的所述多個(gè)閃存芯片,并分別對(duì)所述第(N+1)~(N+M)筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第(N+1)~(N+M)組錯(cuò)誤更正碼,其中所述第(N+1)~(N+M)組錯(cuò)誤更正碼是分別用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第(N+1)~(N+M)筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,其中M為一正整數(shù);以及當(dāng)判斷所述第(N+M)筆數(shù)據(jù)已成功寫入至所述多個(gè)閃存芯片中時(shí),才刪除所述第N~(N+M)組錯(cuò)誤更正碼。
本發(fā)明的另一實(shí)施例公開了一種閃存控制器,其中所述閃存控制器是用來存取一閃存模塊,且所述閃存控制器包括:一存儲(chǔ)器,用來儲(chǔ)存一程序代碼;一微處理器,用來執(zhí)行所述程序代碼以控制對(duì)所述閃存模塊的存取;以及一編碼器;其中所述微處理器對(duì)第N筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生一第N組錯(cuò)誤更正碼,其中所述第N組錯(cuò)誤更正碼是用來對(duì)所述第N筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,其中N為一正整數(shù);所述微處理器將所述第N筆資料寫入至所述閃存模塊中,并將所述第N組錯(cuò)誤更正碼寫入至所述閃存模塊中;當(dāng)所述第N筆資料成功寫入至所述閃存模塊后,所述微處理器刪除所述閃存模塊中的所述第N組錯(cuò)誤更正碼中至少一部分,但在所述閃存模塊中保留所述第N筆數(shù)據(jù)。
本發(fā)明的另一實(shí)施例公開了一種閃存控制器,其中所述閃存控制器是用來存取一閃存模塊,且所述閃存控制器包括:一存儲(chǔ)器,用來儲(chǔ)存一程序代碼;一微處理器,用來執(zhí)行所述程序代碼以控制對(duì)所述閃存模塊的存??;以及一編碼器;其中所述微處理器將第N筆數(shù)據(jù)寫入至所述閃存模塊中的多個(gè)閃存芯片,且所述編碼器對(duì)所述第N筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生一第N組錯(cuò)誤更正碼,其中所述第N組錯(cuò)誤更正碼是用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第N筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,其中N為一正整數(shù);當(dāng)所述微處理器判斷所述第N筆資料已成功寫入至所述多個(gè)閃存芯片中之后,保留所述第N組錯(cuò)誤更正碼;所述微處理器依序?qū)⒌?N+1)~(N+M)筆資料分別寫入至所述閃存模塊中的所述多個(gè)閃存芯片,且所述編碼器分別對(duì)所述第(N+1)~(N+M)筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第(N+1)~(N+M)組錯(cuò)誤更正碼,其中所述第(N+1)~(N+M)組錯(cuò)誤更正碼是分別用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第(N+1)~(N+M)筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,其中M為一正整數(shù);以及當(dāng)所述微處理器判斷所述第(N+M)筆資料已成功寫入至所述多個(gè)閃存芯片中時(shí),才刪除所述第N~(N+M)組錯(cuò)誤更正碼。
本發(fā)明的另一實(shí)施例公開了一種記憶裝置,包括:一閃存模塊;以及一閃存控制器,用來存取所述閃存;其中所述閃存控制器對(duì)第N筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生一第N組錯(cuò)誤更正碼,其中所述第N組錯(cuò)誤更正碼是用來對(duì)所述第N筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,其中N為一正整數(shù);將所述第N筆資料寫入至所述閃存模塊中;將所述第N組錯(cuò)誤更正碼寫入至所述閃存模塊中;所述第N筆數(shù)據(jù)成功寫入至所述閃存模塊后,刪除所述閃存模塊中的所述第N組錯(cuò)誤更正碼中至少一部分,但在所述閃存模塊中保留所述第N筆數(shù)據(jù)。
本發(fā)明的另一實(shí)施例公開了一種記憶裝置,包括:一閃存模塊;以及一閃存控制器,用來存取所述閃存;其中所述閃存控制器將第N筆數(shù)據(jù)寫入至所述閃存模塊中的多個(gè)閃存芯片,且對(duì)所述第N筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生一第N組錯(cuò)誤更正碼,其中所述第N組錯(cuò)誤更正碼是用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第N筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,其中N為一正整數(shù);當(dāng)所述閃存控制器判斷所述第N筆數(shù)據(jù)已成功寫入至所述多個(gè)閃存芯片中之后,保留所述第N組錯(cuò)誤更正碼;所述閃存控制器依序?qū)⒌?N+1)~(N+M)筆資料分別寫入至所述閃存模塊中的所述多個(gè)閃存芯片,并分別對(duì)所述第(N+1)~(N+M)筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第(N+1)~(N+M)組錯(cuò)誤更正碼,其中所述第(N+1)~(N+M)組錯(cuò)誤更正碼是分別用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第(N+1)~(N+M)筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,其中M為一正整數(shù);以及當(dāng)判斷所述第(N+M)筆數(shù)據(jù)已成功寫入至所述多個(gè)閃存芯片中時(shí),所述閃存控制器才刪除所述第N~(N+M)組錯(cuò)誤更正碼。
本發(fā)明的另一實(shí)施例公開了一種存取一閃存模塊的方法,所述方法包括:依序?qū)⒌贜~(N+K)筆資料分別寫入至所述閃存模塊中的多個(gè)閃存芯片,并分別對(duì)所述第N~(N+K)筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第N~(N+K)組錯(cuò)誤更正碼,其中所述第N~(N+K)組錯(cuò)誤更正碼是分別用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第N~(N+K)筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,其中N、K為一正整數(shù);以及將第(N+K+1)筆數(shù)據(jù)寫入至所述閃存模塊中的所述多個(gè)閃存芯片,并使用所述第N~(N+K)組錯(cuò)誤更正碼中至少其一來與所述第(N+K+1)筆數(shù)據(jù)一并進(jìn)行編碼,以產(chǎn)生第(N+K+1)組錯(cuò)誤更正碼。
本發(fā)明的另一實(shí)施例公開了一種閃存控制器,其中所述閃存控制器是用來存取一閃存模塊,且所述閃存控制器包括:一存儲(chǔ)器,用來儲(chǔ)存一程序代碼;一微處理器,用來執(zhí)行所述程序代碼以控制對(duì)所述閃存模塊的存??;以及一編碼器;其中所述微處理器依序?qū)⒌贜~(N+K)筆資料分別寫入至所述閃存模塊中的多個(gè)閃存芯片,且所述編碼器分別對(duì)所述第N~(N+K)筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第N~(N+K)組錯(cuò)誤更正碼,其中所述第N~(N+K)組錯(cuò)誤更正碼是分別用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第N~(N+K)筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,且N、K為一正整數(shù);以及所述微處理器將第(N+K+1)筆資料寫入至所述閃存模塊中的所述多個(gè)閃存芯片,且所述編碼器使用所述第N~(N+K)組錯(cuò)誤更正碼中至少其一來與所述第(N+K+1)筆數(shù)據(jù)一并進(jìn)行編碼,以產(chǎn)生第(N+K+1)組錯(cuò)誤更正碼。
本發(fā)明的另一實(shí)施例公開了一種記憶裝置,包括:一閃存模塊;以及一閃存控制器,用來存取所述閃存;其中所述閃存控制器依序?qū)⒌贜~(N+K)筆數(shù)據(jù)分別寫入至所述閃存模塊中的多個(gè)閃存芯片,并分別對(duì)所述第N~(N+K)筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第N~(N+K)組錯(cuò)誤更正碼,其中所述第N~(N+K)組錯(cuò)誤更正碼是分別用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第N~(N+K)筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正,且N、K為一正整數(shù);以及所述閃存控制器將第(N+K+1)筆數(shù)據(jù)寫入至所述閃存模塊中的所述多個(gè)閃存芯片,且使用所述第N~(N+K)組錯(cuò)誤更正碼中至少其一來與所述第(N+K+1)筆數(shù)據(jù)一并進(jìn)行編碼,以產(chǎn)生第(N+K+1)組錯(cuò)誤更正碼。
附圖說明
圖1為依據(jù)本發(fā)明一實(shí)施例的一種記憶裝置的示意圖。
圖2為一立體NAND型閃存的范例示意圖。
圖3為浮閘晶體管結(jié)構(gòu)的概念示意圖。
圖4為一區(qū)塊中多個(gè)字線組的示意圖。
圖5為閃存控制器將數(shù)據(jù)寫入到閃存模塊的示意圖。
圖6為依據(jù)本發(fā)明一第一實(shí)施例的閃存控制器將數(shù)據(jù)寫入到超級(jí)區(qū)塊的示意圖。
圖7為依據(jù)本發(fā)明一實(shí)施例的存取閃存模塊的方法的流程圖。
圖8為依據(jù)本發(fā)明一第二實(shí)施例的閃存控制器將數(shù)據(jù)寫入到超級(jí)區(qū)塊的示意圖。
圖9為依據(jù)本發(fā)明一實(shí)施例的存取閃存模塊的方法的流程圖。
圖10為依據(jù)本發(fā)明一第三實(shí)施例的閃存控制器將數(shù)據(jù)寫入到超級(jí)區(qū)塊的示意圖。
圖11為依據(jù)本發(fā)明一實(shí)施例的存取閃存模塊的方法的流程圖。
其中,附圖標(biāo)記說明如下:
100 記憶裝置
110 閃存控制器
112 微處理器
112C 程序代碼
112M 只讀存儲(chǔ)器
114 控制邏輯
116 緩沖存儲(chǔ)器
118 接口邏輯
120 閃存模塊
132 第一編譯碼器
134 第二編譯碼器
202 浮閘晶體管
510、520 通道
512、514、516、518 閃存芯片
530 超級(jí)區(qū)塊
700~708、900~904、1100~1104 步驟
B1~B3 位線
WL0~WL47 字線
WL_G0~WL_G47 字線組
具體實(shí)施方式
請(qǐng)參考圖1,圖1為依據(jù)本發(fā)明一實(shí)施例的一種記憶裝置100的示意圖,其中本實(shí)施例的記憶裝置100尤其是可攜式記憶裝置(例如:符合SD/MMC、CF、MS、XD標(biāo)準(zhǔn)的記憶卡)。記憶裝置100包括一閃存(Flash Memory)模塊120以及一閃存控制器110,且閃存控制器110用來存取閃存模塊120。依據(jù)本實(shí)施例,閃存控制器110包括一微處理器112、一只讀存儲(chǔ)器(Read Only Memory,ROM)112M、一控制邏輯114、一緩沖存儲(chǔ)器116、與一接口邏輯118。只讀存儲(chǔ)器是用來儲(chǔ)存一程序代碼112C,而微處理器112則用來執(zhí)行程序代碼112C以控制對(duì)閃存模塊120的存取(Access)。
于典型狀況下,閃存模塊120包括多個(gè)區(qū)塊(Block),而所述控制器(例如:通過微處理器112執(zhí)行程序代碼112C的閃存控制器110)對(duì)閃存模塊120進(jìn)行復(fù)制、抹除、合并數(shù)據(jù)等運(yùn)作是以區(qū)塊為單位來進(jìn)行復(fù)制、抹除、合并數(shù)據(jù)。另外,一區(qū)塊可記錄特定數(shù)量的數(shù)據(jù)頁(yè)(Page),其中所述控制器(例如:通過微處理器112執(zhí)行程序代碼112C的存儲(chǔ)器控制器110)對(duì)閃存模塊120進(jìn)行寫入數(shù)據(jù)的運(yùn)作是以數(shù)據(jù)頁(yè)為單位來進(jìn)行寫入。
實(shí)作上,通過微處理器112執(zhí)行程序代碼112C的閃存控制器110可利用其本身內(nèi)部的組件來進(jìn)行諸多控制運(yùn)作,例如:利用控制邏輯114來控制閃存模塊120的存取運(yùn)作(尤其是對(duì)至少一區(qū)塊或至少一數(shù)據(jù)頁(yè)的存取運(yùn)作)、利用緩沖存儲(chǔ)器116進(jìn)行所需的緩沖處理、以及利用接口邏輯118來與一主裝置(Host Device)溝通。
另一方面,在本實(shí)施例中,控制邏輯114包括了一第一編譯碼器(codec)132以及一第二編譯碼器134,其中第一編譯碼器132是用來對(duì)寫入到閃存模塊120的一區(qū)塊中的數(shù)據(jù)進(jìn)行編碼,以產(chǎn)生對(duì)應(yīng)的錯(cuò)誤更正碼(error correction code),其中第一編譯碼器132所產(chǎn)生的錯(cuò)誤更正碼僅是根據(jù)寫入到一資料頁(yè)中一區(qū)段(sector)的內(nèi)容所產(chǎn)生的,且所產(chǎn)生的錯(cuò)誤更正碼會(huì)連同所述區(qū)段的數(shù)據(jù)內(nèi)容一并寫入到所述數(shù)據(jù)頁(yè)中。另外,第二編譯碼器134為一容錯(cuò)式磁盤陣列(RAID)編譯碼器,其是用來對(duì)寫入至多個(gè)閃存芯片中的數(shù)據(jù)進(jìn)行編碼,以產(chǎn)生對(duì)應(yīng)的錯(cuò)誤更正碼,其操作將于以下內(nèi)容中詳述。
在本實(shí)施例中,閃存模塊120是一立體NAND型閃存(3D NAND-type flash)模塊,請(qǐng)參考圖2,其為一立體NAND型閃存的范例示意圖,如圖2所示,立體NAND型閃存包括了多個(gè)浮閘晶體管202,其通過多條位線(圖示僅繪示了BL1~BL3)及多條字線(例如圖示的WL1~WL3)來構(gòu)成立體NAND型閃存架構(gòu)。在圖2中,以最上面的一個(gè)平面為例,字線WL0上的所有浮閘晶體管構(gòu)成了至少一數(shù)據(jù)頁(yè),字線WL1上的所有浮閘晶體管構(gòu)成了另至少一數(shù)據(jù)頁(yè),而字線WL2的所有浮閘晶體管構(gòu)成了再另至少一資料頁(yè)…以此類堆。此外,根據(jù)閃存寫入方式的不同,字線WL0與數(shù)據(jù)頁(yè)(邏輯數(shù)據(jù)頁(yè))之間的定義也會(huì)有所不同,詳細(xì)來說,當(dāng)使用單層式儲(chǔ)存(Single-Level Cell,SLC)的方式寫入時(shí),字線WL0上的所有浮閘晶體管僅對(duì)應(yīng)到單一邏輯數(shù)據(jù)頁(yè);當(dāng)使用多層式儲(chǔ)存(Multiple-Level Cell,MLC)的方式寫入時(shí),字線WL0上的所有浮閘晶體管僅對(duì)應(yīng)到兩個(gè)邏輯數(shù)據(jù)頁(yè);當(dāng)使用三層式儲(chǔ)存(Triple-Level Cell,TLC)的方式寫入時(shí),字線WL0上的所有浮閘晶體管僅對(duì)應(yīng)到三個(gè)邏輯數(shù)據(jù)頁(yè);以及當(dāng)使用四層式儲(chǔ)存(Quad-Level Cell,QLC)的方式寫入時(shí),字線WL0上的所有浮閘晶體管僅對(duì)應(yīng)到四個(gè)邏輯數(shù)據(jù)頁(yè)。由于本技術(shù)領(lǐng)域中具有通常知識(shí)者應(yīng)能了解立體NAND型閃存的結(jié)構(gòu)以及字線及數(shù)據(jù)頁(yè)之間的關(guān)系,故相關(guān)的細(xì)節(jié)在此不予贅述。另外,在閃存控制器110的操作中,“數(shù)據(jù)頁(yè)”為一最小寫入單位,且“區(qū)塊”為一最小抹除單位。
請(qǐng)參考圖3,其為浮閘晶體管202結(jié)構(gòu)的概念示意圖,如圖3所示,每一個(gè)浮閘晶體管的閘極及浮閘是圍繞在源極與汲極周圍(gate all around),以增強(qiáng)通道感應(yīng)能力。
需注意的是,圖2、3所示的僅為立體NAND型閃存與浮閘晶體管202的范例,而并非是作為本發(fā)明的限制,本技術(shù)領(lǐng)域中具有通常知識(shí)者應(yīng)能了解立體NAND型閃存尚有其他種型式,例如部分的字線可彼此連接..等等,且浮閘晶體管202的設(shè)計(jì)也能有些許的改變。
如現(xiàn)有技術(shù)中所述,在某些立體NAND型閃存中,會(huì)將多條字線定義為一字線組,而所述字線組會(huì)共同具有部分的控制電路,進(jìn)而導(dǎo)致當(dāng)數(shù)據(jù)寫入到所述字線組的一條字在線的浮閘晶體管發(fā)生失敗時(shí)(寫入失敗),會(huì)連帶導(dǎo)致所述字線組的其他字在線的浮閘晶體管的數(shù)據(jù)發(fā)生錯(cuò)誤。舉例來說,請(qǐng)參考圖4,其為一區(qū)塊中多個(gè)字線組的示意圖,在圖4中是假設(shè)所述區(qū)塊包括了192條字在線的所有浮閘晶體管,且一個(gè)字線組包括了4條字線,因此,在圖4中的區(qū)塊是包括了48個(gè)字線組WL_G0~WL_G47;另外,在圖4中所述區(qū)塊為三層式儲(chǔ)存(TLC)區(qū)塊,也就是說,每一條字在線的浮閘晶體管可用來儲(chǔ)存三個(gè)數(shù)據(jù)頁(yè)的數(shù)據(jù),如圖4所示,以字線組WL_G0為例,其包括的字線WL0上的浮閘晶體管可用來儲(chǔ)存低數(shù)據(jù)頁(yè)P(yáng)0L、中間數(shù)據(jù)頁(yè)P(yáng)0M及高數(shù)據(jù)頁(yè)P(yáng)0U,字線WL1上的浮閘晶體管可用來儲(chǔ)存低數(shù)據(jù)頁(yè)P(yáng)1L、中間數(shù)據(jù)頁(yè)P(yáng)1M及高數(shù)據(jù)頁(yè)P(yáng)1U,字線WL2上的浮閘晶體管可用來儲(chǔ)存低數(shù)據(jù)頁(yè)P(yáng)2L、中間數(shù)據(jù)頁(yè)P(yáng)2M及高數(shù)據(jù)頁(yè)P(yáng)2U,以及字線WL3上的浮閘晶體管可用來儲(chǔ)存低數(shù)據(jù)頁(yè)P(yáng)3L、中間數(shù)據(jù)頁(yè)P(yáng)3M及高數(shù)據(jù)頁(yè)P(yáng)3U。當(dāng)控制器中將數(shù)據(jù)寫入到字線組WL_G0的數(shù)據(jù)頁(yè)中時(shí),是循序?qū)?shù)據(jù)寫入到字線WL0、WL1、WL2、WL3中的浮閘晶體管,而假設(shè)字線WL0、WL1上的數(shù)據(jù)都成功寫入正確,但是當(dāng)數(shù)據(jù)寫入字線WL2時(shí)發(fā)生寫入錯(cuò)誤,則會(huì)連帶使得字線WL0、WL1上原本寫入成功的數(shù)據(jù)也發(fā)生錯(cuò)誤,因此,在以下的實(shí)施例中將敘述如何修正此一錯(cuò)誤的方法。
先參考圖5,圖5為閃存控制器110將數(shù)據(jù)寫入到閃存模塊120的示意圖。如圖5所示,閃存模塊120包括了多個(gè)通道(在本實(shí)施例中,是以兩個(gè)通道510、520為例),且每一個(gè)通道在閃存控制器110中有各自的串行傳輸器(sequencer)且均包括了多個(gè)閃存芯片,而在本實(shí)施例中通道510包括了閃存芯片512、514,且通道520包括了閃存芯片522、524。另外,每一個(gè)閃存芯片512、514、522、524中的一個(gè)區(qū)塊會(huì)被組態(tài)為一個(gè)超級(jí)區(qū)塊(super block)530,而閃存控制器110會(huì)將數(shù)據(jù)以超級(jí)區(qū)塊530為單位來進(jìn)行寫入。
請(qǐng)同時(shí)參考圖5、6,其中圖6為依據(jù)本發(fā)明一第一實(shí)施例的閃存控制器110將數(shù)據(jù)寫入到超級(jí)區(qū)塊530的示意圖,其中在以下的敘述中,每一筆數(shù)據(jù)是寫入到閃存芯片512、514、522、524的一個(gè)數(shù)據(jù)頁(yè),也就是說,第1筆數(shù)據(jù)會(huì)被寫入到每一個(gè)閃存芯片512、514、522、524中的第一個(gè)資料頁(yè)P(yáng)0,第2筆資料會(huì)被寫入到每一個(gè)閃存芯片512、514、522、524中的第二個(gè)資料頁(yè)P(yáng)1,…,第N筆資料會(huì)被寫入到每一個(gè)閃存芯片512、514、522、524中的第N個(gè)資料頁(yè)P(yáng)(N-1)。參考圖6,當(dāng)閃存控制器110需要將第1筆數(shù)據(jù)寫入至超級(jí)區(qū)塊530中時(shí),首先,閃存控制器110中的第二編譯碼器134會(huì)先對(duì)第1筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第1組錯(cuò)誤更正碼S0,其中第二編譯碼器134可以采用里德-所羅門(Reed Solomon,RS)編碼方式或是互斥或(exclusive-OR,XOR)運(yùn)算來對(duì)寫入到每一個(gè)閃存芯片512、514、522、524中的第一個(gè)數(shù)據(jù)頁(yè)P(yáng)0的數(shù)據(jù)進(jìn)行編碼,以產(chǎn)生第1組錯(cuò)誤更正碼S0;接著,第一編譯碼器132分別對(duì)第1筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生對(duì)應(yīng)的錯(cuò)誤更正碼,并將第一筆數(shù)據(jù)與第一編譯碼器132所產(chǎn)生的錯(cuò)誤更正碼一并寫入到每一個(gè)閃存芯片512、514、522、524中的第一個(gè)資料頁(yè)P(yáng)0中,詳細(xì)來說,第一編譯碼器132對(duì)第1筆數(shù)據(jù)中第一部分?jǐn)?shù)據(jù)進(jìn)行編碼以產(chǎn)生錯(cuò)誤更正碼,并將第一部分?jǐn)?shù)據(jù)與其錯(cuò)誤更正碼寫入到閃存芯片512的第一個(gè)數(shù)據(jù)頁(yè)P(yáng)0;第一編譯碼器132對(duì)第1筆數(shù)據(jù)中第二部分?jǐn)?shù)據(jù)進(jìn)行編碼以產(chǎn)生錯(cuò)誤更正碼,并將第二部分?jǐn)?shù)據(jù)與其錯(cuò)誤更正碼寫入到閃存芯片514的第一個(gè)數(shù)據(jù)頁(yè)P(yáng)0;第一編譯碼器132對(duì)第1筆數(shù)據(jù)中第三部分?jǐn)?shù)據(jù)進(jìn)行編碼以產(chǎn)生錯(cuò)誤更正碼,并將第三部分?jǐn)?shù)據(jù)與其錯(cuò)誤更正碼寫入到閃存芯片522的第一個(gè)數(shù)據(jù)頁(yè)P(yáng)0;以及第一編譯碼器132對(duì)第1筆數(shù)據(jù)中第四部分?jǐn)?shù)據(jù)(最后一部分?jǐn)?shù)據(jù))進(jìn)行編碼以產(chǎn)生錯(cuò)誤更正碼,并將第四部分?jǐn)?shù)據(jù)與其錯(cuò)誤更正碼寫入到閃存芯片524的第一個(gè)數(shù)據(jù)頁(yè)P(yáng)0。
第二編譯碼器134所產(chǎn)生的第1組錯(cuò)誤更正碼S0是用來當(dāng)閃存芯片512、514、522或524中的第一個(gè)數(shù)據(jù)頁(yè)P(yáng)0發(fā)生數(shù)據(jù)錯(cuò)誤時(shí)進(jìn)行錯(cuò)誤更正,舉例來說,假設(shè)當(dāng)閃存芯片512中的第一個(gè)數(shù)據(jù)頁(yè)P(yáng)0的數(shù)據(jù)發(fā)生無法利用本身的數(shù)據(jù)進(jìn)行更正的錯(cuò)誤時(shí),第二編譯碼器134可以讀取閃存芯片512、514、522、524中所有第一個(gè)數(shù)據(jù)頁(yè)P(yáng)0的數(shù)據(jù),再加上第1組錯(cuò)誤更正碼S0,來進(jìn)行錯(cuò)誤更正。
另外,在第1筆數(shù)據(jù)寫入的過程中,閃存控制器110會(huì)對(duì)寫入的數(shù)據(jù)進(jìn)行讀取檢查的操作,以確定數(shù)據(jù)是否成功寫入,而在閃存控制器110判斷第1筆數(shù)據(jù)已經(jīng)成功寫入到閃存芯片512、514、522、524中第一個(gè)數(shù)據(jù)頁(yè)P(yáng)0后,閃存控制器110保留第1組錯(cuò)誤更正碼S0。其中,閃存控制器110可以先暫時(shí)將第1組錯(cuò)誤更正碼S0儲(chǔ)存在本身的存儲(chǔ)器中,或是將第1組錯(cuò)誤更正碼S0通過第一編譯碼器132進(jìn)行編碼后存入到閃存芯片512、514、522、524中的一特定區(qū)塊中,且所述特定區(qū)塊不屬于超級(jí)區(qū)塊530中的資料頁(yè)。
接著,當(dāng)閃存控制器110需要將第2筆數(shù)據(jù)寫入至超級(jí)區(qū)塊530中時(shí),首先,閃存控制器110中的第二編譯碼器134會(huì)先對(duì)第2筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第2組錯(cuò)誤更正碼S1,其中第二編譯碼器134可以采用里德-所羅門編碼方式或是互斥或運(yùn)算來對(duì)寫入到每一個(gè)閃存芯片512、514、522、524中的第二個(gè)數(shù)據(jù)頁(yè)P(yáng)1的數(shù)據(jù)進(jìn)行編碼,以產(chǎn)生第2組錯(cuò)誤更正碼S1;接著,第一編譯碼器132分別對(duì)第2筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生對(duì)應(yīng)的錯(cuò)誤更正碼,并將第二筆數(shù)據(jù)與第一編譯碼器132所產(chǎn)生的錯(cuò)誤更正碼一并寫入到每一個(gè)閃存芯片512、514、522、524中的第二個(gè)資料頁(yè)P(yáng)1中。另外,在第2筆數(shù)據(jù)寫入的過程中,閃存控制器110會(huì)對(duì)寫入的數(shù)據(jù)進(jìn)行讀取檢查的操作,以確定數(shù)據(jù)是否成功寫入,而在閃存控制器110判斷第2筆數(shù)據(jù)已經(jīng)成功寫入到閃存芯片512、514、522、524中第二個(gè)數(shù)據(jù)頁(yè)P(yáng)1后,閃存控制器110保留第2組錯(cuò)誤更正碼S1。其中,閃存控制器110可以先暫時(shí)將第2組錯(cuò)誤更正碼S1儲(chǔ)存在本身的存儲(chǔ)器中,或是將第2組錯(cuò)誤更正碼S1存入到閃存芯片512、514、522、524中的所述特定區(qū)塊中,且所述特定區(qū)塊不屬于超級(jí)區(qū)塊530。
當(dāng)?shù)?筆數(shù)據(jù)寫入的過程中也發(fā)生寫入錯(cuò)誤的情形,則由于P1、P0是屬于同一個(gè)字線組WL_G0,因此,閃存芯片512、514、522、524中的數(shù)據(jù)頁(yè)P(yáng)0也有可能發(fā)生損壞。舉例來說,假設(shè)閃存芯片514的數(shù)據(jù)頁(yè)P(yáng)1在數(shù)據(jù)寫入的過程中發(fā)生錯(cuò)誤,則現(xiàn)有以成功寫入的閃存芯片514的數(shù)據(jù)頁(yè)P(yáng)0也會(huì)發(fā)生錯(cuò)誤,因此,現(xiàn)有所保留下來的第1組錯(cuò)誤更正碼S0便可以在之后用來更正數(shù)據(jù)頁(yè)P(yáng)0的錯(cuò)誤。
接著,當(dāng)閃存控制器110需要將第3筆數(shù)據(jù)寫入至超級(jí)區(qū)塊530中時(shí),首先,閃存控制器110中的第二編譯碼器134會(huì)先對(duì)第3筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第3組錯(cuò)誤更正碼S2,其中第二編譯碼器134可以采用里德-所羅門編碼方式或是互斥或運(yùn)算來對(duì)寫入到每一個(gè)閃存芯片512、514、522、524中的第三個(gè)數(shù)據(jù)頁(yè)P(yáng)2的數(shù)據(jù)進(jìn)行編碼,以產(chǎn)生第3組錯(cuò)誤更正碼S2;接著,第一編譯碼器132分別對(duì)第3筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生對(duì)應(yīng)的錯(cuò)誤更正碼,并將第三筆數(shù)據(jù)與第一編譯碼器132所產(chǎn)生的錯(cuò)誤更正碼一并寫入到每一個(gè)閃存芯片512、514、522、524中的第三個(gè)資料頁(yè)P(yáng)2中。另外,在第3筆數(shù)據(jù)寫入的過程中,閃存控制器110會(huì)對(duì)寫入的數(shù)據(jù)進(jìn)行讀取檢查的操作,以確定數(shù)據(jù)是否成功寫入,而在閃存控制器110判斷第3筆數(shù)據(jù)已經(jīng)成功寫入到閃存芯片512、514、522、524中第三個(gè)數(shù)據(jù)頁(yè)P(yáng)2后,閃存控制器110保留第3組錯(cuò)誤更正碼S2。其中,閃存控制器110可以先暫時(shí)將第3組錯(cuò)誤更正碼S2儲(chǔ)存在本身的存儲(chǔ)器中,或是將第3組錯(cuò)誤更正碼S2存入到閃存芯片512、514、522、524中的所述特定區(qū)塊中,且所述特定區(qū)塊不屬于超級(jí)區(qū)塊530。
接著,當(dāng)閃存控制器110需要將第4筆數(shù)據(jù)寫入至超級(jí)區(qū)塊530中時(shí),首先,閃存控制器110中的第二編譯碼器134會(huì)先對(duì)第4筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第4組錯(cuò)誤更正碼S3,其中第二編譯碼器134可以采用里德-所羅門編碼方式或是互斥或運(yùn)算來對(duì)寫入到每一個(gè)閃存芯片512、514、522、524中的第四個(gè)數(shù)據(jù)頁(yè)P(yáng)3的數(shù)據(jù)進(jìn)行編碼,以產(chǎn)生第4組錯(cuò)誤更正碼S3;接著,第一編譯碼器132分別對(duì)第4筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生對(duì)應(yīng)的錯(cuò)誤更正碼,并將第四筆數(shù)據(jù)與第一編譯碼器132所產(chǎn)生的錯(cuò)誤更正碼一并寫入到每一個(gè)閃存芯片512、514、522、524中的第四個(gè)資料頁(yè)P(yáng)3中。另外,在第4筆數(shù)據(jù)寫入的過程中,閃存控制器110會(huì)對(duì)寫入的數(shù)據(jù)進(jìn)行讀取檢查的操作,以確定數(shù)據(jù)是否成功寫入,而在閃存控制器110判斷第4筆數(shù)據(jù)已經(jīng)成功寫入到閃存芯片512、514、522、524中第四個(gè)數(shù)據(jù)頁(yè)P(yáng)2后,閃存控制器110保留第4組錯(cuò)誤更正碼S3。其中,閃存控制器110可以先暫時(shí)將第4組錯(cuò)誤更正碼S3儲(chǔ)存在本身的存儲(chǔ)器中,或是將第4組錯(cuò)誤更正碼S3存入到閃存芯片512、514、522、524中的所述特定區(qū)塊中,且所述特定區(qū)塊不屬于超級(jí)區(qū)塊530。
同樣地,當(dāng)?shù)?、4筆數(shù)據(jù)寫入的過程中也發(fā)生寫入錯(cuò)誤的情形,則由于P0、P1、P3、P4是屬于同一個(gè)字線組WL_G0,因此,閃存芯片512、514、522、524中的數(shù)據(jù)頁(yè)P(yáng)0、P1也有可能發(fā)生損壞。舉例來說,假設(shè)閃存芯片524的數(shù)據(jù)頁(yè)P(yáng)3在數(shù)據(jù)寫入的過程中發(fā)生錯(cuò)誤,則現(xiàn)有以成功寫入的閃存芯片524的數(shù)據(jù)頁(yè)P(yáng)0、P1、P2也會(huì)發(fā)生錯(cuò)誤,因此,現(xiàn)有所保留下來的第1、2、3組錯(cuò)誤更正碼S0、S1、S2便可以在之后分別用來更正數(shù)據(jù)頁(yè)P(yáng)0、P1、P2的錯(cuò)誤。
在字線組WL_G0上的頁(yè)面都已經(jīng)寫完數(shù)據(jù)之后,現(xiàn)有所保留的錯(cuò)誤更正碼S0、S1、S2、S3若是儲(chǔ)存在閃存控制器110中的存儲(chǔ)器時(shí),則可以將的搬移到所述特定區(qū)塊中,以減少閃存控制器110中存儲(chǔ)器的容量需求。
接著,類似以上步驟,閃存控制器110將接下來的第5~192筆數(shù)據(jù)寫入至閃存芯片512、514、522、524中,并對(duì)所述第5~192筆數(shù)據(jù)進(jìn)行編碼以分別產(chǎn)生第5~192組錯(cuò)誤更正碼S4~S191。
當(dāng)超級(jí)區(qū)塊530在數(shù)據(jù)寫入的過程中發(fā)生錯(cuò)誤時(shí),由于閃存無法直接對(duì)已寫入的數(shù)據(jù)做修正,故需要將已寫入的數(shù)據(jù)讀出之后再使用儲(chǔ)存在所述特定區(qū)塊中的錯(cuò)誤更正碼進(jìn)行更正,并將更正后的數(shù)據(jù)連同其他不需更正的數(shù)據(jù)一并寫入到另一個(gè)區(qū)塊中。
由于錯(cuò)誤更正碼S0~S191需要很大的容量且也占據(jù)了所述特定區(qū)塊的空間,因此,在確定超級(jí)區(qū)塊530中的所有數(shù)據(jù)都已經(jīng)成功寫入之后,所述特定區(qū)塊中所儲(chǔ)存的錯(cuò)誤更正碼S0~S191便可以刪除,也就是說,閃存控制器110會(huì)抹除所述特定區(qū)塊以刪除錯(cuò)誤更正碼S0~S191(在對(duì)應(yīng)的數(shù)據(jù)第一次被讀取之前)。需注意的是,上述“刪除”錯(cuò)誤更正碼S0~S191并不代表要立刻將所述特定區(qū)塊立刻抹除,而是可以將所述特定區(qū)塊標(biāo)示為“無效化”,等到后續(xù)適合的時(shí)間(例如,閃存控制器110空閑的時(shí)候)再將所述特定區(qū)塊整個(gè)抹除。
需注意的是,圖6所繪示的P0~P191所代表的可能不只是一個(gè)數(shù)據(jù)頁(yè),而可能是1~4個(gè)數(shù)據(jù)頁(yè)。詳細(xì)來說,當(dāng)是單層式儲(chǔ)存(SLC)的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成一個(gè)數(shù)據(jù)頁(yè)(例如字線WL0僅包括一個(gè)數(shù)據(jù)頁(yè)P(yáng)0);當(dāng)是多層式儲(chǔ)存(MLC)的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成二個(gè)數(shù)據(jù)頁(yè)(例如圖標(biāo)的P0包括兩個(gè)數(shù)據(jù)頁(yè));當(dāng)是三層式儲(chǔ)存(TLC)的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成三個(gè)數(shù)據(jù)頁(yè)(例如圖標(biāo)的P0包括圖所示的三個(gè)數(shù)據(jù)頁(yè)P(yáng)0L、P0M、P0U);以及當(dāng)是四層式儲(chǔ)存(QLC)的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成四個(gè)數(shù)據(jù)頁(yè)。
在本實(shí)施例中,超級(jí)區(qū)塊530可以是多層式儲(chǔ)存區(qū)塊、三層式儲(chǔ)存區(qū)塊或是四層式儲(chǔ)存區(qū)塊,然而,由于用來儲(chǔ)存錯(cuò)誤更正碼S0~S191的所述特定區(qū)塊會(huì)頻繁地被寫入與抹除,因此,為了增加所述特定區(qū)塊的壽命,所述特定區(qū)塊會(huì)采用單層式儲(chǔ)存的寫入方式。另一方面,需注意的是,當(dāng)超級(jí)區(qū)塊530是采用三層式儲(chǔ)存方式時(shí),則由于每一個(gè)字線會(huì)對(duì)應(yīng)到三個(gè)數(shù)據(jù)頁(yè),因此錯(cuò)誤更正碼S0~S191實(shí)際上會(huì)需要由三個(gè)特定區(qū)塊(單層式儲(chǔ)存區(qū)塊)來儲(chǔ)存。
需注意的是,在以上的實(shí)施例中,是假設(shè)超級(jí)區(qū)塊530是一空白區(qū)塊,且閃存控制器110是將數(shù)據(jù)由每一個(gè)閃存芯片的第一個(gè)數(shù)據(jù)頁(yè)開始寫起,然而,本發(fā)明并不以此為限,在其他實(shí)施例中,超級(jí)區(qū)塊530可以已經(jīng)存有其他資料,而閃存控制器110將數(shù)據(jù)循序存進(jìn)超級(jí)區(qū)塊530的剩下數(shù)據(jù)頁(yè)中,并產(chǎn)生對(duì)應(yīng)錯(cuò)誤更正碼(S0~SN),這些設(shè)計(jì)上的變化均應(yīng)隸屬于本發(fā)明的范疇。
另一方面,在以上的實(shí)施例中,數(shù)據(jù)會(huì)先經(jīng)過第二編譯碼器134的編碼之后,才會(huì)再進(jìn)行第一編譯碼器132的編碼以寫入到閃存模塊120之中,然而,在其他實(shí)施例中,第一編譯碼器132與第二編譯碼器134的執(zhí)行順序亦可相反,以達(dá)到相同的結(jié)果。
請(qǐng)參考圖7,其為依據(jù)本發(fā)明一實(shí)施例的存取閃存模塊120的方法的流程圖,參考圖1~7及以上所公開的內(nèi)容,流程敘述如下:
步驟700:流程開始。
步驟702:將第N筆數(shù)據(jù)寫入至所述閃存模塊中的多個(gè)閃存芯片,并對(duì)所述第N筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生一第N組錯(cuò)誤更正碼,其中所述第N組錯(cuò)誤更正碼是用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第N筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正;
步驟704:當(dāng)判斷所述第N筆數(shù)據(jù)已成功寫入至所述多個(gè)閃存芯片中之后,保留所述第N組錯(cuò)誤更正碼;
步驟706:依序?qū)⒌?N+1)~(N+M)筆資料分別寫入至所述閃存模塊中的所述多個(gè)閃存芯片,并分別對(duì)所述第(N+1)~(N+M)筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第(N+1)~(N+M)組錯(cuò)誤更正碼,其中所述第(N+1)~(N+M)組錯(cuò)誤更正碼是分別用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第(N+1)~(N+M)筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正;以及
步驟708:當(dāng)判斷所述第(N+M)筆資料已成功寫入至所述多個(gè)閃存芯片中時(shí),才刪除所述第N~(N+M)組錯(cuò)誤更正碼。
通過以上所公開的實(shí)施例,可以確實(shí)地更正立體NAND型閃存在資料寫入時(shí)發(fā)生的錯(cuò)誤,且由于錯(cuò)誤更正碼S0~S191在確定超級(jí)區(qū)塊530中的數(shù)據(jù)都完全成功寫入之后便可以抹除,因此便也可以節(jié)省存儲(chǔ)器的空間。
另外,在某些情況下,已經(jīng)成功寫入的數(shù)據(jù)可能在后續(xù)的讀取中會(huì)發(fā)生無法讀取或是讀取錯(cuò)誤的情形,例如閃存512、514、522、524中可能有部分的字線發(fā)生斷路(open)的情形,因而造成無法讀取數(shù)據(jù)的情形。此外,如現(xiàn)有所述,一個(gè)字線組中只要有一條字線發(fā)生斷路,便會(huì)造成整個(gè)字線組的數(shù)據(jù)都會(huì)發(fā)生錯(cuò)誤。因此,本發(fā)明另提出以下的實(shí)施例來避免后續(xù)因?yàn)樽志€斷路而造成數(shù)據(jù)讀取錯(cuò)誤的情形。
為了方便敘述,以下實(shí)施例一樣采用圖4~5的例子,也就是說,閃存控制器110要將數(shù)據(jù)寫入到超級(jí)區(qū)塊530中。參考圖8,其為依據(jù)本發(fā)明一第二實(shí)施例的閃存控制器110將數(shù)據(jù)寫入到超級(jí)區(qū)塊530的示意圖,為了方便以下實(shí)施例的說明,在以下的敘述中,一筆資料指的是寫入到一個(gè)字線組的數(shù)據(jù),而非是圖6的實(shí)施例所述的一個(gè)字在線的數(shù)據(jù),然而,此定義并非是作為本發(fā)明的限制。當(dāng)閃存控制器110需要將第1筆數(shù)據(jù)寫入至超級(jí)區(qū)塊530中時(shí),類似圖6的實(shí)施例所述,閃存控制器110中的第二編譯碼器134會(huì)對(duì)第1筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第1組錯(cuò)誤更正碼S0~S3,且將第1筆數(shù)據(jù)分別寫入到每一個(gè)閃存芯片512、514、522、524中的數(shù)據(jù)頁(yè)P(yáng)0~P3中,并將錯(cuò)誤更正碼S0~S3存入到閃存芯片512、514、522或524中的一特定區(qū)塊中,且所述特定區(qū)塊不屬于超級(jí)區(qū)塊530。
接著,當(dāng)閃存控制器110需要將第2筆數(shù)據(jù)(包括4個(gè)數(shù)據(jù)頁(yè)的數(shù)據(jù))寫入至超級(jí)區(qū)塊530中時(shí),首先,閃存控制器110中的第二編譯碼器134會(huì)先對(duì)要寫入到閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)4的數(shù)據(jù)以及錯(cuò)誤更正碼S0進(jìn)行編碼以產(chǎn)生錯(cuò)誤更正碼S4,其中第二編譯碼器134可以采用里德-所羅門編碼方式或是互斥或運(yùn)算來對(duì)寫入到每一個(gè)閃存芯片512、514、522、524中的第五個(gè)數(shù)據(jù)頁(yè)P(yáng)4的數(shù)據(jù)以及錯(cuò)誤更正碼S0進(jìn)行編碼,以產(chǎn)生錯(cuò)誤更正碼S4;接著,第一編譯碼器132分別對(duì)要寫入到閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)4的數(shù)據(jù)進(jìn)行編碼以產(chǎn)生對(duì)應(yīng)的錯(cuò)誤更正碼,并將此數(shù)據(jù)與第一編譯碼器132所產(chǎn)生的錯(cuò)誤更正碼一并寫入到每一個(gè)閃存芯片512、514、522、524中的第五個(gè)資料頁(yè)P(yáng)4中。其中,閃存控制器110可以先暫時(shí)將錯(cuò)誤更正碼S4儲(chǔ)存在本身的存儲(chǔ)器中,或是將錯(cuò)誤更正碼S4存入到閃存芯片512、514、522、524中的所述特定區(qū)塊中,且所述特定區(qū)塊不屬于超級(jí)區(qū)塊530。如上所述,與錯(cuò)誤更正碼S0~S3比較不同的是,錯(cuò)誤更正碼S4的產(chǎn)生過程中有使用到錯(cuò)誤更正碼S0。
接著,存儲(chǔ)器控制器110需要將第2筆數(shù)據(jù)中要寫入到閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)5~P7的資料寫入至超級(jí)區(qū)塊530中,并同時(shí)產(chǎn)生了錯(cuò)誤更正碼S5~S7,其中錯(cuò)誤更正碼S5~S7的產(chǎn)生過程中有分別使用到錯(cuò)誤更正碼S1~S3。
再接著,存儲(chǔ)器控制器110需要將第3筆數(shù)據(jù)寫入至超級(jí)區(qū)塊530中,并同時(shí)產(chǎn)生了第3組錯(cuò)誤更正碼S8~S11,其中類似第2組錯(cuò)誤更正碼S4~S7,第3組錯(cuò)誤更正碼S8~S11的產(chǎn)生過程中有分別使用到第2組錯(cuò)誤更正碼S4~S7。
類似以上步驟,閃存控制器110將接下來的第4~48筆數(shù)據(jù)寫入至閃存芯片512、514、522、524中,并對(duì)所述第4~48筆數(shù)據(jù)進(jìn)行編碼以分別產(chǎn)生第4~48組錯(cuò)誤更正碼S12~S191。
當(dāng)超級(jí)區(qū)塊530在數(shù)據(jù)寫入的過程中發(fā)生錯(cuò)誤時(shí),由于閃存無法直接對(duì)已寫入的數(shù)據(jù)做修正,故需要將已寫入的數(shù)據(jù)讀出之后再使用儲(chǔ)存在所述特定區(qū)塊中的錯(cuò)誤更正碼進(jìn)行更正,并將更正后的數(shù)據(jù)連同其他不需更正的數(shù)據(jù)一并寫入到另一個(gè)區(qū)塊中。
需注意的是,由于上述每一組錯(cuò)誤更正碼都是參考前一組錯(cuò)誤更正碼的內(nèi)容所產(chǎn)生的,因此,第48組錯(cuò)誤更正碼S188~S191便帶有現(xiàn)有每一組錯(cuò)誤更正碼的信息,也就是說,每一組錯(cuò)誤更正碼的信息都可由第48組錯(cuò)誤更正碼所得到。舉例來說,錯(cuò)誤更正碼S184可以由第二編譯碼器134根據(jù)閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)188的內(nèi)容以及錯(cuò)誤更正碼S188而得到,錯(cuò)誤更正碼S180可以由第二編譯碼器134根據(jù)閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)184的內(nèi)容以及錯(cuò)誤更正碼S184而得到,錯(cuò)誤更正碼S176可以由第二編譯碼器134根據(jù)閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)180的內(nèi)容以及錯(cuò)誤更正碼S180而得到…如此不斷計(jì)算最后便可以得到錯(cuò)誤更正碼S0。因此,為了節(jié)省存儲(chǔ)器空間,在確定超級(jí)區(qū)塊530中的所有數(shù)據(jù)都已經(jīng)成功寫入之后,閃存控制器110僅需要將錯(cuò)誤更正碼S188~S191復(fù)制到另外一個(gè)區(qū)塊中,并可以將所述特定區(qū)塊整個(gè)抹除以節(jié)省存儲(chǔ)器空間。
如上所述,由于閃存控制器110有保留錯(cuò)誤更正碼S188~S191,且錯(cuò)誤更正碼S188~S191可以用來獲得錯(cuò)誤更正碼S0~S187,因此,即使后續(xù)閃存芯片512、514、522、524有一個(gè)閃存芯片發(fā)生字線發(fā)生斷路(open)的情形,也可以通過相對(duì)應(yīng)的錯(cuò)誤更正碼S0~S191來進(jìn)行更正,而不會(huì)發(fā)生數(shù)據(jù)無法修復(fù)的情形。
在本實(shí)施例中,超級(jí)區(qū)塊530可以是多層式儲(chǔ)存(MLC)區(qū)塊、三層式儲(chǔ)存(TLC)區(qū)塊或是四層式儲(chǔ)存(QLC)區(qū)塊,然而,由于用來儲(chǔ)存錯(cuò)誤更正碼S0~S191的所述特定區(qū)塊會(huì)頻繁地被寫入與抹除,因此,為了增加所述特定區(qū)塊的壽命,所述特定區(qū)塊會(huì)采用單層式儲(chǔ)存(SLC)的寫入方式。另一方面,需注意的是,當(dāng)超級(jí)區(qū)塊530是采用三層式儲(chǔ)存方式時(shí),則由于每一個(gè)字線會(huì)對(duì)應(yīng)到三個(gè)數(shù)據(jù)頁(yè),因此錯(cuò)誤更正碼S0~S191實(shí)際上會(huì)需要由三個(gè)特定區(qū)塊(單層式儲(chǔ)存區(qū)塊)來儲(chǔ)存。此外,在閃存控制器110將錯(cuò)誤更正碼S188~191復(fù)制的過程中,可以錯(cuò)誤更正碼S188~S191復(fù)制到一個(gè)三層式儲(chǔ)存區(qū)塊,以進(jìn)一步地節(jié)省存儲(chǔ)器空間。
需注意的是,圖8所繪示的P0~P191所代表的可能不只是一個(gè)數(shù)據(jù)頁(yè),而可能是1~4個(gè)數(shù)據(jù)頁(yè)。詳細(xì)來說,當(dāng)是單層式儲(chǔ)存的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成一個(gè)數(shù)據(jù)頁(yè)(例如字線WL0僅包括一個(gè)數(shù)據(jù)頁(yè)P(yáng)0);當(dāng)是多層式儲(chǔ)存的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成二個(gè)數(shù)據(jù)頁(yè)(例如圖標(biāo)的P0包括兩個(gè)數(shù)據(jù)頁(yè));當(dāng)是三層式儲(chǔ)存的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成三個(gè)數(shù)據(jù)頁(yè)(例如圖標(biāo)的P0包括圖所示的三個(gè)數(shù)據(jù)頁(yè)P(yáng)0L、P0M、P0U);以及當(dāng)是四層式儲(chǔ)存的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成四個(gè)數(shù)據(jù)頁(yè)。
請(qǐng)參考圖9,其為依據(jù)本發(fā)明一實(shí)施例的存取閃存模塊120的方法的流程圖,參考圖8、9及以上所公開的內(nèi)容,流程敘述如下:
步驟900:流程開始。
步驟902:依序?qū)⒌贜~(N+K)筆資料分別寫入至所述閃存模塊中的多個(gè)閃存芯片,并分別對(duì)所述第N~(N+K)筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第N~(N+K)組錯(cuò)誤更正碼,其中所述第N~(N+K)組錯(cuò)誤更正碼是分別用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第N~(N+K)筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正;以及
步驟904:將第(N+K+1)筆資料寫入至所述閃存模塊中的所述多個(gè)閃存芯片,并使用所述第(N+K)組錯(cuò)誤更正碼來與所述第(N+K+1)筆數(shù)據(jù)一并進(jìn)行編碼,以產(chǎn)生第(N+K+1)組錯(cuò)誤更正碼,其中K是1。
以上8~9圖的實(shí)施例可以避免閃存芯片512、514、522、524有一個(gè)閃存芯片發(fā)生字線發(fā)生斷路而造成數(shù)據(jù)無法修復(fù)的情形,然而,若是兩個(gè)字線組中的兩條相鄰的字線發(fā)生短路(short),例如圖8中閃存芯片512的字線WL3與WL4發(fā)生短路,則會(huì)造成閃存芯片512中的兩個(gè)字線組WL_G0與WL_G1上的數(shù)據(jù)均無法成功讀取,因此,以下提出一實(shí)施例以克服兩個(gè)字線組中的兩條相鄰的字線發(fā)生短路(short)的情形。
為了方便敘述,以下實(shí)施例一樣采用圖4~5的例子,也就是說,閃存控制器110要將數(shù)據(jù)寫入到超級(jí)區(qū)塊530中。參考圖10,其為依據(jù)本發(fā)明一第三實(shí)施例的閃存控制器110將數(shù)據(jù)寫入到超級(jí)區(qū)塊530的示意圖,為了方便以下實(shí)施例的說明,在以下的敘述中,一筆資料指的是寫入到一個(gè)字線組的數(shù)據(jù),而非是圖6的實(shí)施例所述的一個(gè)字在線的數(shù)據(jù),然而,此定義并非是作為本發(fā)明的限制。當(dāng)閃存控制器110需要將第1筆數(shù)據(jù)寫入至超級(jí)區(qū)塊530中時(shí),類似圖6的實(shí)施例所述,閃存控制器110中的第二編譯碼器134會(huì)對(duì)第1筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第1組錯(cuò)誤更正碼S0~S3,且將第1筆數(shù)據(jù)分別寫入到每一個(gè)閃存芯片512、514、522、524中的數(shù)據(jù)頁(yè)P(yáng)0~P3中,并將錯(cuò)誤更正碼S0~S3存入到閃存芯片512、514、522或524中的一特定區(qū)塊中,且所述特定區(qū)塊不屬于超級(jí)區(qū)塊530。接著,第二編譯碼器134會(huì)對(duì)第2筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第2組錯(cuò)誤更正碼S0~S3,且將第2筆數(shù)據(jù)分別寫入到每一個(gè)閃存芯片512、514、522、524中的數(shù)據(jù)頁(yè)P(yáng)4~P7中,并將錯(cuò)誤更正碼S4~S7存入到所述特定區(qū)塊中。
接著,當(dāng)閃存控制器110需要將第3筆數(shù)據(jù)(包括4個(gè)數(shù)據(jù)頁(yè)的數(shù)據(jù))寫入至超級(jí)區(qū)塊530中時(shí),首先,閃存控制器110中的第二編譯碼器134會(huì)先對(duì)要寫入到閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)8的數(shù)據(jù)以及錯(cuò)誤更正碼S0進(jìn)行編碼以產(chǎn)生錯(cuò)誤更正碼S8,其中第二編譯碼器134可以采用里德-所羅門編碼方式或是互斥或運(yùn)算來對(duì)寫入到每一個(gè)閃存芯片512、514、522、524中的第九個(gè)數(shù)據(jù)頁(yè)P(yáng)8的數(shù)據(jù)以及錯(cuò)誤更正碼S0進(jìn)行編碼,以產(chǎn)生錯(cuò)誤更正碼S8;接著,第一編譯碼器132分別對(duì)要寫入到閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)8的數(shù)據(jù)進(jìn)行編碼以產(chǎn)生對(duì)應(yīng)的錯(cuò)誤更正碼,并將此數(shù)據(jù)與第一編譯碼器132所產(chǎn)生的錯(cuò)誤更正碼一并寫入到每一個(gè)閃存芯片512、514、522、524中的第九個(gè)資料頁(yè)P(yáng)8中。其中,閃存控制器110可以先暫時(shí)將錯(cuò)誤更正碼S8儲(chǔ)存在本身的存儲(chǔ)器中,或是將錯(cuò)誤更正碼S8存入到閃存芯片512、514、522、524中的所述特定區(qū)塊中,且所述特定區(qū)塊不屬于超級(jí)區(qū)塊530。如上所述,與錯(cuò)誤更正碼S0~S7比較不同的是,錯(cuò)誤更正碼S8的產(chǎn)生過程中有使用到錯(cuò)誤更正碼S0。
接著,存儲(chǔ)器控制器110需要將第3筆數(shù)據(jù)中要寫入到閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)9~P11的資料寫入至超級(jí)區(qū)塊530中,并同時(shí)產(chǎn)生了錯(cuò)誤更正碼S9~S11,其中錯(cuò)誤更正碼S9~S11的產(chǎn)生過程中有分別使用到錯(cuò)誤更正碼S1~S3。
再接著,存儲(chǔ)器控制器110需要將第4筆數(shù)據(jù)寫入至超級(jí)區(qū)塊530中,并同時(shí)產(chǎn)生了第4組錯(cuò)誤更正碼S12~S15,其中類似第3組錯(cuò)誤更正碼S8~S11,第4組錯(cuò)誤更正碼S12~S15的產(chǎn)生過程中有分別使用到第2組錯(cuò)誤更正碼S4~S7。
類似以上步驟,閃存控制器110將接下來的第5~48筆數(shù)據(jù)寫入至閃存芯片512、514、522、524中,并對(duì)所述第5~48筆數(shù)據(jù)進(jìn)行編碼以分別產(chǎn)生第5~48組錯(cuò)誤更正碼S16~S191。
當(dāng)超級(jí)區(qū)塊530在數(shù)據(jù)寫入的過程中發(fā)生錯(cuò)誤時(shí),由于閃存無法直接對(duì)已寫入的數(shù)據(jù)做修正,故需要將已寫入的數(shù)據(jù)讀出之后再使用儲(chǔ)存在所述特定區(qū)塊中的錯(cuò)誤更正碼進(jìn)行更正,并將更正后的數(shù)據(jù)連同其他不需更正的數(shù)據(jù)一并寫入到另一個(gè)區(qū)塊中。
需注意的是,由于上述每一組錯(cuò)誤更正碼都是參考前前組錯(cuò)誤更正碼的內(nèi)容所產(chǎn)生的,因此,第47、48組錯(cuò)誤更正碼S188~S191便帶有現(xiàn)有每一組錯(cuò)誤更正碼的信息,也就是說,每一組錯(cuò)誤更正碼的信息都可由第47組或第48組錯(cuò)誤更正碼所得到。舉例來說,錯(cuò)誤更正碼S180可以由第二編譯碼器134根據(jù)閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)188的內(nèi)容以及錯(cuò)誤更正碼S188而得到,錯(cuò)誤更正碼S172可以由第二編譯碼器134根據(jù)閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)180的內(nèi)容以及錯(cuò)誤更正碼S180而得到,錯(cuò)誤更正碼S164可以由第二編譯碼器134根據(jù)閃存芯片512、514、522、524的數(shù)據(jù)頁(yè)P(yáng)172的內(nèi)容以及錯(cuò)誤更正碼S172而得到…如此不斷計(jì)算最后便可以得到錯(cuò)誤更正碼S0。因此,為了節(jié)省存儲(chǔ)器空間,在確定超級(jí)區(qū)塊530中的所有數(shù)據(jù)都已經(jīng)成功寫入之后,閃存控制器110僅需要將第47、48組錯(cuò)誤更正碼S184~S191復(fù)制到另外一個(gè)區(qū)塊中,并可以將所述特定區(qū)塊整個(gè)抹除以節(jié)省存儲(chǔ)器空間。
如上所述,由于閃存控制器110有保留錯(cuò)誤更正碼S184~S191,且錯(cuò)誤更正碼S184~S191可以用來獲得錯(cuò)誤更正碼S0~S183,因此,即使后續(xù)閃存芯片512、514、522、524有一個(gè)閃存芯片發(fā)生字線發(fā)生短路的情形,也可以通過相對(duì)應(yīng)的錯(cuò)誤更正碼S0~191來進(jìn)行更正,而不會(huì)發(fā)生數(shù)據(jù)無法修復(fù)的情形。
在本實(shí)施例中,超級(jí)區(qū)塊530可以是多層式儲(chǔ)存(MLC)區(qū)塊、三層式儲(chǔ)存(TLC)區(qū)塊或是四層式儲(chǔ)存(QLC)區(qū)塊,然而,由于用來儲(chǔ)存錯(cuò)誤更正碼S0~S191的所述特定區(qū)塊會(huì)頻繁地被寫入與抹除,因此,為了增加所述特定區(qū)塊的壽命,所述特定區(qū)塊會(huì)采用單層式儲(chǔ)存(SLC)的寫入方式。另一方面,需注意的是,當(dāng)超級(jí)區(qū)塊530是采用三層式儲(chǔ)存方式時(shí),則由于每一個(gè)字線會(huì)對(duì)應(yīng)到三個(gè)數(shù)據(jù)頁(yè),因此錯(cuò)誤更正碼S0~S191實(shí)際上會(huì)需要由三個(gè)特定區(qū)塊(單層式儲(chǔ)存區(qū)塊)來儲(chǔ)存。此外,在閃存控制器110將錯(cuò)誤更正碼S184~S191復(fù)制的過程中,可以錯(cuò)誤更正碼S184~S191復(fù)制到一個(gè)三層式儲(chǔ)存區(qū)塊,以進(jìn)一步地節(jié)省存儲(chǔ)器空間。
需注意的是,圖10所繪示的P0~P191所代表的可能不只是一個(gè)數(shù)據(jù)頁(yè),而可能是1~4個(gè)數(shù)據(jù)頁(yè)。詳細(xì)來說,當(dāng)是單層式儲(chǔ)存的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成一個(gè)數(shù)據(jù)頁(yè)(例如字線WL0僅包括一個(gè)數(shù)據(jù)頁(yè)P(yáng)0);當(dāng)是多層式儲(chǔ)存的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成二個(gè)數(shù)據(jù)頁(yè)(例如圖標(biāo)的P0包括兩個(gè)數(shù)據(jù)頁(yè));當(dāng)是三層式儲(chǔ)存的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成三個(gè)數(shù)據(jù)頁(yè)(例如圖標(biāo)的P0包括圖所示的三個(gè)數(shù)據(jù)頁(yè)P(yáng)0L、P0M、P0U);以及當(dāng)是四層式儲(chǔ)存的區(qū)塊時(shí),則一個(gè)字在線的浮閘晶體管則構(gòu)成四個(gè)數(shù)據(jù)頁(yè)。
請(qǐng)參考圖11,其為依據(jù)本發(fā)明一實(shí)施例的存取閃存模塊120的方法的流程圖,參考圖10、11及以上所公開的內(nèi)容,流程敘述如下:
步驟1100:流程開始。
步驟1102:依序?qū)⒌贜~(N+K)筆資料分別寫入至所述閃存模塊中的多個(gè)閃存芯片,并分別對(duì)所述第N~(N+K)筆數(shù)據(jù)進(jìn)行編碼以產(chǎn)生第N~(N+K)組錯(cuò)誤更正碼,其中所述第N~(N+K)組錯(cuò)誤更正碼是分別用來對(duì)寫入至所述多個(gè)閃存芯片中的所述第N~(N+K)筆數(shù)據(jù)進(jìn)行錯(cuò)誤更正;以及
步驟1104:將第(N+K+1)筆資料寫入至所述閃存模塊中的所述多個(gè)閃存芯片,并使用所述第N組錯(cuò)誤更正碼來與所述第(N+K+1)筆數(shù)據(jù)一并進(jìn)行編碼,以產(chǎn)生第(N+K+1)組錯(cuò)誤更正碼,其中K是1。
需注意的是,在以上的實(shí)施例說明中,閃存模塊120為一立體NAND型閃存模塊,然而,在其他實(shí)施例中,閃存模塊120亦可為平面NAND型閃存模塊,由于本領(lǐng)域技術(shù)人員應(yīng)可輕易了解如何將上述實(shí)施例應(yīng)用在平面NAND型閃存模塊中,故相關(guān)細(xì)節(jié)不再贅述。
簡(jiǎn)要?dú)w納本發(fā)明,在本發(fā)明的存取一閃存模塊的方法中,是使用類似容錯(cuò)式磁盤陣列的錯(cuò)誤更正方式來產(chǎn)生錯(cuò)誤更正碼,以解決立體NAND型閃存中寫入錯(cuò)誤的情形,且上述錯(cuò)誤更正碼可以暫時(shí)地儲(chǔ)存在閃存中,并等到區(qū)塊數(shù)據(jù)都成功寫入之后再刪除,因此可以有效地節(jié)省閃存控制器中的存儲(chǔ)器需求,且也不會(huì)浪費(fèi)閃存模塊中的空間。此外,上述產(chǎn)生的錯(cuò)誤更正碼可以僅保留其中一部分來更正后續(xù)因?yàn)樽志€斷路/短路時(shí)所發(fā)生的錯(cuò)誤,因此除了可以更進(jìn)一步確保資料的安全性之外,也不會(huì)太浪費(fèi)閃存模塊中的儲(chǔ)存空間。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。