天天看點

Nand Flash簡介-2

下面是Nand Flash介紹的第二節,主要是介紹下Nand Flash裡面結構和一些特性。

Nand Flash結構

Nand Flash簡介-2

圖1

上圖為Nand Flash的結構,圖中這片Flash有8192個塊(Block),一個塊包含有64個頁(Page),一個頁有4K+128Bytes。但為什麼一個頁會有4K+128Bytes?那是因為需要一些備援的空間(如上面128Bytes)用來存放錯誤糾正碼(ECC)的和其它一些FTL管理資訊。

現在的Flash頁大小一般是8K、16K了,之前聽說可能有32K的(不确認,沒接觸過),一個塊也可能有192、256、384、512個頁。而且還有Multi Planes等結構,以後機會再說,本系列主要想講FTL的,Nand Flash介紹隻是作為鋪墊。

Nand Flash特性

基本操作

Nand Flash基本操作有讀、程式設計(寫)、擦除。程式設計、讀是以頁為機關的,擦除以塊為機關。

Nand Flash簡介-2

圖2

擦除操作,是把電子“吸”出浮動門,擦除後每個Cell狀态為1(這裡把擦除後狀态定義為1,程式設計後狀态定義為0,因為擦除後讀出就為1)。擦除操作最小機關為1個塊,在圖1中,即64個頁。圖2a為擦除操作。

程式設計(寫)操作,是把電子“打入”Cell中,即從1變0。以頁為機關進行操作。圖2b就是程式設計操作。

讀操作,檢測浮動門中電勢,判斷是0 or 1。以頁為機關。

是以在擦除後,Cell隻能從狀态1變為0,而不能從0變1,是以在寫之前,塊需要擦除。但如果恰好某幾個Cell狀态為“1101”,你需要程式設計“0001”,這樣是可以的,可以節約擦除時間,但是操作起來異常複雜,而且Cell 0、1不均衡,其實也會不穩定,應該沒有人會這樣做。

P/E次數限制

P/E:Program/Erase。Nand Flash中每個塊有一定的擦除、寫次數限制,因為浮動門充放電會降低二氧化矽絕緣能力,到了一定門檻值後,不能保證Cell中電荷數量。下圖是不同種類和制程的Nand Flash P/E情況,其中有意思的是,制程的提高降低了P/E次數。MLC、TLC的P/E次數比SLC少。

Nand Flash簡介-2

圖3

Data Retenion

Data Retenion:即資料儲存的能力,往Flash中寫入資料,資料并不可以永久儲存。随着時間的推移,Cell中電子會跑掉,嚴重的話影響Cell的電壓門檻值。如果在一個頁中,異常的Cell超過了ECC糾錯門檻值,那麼這個頁中的資料就會損壞。Data retention和目前資料儲存塊的P/E次數(浮動門周圍的二氧化矽絕緣能力降低)和溫度有關。

Write/Read Disturb

Write Disturb(程式設計幹擾):指當對頁(page)進行寫入時,由于門檻值電壓接近的關系,相鄰的位(bit)也被升高,進而造成相鄰的位出錯。閃存電荷非常不穩定,相鄰存儲電荷的懸浮門間會互相幹擾,造成相鄰懸浮門間的bit錯誤,MLC由于存在4組接近的電壓,與SLC相比更容易受到幹擾。

Read Disturb(讀幹擾):所使用的閃存讀取方式随着時間的推移會導緻在同一區塊中相近的記憶單元内容改變(變成寫入動作)。這即是所謂的讀取幹擾。會導緻讀取幹擾現象的讀取次數門檻介于區塊被抹除間,通常為100,000次。假如連續從一個記憶單元讀取,此記憶單元将不會受損,而受損卻是接下來被讀取的周圍記憶單元。為避免讀取幹擾問題,閃存控制器通常會計算從上次抹除動作後的區塊讀取動作總次數。當計數值超過所設定的目标值門檻時,受影響的區塊會被複制到一個新的區塊,然後将原區塊抹除後釋放到區塊回收區中。原區塊在抹除動作後就會像新的一樣。若是閃存控制器沒有即時介入時,讀取幹擾錯誤就會發生,如果錯誤太多而無法被ECC機制修複時就會伴随着可能的資料丢失。

(說人話!)Read disturb簡單說就是,在某個塊中重複讀某個頁的資料,可能會造成這個塊内某些頁資料受損(Cell電勢改變),嚴重的情況下,被幹擾頁出錯會超過ECC糾錯能力,造成資料損壞。

總結

由于Nand Flash讀、寫、擦除粒度不同,造成了寫放大的情況(寫放大:實際寫操作的量超過請求的寫資料量。比如說某款Flash頁粒度為8K,現在要寫1K資料,由于讀、寫以頁為機關,是以需要先把Flash頁其它7K讀出來,加入新的1K資料,再重新寫進去。是以簡單的寫1K資料,涉及到了讀、寫8K的操作。還有更恐怖的情況:垃圾回收,在以後再說);由于有P/E的限制和Data Retention,是以我們需要增加磨損均衡和壞塊管理的算法;由于W/R Disturb,是以我們需要增加對重複讀操作進行特别處理。 而且在儲存設備使用的過程中,又要考慮大資料讀寫、小資料讀寫、順序讀寫、随機讀寫、持續讀寫、多線程讀寫、裝置異常掉電等等等等…是以FTL還是很有挑戰的。

因為Nand Flash有上述的BT屬性和各種各樣的操作需求,是以需要我們開發FTL去更加高效管理它,在主要的操作Case下發揮高性能的情況下,平衡每個塊的磨損,裝置可以使用更久。

對Nand Flash特性介紹,大概就介紹到這裡,後面或許會介紹下Flash的一些結構和一些操作。不過更想講下FTL了,關于Nand Flash的原理,以後有機會會深入研究。寫部落格和閑聊不太一樣,有些概念之前沒有弄得很深入,是以在寫出來的時候,需要去查詢确認,由于見識有限,是以有寫得不對的地方,請大家多多指導,多多交流,謝謝。