專利名稱:非易失閃存擦除異常存儲塊修復方法和裝置的制作方法
技術領域:
本發明涉及計算機領域,特別是涉及一種非易失閃存擦除異常存儲塊修復方法和裝置。
背景技術:
非易失閃存(NAND Flash)以其容量大、訪問速度快以及單位容量的成本低廉等特點,在嵌入式領域越來越廣泛的被用作存放數據的載體。雖然NAND Flash有上述優勢,但是也有它固有的缺陷,比如可靠性相對較差就是 NAND Flash最突出的固有缺陷。要確保用戶數據的完整性,對于NAND Flash硬件上的不足,只能通過軟件來彌補。對于NAND Flash可靠性相對較差的問題,一般來說,壞塊是最突出的,也是最受重視的。其實,NAND Flash的擦除、寫和讀同樣不可靠,也有出錯的可能,但是由于擦、寫和讀出錯的概率較小,往往會被忽略。其中,讀和寫如果出錯,由于一般有糾錯碼(ECC,Error Correcting Code)的保護,數據的完整性并不會被破壞。一個NAND Flash通常可以劃分為一個一個的存儲塊(block),每個塊可以進一步劃分為若干個頁面(page),讀和寫的操作單位就是page ;每個page又可以分為主(main)區域和備用(spare)區域,main區域較大, 用于存放用戶數據,spare區域較小,一般用來存放ECC校驗碼,而通常只有在main區域中保存有用戶數據的page,才會計算ECC校驗碼并保存在spare區域。寫操作的實質是將待寫塊中為I的比特置為0,而擦除操作則相反,是將待擦除塊中為0的比特置為1,對于擦除后的空白page,是不會計算ECC校驗碼的,spare區域保持所有比特為I的狀態。所以,擦除操作由于沒有ECC校驗碼的保護措施,如果操作出錯,或者再擦除的過程中碰到斷電的情況,那么在系統重新開機后如果讀到上次擦除出錯的相關數據,往往會出現一些莫名其妙的情況,從而導致用戶體驗度降低,并且,如果出現一些嚴重的后果,比如死機、系統癱瘓等,這將會是災難性的。所以,對于NAND Flash的擦除操作的可靠性的探索是非常有必要的。
發明內容
本發明主要解決的技術問題是提供一種非易失閃存擦除異常塊修復方法以及相應的裝置,能夠對擦除異常塊進行掃描和修復,以防止在擦除存儲塊的過程中突然出現斷電的情況導致的存儲數據錯誤。一種非易失閃存擦除異常存儲塊修復方法,包括讀取NAND Flash中的數據時,掃描待讀取的存儲塊中需要讀取的數據所在頁面的比特數據;判斷該頁面是否為擦除異常頁面;如果該頁面為擦除異常頁面,則將該頁面的比特數據中不為I的比特置I ;以及
擦除待讀取的存儲塊。一種非易失閃存擦除異常存儲塊修復裝置,包括掃描模塊,用于在讀取非易失閃存中的數據時,掃描待讀取的存儲塊中需要讀取的數據所在頁面的比特數據;第一判斷模塊,耦接于所述掃描模塊,用于判斷該頁面是否為擦除異常頁面;比特設置模塊,耦接于所述第一判斷模塊,用于當第一判斷模塊判斷出該頁面為擦除異常頁面時,則將該頁面的比特數據中不為I的比特置I ;以及擦除模塊,耦接于比特設置模塊,用于擦除該待讀取的存儲塊。本發明的有益效果是區別于現有技術的情況,本發明在讀取NAND Flash中的數據時,依次對存儲塊中需要讀取的數據所在的頁面的比特數據進行掃描,然后判斷該頁面是否為擦除異常頁面,如果為擦除異常頁面,則將該頁面中比特數據中不為I的比特置1, 然后對該存儲塊進行重新擦除操作;本實施例對NAND Flash擦除失敗這種雖然概率小,但是后果嚴重的異常進行完全的修復,確保在NAND Flash擦除失敗時,甚至在遇到突然斷電的情況下,也不會有異常數據出現,系統依然能夠正常工作,從而提升了系統的可靠性。
圖I是本發明非易失閃存擦除異常塊修復方法的第一實施例的數據流程圖;圖2是本發明非易失閃存擦除異常塊修復方法的第二實施例的數據流程圖;圖3是本發明非易失閃存擦除異常塊修復方法中擦除存儲塊流程的數據流程圖;圖4是本發明非易失閃存擦除異常塊修復裝置的邏輯結構示意圖。
具體實施例方式請參閱圖1,本發明非易失閃存擦除異常塊修復方法的第一實施例包括101、讀取NAND Flash中的數據時,掃描待讀取的存儲塊中需要讀取的數據所在頁面的比特數據;如果一次不成功的擦除之后,我們還來不及做任何處理就碰上了系統斷電,那么再次開機時,首先要做的就是掃描出之前擦除出錯的數據在NAND Flash中的具體位置;那么,在每次開機時,需要對NAND Flash中的數據進行掃描,查找擦除不成功的存儲塊,然后進行修復;讀取NAND Flash中的數據時,掃描待讀取的存儲塊中需要讀取的數據所在頁面的比特數據;102、判斷頁面是否為擦除異常頁面;擦除異常頁面,也就是擦除不完全的頁面,沒有把頁面中的比特0都置為比特1, spare區域是存放ECC校驗碼的,如果spare區域的ECC校驗碼沒有被擦除,而main區域的數據出錯的話,對于這種擦除異常的頁面,spare區域的ECC校驗碼會報錯;而對于另外一種擦除出錯但是不容易被發現的頁面,即spare區域的ECC校驗碼已經被擦除,而main區域的數據沒有擦除完全,這種情況不容易被發現;所以,要判斷頁面是否為擦除異常頁面,主要是針對后一種不容易被發現的情況, 即如果發現spare區域的ECC校驗碼已經被擦除,而main區域的數據沒有擦除完全時,判斷出該頁面為擦除異常頁面;103、如果在步驟102中判斷出頁面為擦除異常頁面,則將該頁面中比特數據中不為I的比特置I,然后執行步驟104 ;104、重新擦除該待讀取的存儲塊;在重新擦除該待讀取的存儲塊后,再讀取NAND Flash的狀態信息,如果從讀取的 NAND Flash狀態信息中發現本次擦除還是沒有成功,則通過再次擦除進行修復,直到擦除成功;在本實施例中,在讀取NAND Flash中的數據時,依次對存儲塊中需要讀取的數據所在的頁面的比特數據進行掃描,然后判斷該頁面是否為擦除異常頁面,如果為擦除異常頁面,則將該頁面中比特數據中不為I的比特置1,然后對該存儲塊進行重新擦除操作;本實施例對NAND Flash擦除失敗這種雖然概率小,但是后果嚴重的異常進行完全的修復,確保在NAND Flash擦除失敗時,甚至在遇到突然斷電的情況下,也不會有異常數據出現,系統依然能夠正常工作,從而提升了系統的可靠性。NAND Flash的容量通常都比較大,如果每次系統開機時都要檢查一遍NAND Flash 上的所有數據,查找出錯的數據,這樣做的效率較低的,從而會影響開機的速度,那么,如何很好的利用擦除異常的規律,對開機時的掃描過程進行優化是以下第二實施例中解決的問題。請參閱圖2,本發明非易失閃存擦除異常塊修復方法的第二實施例包括201、讀取NAND Flash中的數據時,從待讀取的存儲塊中需要讀取的數據所在頁面的開始掃描頁面spare區域的比特數據;如果一次不成功的擦除之后,我們還來不及做任何處理就碰上了系統斷電,那么再次開機時,首先要做的就是掃描出之前擦除出錯的數據在NAND Flash中的具體位置;那么,在每次開機時,需要對NAND Flash中的數據進行掃描,查找擦除不成功的存儲塊,然后進行修復;讀取NAND Flash中的數據時,從待讀取的存儲塊中需要讀取的數據所在頁面的開始掃描該頁面spare區域的比特數據;每個頁面分main區域和spare區域,main區域較大,用于存放用戶數據,spare區域較小,一般為16或者64個字節,一般用于存放ECC校驗碼;通常只有在main區域寫入用戶數據的頁面,才會計算ECC校驗碼,并將ECC校驗碼保存到spare區域;而對于擦除后的空白頁面,是不會計算ECC校驗碼的,spare區域保持所有比特為I的狀態;進一步的,對于存有數據的頁面,spare區域的最后幾個字節是不為十六進制的 OxFF的,所以在掃描spare區域時,從后向前掃描,這樣對于多數存有數據的頁面,實際只判斷了最后一個字節不為OxFF,就不會再檢查頁面中的其他數據了,極大地加快了掃描的速度;202、判斷頁面的spare區域中的比特數據是否全為I ;在判斷頁面的spare區域中的比特數據是否全為I的步驟中,如果判斷出頁面的 spare區域中的比特數據不全為1,則可以認為spare區域是有ECC校驗碼的,如果spare 區域存在錯誤數據,那么ECC校驗本身就會報錯;所以,如果判斷出頁面的spare區域中的比特數據不全為1,則可以認為該頁面不是擦除后的狀態,這種頁面不需要做進一步的檢查,因此也就不需要再花大量時間掃描較大的main區域了 ;則執行步驟205 ;如果判斷出頁面的spare區域中的比特數據全為1,則可以認為該頁面是擦除后的狀態,這種頁面需要做進一步的檢查,執行步驟203 ;203、掃描頁面的main區域的比特數據;當判斷出頁面的spare區域中的比特數據全為I后,再掃描該頁面的main區域;204、判斷頁面的main區域中的比特數據是否全為I ;在掃描main區域時,逐個字節檢查,判斷main區域中的比特數據是否全為I ;如果全為1,則可以認為該頁面擦除成功,沒有出現錯誤的比特數據,繼續執行步驟205 ;如果不全為1,則可以認為該頁面擦除失敗,執行步驟207 ;205、判斷是否掃描完待讀取的存儲塊中需要讀取的數據所在的所有頁面;步驟202中判斷出頁面的spare區域中的比特數據不全為I時,或者步驟204中判斷出頁面的main區域中的比特數據全為I時,再判斷是否掃描完待讀取的存儲塊中需要讀取的數據所在的所有頁面;如果沒有掃描完待讀取的存儲塊中需要讀取的數據所在的所有頁面,執行步驟206繼續掃描下一個頁面;否則結束流程;206、掃描下一個頁面的spare區域的比特數據;如果步驟205中判斷出沒有掃描完待讀取的存儲塊中需要讀取的數據所在的所有頁面,則掃描下一個頁面的spare區域的比特數據,然后返回執行步驟202 ;207、將不為I的比特置I ;當步驟204中判斷出頁面的main區域中的比特數據不全為1,即有0存在時,可以認為該頁面擦除失敗,需要對該頁面進行修復,即將不為I的比特置I ;208、擦除待讀取的存儲塊;步驟207中將不為I的比特置I后,再對本頁面所在存儲塊進行重新擦除的操作;在重新擦除該待讀取的存儲塊后,再讀取NAND Flash的狀態信息,如果從讀取的 NAND Flash狀態信息中發現本次擦除還是沒有成功,則通過再次擦除進行修復,直到擦除成功;下面結合圖3進行具體說明301、存儲塊擦除;302、讀取擦除狀態;擦除存儲塊后,讀取擦除狀態,然后執行步驟303 ;303、判斷是否擦除成功;根據步驟302讀取的擦除狀態判斷是否擦除成功,如果擦除成功,則執行步驟 304 ;如果擦除不成功,執行步驟305 ;304、如果擦除成功,則流程結束;305、如果擦除不成功,再判斷擦除次數是否超過預設的值;如果步驟303中根據讀取的擦除狀態判斷出擦除不成功,則再判斷擦除次數是否超過預設的值,如果擦除次數超過預設的值,則執行步驟306 ;如果擦除次數沒有超過預設的值,則繼續對存儲塊進行擦除操作,直至擦除成功或者擦除次數超過預設的值;306、如果擦除次數超過預設的值,則將本存儲塊標記為壞塊;如果擦除次數超過預設的值,可以認為該存儲塊已經損壞,則將本存儲塊標記為壞塊;在本實施例中,在讀取NAND Flash中的數據時,依次對存儲塊中需要讀取的數據所在的頁面的比特數據進行掃描,先對頁面的spare區域進行掃描判斷,如果掃描到有頁面的spare區域全為I,再掃描和判斷main區域的比特數據,如果判斷出main區域中的比特數據不全為1,則對該頁面和該頁面所在的存儲塊進行修復;本實施例對NAND Flash擦除失敗這種雖然概率小,但是后果嚴重的異常進行完全的修復,確保在NAND Flash擦除失敗時,甚至在遇到突然斷電的情況下,也不會有異常數據出現,系統依然能夠正常工作,從而提升了系統的可靠性;并且通過對掃描流程的優化,大大提升了掃描速度,提高了掃描效率。請參閱圖4,本發明非易失閃存擦除異常存儲塊修復裝置的實施例包括掃描模塊401,用于在讀取NAND Flash中的數據時,從待讀取的存儲塊中需要讀取的數據所在頁面開始掃描該頁面的比特數據;第一判斷模塊402,耦接于掃描模塊401,用于判斷該頁面是否為擦除異常頁面;比特設置模塊403,耦接于第一判斷模塊402,用于當第一判斷模塊402判斷出該頁面為擦除異常頁面時,將該頁面中比特數據中不為I的比特置I ;以及擦除模塊404,耦接于比特設置模塊403,用于擦除該待讀取的存儲塊;進一步的,本實施例中的裝置還包括第二判斷模塊405,耦接于掃描模塊401,用于判斷spare區域中的比特數據是否全為I ;進一步的,掃描模塊401包括第一掃描單元4011,用于掃描頁面的spare區域的比特數據;第二掃描單元4012,用于當第二判斷模塊405判斷出spare區域中的比特數據全為I時,掃描該頁面的main區域的比特數據;進一步的,第一掃描單元4011在掃描時,從spare區域的末尾開始往前掃描;進一步的,擦除模塊404包括擦除單元4041,用于擦除待讀取的存儲塊;第一判斷單元4042,耦接于擦除單元4041,用于判斷擦除是否成功;第二判斷單元4043,耦接于第一判斷單元4042,用于當第一判斷單元4042判斷出擦除不成功時,再判斷擦除次數是否超過預設的值;標記單元4044,耦接于第二判斷單元4043,用于當第二判斷單元4043判斷出擦除次數超過預設的值時,將該存儲塊標記為壞塊;在本實施例中,在讀取NAND Flash中的數據時,依次對存儲塊中需要讀取的數據所在的頁面的比特數據進行掃描,先對頁面的spare區域進行掃描判斷,如果掃描到有頁面的spare區域全為I,再掃描和判斷main區域的比特數據,如果判斷出main區域中的比特數據不全為1,則對該頁面和該頁面所在的存儲塊進行修復;本實施例對NAND Flash擦除失敗這種雖然概率小,但是后果嚴重的異常進行完全的修復,確保在NAND Flash擦除失敗時,甚至在遇到突然斷電的情況下,也不會有異常數據出現,系統依然能夠正常工作,從而提升了系統的可靠性;并且通過對掃描流程的優化,大大提升了掃描速度,提高了掃描效率。
以上所述僅為本發明的實施例,并非因此限制本發明的專利范圍,凡是利用本發明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的技術領域,均同理包括在本發明的專利保護范圍內。
權利要求
1.一種非易失閃存擦除異常存儲塊修復方法,其特征在于,包括在讀取非易失閃存中的數據時,掃描待讀取的存儲塊中需要讀取的數據所在頁面的比特數據;判斷所述頁面是否為擦除異常頁面;如果所述頁面為擦除異常頁面,則將所述頁面中不為I的比特置I ;以及擦除所述待讀取的存儲塊。
2.根據權利要求I所述的方法,其特征在于,所述掃描待讀取的存儲塊中需要讀取的數據所在的頁面的比特數據的步驟中,從待讀取的存儲塊中需要讀取的數據所在的頁面開始掃描所述頁面的備用(spare)區域的比特數據。
3.根據權利要求2所述的方法,其特征在于,所述從待讀取的存儲塊中需要讀取的數據所在的頁面開始掃描所述頁面的備用區域的比特數據的步驟中,從所述備用區域的末尾開始往前掃描。
4.根據權利要求3所述的方法,其特征在于,所述從待讀取的存儲塊中需要讀取的數據所在的頁面開始掃描所述頁面的備用區域的比特數據的步驟之后還包括判斷所述備用區域中的比特數據是否全為I ;以及如果所述備用區域中的比特數據全為1,則掃描所述頁面的主(main)區域的比特數據,并執行所述判斷所述頁面是否為擦除異常頁面的步驟。
5.根據權利要求4所述的方法,其特征在于,所述判斷備用區域中的比特數據是否全為I的步驟之后還包括如果所述備用區域中的比特數據不全為1,則繼續掃描下一個頁面的備用區域的比特數據,直至掃描完所述待讀取的存儲塊中需要讀取的數據所在的所有頁面。
6.根據權利要求5所述的方法,其特征在于,所述判斷所述頁面是否為擦除異常頁面的步驟包括判斷所述頁面的主區域中的比特數據是否全為I ;如果所述頁面的主區域中的比特數據不全為1,則判斷出所述頁面為擦除異常頁面;以及如果所述頁面的主區域中的比特數據全為1,則判斷出所述頁面不為擦除異常頁面。
7.根據權利要求6所述的方法,其特征在于,所述判斷所述頁面是否為擦除異常頁面的步驟之后還包括如果所述頁面不為擦除異常頁面,則繼續掃描下一個頁面的備用區域的比特數據,直至掃描完所述待讀取的存儲塊中需要讀取的數據所在的所有頁面。
8.根據權利要求7所述的方法,其特征在于,所述擦除待讀取的存儲塊的步驟包括擦除所述待讀取的存儲塊;判斷擦除是否成功;如果不成功,則再判斷擦除次數是否超過預設的值;以及如果擦除次數超過預設的值,則將所述存儲塊標記為壞塊。
9.根據權利要求8所述的方法,其特征在于,所述判斷擦除次數是否超過預設的值的步驟之后還包括如果擦除次數沒有超過預設的值,則繼續執行擦除所述待讀取的存儲塊的步驟,直至擦除成功或者擦除次數超過預設的值。
10.一種非易失閃存擦除異常存儲塊修復裝置,其特征在于,包括掃描模塊,用于在讀取非易失閃存中的數據時,掃描待讀取的存儲塊中需要讀取的數據所在頁面的比特數據;第一判斷模塊,耦接于所述掃描模塊,用于判斷所述頁面是否為擦除異常頁面;比特設置模塊,耦接于所述第一判斷模塊,用于當第一判斷模塊判斷出所述頁面為擦除異常頁面時,則將所述頁面的比特數據中不為I的比特置I ;以及擦除模塊,耦接于所述比特設置模塊,用于擦除所述待讀取的存儲塊。
11.根據權利要求10所述的裝置,其特征在于,所述裝置還包括第二判斷模塊,耦接于所述掃描模塊,用于判斷所述備用區域中的比特數據是否全為I。
12.根據權利要求11所述的裝置,其特征在于,所述掃描模塊包括第一掃描單元,用于掃描所述頁面的備用區域的比特數據;以及第二掃描單元,耦接于所述第一掃描單元,用于當第二判斷模塊判斷出所述備用區域中的比特數據全為I時,掃描所述頁面的主區域的比特數據。
13.根據權利要求12所述的裝置,其特征在于,所述第一掃描單元在掃描時,從所述備用區域的末尾開始往前掃描。
14.根據權利要求13所述的裝置,其特征在于,所述擦除模塊包括擦除單元,用于擦除所述待讀取的存儲塊;第一判斷單元,耦接于所述擦除單元,用于判斷擦除是否成功;第二判斷單元,耦接于所述第一判斷單元,用于當第一判斷單元判斷出擦除不成功時, 再判斷擦除次數是否超過預設的值;標記單元,耦接于所述第二判斷單元,用于當第二判斷單元判斷出擦除次數超過預設的值時,將所述存儲塊標記為壞塊。
全文摘要
本發明實施例公開了一種非易失閃存擦除異常存儲塊修復方法,還提供了相應的裝置。本發明通過在讀取NAND Flash中的數據時,依次對存儲塊中需要讀取的數據所在的頁面的比特數據進行掃描,然后判斷該頁面是否為擦除異常頁面,如果為擦除異常頁面,則將該頁面中比特數據中不為1的比特置1,然后對該存儲塊進行重新擦除操作;確保在NAND Flash擦除失敗時,甚至在遇到突然斷電的情況下,也不會有異常數據出現,系統依然能夠正常工作,從而提升了系統的可靠性。
文檔編號G06F11/14GK102609334SQ20121000463
公開日2012年7月25日 申請日期2012年1月9日 優先權日2012年1月9日
發明者周濤 申請人:晨星半導體股份有限公司, 晨星軟件研發(深圳)有限公司