閃存的一個特性就是隨著閃存的使用以及數據存儲時間的變長,存儲在閃存里面的數據容易發生比特翻轉,出現隨機性錯誤。這個問題隨著閃存制程的變小越發嚴重。因此使用閃存作為存儲介質的固態硬盤,需要采用一些數據完整性的技術來確保用戶數據可靠不丟失。常見的技術有:
-
ECC 糾錯
-
RAID 數據恢復
-
重讀(Read Retry)
-
掃描重寫技術(Read Scrub)
-
數據隨機化
讀錯誤來源
閃存數據發生錯誤,主要有以下幾個原因:
1.擦寫次數增多 隨著閃存塊擦寫次數增多,氧化層逐漸老化,電子進出存儲單元越來越容易,因此存儲在存儲單元的電荷容易發生異常,導致數據讀錯誤
2. 數據保留
隨著時間的推移,存儲在存儲單元的電子會流失,整個閾值電壓分布向左移動,導致讀數據的時候發生誤判
3.讀干擾
讀一個 Wordline 數據時,需要施加Vpass電壓在其他 Wordline上,導致其他閃存頁發生輕微寫。如果讀的次數過多,輕微寫累積起來就會使閾值電壓分布發生右移,導致讀數據時候發生誤判,即讀數據錯誤
4.存儲單元之間干擾
由于存儲電子的浮柵極是導體,兩個導體之間構成電容,一個存儲單元電荷的變化會導致其他存儲單元電荷變化,而受影響最大的就是它與相鄰的存儲單元。周圍的單元是不同的狀態時,中心單元的閾值電壓是不一樣的。
5. 寫錯誤 寫錯誤一般發生在MLC或者TLC 2-Pass(先寫Lower Page,然后再寫Upper page)寫過程中。寫Upper page的時候,它是基于之前Lower page的狀態,然后再寫每個存儲單元到目標狀態。如果寫Upper page的時候,Lower page數據已經出錯(注意寫Upper的時候,Lower Page的數據是不會經過控制器ECC糾錯的,寫過程發生在閃存內部),就會導致存儲單元寫到一個不期望的狀態,即發生寫錯誤。
數據一開始就寫錯了,當然就別指望讀對了。
TLC 1-Pass program則沒有這個問題,因為Lower Page和Upper page是一次性同時寫入,寫Upper page不依賴于Lower Page數據。當然,如果一開始擦除狀態就不對,那么還是會發生寫錯誤。
注:本文來源于聯樂實業官網http://www.a4102.cn/,轉載請標明出處