读《闪存基础》总结
原文的出處:來自?http://www.ssdfans.com/?p=45
1.寫操作是在控制極加正電壓,使電子通過絕緣層進入浮柵極。擦除操作正好相反,是在襯底加正電壓,把電子從浮柵極中吸出來。如下圖所示:
一個存儲單元電子劃分的越多,那么在寫入的時候,控制進入浮柵極的電子的個數就要越精細,所以寫耗費的時間就加長;同樣的,讀的時候,需要嘗試用不同的參考電壓去讀取,一定程度上加長讀取時間。所以我們會看到在性能上,TLC不如MLC,MLC不如SLC.?
一個FLASH Block的組織架構。一個WordLine對應著一個或若干個Page,取決于SLC,MLC或者TLC。對SLC來說,一個WordLine對應一個Page;MLC則對應2個Page,這兩個Page是一對:Lower Page 和Upper Page;TLC對應3個Page。一個Page有多大,那么WordLine上面就有多少個存儲單元(Cell),就有多少個Bitline。一個Block當中的所有這些存儲單元(Cell)都是共用一個襯底的。
DIE/LUN是接收和執行FLASH命令的基本單元。上圖中,LUN0和LUN1可以同時接收和執行不同的命令。但在一個LUN當中,一次只能執行一個命令,你不能對其中的某個Page寫的同時,又對其他Page進行讀訪問。
?
每個Plane都有自己獨立的Cache Register或者 Page Register,一般情況下,兩個Register內容都是一樣的,其大小等于一個Page的大小。
Host在寫某個Page的時候,它是先把數據從Host傳輸到該Page所對應Plane的Cache Register當中,然后再把整個Cache Register當中的數據寫到NAND FLASH陣列;
讀的時候類似,它先把這個Page的數據從FLASH陣列讀取到Page Register,然后再按需傳給host。
NAND FLASH的擦除是以Block為單位的。為什么呢?那是因為在組織結構上,一個Block當中的所有存儲單元(Cell)是共用一個襯底的(Substrate)。當你對某襯底施加強電壓,那么上面所有浮柵極的電子都被吸出來了。
SLC的擦寫次數可達十萬次,MLC一般為幾千到幾萬,TLC降到幾百到幾千。
對MLC或者TLC來說,寫一個Block當中的Page,應該順序寫:Page0,Page1,Page2,Page3,…;禁止隨機寫入,比如:Page2,Page3,Page5,Page0,…,這是不允許的。但對讀來說,沒有這個限制。SLC也沒有這個限制。
讀干擾(Read Disturb)
從NAND讀取原理來看,當你讀取一個Page的時候,Block當中未被選取的Page控制極都會加一個正電壓,以保證未被選中的MOS管是導通的。這樣問題就來了,頻繁的在一個MOS管控制極加正電壓,就可能導致電子被吸進浮柵極,形成輕微的Program。從而最終導致比特翻轉。但是,這個不是永久性損傷,重新擦除Block還能正常使用。注意的是,Read Disturb影響的是同一個Block中的其它Page,而非讀取的Page本身。
寫干擾(Program Disturb)
我們寫一個Page的時候,數據0和1混合的。由于對擦除過的Block,其所有的存儲單元初始值就?是1,所以Program的時候,只有寫0的時候才真正需要Program。如上圖所示,綠色的Cell是寫0,需要Program的,紅色的代表寫1,并不需要Program。我們這里把綠色的Cell稱之為Programmed Cells,紅色的Cell叫Stressed Cells。寫某個Page的時候,我們是在其 WordLine的控制極加一個正電壓(上圖是20V),對于Programmed Cells所在的String,它是接地的,不需要Program Cell所在的String,它是接一正電壓(上圖為10V)。這樣最終產生的后果是,Stressed Cell也會被輕微Program。與Read Disturb不同的是,Program Disturb 影響的不僅是同一個Block當中的其它Page,自身Page也受影響。相同的是,都是不期望的輕微 Program導致比特翻轉,都非永久性損傷,經擦除后,Block還能再次使用。
電荷泄漏
?存儲在NAND FLASH存儲單元的電荷,如果長期不使用,會發生電荷泄漏。不過這個時間比較長,一般十年左右。同樣是非永久性損傷,擦除后Block還能使用。
上面說的這些,是所有NAND面臨的問題,包括SLC,MLC和TLC。對MLC來說,又有其特有的 一些問題。
1.正如前面提到的,MLC最大擦寫次數變小。這樣,就更需要Wear Leveling技術來保證整個存儲介質的使用壽命。
2.對MLC來說,一個存儲單元存儲了兩個比特的數據,對應著兩個Page:Lower Page和Upper Page。假設Lower Page先寫,然后再寫Upper Page的過程中,由于改變了整個Cell的狀態,如果這個時候掉電,那么之前寫入的Lower Page數據也丟失。一句話,寫一個Page失敗,可能會導致另外一個Page的數據損壞。
3.前面說到,不能隨機寫。不能先Program Upper Page,然后再Program Lower Page,這點就限制了我們不能隨意的寫。 4.寫Lower Page時間更短,寫Upper Page時間更長。所以會看到有些Page寫入速度快,有些Page寫入時間慢。讀取時間對Lower Page和Upper Page來說都差不多。
?
轉載于:https://www.cnblogs.com/Caden-liu8888/p/7365155.html
總結
- 上一篇: BZOJ1296:[SCOI2009]粉
- 下一篇: webApp开发-功能模块开发流程