本發明涉及一種用于可復寫式非易失性存儲器模塊的數據讀取方法、存儲器控制電路單元及存儲器儲存裝置。
背景技術:
數碼相機、移動電話與MP3播放器在這幾年來的成長十分迅速,使得消費者對儲存媒體的需求也急速增加。由于可復寫式非易失性存儲器模塊(例如,快閃存儲器)具有數據非易失性、省電、體積小,以及無機械結構等特性,所以非常適合內建于上述所舉例的各種可攜式多媒體裝置中。
一般來說,寫入至可復寫式非易失性存儲器模塊的數據都會根據一個錯誤更正碼來編碼,并且從可復寫式非易失性存儲器模塊中所讀取的數據也會經過對應的程序來解碼。然而,錯誤更正碼的更正能力有其上限。例如,若使用渦輪碼算法或是低密度奇偶檢查校正碼算法經由迭代方式來實施錯誤更正碼,隨著迭代解碼的次數增加至一定次數后,在后續的迭代解碼過程中會出現錯誤比特數目不隨著迭代次數的增加而減少的現象。此現象也稱為錯誤飽和(error floor)。基此,如何能夠對所讀取的數據順利地進行解碼,以獲取原始數據是此領域技術人員所致力的目標。
技術實現要素:
本發明提供一種數據讀取方法、存儲器控制電路單元及存儲器儲存裝置,其能夠有效地校正所讀取的數據。
本發明的一范例實施例提出一種用于可復寫式非易失性存儲器模塊的數據讀取方法。此方法包括從可復寫式非易失性存儲器模塊讀取數據,其中此數據包括使用者數據串與錯誤檢查與校正碼組,此使用者數據包括多個子數據單元,錯誤檢查與校正碼組包括多個行錯誤校正碼與多個列錯誤校正碼,此些行錯誤校正碼是分別地對應在以矩陣形式排列的此些子數據單元之中的多個行數據段,且此些列錯誤校正碼是分別地對應在以矩陣形式排列的此些子數據單元之中的多個列數據段。本方法還包括依據此錯誤檢查與校正碼對此使用者數據串執行錯誤校正解碼操作以產生第一已解碼數據串,其中此第一已解碼數據串包括對應此些子數據中至少部分的多個已解碼子數據單元。本方法也包括搜索此些已解碼子數據單元之中的至少一個無法校正子數據單元,從無法校正子數據單元之中選出至少一目標子數據單元,在第一已解碼數據串中調整此至少一目標子數據單元以產生已調整使用者數據串,并且對已調整使用者數據串重新執行錯誤校正解碼操作以產生第二已解碼數據串。本方法還包括,將第二已解碼數據串作為已校正數據串傳送給主機系統以響應讀取指令。
在本發明的一范例實施例中,上述依據錯誤檢查與校正碼組對使用者數據串執行錯誤校正解碼操作以產生第一已解碼數據串的步驟包括依據此些行錯誤校正碼與列錯誤校正碼使用 區塊渦輪碼算法解碼此些行數據段與列數據段以獲得上述已解碼子數據單元。
在本發明的一范例實施例中,上述數據讀取方法還包括:判斷在第一已解碼數據串中是否存有錯誤比特;若在第一已解碼數據串中無錯誤比特時,將第一已解碼數據串作為已校正數據串傳送給主機系統;以及若在第一已解碼數據串中存有錯誤比特時,依據第一已解碼數據串判斷此些行數據段之中無法校正的行數據段的數目與此些列數據段之中無法校正的列數據段的數目是否小于預先定義值。其中上述搜索此些已解碼子數據單元之中的無法校正子數據單元,識別此些無法校正子數據單元之中的目標子數據單元,在第一已解碼數據串中調整目標子數據單元以產生已調整使用者數據串,對已調整使用者數據串重新執行錯誤校正解碼操作以產生第二已解碼數據串的步驟,是在此些行數據段之中無法校正的行數據段的數目小于預先定義值或此些列數據段之中無法校正的列數據段的數目小于預先定義值時被執行。
在本發明的一范例實施例中,上述數據讀取方法還包括:若此些行數據段之中無法校正的行數據段的數目與此些列數據段之中無法校正的列數據段的數目都不小于預先定義值,傳送一錯誤信息給主機系統。
在本發明的一范例實施例中,上述識別此些無法校正子數據單元之中的目標子數據單元的步驟包括:根據此些行數據段之中無法校正的行數據段與此些列數據段之中無法校正的列數據段將此些無法校正子數據單元之中的第一無法校正子數據單元作為目標子數據單元,其中此第一無法校正子數據單元是包括在此些行數據段之中的第一行數據段中且包括在此些列數據段之中的第一列數據段中,此些行錯誤校正碼之中對應此第一行數據段的第一行錯誤校正碼無法校正此第一行數據段并且此些列錯誤校正碼之中對應此第一列數據段的第一列錯誤校正碼無法校正此第一列數據段。
在本發明的一范例實施例中,上述在第一已解碼數據串中調整目標子數據單元以產生已調整使用者數據串的步驟包括:使用調整數據串與第一無法校正子數據單元進行互斥運算以調整第一無法校正子數據單元的至少一比特的值。
本發明的一范例實施例提出一種用于控制可復寫式非易失性存儲器模塊的憶體控制電路單元。此存儲器控制電路單元包括主機接口、存儲器接口、存儲器管理電路與錯誤檢查與校正電路。主機接口用以電性連接至主機系統。存儲器接口用以電性連接至可復寫式非易失性存儲器模塊。存儲器管理電路電性連接至主機接口與存儲器接口。錯誤檢查與校正電路電性連接至存儲器管理電路。存儲器管理電路發送讀取指令序列以從可復寫式非易失性存儲器模塊讀取數據,其中此數據包括使用者數據串與錯誤檢查與校正碼組,此使用者數據包括多個子數據單元,錯誤檢查與校正碼組包括多個行錯誤校正碼與多個列錯誤校正碼,此些行錯誤校正碼是分別地對應在以矩陣形式排列的此些子數據單元之中的多個行數據段,且此些列錯誤校正碼是分別地對應在以矩陣形式排列的此些子數據單元之中的多個列數據段。錯誤檢查與校正電路依據此錯誤檢查與校正碼對此使用者數據串執行錯誤校正解碼操作以產生第一已解碼數據串,其中此第一已解碼數據串包括對應此些子數據中至少部分的多個已解碼子數據單元。錯誤檢查與校正電路搜索此些已解碼子數據單元之中的至少一個無法校正子數據單元,從此些無法校正子數據單元之中選出至少一目標子數據單元,在第一已解碼數據串中調整此目標子數據單元以產生已調整使用者數據串,并且對已調整使用者數據串重新執行錯誤校正解碼操作以產生第二已解碼數據串。再者,若在第二已解碼數據串中已無錯誤比特時,存儲器管理電路將第二已解碼數據串作為已校正數據串傳送給主機系統。
在本發明的一范例實施例中,在上述依據錯誤檢查與校正碼對使用者數據串執行錯誤校正解碼操作以產生第一已解碼數據串的操作中,上述錯誤檢查與校正電路依據此些行錯誤校正碼與列錯誤校正碼使用區塊渦輪碼算法解碼此些行數據段與列數據段以獲得上述已解碼子數據單元。
在本發明的一范例實施例中,上述錯誤檢查與校正電路判斷在第一已解碼數據串中是否存有錯誤比特。其中若在第一已解碼數據串中無錯誤比特時,存儲器管理電路將第一已解碼數據串作為已校正數據串傳送給主機系統。若在第一已解碼數據串中存有錯誤比特時,上述錯誤檢查與校正電路依據第一已解碼數據串判斷此些行數據段之中無法校正的行數據段的數目與此些列數據段之中無法校正的列數據段的數目是否小于預先定義值。其中,上述錯誤檢查與校正電路是在此些行數據段之中無法校正的行數據段的數目小于預先定義值或此些列數據段之中無法校正的列數據段的數目小于預先定義值時,才執行上述搜索已解碼子數據單元之中的無法校正子數據單元,從無法校正子數據單元之中選出目標子數據單元,在第一已解碼數據串中調整目標子數據單元以產生已調整使用者數據串,對已調整使用者數據串重新執行錯誤校正解碼操作以產生第二已解碼數據串的操作。
在本發明的一范例實施例中,若此些行數據段之中無法校正的行數據段的數目與此些列數據段之中無法校正的列數據段的數目都不小于預先定義值時,上述存儲器管理電路傳送錯誤信息給主機系統。
在本發明的一范例實施例中,在上述從無法校正子數據單元之中選出目標子數據單元的操作中,上述錯誤檢查與校正電路根據此些行數據段之中無法校正的行數據段與此些列數據段之中無法校正的列數據段將此些無法校正子數據單元之中的第一無法校正子數據單元作為目標子數據單元,其中此第一無法校正子數據單元是包括在此些行數據段之中的第一行數據段中且包括在此些列數據段之中的第一列數據段中,此些行錯誤校正碼之中對應第一行數據段的第一行錯誤校正碼無法校正第一行數據段并且此些列錯誤校正碼之中對應第一列數據段的第一列錯誤校正碼無法校正第一列數據段。
在本發明的一范例實施例中,上述在第一已解碼數據串中調整目標子數據單元以產生已調整使用者數據串的操作中,上述錯誤檢查與校正電路使用調整數據串與第一無法校正子數據單元進行互斥運算以調整第一無法校正子數據單元的至少一比特的值。
本發明的一范例實施例提出一種存儲器儲存裝置,其包括連接接口單元、可復寫式非易失性存儲器模塊與存儲器控制電路單元。連接接口單元用以電性連接至主機系統。存儲器控制電路單元電性連接至連接接口單元與可復寫式非易失性存儲器模塊。存儲器控制電路單元發送讀取指令序列以從可復寫式非易失性存儲器模塊讀取數據,其中此數據包括使用者數據串與錯誤檢查與校正碼組,此使用者數據包括多個子數據單元,錯誤檢查與校正碼組包括多個行錯誤校正碼與多個列錯誤校正碼,此些行錯誤校正碼是分別地對應在以矩陣形式排列的此些子數據單元之中的多個行數據段,且此些列錯誤校正碼是分別地對應在以矩陣形式排列的此些子數據單元之中的多個列數據段。存儲器控制電路單元依據此錯誤檢查與校正碼對此使用者數據串執行錯誤校正解碼操作以產生第一已解碼數據串,其中此第一已解碼數據串包括對應此些子數據中至少部分的多個已解碼子數據單元。此外,存儲器控制電路單元搜索此些已解碼子數據單元之中的至少一個無法校正子數據單元,從此些無法校正子數據單元之中選出至少一目標子數據單元,在第一已解碼數據串中調整此目標子數據單元以產生已調整使 用者數據串,并且對已調整使用者數據串重新執行錯誤校正解碼操作以產生第二已解碼數據串。再者,若在第二已解碼數據串中已無錯誤比特時,存儲器控制電路單元將第二已解碼數據串作為已校正數據串傳送給主機系統。
在本發明的一范例實施例中,在上述依據錯誤檢查與校正碼對使用者數據串執行錯誤校正解碼操作以產生第一已解碼數據串的操作中,上述存儲器控制電路單元依據此些行錯誤校正碼與列錯誤校正碼使用區塊渦輪碼算法解碼此些行數據段與列數據段以獲得上述已解碼子數據單元。
在本發明的一范例實施例中,上述存儲器控制電路單元判斷在第一已解碼數據串中是否存有錯誤比特。其中若在第一已解碼數據串中無錯誤比特時,存儲器控制電路單元將第一已解碼數據串作為已校正數據串傳送給主機系統。若在第一已解碼數據串中存有錯誤比特時,上述存儲器控制電路單元依據第一已解碼數據串判斷此些行數據段之中無法校正的行數據段的數目與此些列數據段之中無法校正的列數據段的數目是否小于預先定義值。其中,上述存儲器控制電路單元是在此些行數據段之中無法校正的行數據段的數目小于預先定義值或此些列數據段之中無法校正的列數據段的數目小于預先定義值時,才執行上述搜索已解碼子數據單元之中的無法校正子數據單元,從無法校正子數據單元之中選出目標子數據單元,在第一已解碼數據串中調整目標子數據單元以產生已調整使用者數據串,對已調整使用者數據串重新執行錯誤校正解碼操作以產生第二已解碼數據串的操作。
在本發明的一范例實施例中,若此些行數據段之中無法校正的行數據段的數目與此些列數據段之中無法校正的列數據段的數目都不小于預先定義值時,上述存儲器控制電路單元傳送錯誤信息給主機系統。
在本發明的一范例實施例中,在上述從此些無法校正子數據單元之中選出目標子數據單元的操作中,上述存儲器控制電路單元根據此些行數據段之中無法校正的行數據段與此些列數據段之中無法校正的列數據段將此些無法校正子數據單元之中的第一無法校正子數據單元作為目標子數據單元,其中此第一無法校正子數據單元是包括在此些行數據段之中的第一行數據段中且包括在此些列數據段之中的第一列數據段中,此些行錯誤校正碼之中對應第一行數據段的第一行錯誤校正碼無法校正第一行數據段并且此些列錯誤校正碼之中對應第一列數據段的第一列錯誤校正碼無法校正第一列數據段。
在本發明的一范例實施例中,上述在第一已解碼數據串中調整目標子數據單元以產生已調整使用者數據串的操作中,上述存儲器控制電路單元使用調整數據串與第一無法校正子數據單元進行互斥運算以調整第一無法校正子數據單元的至少一比特的值。
基于上述,本發明所提供的數據讀取方法、存儲器控制電路單元及存儲器儲存裝置可以在解碼的過程中,通過翻轉錯誤比特來對未能成功解碼數據進行再次解碼以成功地解碼且讀取數據,進而增進數據讀取的正確性與對于所儲存的數據的保護能力。
為讓本發明的上述特征和優點能更明顯易懂,下文特舉實施例,并配合附圖作詳細說明如下。
附圖說明
圖1是根據一范例實施例所示出的主機系統、存儲器儲存裝置及輸入/輸出(I/O)裝置的示意圖;
圖2是根據另一范例實施例所示出的主機系統、存儲器儲存裝置及輸入/輸出(I/O)裝置的示意圖;
圖3是根據本發明范例實施例所示出的主機系統與存儲器儲存裝置的示意圖;
圖4是根據一范例實施例所示出的主機系統與存儲器儲存裝置的概要方塊圖;
圖5是根據一范例實施例所示出的存儲器控制電路單元的概要方塊圖;
圖6與圖7是根據一范例實施例所示出的管理物理抹除單元的范例示意圖;
圖8是根據本發明的一范例實施例所示出的錯誤檢查與校正碼框的示意圖;
圖9是根據本發明的一范例實施例所示出的使用區塊渦輪碼進行錯誤校正編碼程序的示意圖;
圖10是根據本發明的一范例實施例所示出的選取目標子數據單元的范例;
圖11是根據一范例實施例所示出的數據讀取的流程圖。
附圖標記說明:
10:存儲器儲存裝置;
11:主機系統;
12:輸入/輸出(I/O)裝置;
110:系統總線;
111:處理器;
112:隨機存取存儲器(RAM);
113:只讀存儲器(ROM);
114:數據傳輸接口;
20:主機板;
201:隨身碟;
202:記憶卡;
203:固態硬盤(SSD);
204:無線存儲器儲存裝置;
205:全球定位系統模塊;
206:網絡接口卡;
207:無線傳輸裝置;
208:鍵盤;
209:屏幕;
210:喇叭;
30:存儲器儲存裝置;
31:主機系統;
32:SD卡;
33:CF卡;
34:嵌入式儲存裝置;
341:嵌入式多媒體卡;
342:嵌入式多芯片封裝儲存裝置;
402:連接接口單元;
404:存儲器控制電路單元;
406:可復寫式非易失性存儲器模塊;
410(0)~410(N):物理抹除單元;
502:存儲器管理電路;
504:主機接口;
506:存儲器接口;
508:緩沖存儲器;
510:電源管理電路;
512:錯誤檢查與校正電路;
602:數據區;
604:閑置區;
606:系統區;
608:取代區;
LBA(0)~LBA(H):邏輯地址;
LZ(0)~LZ(M):邏輯區域;
ECCF1:錯誤檢查與校正碼框;
ECC1:錯誤檢查與校正碼組;
UD1:數據;
DB1~DB32:子數據單元;
RG1~RG4:列數據段;
CG1~CG8:行數據段;
BCH1~BCH12:錯誤校正碼;
700:二維數據矩陣;
710:二維數據矩陣;
S1101、S1103、S1105、S1107、S1109、S1111、S1113、S1115、S1117、S1119:步驟。
具體實施方式
一般而言,存儲器儲存裝置(也稱,存儲器儲存系統)包括可復寫式非易失性存儲器模塊與控制器(也稱,控制電路單元)。通常存儲器儲存裝置是與主機系統一起使用,以使主機系統可將數據寫入至存儲器儲存裝置或從存儲器儲存裝置中讀取數據。
圖1是根據一范例實施例所示出的主機系統、存儲器儲存裝置及輸入/輸出(I/O)裝置的示意圖。且圖2是根據另一范例實施例所示出的主機系統、存儲器儲存裝置及輸入/輸出(I/O)裝置的示意圖。
請參照圖1與圖2,主機系統11一般包括處理器111、隨機存取存儲器(random access memory,簡稱:RAM)112、只讀存儲器(read only memory,簡稱:ROM)113及數據傳輸接口114。處理器111、隨機存取存儲器112、只讀存儲器113及數據傳輸接口114都電性連接至系統總線(system bus)110。
在本范例實施例中,主機系統11是通過數據傳輸接口114與存儲器儲存裝置10電性連接。例如,主機系統11可經由數據傳輸接口114將數據寫入至存儲器儲存裝置10或從存儲 器儲存裝置10中讀取數據。此外,主機系統11是通過系統總線110與I/O裝置12電性連接。例如,主機系統11可經由系統總線110將輸出信號傳送至I/O裝置12或從I/O裝置12接收輸入信號。
在本范例實施例中,處理器111、隨機存取存儲器112、只讀存儲器113及數據傳輸接口114是可設置在主機系統11的主機板20上。數據傳輸接口114的數目可以是一或多個。通過數據傳輸接口114,主機板20可以經由有線或無線方式電性連接至存儲器儲存裝置10。存儲器儲存裝置10可例如是隨身碟201、記憶卡202、固態硬盤(Solid State Drive,簡稱:SSD)203或無線存儲器儲存裝置204。無線存儲器儲存裝置204可例如是近距離無線通信(Near Field Communication Storage,簡稱:NFC)存儲器儲存裝置、無線傳真(WiFi)存儲器儲存裝置、藍牙(Bluetooth)存儲器儲存裝置或低功耗藍牙存儲器儲存裝置(例如,iBeacon)等以各式無線通信技術為基礎的存儲器儲存裝置。此外,主機板20也可以通過系統總線110電性連接至全球定位系統(Global Positioning System,簡稱:GPS)模塊205、網絡接口卡206、無線傳輸裝置207、鍵盤208、屏幕209、喇叭210等各式I/O裝置。例如,在一范例實施例中,主機板20可通過無線傳輸裝置207存取無線存儲器儲存裝置204。
在一范例實施例中,所提及的主機系統為可實質地與存儲器儲存裝置配合以儲存數據的任意系統。雖然在上述范例實施例中,主機系統是以電腦系統來作說明,然而,圖3是根據另一范例實施例所示出的主機系統與存儲器儲存裝置的示意圖。請參照圖3,在另一范例實施例中,主機系統31也可以是數碼相機、攝影機、通信裝置、音頻播放器、視頻播放器或平板電腦等系統,而存儲器儲存裝置30可為其所使用的SD卡32、CF卡33或嵌入式儲存裝置34等各式非易失性存儲器儲存裝置。嵌入式儲存裝置34包括嵌入式多媒體卡(embedded MMC,簡稱:eMMC)341和/或嵌入式多芯片封裝儲存裝置(embedded Multi Chip Package,簡稱:eMCP)342等各類型將存儲器模塊直接電性連接于主機系統的基板上的嵌入式儲存裝置。
圖4是根據一范例實施例所示出的主機系統與存儲器儲存裝置的概要方塊圖。
請參照圖4,存儲器儲存裝置10包括連接接口單元402、存儲器控制電路單元404與可復寫式非易失性存儲器模塊406。
在本范例實施例中,連接接口單元402是相容于串行高級技術附件(Serial Advanced Technology Attachment,簡稱:SATA)標準。然而,必須了解的是,本發明不限于此,連接接口單元402也可以是符合并行高級技術附件(Parallel Advanced Technology Attachment,簡稱:PATA)標準、電氣和電子工程師協會(Institute of Electrical and Electronic Engineers,簡稱:IEEE)1394標準、高速周邊零件連接接口(Peripheral Component Interconnect Express,簡稱:PCI Express)標準、通用串行總線(Universal Serial Bus,簡稱:USB)標準、超高速一代(Ultra High Speed-I,簡稱:UHS-I)接口標準、超高速二代(Ultra High Speed-II,簡稱:UHS-II)接口標準、安全數字(Secure Digital,簡稱:SD)接口標準、記憶棒(Memory Stick,簡稱:MS)接口標準、多芯片封裝(Multi-Chip Package)接口標準、多媒體儲存卡(Multi Media Card,簡稱:MMC)接口標準、崁入式多媒體儲存卡(Embedded Multimedia Card,簡稱:eMMC)接口標準、通用快閃存儲器(Universal Flash Storage,簡稱:UFS)接口標準、嵌入式多芯片封裝(embedded Multi Chip Package,簡稱:eMCP)接口標準、小型快閃(Compact Flash,簡稱:CF)接口標準、整合式驅動電子接口(Integrated Device Electronics,簡稱:IDE)標準或其他適合的標準。在本范例實施例中,連接接口單元402可與存儲器控制電路單元404封 裝在一個芯片中,或者連接接口單元402是布設于一包含存儲器控制電路單元的芯片外。
存儲器控制電路單元404用以執行以硬件形式或固件形式實現的多個邏輯門或控制指令,并且根據主機系統11的指令在可復寫式非易失性存儲器模塊406中進行數據的寫入、讀取與抹除等操作。
可復寫式非易失性存儲器模塊406是電性連接至存儲器控制電路單元404,并且用以儲存主機系統11所寫入的數據。可復寫式非易失性存儲器模塊406具有物理抹除單元410(0)~410(N)。例如,物理抹除單元410(0)~410(N)可屬于同一個存儲器晶粒(die)或者屬于不同的存儲器晶粒。每一物理抹除單元分別具有多個物理編程單元,其中屬于同一個物理抹除單元的物理編程單元可被獨立地寫入且被同時地抹除。然而,必須了解的是,本發明不限于此,每一物理抹除單元是可由64個物理編程單元、256個物理編程單元或其他任意個物理編程單元所組成。
更詳細來說,物理抹除單元為抹除的最小單位。也就是,每一物理抹除單元含有最小數目的一并被抹除的存儲單元。物理編程單元為編程的最小單元。即,物理編程單元為寫入數據的最小單元。每一物理編程單元通常包括數據比特區與冗余比特區。數據比特區包含多個物理存取地址用以儲存使用者的數據,而冗余比特區用以儲存系統的數據(例如,控制信息與錯誤更正碼)。在本范例實施例中,每一個物理編程單元的數據比特區中會包含8個物理存取地址,且一個物理存取地址的大小為512字節(byte)。然而,在其他范例實施例中,數據比特區中也可包含數目更多或更少的物理存取地址,本發明并不限制物理存取地址的大小以及個數。例如,在一范例實施例中,物理抹除單元為物理區塊,并且物理編程單元為物理頁面或物理扇區,但本發明不以此為限。
在本范例實施例中,可復寫式非易失性存儲器模塊406為多階存儲單元(Multi Level Cell,簡稱:MLC)NAND型快閃存儲器模塊(即,一個存儲單元中可儲存2個數據比特的快閃存儲器模塊)。然而,本發明不限于此,可復寫式非易失性存儲器模塊406也可是單階存儲單元(Single Level Cell,簡稱:SLC)NAND型快閃存儲器模塊(即,一個存儲單元中可儲存1個數據比特的快閃存儲器模塊)、三階存儲單元(Trinary Level Cell,簡稱:TLC)NAND型快閃存儲器模塊(即,一個存儲單元中可儲存3個數據比特的快閃存儲器模塊)、其他快閃存儲器模塊或其他具有相同特性的存儲器模塊。
圖5是根據一范例實施例所示出的存儲器控制電路單元的概要方塊圖。
請參照圖5,存儲器控制電路單元404包括存儲器管理電路502、主機接口504與存儲器接口506、緩沖存儲器508、電源管理電路510與錯誤檢查與校正電路512。
存儲器管理電路502用以控制存儲器控制電路單元404的整體操作。具體來說,存儲器管理電路502具有多個控制指令,并且在存儲器儲存裝置10操作時,此些控制指令會被執行以進行數據的寫入、讀取與抹除等操作。
在本范例實施例中,存儲器管理電路502的控制指令是以固件形式來實現。例如,存儲器管理電路502具有微處理器單元(未示出)與只讀存儲器(未示出),并且此些控制指令是被燒錄至此只讀存儲器中。當存儲器儲存裝置10操作時,此些控制指令會由微處理器單元來執行以進行數據的寫入、讀取與抹除等操作。
圖6與圖7是根據一范例實施例所示出的管理物理抹除單元的范例示意圖。
必須了解的是,在此描述可復寫式非易失性存儲器模塊106的物理抹除單元的操作時, 以“提取”、“分組”、“劃分”、“關聯”等詞來操作物理抹除單元是邏輯上的概念。也就是說,可復寫式非易失性存儲器模塊的物理抹除單元的實際位置并未更動,而是邏輯上對可復寫式非易失性存儲器模塊的物理抹除單元進行操作。
請參照圖6,存儲器控制電路單元404(或存儲器管理電路502)會將物理抹除單元410(0)~410(N)邏輯地分組為數據區602、閑置區604、系統區606與取代區608。
邏輯上屬于數據區602與閑置區604的物理抹除單元是用以儲存來自于主機系統11的數據。具體來說,數據區602的物理抹除單元是被視為已儲存數據的物理抹除單元,而閑置區604的物理抹除單元是用以替換數據區602的物理抹除單元。也就是說,當從主機系統11接收到寫入指令與欲寫入的數據時,存儲器管理電路502會從閑置區604中提取物理抹除單元,并且將數據寫入至所提取的物理抹除單元中,以替換數據區602的物理抹除單元。
邏輯上屬于系統區606的物理抹除單元是用以記錄系統數據。例如,系統數據包括關于可復寫式非易失性存儲器模塊的制造商與型號、可復寫式非易失性存儲器模塊的物理抹除單元數、每一物理抹除單元的物理編程單元數等。
邏輯上屬于取代區608中的物理抹除單元是用于壞物理抹除單元取代程序,以取代損壞的物理抹除單元。具體來說,倘若取代區608中仍存有正常的物理抹除單元并且數據區602的物理抹除單元損壞時,存儲器管理電路502會從取代區608中提取正常的物理抹除單元來更換損壞的物理抹除單元。
特別是,數據區602、閑置區604、系統區606與取代區608的物理抹除單元的數量會根據不同的存儲器規格而有所不同。此外,必須了解的是,在存儲器儲存裝置10的操作中,物理抹除單元關聯至數據區602、閑置區604、系統區606與取代區608的分組關系會動態地變動。例如,當閑置區604中的物理抹除單元損壞而被取代區608的物理抹除單元取代時,則原本取代區608的物理抹除單元會被關聯至閑置區604。
請參照圖7,存儲器控制電路單元404(或存儲器管理電路502)會配置邏輯地址LBA(0)~LBA(H)以映射數據區602的物理抹除單元,其中每一邏輯地址具有多個邏輯單元以映射對應的物理抹除單元的物理編程單元。并且,當主機系統11欲寫入數據至邏輯地址或更新儲存于邏輯地址中的數據時,存儲器控制電路單元404(或存儲器管理電路502)會從閑置區604中提取一個物理抹除單元來寫入數據,以輪替數據區602的物理抹除單元。在本范例實施例中,邏輯單元可以是邏輯頁面或邏輯扇區。
為了識別每個邏輯地址的數據被儲存在哪個物理抹除單元,在本范例實施例中,存儲器控制電路單元404(或存儲器管理電路502)會記錄邏輯地址與物理抹除單元之間的映射。并且,當主機系統11欲在邏輯單元中存取數據時,存儲器控制電路單元404(或存儲器管理電路502)會確認此邏輯單元所屬的邏輯地址,并且在此邏輯地址所映射的物理抹除單元中來存取數據。例如,在本范例實施例中,存儲器控制電路單元404(或存儲器管理電路502)會在可復寫式非易失性存儲器模塊406中儲存邏輯地址-物理地址映射表來記錄每一邏輯地址所映射的物理抹除單元,并且當欲存取數據時存儲器控制電路單元404(或存儲器管理電路502)會將邏輯地址-物理地址映射表載入至緩沖存儲器508來維護。
值得一提的是,由于緩沖存儲器508的容量有限無法儲存記錄所有邏輯地址的映射關系的映射表,因此,在本范例實施例中,存儲器控制電路單元404(或存儲器管理電路502)會將邏輯地址LBA(0)~LBA(H)分組為多個邏輯區域LZ(0)~LZ(M),并且為每一邏輯區域配置一 個邏輯地址-物理地址映射表。特別是,當存儲器控制電路單元404(或存儲器管理電路502)欲更新某個邏輯地址的映射時,對應此邏輯地址所屬的邏輯區域的邏輯地址-物理地址映射表會被載入至緩沖存儲器508來被更新。
在本發明另一范例實施例中,存儲器管理電路502的控制指令也可以代碼形式儲存于可復寫式非易失性存儲器模塊406的特定區域(例如,存儲器模塊中專用于存放系統數據的系統區)中。此外,存儲器管理電路502具有微處理器單元(未示出)、只讀存儲器(未示出)及隨機存取存儲器(未示出)。特別是,此只讀存儲器具有驅動碼,并且當存儲器控制電路單元404被致能時,微處理器單元會先執行此驅動碼段來將儲存于可復寫式非易失性存儲器模塊406中的控制指令載入至存儲器管理電路502的隨機存取存儲器中。之后,微處理器單元會運轉此些控制指令以進行數據的寫入、讀取與抹除等操作。
此外,在本發明另一范例實施例中,存儲器管理電路502的控制指令也可以一硬件形式來實現。例如,存儲器管理電路502包括微控制器、存儲單元管理電路、存儲器寫入電路、存儲器讀取電路、存儲器抹除電路與數據處理電路。存儲單元管理電路、存儲器寫入電路、存儲器讀取電路、存儲器抹除電路與數據處理電路是電性連接至微控制器。其中,存儲單元管理電路用以管理可復寫式非易失性存儲器模塊406的物理抹除單元;存儲器寫入電路用以對可復寫式非易失性存儲器模塊406下達寫入指令以將數據寫入至可復寫式非易失性存儲器模塊406中;存儲器讀取電路用以對可復寫式非易失性存儲器模塊406下達讀取指令以從可復寫式非易失性存儲器模塊406中讀取數據;存儲器抹除電路用以對可復寫式非易失性存儲器模塊406下達抹除指令以將數據從可復寫式非易失性存儲器模塊406中抹除;而數據處理電路用以處理欲寫入至可復寫式非易失性存儲器模塊406的數據以及從可復寫式非易失性存儲器模塊406中讀取的數據。
請再參照圖5,主機接口504是電性連接至存儲器管理電路502并且用以電性連接至連接接口單元402,以接收與識別主機系統11所傳送的指令與數據。也就是說,主機系統11所傳送的指令與數據會通過主機接口504來傳送至存儲器管理電路502。在本范例實施例中,主機接口504是相容于SATA標準。然而,必須了解的是本發明不限于此,主機接口504也可以是相容于PATA標準、IEEE 1394標準、PCI Express標準、USB標準、UHS-I接口標準、UHS-II接口標準、SD標準、MS標準、MMC標準、CF標準、IDE標準或其他適合的數據傳輸標準。
存儲器接口506是電性連接至存儲器管理電路502并且用以存取可復寫式非易失性存儲器模塊406。也就是說,欲寫入至可復寫式非易失性存儲器模塊406的數據會經由存儲器接口506轉換為可復寫式非易失性存儲器模塊406所能接受的格式。
緩沖存儲器508是電性連接至存儲器管理電路502并且用以暫存來自于主機系統11的數據與指令或來自于可復寫式非易失性存儲器模塊406的數據。
電源管理電路510是電性連接至存儲器管理電路502并且用以控制存儲器儲存裝置10的電源。
錯誤檢查與校正電路512是電性連接至存儲器管理電路502并且用以執行錯誤檢查與校正程序以確保數據的正確性。具體來說,當存儲器管理電路502從主機系統11中接收到寫入指令時,錯誤檢查與校正電路512會為對應此寫入指令的數據產生對應的錯誤檢查與校正碼(Error Checking and Correcting Code,簡稱:ECC Code),并且存儲器管理電路502會將對應此寫入指令的數據與對應的錯誤檢查與校正碼寫入至可復寫式非易失性存儲器模塊406中。 之后,當存儲器管理電路502從可復寫式非易失性存儲器模塊406中讀取數據時會同時讀取此數據對應的錯誤檢查與校正碼,并且錯誤檢查與校正電路512會根據此錯誤檢查與校正碼對所讀取的數據執行錯誤檢查與校正程序。
在本范例實施例中,當存儲器控制電路單元404(或存儲器管理電路502)接收到數據時,存儲器控制電路單元404(或存儲器管理電路502)會先將數據分割為多個子數據單元,之后錯誤檢查與校正電路512再進行錯誤校正編碼程序以產生對應的錯誤校正碼,并且將這些子數據單元與此些錯誤校正碼編碼形成為錯誤檢查與校正碼框。例如,每個錯誤檢查與校正碼框內的數據(也稱為使用者數據)的長度可以是4仟字節(kilobyte,簡稱:KB)、2B、1KB或其他大小。
在本范例實施例中,存儲器控制電路單元404(或存儲器管理電路502)會以錯誤檢查與校正碼框為單位來對數據解碼以讀取數據。舉例來說,假設主機系統11發送讀取指令給存儲器儲存裝置10,其中讀取指令指示從某個邏輯地址中讀取數據,并且此欲讀取的數據被編碼至1個錯誤檢查與校正碼框。在接收到此讀取指令后,存儲器控制電路單元404(或存儲器管理電路502)會發送讀取指令序列至可復寫式非易失性存儲器模塊406以從映射此邏輯地址的物理編程單元中讀取數據,從所讀取的數據中獲取使用者數據串,對此使用者數據串執行錯誤校正解碼操作以產生對應的已校正數據串,并且將已校正數據串傳送給主機系統以響應讀取指令。應注意的是,若欲讀取的數據被編碼至2個以上的錯誤檢查與校正碼框中時,存儲器控制電路單元404(或存儲器管理電路502)會讀取對應每一錯誤檢查與校正碼框的數據串,對所讀取的數據串進行錯誤校正解碼操作,并且在成功地校正所讀取的數據串后合并數據串成為已校正數據串并且傳送至主機系統以響應讀取指令。
特別是,在本范例實施例中,錯誤檢查與校正電路512所使用的是區塊渦輪碼(block turbo code,簡稱:BTC)算法來進行錯誤校正編碼/解碼操作。以下將配合附圖說明區塊渦輪碼算法的詳細流程。
圖8是根據本發明的一范例實施例所示出的錯誤檢查與校正碼框的示意圖,并且圖9是根據本發明的一范例實施例所示出的使用區塊渦輪碼進行錯誤校正編碼程序的示意圖。必須了解的是,在此描述錯誤檢查與校正電路512對數據的操作時,“選擇”、“分割”、“劃分”、“關聯”、“排列”等詞是邏輯上的概念。也就是說,錯誤檢查與校正電路512所處理的數據本身的儲存位置并未更動,而是邏輯上對數據進行操作。
請參照圖8與圖9,錯誤檢查與校正電路512對數據串UD1進行錯誤校正編碼程序,以產生錯誤檢查與校正碼組ECC1,其中錯誤檢查碼ECC1會與數據串UD1一起形成錯誤與檢查校正碼框ECCF1而被編程至可復寫式揮發性存儲器模塊406的物理編程單元中。如上所述,在本范例實施例中,錯誤檢查與校正電路512會使用區塊渦輪碼算法來對數據串UD1。在執行區塊渦輪碼算法的過程中,錯誤檢查與校正電路512會將數據串UD1劃分為多個子數據單元,將所劃分的子數據單元以矩陣形式排列,分別為以矩陣形式排列的子數據單元產生對應的行錯誤檢查碼與列錯誤檢查碼,并且合并所產生的行錯誤檢查碼與列錯誤檢查碼來形成錯誤檢查與校正碼組ECC1。
舉例來說,首先,錯誤檢查與校正電路512會將數據串UD1分割為子數據單元DB1~DB32。應注意的是,在本范例實施例中,為了便于說明,每一子數據單元包含2個字節的數據(即,8個比特的數據),但本發明不限于此。例如,在其他實施例中,每一子數據單元也可包含1個 或是多于2個的字節的數據。
接著,錯誤檢查與校正電路512將子數據單元DB1~DB32排列為一個8乘以4的二維(橫向與縱向)數據矩陣,并且依照維度來劃分為多個行數據段與列數據段。例如,橫向排列的子數據單元DB1~DB8會被劃分為列數據段RG1;子數據單元DB9~DB16會被劃分為列數據段RG2;子數據單元DB17~DB24會被劃分為列數據段RG3;子數據單元DB25~DB32會被劃分為列數據段RG4。此外,縱向排列的子數據單元DB1、DB9、DB17、DB25會被劃分為行數據段CG1;子數據單元DB2、DB10、DB18、DB26會被劃分為行數據段CG2;子數據單元DB3、DB11、DB19、DB27會被劃分為行數據段CG3;子數據單元DB4、DB12、DB20、DB28會被劃分為行數據段CG4;子數據單元DB5、DB13、DB21、DB29會被劃分為行數據段CG5;子數據單元DB6、DB14、DB22、DB30會被劃分為行數據段CG6;子數據單元DB7、DB15、DB23、DB31會被劃分為行數據段CG7;子數據單元DB8、DB16、DB24、DB32會被劃分為行數據段CG8。
在本范例實施例中,在將子數據單元DB1~DB32劃分為橫向的列數據段RG1~RG4與縱向的行數據段CG1~CG8后,錯誤檢查與校正電路512會使用博斯-喬赫里-霍克碼(以下稱BCH)作為輔助編碼算法來分別對此些子數據單元做編碼,以產生對應此些列數據段與行數據段的錯誤校正碼。也就是說,對于橫向的列數據段RG1~RG4,錯誤檢查與校正電路512會經由BCH算法對劃分至列數據段RG1的數據(即,子數據單元DB1~DB8)進行編碼以產生對應列數據段RG1的列錯誤校正碼BCH1。依此類推,錯誤檢查與校正電路512會產生對應列數據段RG2的列錯誤校正碼BCH2;產生對應列數據段RG3的列錯誤校正碼BCH3;產生對應列數據段RG4的列錯誤校正碼BCH4。此外,對于縱向的行數據段CG1~CG8,錯誤檢查與校正電路512亦會產生對應行數據段CG1的行錯誤校正碼BCH5;產生對應行數據段CG2的行錯誤校正碼BCH6;產生對應行數據段CG3的行錯誤校正碼BCH7;產生對應行數據段CG4的行錯誤校正碼BCH8;產生對應行數據段CG5的行錯誤校正碼BCH9;產生對應行數據段CG6的行錯誤校正碼BCH10;產生對應行數據段CG7的行錯誤校正碼BCH11;并且產生對應行數據段CG8的行錯誤校正碼BCH12。藉此,列數據段RG1~RG4與行數據段CG1~CG8中的數據可分別被對應的列錯誤校正碼BCH1~BCH4與行錯誤校正碼BCH5~BCH12保護。應注意的是,本發明并不限于使用博斯-喬赫里-霍克碼作為輔助編碼算法來分別對此些子數據單元做編碼。例如,在另一范例實施例中,錯誤檢查與校正電路512會使用低密度奇偶檢查校正碼作為輔助編碼算法來分別對此些子數據單元做編碼。
值得一提的是,在本范例實施例中,錯誤檢查與校正電路512會先將子數據單元劃分至多個行數據段與列數據段之后,再對每一行數據段與列數據段進行編碼以產生對應每一行數據段與列數據段的行錯誤校正碼與列錯誤校正碼,但本發明不限于此。例如,在另一范例實施例中,錯誤檢查與校正電路512可不先將子數據單元劃分為此些行數據段與列數據段,并且直接根據子數據單元的排列方式來對子數據單元作錯誤校正編碼。舉例來說,錯誤檢查與校正電路512會直接對子數據單元DB1~DB8來進行錯誤校正編碼程序,以產生對應子數據單元DB1~DB8的列錯誤校正碼BCH1。
請參照圖8,在本范例實施例中,錯誤檢查與校正電路512會將列錯誤校正碼BCH1~BCH4和行錯誤校正碼BCH5~BCH12合并成為錯誤檢查與校正碼組ECC1,并且將包含數據串UD1(即,子數據單元DB1~DB32)與錯誤檢查與校正碼組ECC1的錯誤檢查與校正碼框ECCF1 儲存至可復寫式非易失性存儲器模塊406。爾后,存儲器控制電路單元404從可復寫式非易失性存儲器模塊406中讀取錯誤檢查與校正碼框ECCF1后,可使用錯誤檢查與校正碼組ECC1對錯誤檢查與校正碼框ECCF1所讀取到的數據串進行錯誤校正解碼程序以獲得正確的數據串UD1。
舉例來說,當從主機系統接收到讀取指令時,存儲器控制電路單元404(或存儲器管理電路502)會根據讀取指令從可復寫式非易失性存儲器模塊406的物理編程單元中讀取對應的錯誤檢查與校正碼框ECCF1并且獲取未校正的數據串UD1及對應的錯誤檢查與校正碼組ECC1。接著,錯誤檢查與校正電路512會執行錯誤校正解碼操作,以將未校正的數據串UD1分割為32個子數據單元DB1~DB32,并且將子數據單元DB1~DB32排列成二維數據矩陣700,并且從錯誤檢查與校正碼組ECC1中獲取對應每一行數據段的行錯誤校正碼BCH5~BCH12與每一列數據段的列錯誤校正碼BCH1~BCH4。然后,錯誤檢查與校正電路512會使用對應的行錯誤校正碼對每一行數據段進行解碼并使用對應的列錯誤校正碼對對列數據段進行解碼。例如,錯誤檢查與校正電路512會先根據對應此些列數據段的列錯誤校正碼對橫向排列的子數據單元所形成的多個列數據段進行解碼。即,錯誤檢查與校正電路512會使用列錯誤校正碼BCH1來解碼子數據單元DB1~DB8;使用列錯誤校正碼BCH2來解碼子數據單元DB9~DB16;使用列錯誤校正碼BCH3來解碼子數據單元DB17~DB24;并且使用列錯誤校正碼BCH4來解碼子數據單元DB25~DB32。倘若在經過第一次橫向解碼之后,子數據單元DB1~DB32之中存有無法校正的子數據單元時,錯誤檢查與校正電路512會再根據對應此些行數據段的行錯誤校正碼對包含有無法校正的子數據單元的行數據段數據進行第一次縱向解碼。例如,錯誤檢查與校正電路512會使用行錯誤校正碼BCH5來解碼子數據單元DB1、DB9、DB17、DB25;或使用行錯誤校正碼BCH6來解碼子數據單元DB2、DB10、DB18、DB26;或使用行錯誤校正碼BCH7來解碼子數據單元DB3、DB11、DB19、DB27;或使用行錯誤校正碼BCH8來解碼子數據單元DB4、DB12、DB20、DB28;或使用行錯誤校正碼BCH9來解碼子數據單元DB5、DB13、DB21、DB29;或使用行錯誤校正碼BCH10來解碼子數據單元DB6、DB14、DB22、DB30;或使用行錯誤校正碼BCH11來解碼子數據單元DB7、DB15、DB23、DB31;或使用行錯誤校正碼BCH12來解碼子數據單元DB8、DB16、DB24、DB32。在執行第一次縱向解碼之后,錯誤檢查與校正電路512會以相同方式,再次執行橫向解碼(即,第二次橫向解碼),之后再執行縱向解碼(即,第二次縱向解碼),并且以此類推直到所有子數據單元被校正或解碼終止條件到達(例如,迭代次數超過一預定次數)。由于在前次橫向解碼部分無法校正的子數據單元,可能在目前縱向解碼被校正,因此,在下次橫向解碼中,會有更多原先無法校正的子數據單元被校正。基此,通過橫項與縱向的迭代解碼可快速地對檢查與校正碼框中的使用者數據進行解碼并產生校正后的使用者數據。
值得一提的是,在上述區塊渦輪碼算法迭代過程中,若在一個子數據單元中出現的錯誤比特的數目大于錯誤檢查與校正電路512能夠校正的上限值(即,最大可校正錯誤比特數)時,上述的迭代無法使此子數據單元內的數據被校正。也就是說,既使整個使用者數據內錯誤比特數目不多,但此些錯誤比特集中在同一個子數據單元時,也會造成解碼失敗。基此,在本范例實施例中,當解碼終止條件到達(例如,迭代次數超過一預定次數)時,錯誤檢查與校正電路512會從目前的已解碼數據串的多個已解碼子數據單元中,搜索無法校正子數據單元并且將其中一個無法校正子數據單元設定為目標子數據單元。特別是,錯誤檢查與校正電路512 會調整此目標子數據單元內的數據串的值,并且再重新執行上述區塊渦輪碼算法來解碼調整后的行數據段與列數據段,由此正確輸出校正后的使用者數據。具體來說,在本發明范例實施例中,錯誤檢查與校正電路512會根據最后解碼的結果搜索無法校正子數據單元,并且根據無法解碼成功的行數據段與列數據段來選擇目標子數據單元來進行調整。
圖10是根據本發明的一范例實施例所輸出的選取目標子數據單元的范例。
請參照圖10,假設所讀取的錯誤檢查與校正碼框ECCF1中的使用者數據經過區塊渦輪碼算法解碼后所輸出的解碼數據串(以下稱為第一已解碼數據串)會排列成二維數據矩陣710,并且錯誤檢查與校正電路512無法根據列錯誤校正碼BCH2正確校正列數據段RG2且無法根據行錯誤校正碼BCH8正確校正行數據段CG4。在此例子中,錯誤檢查與校正電路512會先搜索出無法校正的子數據單元為子數據單元DB4、DB9、DB10、DB11、DB12、DB13、DB14、DB15、DB16、DB20、DB28(如斜線所示)。然后,錯誤檢查與校正電路512會依據無法校正的列數據段RG2與行數據段CG4識別出交界的子數據單元DB12作為目標子數據單元。
在選出目標子數據單元后,錯誤檢查與校正電路512會改變目標子數據單元內的至少一個比特的值,以產生調整后的使用者數據(以下稱為已調整使用者數據)。例如,在每個子數據單元內包括2個字節的數據的例子中,錯誤檢查與校正電路512每次會調整1個比特的值,將其從’0’改變為’1’或從’1’改變為’0’。在本發明一范例實施例中,錯誤檢查與校正電路512可產生一個對應的調整數據串來與目標子數據單元內的數據串進行互斥運算,以改變其比特的值。例如,若目標子數據單元內的數據串為’11111111’且要將第一個比特改變為’0’時,錯誤檢查與校正電路512可產生調整數據串’10000000’并與數據串’11111111’執行互斥運算,則可獲得數據串’01111111’。在調整完目標子數據單元內的值后,錯誤檢查與校正電路512會將調整后的目標子數據單元的數據串與第一已解碼數據串內其他子數據單元的數據串整合為已調整使用者數據,并重新進行上述區塊渦輪碼解碼操作,以判斷目標子數據單元是否可以被正確校正。若目標子數據單元無法被正確校正,錯誤檢查與校正電路512會反復調整目標區塊內的每個比特值,并進行上述區塊渦輪碼解碼操作。也就是說,第一次調整目標子數據單元內的第1個比特;第一次調整目標子數據單元內的第2個比特;第三次調整目標子數據單元內的第3個比特;并且以此類推。若在重新執行區塊渦輪碼解碼操作的過程中,目標子數據單元可以被正確校正且使用已調整使用者數據內的其他無法校正子數據單元皆可被校正時,錯誤檢查與校正電路512會輸出校正后的數據串(以下稱為已校正數據串)。
必須了解的是,在上述例子中,錯誤檢查與校正電路512是一次改變1個比特的值,但本發明不限于此,在另一范例實施例中,錯誤檢查與校正電路512亦可一次改變目標子數據單元內2個比特的值。
基于上述,在本發明范例實施例中,當錯誤檢查與校正電路512對使用者數據串執行完區塊渦輪碼解碼操作后識別無法產生正確校正的數據串時,錯誤檢查與校正電路512會搜索出可能存有大量錯誤比特的子數據單元,并且以比特翻轉(bit flipping)方式調整此子數據單元內的比特值,由此再嘗試解碼。基此,本發明范例實施例的錯誤檢查與校正電路512可提升正確校正數據的效能。在此,上述找出目標子數據單元、調整目標子數據單元的比特值、重新執行區塊渦輪碼解碼的操作也稱為比特翻轉解碼操作。
圖11是根據一范例實施例所示出的數據讀取的流程圖。
請參照圖11,在步驟S1101中,存儲器控制電路單元404(或存儲器管理電路502)從主機 系統11接收指示從邏輯地址讀取數據的讀取指令。
在步驟S1103中,存儲器控制電路單元404(或存儲器管理電路502)發送讀取指令序列以從可復寫式非易失性存儲器模塊406讀取對應此邏輯地址的數據。
在步驟S1105中,存儲器控制電路單元404(或錯誤檢查與校正電路512)依據所讀取的錯誤檢查與校正碼組對所讀取的使用者數據串執行錯誤校正解碼操作以產生已解碼數據串(以下稱為第一已解碼數據串)。例如,在本范例實施例中,存儲器控制電路單元404(或錯誤檢查與校正電路512)是使用區塊渦輪碼算法來解碼使用者數據串,并且其解碼步驟已配合圖式詳細描述如前,在此不在重復說明。
在步驟S1107中,存儲器控制電路單元404(或錯誤檢查與校正電路512)會判斷第一已解碼數據串是否存有無法校正的錯誤比特。
倘若第一已解碼數據串無存有無法校正的錯誤比特時,在步驟S1109中,存儲器控制電路單元404(或存儲器管理電路502)會將第一已解碼數據串作為已校正數據串傳送給主機系統11以響應此讀取指令。
倘若第一已解碼數據串存有無法校正的錯誤比特時,在步驟S1111中,存儲器控制電路單元404(或錯誤檢查與校正電路512)會判斷是否執行比特翻轉操作。例如,在一范例實施例中,存儲器控制電路單元404(或錯誤檢查與校正電路512)會判斷第一已解碼數據串中無法校正的行數據段的數目與無法校正的列數據段的數目是否小于預先定義值。例如,此預先定義值會被設定為1。倘若第一已解碼數據串中無法校正的行數據段的數目或無法校正的列數據段的數目小于預先定義值時,存儲器控制電路單元404(或錯誤檢查與校正電路512)會決定執行比特翻轉解碼操作。此外,存儲器控制電路單元404(或錯誤檢查與校正電路512)也會判斷執行比特翻轉操作的次數是否已經達到比特翻轉次數門檻值,并且若執行比特翻轉操作的次數已經達到比特翻轉次數門檻值時,則存儲器控制電路單元404(或錯誤檢查與校正電路512)會決定不執行比特翻轉解碼操作。
倘若決定不執行比特翻轉解碼操作時,在步驟S1113中存儲器控制電路單元404(或存儲器管理電路502)會輸出指示無法順利讀取數據的錯誤信息給主機系統11以響應此讀取指令。必須了解是,在決定不執行比特翻轉解碼操作時后就傳送錯誤信息給主機系統11僅是一范例,在另一范例實施例中,存儲器控制電路單元404亦可在不執行比特翻轉解碼操作之后,執行其他輔助解碼機制來繼續解碼。例如,存儲器控制電路單元404也為多個錯誤校正與檢查碼框產生外部錯誤校正碼,并且當一個錯誤校正與檢查碼框的使用者數據無法被校正時,存儲器控制電路單元404可讀取其他錯誤校正與檢查碼框且使用外部錯誤校正碼對此些錯誤校正與檢查碼框執行錯誤校正操作,以嘗試校正無法被校正錯誤校正與檢查碼框。
倘若決定執行比特翻轉解碼操作時,在步驟S1115中存儲器控制電路單元404(或錯誤檢查與校正電路512)會搜索第一已解碼數據串的已解碼子數據單元之中的多個無法校正子數據單元,從無法校正子數據單元之中選擇目標子數據單元,在第一已解碼數據串中調整所選擇的目標子數據單元的至少一比特值以產生已調整使用者數據串,并且對該已調整使用者數據串重新執行錯誤校正解碼操作以產生第二已解碼數據串。在步驟S1115中搜索無法校正子數據單元、選擇目標子數據單元以及調整目標子數據單元的至少一比特值的方式已詳細描述如上,在此不再重復描述。
之后,在步驟S1117中,存儲器控制電路單元404(或錯誤檢查與校正電路512)會判斷第 二已解碼數據串是否存有無法校正的錯誤比特。倘若第二已解碼數據串無存有無法校正的錯誤比特時,在步驟S1119中,存儲器控制電路單元404(或存儲器管理電路502)會將第二已解碼數據串作為已校正數據串傳送給主機系統11以響應此讀取指令。倘若第二已解碼數據串存有無法校正的錯誤比特時,步驟S1111會被執行。
綜上所述,本發明范例實施例的數據讀取方法、存儲器控制電路單元及存儲器儲存裝置在所讀取的數據無法被校正時,通過對可能集中出現過多錯誤比特的子數據單元執行比特翻轉,以正確地讀取數據。基此,本發明范例實施例的數據讀取方法、存儲器控制電路單元及存儲器儲存裝置整夠有效提升錯誤校正的效能,避免數據遺失。
最后應說明的是:以上各實施例僅用以說明本發明的技術方案,而非對其限制;盡管參照前述各實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分或者全部技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發明各實施例技術方案的范圍。