本發(fā)明涉及存儲設備硬件技術領域,尤其涉及一種nandflash的編程方法。
背景技術:
nandflash是flash內(nèi)存的一種,屬于非易失性存儲設備(non-volatilememorydevice),其內(nèi)部采用非線性宏單元模式,具有容量大,改寫速度快等優(yōu)點,適用于大量數(shù)據(jù)的存儲。廣泛應用于嵌入式產(chǎn)品中,如數(shù)碼相機、mp3隨身聽記憶卡、體積小巧的u盤等。在nandflash的發(fā)展中,早期nandflash顆粒的存儲單元多為單層單元(single-levelcell,slc),即一個存儲單元為1bit(比特)位,此時每個存儲單元存在兩種狀態(tài)為0和1,隨著nandflash的發(fā)展,nandflash顆粒的存儲單元逐漸演變?yōu)槎鄬訂卧?multi-levelcell,mlc),即一個存儲單元有2比特位,接著推出了三層單元(triple-levelcell,tlc),即一個存儲單元有3比特位,甚至四層單元(quad-levelcell,qlc),即一個存儲單元有4比特位,相對應的,nandflash顆粒存儲單元的狀態(tài)也由2個變?yōu)?個、8個甚至16個。
nandflash的操作包括三部分:擦除操作、編程(寫操作)以及讀操作,其中以塊為單位進行擦除操作,以頁為單位進行編程和讀操作,對于nandflash的編程操作,其過程又分為加壓編程、編程驗證以及驗證結果三步操作。在nandflash存儲單元由1比特位變?yōu)槎啾忍匚坏那闆r下,圖1給出了傳統(tǒng)的nandflash進行編程的編程方法示意圖。該示意圖以tlc存儲單元為例,tlc存儲單元具有1個擦除狀態(tài)和7個編程狀態(tài),其編程狀態(tài)記為p1~p7,如圖1所示,傳統(tǒng)的編程方法是在加壓編程之間啟動七次編程的結果驗證。該方法存在的問題是:在一次加壓編程后,存儲單元實際上只達到了p1狀態(tài),還未達到p2,p3,p4,p5,p6,p7狀態(tài),如果此時就啟動p2~p7的編程驗證,就會大大浪費編程驗證時間。其編程驗證和掃描驗證結果所用的時間就會占據(jù)整個編程過程的一半以上,嚴重影響編程速度。
在編程操作中,由于加壓編程的時間不能改變,為了提高編程操作速度,只有控制編程驗證和掃描驗證結果所用的時間。圖2為改進后的現(xiàn)有編程方法的示意圖,仍以tlcnandflash為例,如圖2所示,該編程方法使用參數(shù)來控制何時啟動編程驗證,例如,在編程驗證階段,如果沒有啟動p2的驗證,那么只做p1的編程驗證。該方法雖然減少了驗證的次數(shù),提高了編程速度,但在對存儲塊中的所有編程頁都做一樣的處理時會產(chǎn)生誤差,導致其他問題如對峰值電流和功耗產(chǎn)生影響。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供一種nandflash的編程方法,以提高nandflash內(nèi)存的編程速度。
本發(fā)明實施例提供了一種nandflash的編程方法,包括:
s101、對編程頁施加編程電壓,如果達到啟動第1狀態(tài)編程驗證的驗證條件,則啟動第1狀態(tài)的編程驗證并掃描處于第1狀態(tài)的存儲單元;
s102、設置m=1,其中,m為所述nandflash的編程狀態(tài)序號,1≤m≤m,m=2n-1,n為nandflash存儲單元具有的比特位;
s103、判定m<2n-1是否成立,若是,則執(zhí)行步驟s104;若否,則執(zhí)行步驟s106;
s104、如果第m狀態(tài)的掃描結果達到啟動第m+1狀態(tài)編程驗證的設定值,則設置m=m+1,啟動第m狀態(tài)的編程驗證并掃描處于第m狀態(tài)的存儲單元,之后返回步驟s103;若否,則執(zhí)行步驟s105;
s105、以設定電壓增量值抬升所述當前編程電壓,啟動第1狀態(tài)至第m狀態(tài)的編程驗證并掃描處于第m狀態(tài)的存儲單元,之后返回步驟s103;
s106、判定第m狀態(tài)的編程驗證次數(shù)是否達到最大驗證次數(shù),若是,則執(zhí)行步驟s107;若否,則返回執(zhí)行步驟s105;
s107、如果所述編程頁中所有編程失敗的存儲單元總數(shù)不大于內(nèi)部設定值,則結束對所述編程頁的編程操作。
進一步的,所述對編程頁施加編程電壓,包括:
基于nandflash中的控制單元通過字線選擇單元選取要編程的存儲頁,記為編程頁;對所述編程頁的字線施加初始編程電壓,并在設定時間內(nèi)持續(xù)施壓。
進一步的,所述啟動第1狀態(tài)編程驗證的驗證條件為:對所述編程頁施加編程電壓的編程次數(shù)達到設定驗證啟動次數(shù);所述預設驗證啟動次數(shù)設定在1次~128次。
進一步的,還包括:對編程頁施加編程電壓,如果所施加編程電壓的當前編程次數(shù)小于所述預設驗證啟動次數(shù),則以設定電壓增量值抬升所述編程電壓,并令當前編程次數(shù)自加1。
進一步的,還包括:如果所述編程頁中所有編程失敗的存儲單元總數(shù)超過內(nèi)部設定值,則強制結束所述編程頁的當前編程驗證操作,同時聲明所有編程失敗的存儲單元,并對所述編程頁重新執(zhí)行編程操作。
進一步的,所述啟動第m狀態(tài)的編程驗證,包括:啟動對所述編程頁的讀操作,基于讀操作查驗應該編程到第m狀態(tài)的存儲單元是否已編程到了第m狀態(tài)。
進一步的,所述掃描所述第m狀態(tài)的存儲單元,包括:
基于所述編程頁中存儲單元的位線,對應該處于第m狀態(tài)的存儲單元進行掃描,確定編程失敗的存儲單元個數(shù),并計算第m狀態(tài)的編程失敗率;記所述第m狀態(tài)的編程失敗率為第m狀態(tài)的掃描結果。
進一步的,所述啟動第m+1狀態(tài)編程驗證的設定值為一個百分比值,所述百分比值基于所述編程頁在歷史編程操作中第m狀態(tài)編程失敗率的數(shù)據(jù)規(guī)律設定。
進一步的,所述最大驗證次數(shù)以及內(nèi)部設定值均基于所述編程頁在歷史編程操作中的數(shù)據(jù)規(guī)律設定。
進一步的,所述設定電壓增量值為一固定值。
本發(fā)明實施例提供的一種nandflash的編程方法,在現(xiàn)有的編程方法的前提下對編程過程中的編程驗證及驗證結果掃描兩階段的操作進行了改進,在該方法中,將對處于第m+1編程狀態(tài)存儲單元的編程驗證基于處于第m狀態(tài)存儲單元的掃描驗證結果進行啟動,并設定了存儲單元編程驗證的最大次數(shù)以及結束編程操作的結束條件。利用該方法,可以大大降低整個編程操作的時間消耗,很大程度的提高編程速度,同時也避免了編程操作時峰值電流和功耗產(chǎn)生影響。
附圖說明
圖1為nandflash傳統(tǒng)編程方法在tlcnandflash中的過程示意圖;
圖2為現(xiàn)有的nandflash編程方法在tlcnandflash中的過程示意圖;
圖3為本發(fā)明實施例一提供的一種nandflash的編程方法的流程圖;
圖4為本發(fā)明實施例二提供的一種nandflash的編程方法的流程圖;
圖5a為本發(fā)明實施例三提供的一種nandflash的編程方法的流程圖;
圖5b為本發(fā)明實施例三提供的一種nandflash的編程方法在tlcnandflash中的過程示意圖。
具體實施方式
下面結合附圖和實施例對本發(fā)明作進一步的詳細說明??梢岳斫獾氖?,此處所描述的具體實施例僅僅用于解釋本發(fā)明,而非對本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關的部分而非全部內(nèi)容。
實施例一
圖3為本發(fā)明實施例一提供的一種nandflash的編程方法的流程圖,該方法由nandflash執(zhí)行,是對現(xiàn)有編程方法的一種改進,如圖3所示,該方法包括:
s101、對編程頁施加編程電壓,如果達到啟動第1狀態(tài)編程驗證的驗證條件,則啟動第1狀態(tài)的編程驗證并掃描處于第1狀態(tài)的存儲單元。
在本實施例中,所述編程頁具體可為nandflash的存儲單元陣列中用于編程操作的一個存儲單元頁。所述編程操作以存儲單元頁為單位進行,所述nandflash的存儲單元陣列由多個存儲單元塊組成,所述存儲單元塊由多個存儲單元頁組成,所述存儲單元頁由多個存儲單元以行列連接組成。在一個存儲單元頁中,每行由多個存儲單元以字線連接,每列由多個存儲單元以位線連接,且一個存儲單元頁共享一根字線,一個存儲單元塊共享一根位線。
一般地,nandflash的編程操作分為:加壓編程、編程狀態(tài)驗證以及驗證結果掃描三個階段?;趎andflash型號的不同,存儲單元所具有比特位的個數(shù)不同,進而編程時nandflash具有的編程狀態(tài)個數(shù)也不同。所述編程驗證具體可為驗證對編程頁加壓后存儲單元中要發(fā)生改變的比特位狀態(tài)是否發(fā)生了改變,即比特位的狀態(tài)是否由“1”變成“0”。所述驗證結果掃描具體可為掃描編程到某個編程狀態(tài)的所有存儲單元,確定這些存儲單元中應該編程到某個編程狀態(tài)但是編程失敗的存儲單元個數(shù)。
在本實施例中,所提供的方法對現(xiàn)有編程方法的改進主要體現(xiàn)在編程狀態(tài)驗證以及驗證結果掃描階段。所述第1狀態(tài)具體可指nandflash編程操作中存儲單元應該呈現(xiàn)出的一種編程狀態(tài)。相應的,編程狀態(tài)還存在第2狀態(tài)、第3狀態(tài)、...、以及第m狀態(tài)等。將所述編程狀態(tài)以編號表示,主要便于對本發(fā)明所提編程方法中之后操作的描述。
進一步的,所述對編程頁施加編程電壓,包括:基于nandflash中的控制單元通過字線選擇單元選取要編程的存儲頁,記為編程頁;對所述編程頁的字線施加初始編程電壓,并在設定時間內(nèi)持續(xù)施壓。
一般地,nandflash的簡易結構優(yōu)選為:存儲單元陣列、字線選擇單元、位線選擇單元、電壓泵、以及整個nandflash芯片的控制單元。所述控制單元控制nandflash的具體操作,如擦除操作,編程操作等。在本實施例中,對于nandflash的編程操作,nandflash中的控制單元首先通過字線選擇單元選取要編程的存儲頁,作為編程頁;然后控制電壓泵對編程施加編程電壓并進行相應的加壓控制,如持續(xù)施壓和以設定值抬升電壓等。
在本實施例中,通過電壓泵對編程頁的字線施加編程電壓,使其處于高電平,此時編程頁的位線處于0電平,進而使作為存儲單元的晶體管中的電子注入該晶體管的浮柵中,由此實現(xiàn)存儲單元比特位狀態(tài)的改變。需要注意的是,在設定時間內(nèi)電壓泵向編程頁持續(xù)施加恒定電壓,設定時間一般優(yōu)選為10μs~150μs。
在本實施例中,在對編程頁加壓之后,需要對編程頁存儲單元的編程狀態(tài)進行驗證,所采用的方法是基于編程驗證啟動條件逐步啟動各編程狀態(tài)的編程驗證。所述啟動第1狀態(tài)編程驗證的條件具體為所施加編程電壓的當前編程次數(shù)是否達到了設定的啟動第1狀態(tài)編程驗證的設定驗證啟動次數(shù)。
s102、設置m=1,其中,m為所述nandflash的編程狀態(tài)序號,1≤m≤m,m=2n-1,n為nandflash存儲單元具有的比特位。
在本實施例中,不同類型的nandflash,存儲單元具有的比特位個數(shù)不同,進而編程時能達到的編程狀態(tài)的個數(shù)也不同,為了便于對之后步驟的描述,以序號m表示不同的編程狀態(tài),其中,1≤m≤m,m=2n-1,n為nandflash存儲單元具有的比特位。示例性的,如果存儲單元具有3比特位,則具有的編程狀態(tài)總數(shù)m就為7個,各編程狀態(tài)可表示為第1狀態(tài),第2狀態(tài),...,第m狀態(tài),...,第7狀態(tài)。
s103、判定m<2n-1是否成立,若是,則執(zhí)行步驟s104;若否,則執(zhí)行步驟s107。
在本實施例中,在判定編程狀態(tài)的掃描結果是否符合啟動下一編程狀態(tài)進行編程驗證的條件前,需要先判定所述編程狀態(tài)是否合法,即判定所述編程狀態(tài)的序號m是否大于2n-1,如果大于的話,再進行之后的編程驗證判定是無意義的,可直接執(zhí)行步驟s107。
s104、判定第m狀態(tài)的掃描結果是否達到啟動第m+1狀態(tài)編程驗證的設定值,若是,則執(zhí)行步驟s105;若否,則執(zhí)行步驟s106。
在本實施例中,啟動第m+1狀態(tài)編程驗證的設定值具體指第m+1狀態(tài)編程驗證的啟動條件,所述設定值需要與所述第m狀態(tài)的掃描結果值進行比較。
s105、設置m=m+1,啟動第m狀態(tài)的編程驗證并掃描處于第m狀態(tài)的存儲單元,之后返回步驟s103;
在本實施例中,如果第m+1狀態(tài)的編程驗證的設定值小于或等于第m狀態(tài)的掃描結果值,則可啟動第m+1狀態(tài)的編程驗證。需要注意的是,在啟動第m+1狀態(tài)的編程驗證前,需先將設置為m=m+1,由此便于實現(xiàn)所有編程狀態(tài)的編程驗證條件判定的循環(huán)操作。
進一步的,所述啟動第m狀態(tài)的編程驗證,包括:啟動對所述編程頁的讀操作,基于讀操作查驗應該編程到第m狀態(tài)的存儲單元是否已編程到了第m狀態(tài)。
在本實施例中,所述對第m狀態(tài)的編程驗證具體可理解為對所述編程頁中應該編程到第m狀態(tài)的存儲單元進行讀操作,由此查驗應該編程到第m狀態(tài)的存儲單元是否已編程到了第m狀態(tài)。
一般地,在nandflash的編程操作中,所述編程頁中哪個存儲單元的比特位應該處于哪個編程狀態(tài)在加壓編程前已經(jīng)是確定的??梢哉f,在所述編程頁中,每個編程狀態(tài)對應的存儲單元個數(shù)是一個固定值。確定編程狀態(tài)對應存儲單元個數(shù)的過程可表述為:由外部用戶通過復用引腳向nandflash芯片輸入數(shù)據(jù),所述輸入數(shù)據(jù)存放至頁寄存器中,并通過nand片選向nfcmd寫入命令以及向nfaddr寫入地址告訴選中的存儲單元需要達到什么狀態(tài)。等待數(shù)據(jù)就緒后,就可通過加壓編程實現(xiàn)相應存儲單元的比特位狀態(tài)的改變,之后可通過讀操作驗證存儲單元中比特位狀態(tài)變化的情況。
s106、以設定電壓增量值抬升所述當前編程電壓,啟動第1狀態(tài)至第m狀態(tài)的編程驗證并掃描處于第m狀態(tài)的存儲單元,之后返回步驟s103。
在本實施例中,如果第m狀態(tài)的掃描結果值沒有達到設定的第m+1狀態(tài)的編程驗證啟動值,那么表明nandflash電壓泵向編程也提供的編程電壓達不到存儲單元中電荷的移動的力度,需要抬升電壓,因此可以以設定電壓增量值抬升當前編程電壓并在設定時間內(nèi)持續(xù)施加抬升后的編程電壓。
一般地,存儲單元達到不同編程狀態(tài)所需要的電壓大小和寬度不同,即持續(xù)施加編程電壓的設定時間不同,因此,在設定電壓增量值抬升編程電壓時也要相應改變電壓持續(xù)的設定時間長短,在本發(fā)明方法中,設定時間的范圍基于歷史操作的數(shù)據(jù)規(guī)律動態(tài)改變。
在本實施例中,在以設定電壓增量值抬升所述當前編程電壓后,需要啟動第1狀態(tài)到第m狀態(tài)的編程驗證,而啟動所述第1~m的編程驗證時不再需要判定是否達到驗證啟動條件,且無需掃描處于第1~m-1狀態(tài)的存儲單元,只需對處于第m狀態(tài)的存儲單元進行掃描,因為對第m狀態(tài)存儲單元的掃描結果需要作為判定是否啟動第m+1狀態(tài)編程驗證的條件。
s107、判定第m狀態(tài)的編程驗證次數(shù)是否達到最大驗證次數(shù),若是,則執(zhí)行步驟s108;若否,則返回執(zhí)行步驟s106。
在本實施例中,若m的當前賦值大于等于2n-1(n為存儲單元具有的比特位個數(shù))時,無需再基于第m狀態(tài)的掃描結果判定是否需要啟動下一編程狀態(tài)的編程驗證,而是需要判定對第m狀態(tài)的編程驗證的次數(shù)是否達到了最大驗證次數(shù)。
一般地,在nandflash閃存的工作操作中,無論是擦除操作還是編程操作,對存儲單元比特位狀態(tài)改變數(shù)量的限定并不像norflash那樣絕對,nandflash允許存在少量沒有達到相應狀態(tài)的存儲單元。因此對于第m狀態(tài)的編程驗證不能無休止的進行,需要一個結束條件,即設置編程驗證的最大驗證次數(shù),當處于第m狀態(tài)存儲單元驗證次數(shù)達到最大次數(shù)時,就可結束對其的編程驗證。
s108、如果所述編程頁中所有編程失敗的存儲單元總數(shù)不大于內(nèi)部設定值,則結束對所述編程頁的編程操作。
在本實施例中,所述所有編程失敗的存儲單元具體可指對存儲單元的驗證達到最大驗證次數(shù)后編程頁中所有沒有達到相應編程狀態(tài)的存儲單元。所述內(nèi)部設定值具體可指nandflash中為相應編程頁允許存儲單元可以達到的最大錯誤個數(shù)。如果最終編程失敗的存儲單元總數(shù)不大于允許的最大錯誤個數(shù)則可正常結束對所述編程頁的編程操作。
進一步的,所述最大驗證次數(shù)以及內(nèi)部設定值均基于所述編程頁在歷史編程操作中的數(shù)據(jù)規(guī)律設定。
在本實施例中,對最大驗證次數(shù)及內(nèi)部設定值的設定由編程操作的實際情況設定,一般地,可基于所述編程頁在歷史編程操作中的數(shù)據(jù)規(guī)律設定最大驗證次數(shù)及內(nèi)部設定值的最佳值。
本發(fā)明實施例一提供的一種nandflash的編程方法,在現(xiàn)有的編程方法的前提下對編程過程中的編程驗證及驗證結果掃描兩階段的操作進行了改進,在該方法中,基于處于第m狀態(tài)存儲單元的掃描驗證結果決定是否啟動對處于第m+1編程狀態(tài)存儲單元的編程驗證,所述方法還設定了存儲單元編程驗證的最大次數(shù)以及結束編程操作的結束條件。利用該方法,可以大大降低整個編程操作的時間消耗,很大程度的提高編程速度,同時也避免了編程操作時峰值電流和功耗產(chǎn)生影響。
實施例二
圖4為本發(fā)明實施例二提供的一種nandflash的編程方法,本實施例在上述各實施例的基礎上進行優(yōu)化,在本實施例中,進一步的,本發(fā)明所述的方法還包括步驟:對編程頁施加編程電壓,如果所施加編程電壓的當前編程次數(shù)小于所述預設驗證啟動次數(shù),則以設定電壓增量值抬升所述編程電壓,并令當前編程次數(shù)自加1。
進一步的,還包括步驟:如果所述編程頁中所有編程失敗的存儲單元總數(shù)超過內(nèi)部設定值,則強制結束所述編程頁的當前編程驗證操作,同時聲明所有編程失敗的存儲單元,并對所述編程頁重新執(zhí)行編程操作。
如圖4所示,本發(fā)明實施例提供的一種nashflash的編程方法,包括如下步驟:
s201、對編程頁施加編程電壓。
在本實施例中,基于nandflash的控制單元,控制電壓泵在設定時間內(nèi)對選中字線的編程頁持續(xù)施加恒定電壓。一般地,向編程頁施加的初始編程電壓為8v左右。
s202、判定所施加編程電壓的當前編程次數(shù)是否達到啟動第1狀態(tài)編程驗證的驗證條件,若否,則執(zhí)行步驟s203;若是,則執(zhí)行步驟s204。
在本實施例中,所述啟動第1狀態(tài)編程驗證的驗證條件為對所述編程頁施加編程電壓的編程次數(shù)達到設定驗證啟動次數(shù);進一步的,所述設定驗證啟動次數(shù)設定在1次~128次。
在本實施例中,當對編程頁進行編程操作時,施加的編程電壓使得部分存儲單元的比特位處于了第1狀態(tài),需要說明的是,存儲單元的比特位處于第1狀態(tài)所需要的閾值電壓的范圍一般在10v~30v。
s203、以設定電壓增量值抬升編程電壓,并令當前編程次數(shù)自加1,之后返回步驟s202。
在本實施例中,如果編程頁所施加編程電壓的當前編程次數(shù)沒有達到設定的啟動第1狀態(tài)編程驗證的驗證條件,則需要以設定電壓增量值抬升當前編程電壓,并令當前編程次數(shù)自加1。進一步的,所述設定電壓增量值為一固定值。即每次抬升的軟擦除電壓值不變,優(yōu)選地,所述電壓增量值的范圍控制在0.5v~1.5v內(nèi)。
s204、啟動第1狀態(tài)的編程驗證并掃描處于第1狀態(tài)的存儲單元。
在本實施例中,所述啟動編程頁第1狀態(tài)的編程驗證電壓與編程頁處于加壓編程階段的電壓不同,一般地,將編程驗證階段的電壓設定在-3v~10v。同時,所述啟動第1狀態(tài)的編程驗證并掃描處于第1狀態(tài)的存儲單元具體描述為對應該編程到第1狀態(tài)的存儲單元進行讀操作,查驗所述存儲單元是否已經(jīng)編程到了第1狀態(tài);之后對所述存儲單元進行掃描,確定應編程到第1狀態(tài)的但是編程失敗的存儲單元個數(shù)?;谏鲜鍪〉拇鎯卧獋€數(shù)以及應該編程到第1狀態(tài)存儲單元的總個數(shù),可以計算出此次加壓編程中,編程到第1狀態(tài)的失敗率。
s205、設置m=1,其中,m為所述nandflash的編程狀態(tài)序號,1≤m≤m,m=2n-1,n為nandflash存儲單元具有的比特位。
在本實施例中,在接下來的驗證啟動的循環(huán)判定前,可先對nandflash的編程狀態(tài)m的值初始化,設置m=1。之后通過本發(fā)明方法中設定的對m的累加,實現(xiàn)對第m狀態(tài)是否啟動編程驗證的循環(huán)判定。
s206、判定m<2n-1是否成立,若是,則執(zhí)行步驟s207;若否,則執(zhí)行步驟s210。
在本實施例中,所述步驟s206的判定可看作本發(fā)明方法中進行循環(huán)操作的一個總體判定條件,只有滿足m<2n-1,才有進行循環(huán)操作的必要。
s207、判定第m狀態(tài)的掃描結果是否達到啟動第m+1狀態(tài)編程驗證的設定值,若是,則執(zhí)行步驟s208;若否,則執(zhí)行步驟209。
在本實施例中,所述第m狀態(tài)的掃描結果具體為:應該處于第m狀態(tài)但加壓編程后沒有達到第m狀態(tài)的存儲單元個數(shù)與所述應該處于第m狀態(tài)的所有存儲單元個數(shù)的比值。需要注意的是,該比值為一百分比值。
進一步的,所述啟動第m+1狀態(tài)編程驗證的設定值為一個百分比值,所述百分比值基于所述編程頁在歷史編程操作中第m狀態(tài)編程失敗率的數(shù)據(jù)規(guī)律設定。
在本實施例中,由于第m+1狀態(tài)編程驗證的啟動基于第m狀態(tài)的掃描結果,所以用于啟動第m+1狀態(tài)編程驗證的設定值的形式應該與第m狀態(tài)的掃描結果形式相同,需設置成一百分比值。所述百分比值的設定需要遵循一定的規(guī)律,設定的太高或太低都會影響編程驗證的效率,因此可基于以往的歷史編程操作中第m狀態(tài)編程失敗率的一個數(shù)據(jù)規(guī)律設定,從而使第m+1狀態(tài)設定值快速啟動編程驗證。
s208、設置m=m+1,啟動第m狀態(tài)的編程驗證并掃描處于第m狀態(tài)的存儲單元,之后返回步驟s206。
如果設定的第m+1狀態(tài)的編程驗證啟動值小于或等于第m狀態(tài)的掃描結果值,則可啟動第m+1狀態(tài)的編程驗證。由于先設置m=m+1,所述啟動第m狀態(tài)的編程驗證并掃描處于第m狀態(tài)的存儲單元即可看作在設置m=m+1前,對第m+1狀態(tài)的編程操作。
進一步的,所述掃描所述第m狀態(tài)的存儲單元,包括:基于所述編程頁中存儲單元的位線,對應該處于第m狀態(tài)的存儲單元進行掃描,確定編程失敗的存儲單元個數(shù),并計算第m狀態(tài)的編程失敗率;記所述第m狀態(tài)的編程失敗率為第m狀態(tài)的掃描結果。
在本實施例中,對所述第m狀態(tài)的存儲單元的掃描主要通過對所述編程頁中存儲單元的位線掃描實現(xiàn)?;谒龃鎯卧奈痪€,可查看哪些存儲單元的比特位沒有改變到第m狀態(tài)。如果比特位沒有改變到相應狀態(tài),則認為對相應存儲單元的編程失敗,由此可確定編程到第m狀態(tài)失敗的存儲單元個數(shù)?;诰幊淌〉拇鎯卧獋€數(shù)以及需要編程的存儲單元總個數(shù),可計算出第m狀態(tài)的編程失敗率。第m狀態(tài)的編程失敗率被看作第m狀態(tài)的掃描結果。
s209、以設定電壓增量值抬升所述當前編程電壓,啟動第1狀態(tài)至第m狀態(tài)的編程驗證并掃描處于第m狀態(tài)的存儲單元,之后返回步驟s206。
在本實施例中,如果第m狀態(tài)的掃描結果值沒有達到啟動第m+1狀態(tài)編程驗證的設定值,則需要以設定電壓增量值抬升當前編程電壓并在設定時間內(nèi)持續(xù)施加抬升后的編程電壓。需要注意的是,該電壓增量與上述步驟s203中電壓增量可以相同也可以不同,可根據(jù)實際情況設定。
s210、判定第m狀態(tài)的編程驗證次數(shù)是否達到最大驗證次數(shù),若是,則執(zhí)行步驟s211;若否,則執(zhí)行步驟s209。
在本實施例中,對所述最大驗證次數(shù)的判定具體用于作為nandflash編程操作結束的前提條件。
s211、判定編程頁中所有編程失敗的存儲單元總數(shù)是否小于等于內(nèi)部設定值,若是,則執(zhí)行步驟s212;若否,則執(zhí)行步驟s213。
在本實施例中,對所述內(nèi)部設定值的判定作為nandflash編程操作的結束條件。
s212、結束對所述編程頁的編程操作。
s213、強制結束所述編程頁的當前編程驗證操作,同時聲明所有編程失敗的存儲單元,返回s201重新執(zhí)行編程操作。
在本實施例中,如果所述編程頁中所有編程失敗的存儲單元總數(shù)超過內(nèi)部設定值,可認為nandflash中存在存儲單元壞區(qū),需要對這些壞區(qū)存儲單元進行聲明,將其標記出來,便于以后編程時不再向其寫入數(shù)據(jù),之后返回s201對編程頁中正常的存儲單元重新執(zhí)行編程操作。
本發(fā)明實施例二提供的一種nandflash的編程方法,在該方法中,首先基于處于第m狀態(tài)存儲單元的掃描驗證結果決定是否啟動對處于第m+1編程狀態(tài)存儲單元的編程驗證,同時在每次抬升電壓后無需重復掃描前m-1狀態(tài)的存儲單元,所述方法還設定了存儲單元編程驗證的最大次數(shù)以及結束編程操作的結束條件。利用該方法,可以大大降低整個編程操作的時間消耗,很大程度的提高編程速度,同時也避免了編程操作時峰值電流和功耗產(chǎn)生影響。
實施例三
如圖5a所示,本發(fā)明實施例三提供了一種nandflash的編程方法的優(yōu)選實施例,本實施例基于tlc型的nandflash,詳細說明了本發(fā)明所提的一種nandflash的編程方法?;诒尘凹夹g中對tlcnandflash的介紹,了解到tlc型nandflash的存儲單元具有3個比特位,因此具有7個編程狀態(tài),分別記作第1狀態(tài)p1、第2狀態(tài)p2、...、第i狀態(tài)pi、...、以及第7狀態(tài)p7。具體的本實施例的所提編程方法的編程示意圖如圖5b所示,下面具體結合圖5a,詳細說明圖5b的編程操作過程,如圖5a所示,給出了本發(fā)明實施例的方法在tlcnandflash中進行編程操作的流程示意圖,具體包括如下步驟:
s301、對選中字線施加初始編程電壓,并在持續(xù)時間內(nèi)持續(xù)施壓。
示例性的,基于tlcnandflash中的控制單元通過字線選擇單元選取編程頁,之后通過電壓泵對選中頁的字線加壓。且持續(xù)時間可優(yōu)選設定為10μs~150μs的任一時間段。
s302、判定所施加編程電壓的當前編程次數(shù)是否達到啟動第1狀態(tài)編程驗證的驗證條件,若否,則執(zhí)行步驟s303;若是,則執(zhí)行步驟s304。
示例性的,設定第1狀態(tài)p1編程驗證的啟動條件為當前編程次數(shù)達到設定驗證啟動次數(shù),所述設定驗證啟動次數(shù)為1次~128次的任一值。
s303、電壓泵以設定電壓增量值抬升當前編程電壓,并令當前編程次數(shù)自加1,之后返回s302。
示例性的,設定電壓增量值控制在0.5v~1.5v的任一值。
s304、啟動第1狀態(tài)p1的編程驗證并掃描處于第1狀態(tài)p1的存儲單元。
示例性的,對應該編程到第1狀態(tài)p1的存儲單元進行讀操作,之后查驗上述存儲單元是否達到第1狀態(tài)p1,接著掃描應編程到第1狀態(tài)p1但是編程失敗的存儲單元個數(shù)。
s305、設置m=1,其中,m為tlcnandflash的編程狀態(tài)序號,1≤m≤7。
s306、判定m<7是否成立,若是,則執(zhí)行步驟s307;否則執(zhí)行步驟s310。
s307、判定第m狀態(tài)pm的掃描結果是否達到啟動第m+1狀態(tài)pm+1編程驗證的設定值,若是,則執(zhí)行步驟s308;若否,則執(zhí)行步驟309。
示例性的,啟動第2狀態(tài)p2編程驗證的設定值可以為30%,以及啟動第7狀態(tài)p7編程驗證的設定值可以為60%,各狀態(tài)的設定值可基于實際情況設定,將上述編程狀態(tài)設定的啟動值與所述編程狀態(tài)的前一編程狀態(tài)的掃描結果比較,如將第2狀態(tài)p2的設定值與第1狀態(tài)p1的掃描結果比較,將第7狀態(tài)p7的設定值與第6狀態(tài)p6的掃描結果比較等等。
s308、設置m=m+1,啟動第m狀態(tài)pm的編程驗證并掃描處于第m狀態(tài)pm的存儲單元,之后返回步驟s306。
示例性的,當m等于1時,設置m=m+1后,m值為2,之后啟動第2狀態(tài)p2的編程驗證并掃描處于第2狀態(tài)p2的存儲單元。
s309、以設定電壓增量值抬升當前編程電壓,啟動第1狀態(tài)p1至第m狀態(tài)pm的編程驗證并掃描處于第m狀態(tài)pm的存儲單元,之后返回步驟s306。
示例性的,當m等于6時,在抬升當前編程電壓后,直接啟動第1狀態(tài)p1至第6狀態(tài)p6的編程驗證,并只掃描處于第6狀態(tài)p6的存儲單元。
s310、判定第m狀態(tài)pm的編程驗證次數(shù)是否達到最大驗證次數(shù)若是,則執(zhí)行步驟s311;若否,則執(zhí)行步驟s309。
示例性的,只需驗證第7狀態(tài)p7的編程驗證次數(shù)是否達到最大驗證次數(shù)。
s311、如果編程頁中所有編程失敗的存儲單元總數(shù)小于等于內(nèi)部設定值,則直接結束編程操作;否則,強制結束當前編程驗證,同時聲明所有編程失敗的存儲單元,并返回s301重新執(zhí)行。
在本實施例中,所述最大驗證次數(shù)以及內(nèi)部設定值均基于歷史編程操作中的數(shù)據(jù)規(guī)律設定。
本發(fā)明實施例三提供的一種nandflash的編程方法的優(yōu)選實施例,在該優(yōu)選實施例中,確定tlcnandflash的所有編程狀態(tài)后,基于本發(fā)明的方法對所述tlcnandflash編程操作中的編程驗證以及驗證結果掃描進行改進。利用該方法,可以大大降低整個編程操作的時間消耗,很大程度的提高編程速度,同時也避免了編程操作時峰值電流和功耗產(chǎn)生影響。
注意,上述僅為本發(fā)明的較佳實施例及所運用技術原理。本領域技術人員會理解,本發(fā)明不限于這里所述的特定實施例,對本領域技術人員來說能夠進行各種明顯的變化、重新調(diào)整和替代而不會脫離本發(fā)明的保護范圍。因此,雖然通過以上實施例對本發(fā)明進行了較為詳細的說明,但是本發(fā)明不僅僅限于以上實施例,在不脫離本發(fā)明構思的情況下,還可以包括更多其他等效實施例,而本發(fā)明的范圍由所附的權利要求范圍決定。