點擊這里聯(lián)系客服銷售客服
銷售客服
點擊這里聯(lián)系客服售前客服
售前客服
點擊這里聯(lián)系客服售后維護
售后維護
首頁 > 文章詳細(xì)

VNR 閃存數(shù)據(jù)恢復(fù)工具:NAND 閃存中的 ECC

發(fā)布日期:2025-01-04 17:50:37 【關(guān)閉】
摘要:VNR 閃存數(shù)據(jù)恢復(fù)工具:NAND 閃存中的 ECC

所有現(xiàn)代閃存設(shè)備都存在因 NAND 芯片質(zhì)量差而導(dǎo)致的數(shù)據(jù)完整性問題。這個問題被稱為“位錯誤”。當(dāng)文件存儲區(qū)域出現(xiàn)位錯誤時,文件就會損壞且無法讀取。這些位錯誤很容易在多媒體文件上出現(xiàn),如下圖所示。

NAND 存儲器中存在多種位錯誤來源(電子元件間干擾、電荷泄漏、讀取干擾等),并且有多種減少位錯誤的方法(糾錯碼、功率操作、內(nèi)置讀取重試算法)。糾錯碼是保護數(shù)據(jù)并在發(fā)生錯誤時修復(fù)數(shù)據(jù)的最有效方法,因此所有閃存控制器都使用內(nèi)置 ECC 編碼器/解碼器。在數(shù)據(jù)記錄(編程)過程中,控制器生成特殊的校驗和并將其存儲在每個頁內(nèi)。當(dāng)用戶請求數(shù)據(jù)(頁讀取操作)時,控制器檢查每個頁的數(shù)據(jù)完整性,如果檢測到錯誤則執(zhí)行糾正。

BCH ECC 代碼是閃存設(shè)備中最常用的代碼之一。 BCH算法是可調(diào)的并且有一組參數(shù)。這些參數(shù)在控制器的固件中預(yù)先編程,并且因型號而異。當(dāng)控制器損壞時,有關(guān)參數(shù)的信息會丟失,但 ECC 校驗和仍然保留在 NAND 芯片的每個頁內(nèi)。 Visual Nand Reconstructor 有一個軟件 BCH 解碼器,可使用剩余的 ECC 校驗和執(zhí)行數(shù)據(jù)糾錯。一旦提取出物理鏡像(或者在刪除 BCR 元素后出現(xiàn)壞列),就可以通過 ECC 算法進行糾錯。有時數(shù)據(jù)應(yīng)該在 ECC 之前進行非異或運算。

ECC 結(jié)構(gòu)、有效負(fù)載和奇偶校驗區(qū)域

閃存的頁通常由數(shù)據(jù)存儲區(qū)、備用區(qū)和校驗碼區(qū)組成。幾乎在每種情況下,這些區(qū)域都會重復(fù)多次,具體取決于頁大小和頁結(jié)構(gòu)。對于 ECC,僅存在兩個區(qū)域 - 有效負(fù)載和奇偶校驗。奇偶校驗是 ECC 區(qū)域本身,有效負(fù)載可能包含數(shù)據(jù)區(qū)域或帶有備用區(qū)域的數(shù)據(jù)區(qū)域,具體取決于控制器型號。每個有效負(fù)載和奇偶校驗形成一個代碼字。一頁可以包含多個代碼字(1,4,8,16..)。

代碼字的數(shù)量取決于頁大小和有效負(fù)載+奇偶校驗區(qū)域的數(shù)量。

VNR - 自動檢測 ECC

VNR 具有內(nèi)置的自動檢測 ECC 機制(針對數(shù)據(jù)庫中的控制器和代碼字)。要啟動 ECC 自動檢測,只需按工具欄上的“查找代碼字”按鈕。

如果控制器品牌未知,請選擇第一個選項。如果控制器供應(yīng)商已知,則可以通過選擇控制器供應(yīng)商來縮小搜索范圍。

按“查找”按鈕開始分析,界面會顯示各代碼字的可能性。

代碼字會按概率自動排序,這里有一些需要注意的事項:
  1. 代碼名稱(分別由控制器型號、頁大小、ECC 大小、代碼字?jǐn)?shù)組成)
  2. 結(jié)果(概率)。粗體值表示所有碼字都匹配,否則僅測試第一個代碼字。

通常選擇ECC最重要的標(biāo)準(zhǔn)是該值是粗體且高于80%。
控制器型號不太重要,因為某些控制器可能使用相同的 ECC 代碼。
頁大小不必精確,但代碼字的數(shù)量和大小應(yīng)該匹配。 (例如上圖中前三個粗體值屬于相同的代碼)。

為了檢查代碼是否有效,請在參數(shù)選項卡中打開 ECC 映射,向下滾動并確保大部分頁為綠色。

ECC 和壞列

許多 TLC NAND 芯片都有壞列,很重要的一點是,在 ECC 自動檢測之前要使用 BCR 元素刪除它們(并使用 BCR 作為物理鏡像的來源進行進一步分析)。在刪除壞列期間,應(yīng)特別注意 ECC 結(jié)束的區(qū)域。有些控制器在ECC代碼末尾留下很多位“1”,看起來像壞列,但實際上包含ECC代碼的位很少。

例如:

上圖中只有 1 位 ECC,如果將其作為壞列刪除,可能會影響糾錯效率。

異或之前/之后的 ECC

大多數(shù)控制器從加擾(異或)數(shù)據(jù)生成 ECC(奇偶校驗),而有些控制器則根據(jù)原始數(shù)據(jù)生成 ECC(奇偶校驗)。因此有時需要檢查 ECC 是在 XOR 之前還是之后起作用。此外,當(dāng)奇偶校驗被異或時,可能需要在異或之后使用ECC元素。

物理鏡像校正

物理鏡像校正是邏輯鏡像重建中的強制性步驟。 VNR 有幾個選項可以糾正轉(zhuǎn)儲:

  1. 打開 ECC(在參數(shù)選項卡中,在不進行物理轉(zhuǎn)儲修改的情況下打開 ECC。創(chuàng)建標(biāo)記表時對于 SA 校正非常有用)
  2. 正確轉(zhuǎn)儲(一次性糾正并刪除轉(zhuǎn)儲文件中的位錯誤)
  3. 重新讀取轉(zhuǎn)儲(使用讀取重試算法進行多遍校正和未校正頁面重新讀?。?/span>

當(dāng)選擇 ECC 元素時,所有這些選項都位于 BCH 工具欄上。


使用 ReRead 轉(zhuǎn)儲選項時,當(dāng)前存儲芯片必須連接到讀卡器。

這里有幾個選項:

  1. 起始地址
  2. 最大通過次數(shù)
  3. 重試讀取(當(dāng)芯片支持時自動分配Read Retry命令)

不支持的 ECC - 如何創(chuàng)建新代碼

ElcomSoft 定期使用新的 ECC 代碼更新數(shù)據(jù)庫,但內(nèi)存芯片和控制器的組合太多,供應(yīng)商也經(jīng)常更新代碼配置,因此,VNR 具有“代碼字分析”工具,允許暴力破解任何 BCH ECC 代碼字的公式。后面的代碼字可以根據(jù)頁結(jié)構(gòu)填充到整個頁面。

“代碼字分析”功能位于 ECC 工具欄上。

必須指定一組參數(shù)才能啟動 ECC 暴力破解過程。

代碼字分析選項有:

  1. 頁大小 - 芯片/轉(zhuǎn)儲的頁大小
  2. Payload - 有效負(fù)載區(qū)域(如果ECC區(qū)域的位置不是很清楚,可以設(shè)置浮動邊界)
  3. Parity - 奇偶校驗區(qū)域(如果ECC區(qū)域的位置不是很清楚,可以設(shè)置浮動邊界)
  4. 多項式:
    1. 通過多項式 - 對 BCH ECC 的已知多項式進行暴力破解
    2. 逐級 - 對 BCH ECC 的所有現(xiàn)有多項式進行暴力破解(過程較長,可能需要 1 - 24 小時)
  5. 操作:
    1. 無操作 - ECC 沒有任何轉(zhuǎn)換
    2. 反轉(zhuǎn)
    3. 位旋轉(zhuǎn)
    4. 反轉(zhuǎn)和旋轉(zhuǎn) - ECC 具有位旋轉(zhuǎn)且反轉(zhuǎn)
  6. 地址
    1. 轉(zhuǎn)儲 - VNR 在自動選擇的塊上測試每個組合
    2. 固定 - VNR 在特定偏移處測試每個組合

代碼字分析測試所有組合,以便找到正確的 ECC 代碼。

例如:

頁面大小 = 8640

頁結(jié)構(gòu): DA(1024)+SA(8)+ECC(42)+7x[DA(1024)+SA(4)+ECC(42)]+EMPTY(76)

第一個代碼字 = 有效負(fù)載(1032) + 奇偶校驗(42)

當(dāng)找到第一個代碼字的 ECC 匹配設(shè)置時,其權(quán)重通常高于 20。要添加代碼字,只需選擇匹配的設(shè)置,然后按“添加”按鈕。

添加第一個代碼字后,需要根據(jù)頁結(jié)構(gòu)添加所有其他代碼字。代碼字分析器的主要功能是查找代碼字的參數(shù),而不是整個ECC結(jié)構(gòu)。該芯片頁大小為 8640 ,因此很容易注意到還有 7 個代碼字需要添加。

要根據(jù)前一個代碼字自動添加這 7 個缺失的代碼字,請單擊下面突出顯示的按鈕

如果備用區(qū)域大小因代碼字而異,則需要根據(jù)頁結(jié)構(gòu)調(diào)整后續(xù)代碼字。要編輯代碼字,請選擇它并單擊“編輯”按鈕。


第二個和其他代碼字的有效負(fù)載區(qū)域小 4 個字節(jié)。調(diào)整完畢后,單擊“確定”添加此代碼字。

所有其他代碼字都具有相同的結(jié)構(gòu),因此可以輕松地用當(dāng)前代碼字來填充。


添加所有代碼字后,就可以檢查 ECC 映射了。

大多數(shù)頁的綠色地圖意味著代碼字可以正常工作。

如果大多數(shù) ECC 映射元素都是紅色,則意味著 ECC 不正確,必須重新檢查代碼結(jié)構(gòu)。