來自 http://www.ssdfans.com/?p=1814
SSD之所以需要BCH或LDPC等ECC糾錯算法,是因為閃存中的數據會在神不知鬼不覺的情況下發生比特翻轉。
導致比特翻轉的原因很多,比如之前提到的data retention 問題, PE問題,read disturb問題,還有其他一些問題。Program Disturb也是其中原因之一,今天就介紹一下什么是Program Disturb,它是如何導致數據出錯的。
要對閃存Block進行擦除操作,擦除是把浮柵極里面的電子趕出來。它的實現是在襯底加一個高電壓,控制極接地,之間建立一個強大的電場,浮柵極里面的電子在隧道效應作用下,被強制驅趕出來。

Program操作是在Block擦除的基礎上,通過往浮柵極注入電子,實現1變為0。往浮柵極注入電子,做法與擦除操作相反,它是在控制極加個高電壓,襯底接地,建立一個與擦除相反的強電場,外面的電子在隧道效應作用下,進入浮柵極。

Program是按Page為單位進行的,每個Page由很多bitline組成,我們往Page上寫數據時,里面數據有0也有1:如果往某個存儲單元寫入1,我們認為這個比特可以不做Program操作,因為擦除后的存儲單元,里面數據本來就是1;如果我們寫入的是0,則真正需要做Program操作,即把之前的1改寫為0。

上圖中,黃色圈起來的是我們要寫的Wordline (WL,某個具體的page),這里只畫出該WL上的兩個比特,其中一個比特我們需要寫0 (綠色圈起來),即進行真正的Program操作,而另外一個比特(紅色圈起來的),我們要寫入1,對該比特來說,我們不需要program (稱之為Program Inhibit)。
我們一次只能Program一個page。對該page,我們在該WL上所有的存儲單元控制極加一個19V的高電壓;而對其他未被寫的WL,我們在他們所有存儲單元的控制極上加一個較小的電壓,例子中是9V。
對於要做真正Program操作(1->0)的那個存儲單元所在的bitline (BL),我們讓其接地,於是,左邊的String看起來如下:

該String中,要program的那個存儲單元,控制極電壓是19V,襯底電壓是0,就形成一個強電場,電子就被注入浮柵極。

對該String中其它存儲單元(屬於其它沒有被Program的page or WL):

它們控制極電壓是9V,襯底電壓是0,也會形成一個電場,但該電場強度不足以讓電子輕松注入到其浮柵極。
但是不管怎樣,這個電場還是有概率讓電子進入到浮柵極,尤其是絕緣層隔絕性能比較差的時候(比如擦寫次數過多)。因此,被Program的存儲單元所在String上其它存儲單元會一定程度上受該次Program影響,我們稱之為Pass Disturb。該影響類似前面提到的Read Disturb,但由於一個Block擦除一次能寫的次數有限(一個Block的page數),不像Read操作可以反復讀取,所以,Pass Disturb對數據影響沒有Read Disturb嚴重。
看完左邊的String,我們看右邊的String,也就是那個無需Program的存儲單元(1->1,我們稱該存儲單元為 Program Inhibit)所在的String:

對Program Inhibit存儲單元,我們在其所在String的Bitline上加了個2V電壓,最終會在襯底產生一個7V的Vboost電壓。
對於Program Inhibit,控制極電壓是19V,減去7V的Vboost電壓,12V電勢差,該電勢差產生的電場不足以讓電子輕松流入浮柵極,因此,存儲單元基本還是保持擦除后的狀態,即1還是1。
但是,這個12V電勢差產生的電場,還是能讓電子有概率進入到浮柵極,尤其是絕緣層隔絕性能比較差的時候。最壞的情況,可能我們不期望Program的存儲單元,最后卻做了真正的Program操作,即1->0,這是我們不期望的。我們稱這種讓Program Inhibit存儲單元做了Program的現象,叫做Program Disturb。

最后,總結一下,Program操作存在下面兩個Disturb:
1.同一個Wordline (同一個Page),存在Program Disturb。我們在寫一個Page的時候,本來某些bit我們想寫入1,但最后卻寫成0。
2.Program的比特所在的那列String的其它存儲單元,存在Pass Disturb。
無論是Program Disturb還是Pass Disturb,其作用會導致浮柵極進入不期望的電子,這點和Read Disturb的影響是一樣的。但是,由於每個Page在一次擦除后Program只能進行一次,不像Read Disturb一樣,可以讀很多次,Program Disturb沒有累積效應(但單次影響程度比Read Disturb大,因為控制極上加的電壓更大),所以一定程度上沒有Read Disturb影響惡劣。但不管怎樣,Program操作也是導致數據出錯的一個元凶。
