一種基于FPGA的NAND Flash容錯方法
【專利摘要】本發明公開了一種基于FPGA的NAND Flash容錯方法,包括Flash壞塊檢測、壞塊管理和動態查表。通過Flash寫標志位的狀態和讀寫內容是否相同來檢測壞塊。利用壞塊管理算法對檢測到的好、壞塊地址進行管理,并建立地址映射表。FPGA通過動態查表的方式對Flash進行寫入、讀取和擦除操作,大大提高了數據存取的準確性和高效性。本方法能直接提高Flash空間利用率,使其整體性能和處理速度得到重要的保障,對新一代大容量NAND Flash的應用發展具有參考意義。
【專利說明】
_種基于FPGA的NAND FI ash容錯方法
技術領域
[0001]本發明涉及Flash容錯技術,尤其涉及一種基于FPGA的NANDFlash容錯方法。
【背景技術】
[0002]隨著信息技術地不斷發展,數字產品已經成為生活至關重要的一部分。在人們不斷追求高品質生活的過程中,智能手機、數碼相機、播放器等數字產品的容量和處理性能亟需提升。與此同時,存儲產業面臨著由巨大需求帶來的發展機遇。現今民用消費電子市場中,閃存(Flash)在非易失性存儲介質中扮演著主要角色。由邏輯架構上的差異可分為NORFlash和NAND Flash兩種。NOR Flash在早期市場中占據主要地位,技術革新后,NAND Flash強調降低每比特的成本,可像磁盤一樣通過接口輕松升級,具有速度高,可靠性高,功耗低,體積小、發熱少、抗震強等優點,逐漸取代NOR Flash,日益成為存儲器的主流。
[0003]由于NAND Flash的工藝不能保證NAND的Memory Array在其生命周期中保持性能的可靠,因此在出場和使用過程中會產生不能擦除錯誤的無效塊,即壞塊。出場時存在的壞塊不能用于存儲數據,已被廠家標識好,而后天由于使用次數增多引起的壞塊的某些位不能發生翻轉,使系統變得不穩定,導致Flash中數據無法被正常地讀取和寫入,甚至引起Flash報廢等問題。因此,壞塊管理一直是NAND Flash管理中的技術關鍵和難點。通過對壞塊的檢測和管理,不僅可以在第一時間發現壞塊,而且可以根據需要跳過或替換壞塊,并把替換的壞塊存儲在保留區中,可保障數據安全,避免數據丟失等不必要的麻煩。
【發明內容】
[0004]本發明的目的在于針對現有技術的不足,提供一種基于FPGA的NANDFlash容錯方法。
[0005]本發明的目的是通過以下技術方案實現的:一種基于FPGA的NANDFlash容錯方法,包括Flash壞塊檢測、壞塊管理和動態查表。通過Flash寫標志位的狀態和讀寫內容是否相同來檢測壞塊。利用壞塊管理算法對檢測到的好、壞塊地址進行管理,并建立地址映射表。FPGA通過動態查表的方式對Flash進行寫入、讀取和擦除操作,大大提高了數據存取的準確性和高效性。
[0006]進一步地,所述Flash壞塊檢測過程如下:
[0007](I)通過FPGA對Flash芯片所有塊按頁地址進行寫操作,一次寫一頁。一個寫周期結束后,通過檢查寫狀態標志位來判斷是否寫成功,若連續3次未寫成功,則判斷當前塊為壞塊;
[0008](2)若寫入成功,則將寫數據存儲至RAM。讀取當前塊內容,和RAM中的寫數據進行對比,連續2次讀取和寫入內容不相同,則判斷當前塊為壞塊;
[0009](2)若寫入成功,讀取當前塊內容,和RAM中的寫數據進行對比,連續2次讀取和寫入內容不相同,則判斷當前塊為壞塊;
[0010]進一步地,所述壞塊管理過程如下:
[0011](I)對每塊Flash檢測到的第一個好塊進行擦除操作,擦除后所有字節內容均為0XFF。然后在其第一頁所有字節寫入OXOA進行標記,表明該塊用于存放地址映射表,記為Blockl,其塊地址記為addressl ;
[0012](2)定義一個16位的寄存器,記為block_addr,用于存放檢測塊的狀態。Blockl的第二頁開始,采用每個bit標記一個塊的方式存放地址映射表,好塊記為I,壞塊記為O;
[0013](3)從Blockl之后的塊開始檢測,若為好塊,則
[0014]block_addr[0]=I,
[0015]反之,
[0016]block_addr[0] =O0
[00?7] 同時,block_addr左移一位,并定義寄存器bi t_counter,記錄左移位數;
[0018](4)通過檢查寫狀態標志位檢測壞塊過程中,若當前頁滿足寫入失敗條件,則判斷當前塊為壞塊,并跳過后續頁的檢測,直接開始下一塊的檢測;
[0019](5)當bit_counter = 31時,把block_addr 寫入到 Blockl 的第二頁的第一個 word,并且Blockl列地址加I,bit_counter清零。同時,定義寄存器block_counter,記錄清零次數;
[°02°] (6)設Flash總共有N個塊,最大塊地址記為addr_max,若滿足[0021 ] block_counter> = (addr_max-addr e s s I) /16,
[0022]則說明檢測完成,地址映射表已存儲于Blockl。
[0023]進一步地,所述Flash在建立地址映射表后,動態查表過程如下:
[0024](I)讀取:從Flash的第一個塊開始執行讀操作,若讀取到塊的第一頁全為0Χ0Α,則判斷當前塊為地址映射表存儲塊。讀取第二頁的地址映射表,并存儲至RAM,同時,塊地址后移至下一塊。逐位判斷地址映射表,若為I,讀取當前塊內容,若為0,則跳過當前塊。每次位判斷和塊操作結束后,地址均后移一個單位,直至執行至塊地址addrjnax;
[0025](2)擦除:從Flash的第一個塊開始執行讀操作,若讀取到塊的第一頁全為0Χ0Α,則判斷當前塊為地址映射表存儲塊。從下一塊開始執行擦除操作,直至執行至塊地址addr_max;
[0026](3)動態更新:擦除后再次執行寫入操作時,首先從Flash的第一個塊開始執行讀操作,若讀取到塊的第一頁全為0Χ0Α,則判斷當前塊為地址映射表存儲塊。讀取第二頁的地址映射表,并存儲至RAM,同時,塊地址后移至下一塊。逐位判斷地址映射表,若為O,跳過當前塊,若為I,在當前塊寫入數據,同時執行檢測操作,若當前塊檢測為壞塊,則更新地址映射表,將當前記錄位更新為0,并跳過當前塊。每次位判斷和塊操作結束后,地址均后移一個單位,直至執行至塊地址addr_max。
[0027]本發明具有的有益效果是:基于FPGA的NANDFlash容錯方法,可以有效地解決壞塊檢測和管理問題,從而提高Flash存儲性能,延長其使用壽命,保障用戶的數據安全。該方法包括Flash壞塊檢測、壞塊管理和動態查表。通過Flash寫標志位的狀態和讀寫內容是否相同來檢測壞塊。利用壞塊管理算法對檢測到的好、壞塊地址進行管理,并建立地址映射表。FPGA通過動態查表的方式對Flash進行寫入、讀取和擦除操作,針對現有技術的不足提出了切實可行的處理方法,大大提高了數據存取的準確性和高效性。總之,通過NAND Flash容錯方法,能對使用過程中遇到的壞塊進行動態管理,動態更新壞塊信息表,直接提高塊空間利用效率,使Flash整體性能和處理速度得到重要的保障,對新一代大容量NAND Flash的應用發展具有參考意義。
【附圖說明】
[0028]圖1是Flash壞塊檢測流程圖;
[0029]圖2是Flash壞塊管理流程圖;
[0030]圖3是地址映射表動態更新流程圖。
【具體實施方式】
[0031]下面結合附圖和實施例對本發明作進一步說明。
[0032]如圖1所示,Flash壞塊檢測過程如下:
[0033](I)通過FPGA對Flash芯片所有塊按頁地址進行寫操作,一次寫一頁。一個寫周期結束后,通過檢查寫狀態標志位來判斷是否寫成功,若連續3次未寫成功,則判斷當前塊為壞塊;
[0034](2)若寫入成功,則將寫數據存儲至RAM。讀取當前塊內容,和RAM中的寫數據進行對比,連續2次讀取和寫入內容不相同,則判斷當前塊為壞塊;
[0035]如圖2所示,壞塊管理過程如下:
[0036](I)對每塊Flash檢測到的第一個好塊進行擦除操作,擦除后所有字節內容均為0XFF。然后在其第一頁所有字節寫入OXOA進行標記,表明該塊用于存放地址映射表,記為Blockl,其塊地址記為addressl ;
[0037](2)定義一個16位的寄存器,記為block_addr,用于存放檢測塊的狀態。Blockl的第二頁開始,采用每個bit標記一個塊的方式存放地址映射表,好塊記為I,壞塊記為O;
[0038](3)從Blockl之后的塊開始檢測,若為好塊,則
[0039]block_addr[0]=I,
[0040]反之,
[0041]block_addr[0] =O0
[0042]同時,block_addr左移一位,并定義寄存器bit_counter,記錄左移位數;
[0043](4)通過檢查寫狀態標志位檢測壞塊過程中,若當前頁滿足寫入失敗條件,則判斷當前塊為壞塊,并跳過后續頁的檢測,直接開始下一塊的檢測;
[0044](5)當bit_counter = 31時,把block_addr 寫入到 Blockl 的第二頁的第一個 word,并且Blockl列地址加I,bit_counter清零。同時,定義寄存器block_counter,記錄清零次數;
[0045](6)設Flash總共有N個塊,最大塊地址記為addr_max,若滿足
[0046]block_counter> = (addr_max-addr e s s I) /16,
[0047]則說明檢測完成,地址映射表已存儲于Blockl。
[0048]如圖3所示,Flash在建立地址映射表后,動態查表過程如下:
[0049](I)讀取:從Flash的第一個塊開始執行讀操作,若讀取到塊的第一頁全為0Χ0Α,則判斷當前塊為地址映射表存儲塊。讀取第二頁的地址映射表,并存儲至RAM,同時,塊地址后移至下一塊。逐位判斷地址映射表,若為I,讀取當前塊內容,若為0,則跳過當前塊。每次位判斷和塊操作結束后,地址均后移一個單位,直至執行至塊地址addrjnax;
[0050](2)擦除:從Flash的第一個塊開始執行讀操作,若讀取到塊的第一頁全為0Χ0Α,則判斷當前塊為地址映射表存儲塊。從下一塊開始執行擦除操作,直至執行至塊地址addr_max;
[0051](3)動態更新:擦除后再次執行寫入操作時,首先從Flash的第一個塊開始執行讀操作,若讀取到塊的第一頁全為0Χ0Α,則判斷當前塊為地址映射表存儲塊。讀取第二頁的地址映射表,并存儲至RAM,同時,塊地址后移至下一塊。逐位判斷地址映射表,若為O,跳過當前塊,若為I,在當前塊寫入數據,同時執行檢測操作,若當前塊檢測為壞塊,則更新地址映射表,將當前記錄位更新為0,并跳過當前塊。每次位判斷和塊操作結束后,地址均后移一個單位,直至執行至塊地址addr_max。
【主權項】
1.一種基于FPGA的NAND Flash容錯方法,其特征在于,包括Flash壞塊檢測、壞塊管理和動態查表。通過Flash寫標志位的狀態和讀寫內容是否相同來檢測壞塊。利用壞塊管理算法對檢測到的好、壞塊地址進行管理,并建立地址映射表。F P G A通過動態查表的方式對Flash進行寫入、讀取和擦除操作。2.根據權利要求1所述的一種基于FPGA的NANDFlash容錯方法,其特征在于,所述Flash壞塊檢測過程如下: (1)通過FPGA對Flash芯片所有塊按頁地址進行寫操作,一次寫一頁。一個寫周期結束后,通過檢查寫狀態標志位來判斷是否寫成功,若連續3次未寫成功,則判斷當前塊為壞塊; (2)若寫入成功,則將寫數據存儲至RAM。讀取當前塊內容,和RAM中的寫數據進行對比,連續2次讀取和寫入內容不相同,則判斷當前塊為壞塊。3.根據權利要求1所述的一種基于FPGA的NANDFlash容錯方法,其特征在于,所述壞塊管理過程如下: (1)對每塊Flash檢測到的第一個好塊進行擦除操作,擦除后所有字節內容均為OXFF。然后在其第一頁所有字節寫入OXOA進行標記,表明該塊用于存放地址映射表,記為Blockl,其塊地址記為address I ; (2)定義一個16位的寄存器,記為block_addr,用于存放檢測塊的狀態。Blockl的第二頁開始,采用每個bit標記一個塊的方式存放地址映射表,好塊記為I,壞塊記為O; (3)從Blockl之后的塊開始檢測,若為好塊,則 block_addr[0]=I, 反之, block_addr[0] =O0 同時,block_addr左移一位,并定義寄存器bi t_counter,記錄左移位數; (4)通過檢查寫狀態標志位檢測壞塊過程中,若當前頁滿足寫入失敗條件,則判斷當前塊為壞塊,并跳過后續頁的檢測,直接開始下一塊的檢測; (5)當bit_counter= 31時,把block_addr寫入到Blockl的第二頁的第一個word,并且Blockl列地址加I,bit_counter清零。同時,定義寄存器block_counter,記錄清零次數; (6)設Flash總共有N個塊,最大塊地址記為addr_max,若滿足 block_counter> = (addr_max_addressl)/16, 則說明檢測完成,地址映射表已存儲于Blockl。4.根據權利要求1所述的一種基于FPGA的NANDFlash容錯方法,其特征在于,所述Flash在建立地址映射表后,動態查表過程如下: (1)讀取:從Flash的第一個塊開始執行讀操作,若讀取到塊的第一頁全為0Χ0Α,則判斷當前塊為地址映射表存儲塊。讀取第二頁的地址映射表,并存儲至RAM,同時,塊地址后移至下一塊。逐位判斷地址映射表,若為I,讀取當前塊內容,若為0,則跳過當前塊。每次位判斷和塊操作結束后,地址均后移一個單位,直至執行至塊地址addr_max ; (2)擦除:從Flash的第一個塊開始執行讀操作,若讀取到塊的第一頁全為0Χ0Α,則判斷當前塊為地址映射表存儲塊。從下一塊開始執行擦除操作,直至執行至塊地址addrjnax; (3)動態更新:擦除后再次執行寫入操作時,首先從Flash的第一個塊開始執行讀操作,若讀取到塊的第一頁全為OXOA,則判斷當前塊為地址映射表存儲塊。讀取第二頁的地址映射表,并存儲至RAM,同時,塊地址后移至下一塊。逐位判斷地址映射表,若為O,跳過當前塊,若為I,在當前塊寫入數據,同時執行檢測操作,若當前塊檢測為壞塊,則更新地址映射表,將當前記錄位更新為O,并跳過當前塊。每次位判斷和塊操作結束后,地址均后移一個單位,直至執行至塊地址addr_max。
【文檔編號】G06F12/02GK105843749SQ201610173425
【公開日】2016年8月10日
【申請日】2016年3月24日
【發明人】張曉峰, 史治國, 陳積明
【申請人】浙江大學