作者:admin 日期:2023-08-25 瀏覽: 次
手機閃存和固態硬盤為什么擦除多了會損壞?
點擊上方“公眾號” 可以訂閱哦!
在我們閃存系列文章中多次提到,構成手機存儲和固態硬盤SSD的基本存儲單元的NAND閃存,它的壽命是由擦除次數來決定的。準確的來說,是由Program/Erase(P/E)次數來決定的。有很多朋友留言問其中的具體原因,今天我就專門撰文來詳細討論一下其中的原理。本文專注于NAND Flash,有些原理有可能同樣適用于NOR Flash,但本文并不關心。如果不做特殊說明,下文閃存(Flash)指代NAND Flash。如果有朋友對NOR Flash感興趣,見此專門文章:雜談閃存二:NOR和NAND
閃存的工作原理
閃存價格節節攀升,讓三星大賺特賺。其實它的基本原理在1980年代之后基本就沒有變化過。它的構成和場效應管(MOSFET)十分類似:
它由:源極(Source)、漏極(Drain)、浮動柵(Float Gate)和控制柵(Control Gate)組成。相對場效應管的單柵極結構,閃存是雙柵極結構。浮動柵是由氮化物夾在二氧化硅材料(Insulator)之間構成。
我們的寫操作(Program)是這樣:
在控制柵加正電壓,將電子(帶負電)吸入浮動柵。在此后,由于浮動柵上下的二氧化硅材料并不導電,這些電子被囚禁(Trap)在浮動柵之中,出不去了。這樣無論今后控制柵電壓有否,這個狀態都會保持下去,所以閃存可以掉電保存數據。注意寫操作完畢后,該閃存單元存儲的是0,后面我們將會介紹為什么。
我們的擦除操作(Erase)剛好相反:
在源極加正電壓利用浮空柵與漏極之間的隧道效應,將注入到浮空柵的負電荷吸引到源極,排空浮動柵的電子。這時讀取的狀態是1。
那為什么有電子是0,沒電子是1呢?以為讀取的時候,需要給控制柵加一個低的讀取電壓,對于被Program過的閃存單元來說,被囚禁的電子可以抵消該讀取電壓,造成源極和漏極之間是處于被關閉的狀態:
如果是被擦除過的就剛好相反,源極和漏極在控制柵的低電壓作用下,處于導通狀態:
也就是說通過向控制柵加讀取電壓,判斷漏極-源極之間是否處于導通狀態來讀取閃存單元的狀態,如果被Program過的,就是處于關閉OFF狀態,為0;而被Erase過的,就是處于導通狀態ON,為1。
理論上來說,閃存可以每個單元來單獨擦除和編程。但是為了節省成本,實際上作用在控制柵上的擦除電壓是整個塊(Block)連接在一起的,這就是為什么擦除要以塊為單位了。
為什么閃存會損壞
每次電子在包圍浮動柵的二氧化硅上進進出出,都會造成它的老化:
長此以往,浮動柵就不能很好的鎖住電子,電子會流失造成漏極-源極之間是否處于導通狀態錯誤,進而數據讀取錯誤。閃存控制器通過校驗發現錯誤后會將其標為不可用,而在OP空間找一塊來替代,并在FTL表里改變對應關系。
而 SLC(Single-Level Cell)的省錢版:MLC(Multi-Level Cell) 和 TLC(Triple-Level Cell) 的引入讓這個問題更加嚴重。原來SLC只有ON/OFF兩種狀態,現在的TLC要有8種狀態:
主要靠精確控制浮動柵里面的電子來實現,老化會讓這種控制很容易出錯。這樣就是為什么MLC和TLC相比SLC,生命周期更短的原因:
注意圖中的P/E Cycle。
結論
閃存單元的損壞是個不可逆的過程,壞了就是壞了,人死不能復生,節哀順變吧。幾個壞塊不會產生多大問題,OP空間完全可以罩得住,問題是只要產生壞塊,慢慢壞塊會越來越多,寫放大也會越來越嚴重,慢慢的就會產生讀寫錯誤,或者速度嚴重下降。這時我們一定要考慮換塊SSD了。
也許僅僅依靠抽象的判斷速度對普通用戶并不是很好掌握。就像買西瓜都要拍一下,實際上估計很多人都是做個樣子而已。真正科學判斷SSD的狀態要靠SMART(Self-Monitoring Analysis and Reporting Technology)等工具,我們可以借助SSD廠家提供的工具來查看SSD的健康情況,今后我會專文寫寫相關內容。