曾鋒 徐忠錦



摘要:在現(xiàn)代電子設(shè)備中,越來越多的產(chǎn)品使用NAND FLASH芯片來進行大容量的數(shù)據(jù)存儲,而且使用 FPGA作為核心處理芯片與NAND FLASH直接交聯(lián)。根據(jù)NAND FLASH的特點,需要識別NAND FLASH芯片的壞塊并進行管理。FPGA對壞塊的管理不能按照軟件的壞塊管理方式進行。本文提出了一種基于FPGA的 NAND FLASH芯片壞塊表的設(shè)計方法,利用FPGA中RAM模塊,設(shè)計了狀態(tài)機電路,靈活地實現(xiàn)壞塊表的建立、儲存和管理,并且對該設(shè)計進行測試驗證。
關(guān)鍵詞: NAND FLASH;FPGA;壞塊;壞塊檢測
0引言
隨著技術(shù)的發(fā)展,越來越多的電子設(shè)備的數(shù)據(jù)采用 NAND FLASH 芯片存儲產(chǎn)生的大量數(shù)據(jù)。在傳統(tǒng)的電路設(shè)計中,常用 ARM、DSP 等處理器來用于 NAND FLASH 的接口。但是隨著實時性要求的提高,越來越多的設(shè)備中采用了 FPGA 來對 NAND FLASH 進行壞塊管理,釋放處理器任務(wù)資源。
由于 NAND FLASH 的特點,NAND FLASH 不可避免地會有壞塊產(chǎn)生,使用 NAND FLASH 時,需要對壞塊進行管理,建立壞壞表(以下簡稱“BBT”)。一般處理管理 BBT 的方法,是采用建立數(shù)組的方式,將檢測到的壞塊編號記錄在數(shù)組中,在操作 NAND FLASH 時,對將要操作的塊的編號與 BBT 的數(shù)據(jù)進行對比,如果是壞塊,則跳過該塊,不使用。但是這是建立數(shù)組的方法并不適用于 FPGA 的設(shè)計操作,本文根據(jù) FPGA 的特點,利用 FPGA 的 Block RAM 資源,提出了一種壞塊檢測、存儲的方法。
1電路說明
1.1 NAND Flash芯片說明
NAND Flash芯片使用型號是三星公司的K9K8G08U0A,
單片容量為1 G×8 Bit。該芯片總共有8192塊,每塊中含有64頁,每頁共2112個字節(jié)(前2048個為主存儲空間,后64個為擴展存儲空間)。芯片的讀寫操作均以頁為單位進行。芯片容量結(jié)構(gòu)如圖1所示。
其中,NAND Flash 芯片分為列地址( Column Address )和行地址( Row Address ),列地址用于每頁中的字節(jié)尋址,行地址用于芯片的塊、頁的尋址,其中行地址的 A18~A30為芯片的塊地址。
1.2 FPGA電路說明
FPGA 使用型號為 Xilinx (現(xiàn) AMD )公司Virtex II 系列的 XC2V1000,芯片內(nèi)部有5120個 Slice、40個乘法器、720 kbit 的 RAM模塊資源,8個 DCM 時鐘管理模塊。其主要參數(shù)如圖2所示。
2壞塊表設(shè)計
2.1壞塊表檢測機理
根據(jù) NAND FLASH 芯片的檢測原理,芯片出廠后的壞塊檢測需要檢測芯片每個部分的頁1和頁2中列地址為2048的存儲的數(shù)據(jù)值。若值為0xFF ,則該部分為好塊;若值不為0xFF ,則該部分為壞塊。NAND FLASH 壞塊檢測流程如圖3所示。
2.2壞塊表的設(shè)計思路
根據(jù) FPGA 的應(yīng)用特點,本次 NAND Flash 的壞塊表采用對所有塊建立壞塊信息的方式,建立一個完整的塊狀態(tài)信息表,即每一個塊用1個 Bit 表征其是否是好塊還是壞塊,定義為:0代表該塊是良好的,1代表該塊是故障的。本設(shè)計中,NAND Flash 有8192個塊,用8192個 Bit 代表每個塊的狀態(tài)信息,正好用一個1024×8 bit 的 RAM對所有的壞塊表數(shù)據(jù)位進行存儲,壞塊表存儲示意圖見圖4。
2.3壞塊表的存儲
在本設(shè)計中,NAND FLASH 的壞塊表儲存在 NAND FLASH 的第1塊的第1頁處。第1塊只用于壞塊表的存儲,不再用于存儲其他數(shù)據(jù),壞塊表在第1塊中的位置見圖5。
2.4壞塊表的建立流程
NAND FLASH 在使用時,初次上電后,寫入數(shù)據(jù)之前需要對芯片的塊的好壞進行掃描,從而得到壞塊表。在本型號中,NAND FLASH 的出廠壞塊信息需要查詢每個塊的第1個頁和第2個頁中的列地址為2048的空間上數(shù)據(jù)是否都為“0xFF”,數(shù)據(jù)為“0xFF”,則當前塊為好塊,否則當前塊為壞塊。
壞塊表的建立的狀態(tài)機流程如圖6所示:上電后,狀態(tài)機從狀態(tài)1跳轉(zhuǎn)至狀態(tài)2,讀取第一塊中的數(shù)據(jù),判斷是否為數(shù)據(jù)頭0xAA、0x55、0xAA、0x55、0xAA、0x55、0xAA、0x55。如果數(shù)據(jù)頭相符,則狀態(tài)跳轉(zhuǎn)至11,直接讀取壞塊表到 RAM ,建立起壞塊表信息。如果讀到的數(shù)據(jù)頭與上述的數(shù)據(jù)頭不相符,則意味 NAND FLASH 未存在壞塊表,需要建立壞塊表。狀態(tài)機狀態(tài)依次跳轉(zhuǎn)至狀態(tài)4、狀態(tài)5、狀態(tài)6,即狀態(tài)機對當前塊的中的第1頁和第2頁的中列地址為2048的空間進行訪問,根據(jù)讀值判別當前塊是否為壞塊,如果是壞塊將對應(yīng)的寄存器位置1。當掃描完8個塊,狀態(tài)機跳轉(zhuǎn)至狀態(tài)7,則將8個塊的壞塊信息寫入 RAM ;當未掃描滿8個塊,狀態(tài)機跳轉(zhuǎn)至狀態(tài)8,塊地址加1,對下一個塊進行檢測。當所有的8092個塊都被檢測后,則狀態(tài)機跳轉(zhuǎn)至狀態(tài)10,將數(shù)據(jù)頭以及 RAM 數(shù)據(jù)全部寫入 NAND FLASH 的第0塊,至此,初始壞塊表建立完成。
壞塊表建立完成后,壞塊信息存在 RAM 中,在正常存取操作時,就可以直接讀取 RAM 模塊,獲取壞塊信息。
當電路下電,再次上電后,狀態(tài)機就可以從塊0中讀取到數(shù)據(jù)頭,跳過初次壞塊表的建立過程,狀態(tài)機從第1塊中繼續(xù)讀取到壞塊表,加載到 RAM 中,完成后交其他模塊進行后續(xù)的操作。
3驗證情況
為驗證是否正確的建立和存儲壞塊表,需要將壞塊表的處理模塊嵌入 FPGA 的中整個 NAND FLASH 的接口控制器中,驗證的電路如圖7所示。壞塊表處理模塊與1個1024×8 Bit 的 RAM 連接,該 RAM 用于存儲壞塊表。NAND FLASH 接口模塊根據(jù) NAND FALSH 芯片的讀寫接口時序設(shè)計,包含基本的 Read 模塊,Write 模塊和擦除模塊。 NAND FLASH 接口模塊受壞塊表處理模塊的控制。正常工作模塊在壞塊表處理模塊工作完成之后開始工作,通過 UART 接收上位機的命令,控制 NAND FLASH 接口模塊與 NAND FLASH 交聯(lián);同時,正常工作模塊也通過 UART 上報數(shù)據(jù)和信息給上位機。
驗證時,通過上位機發(fā)送讀取命令,正常工作模塊控制 NAND FLASH 接口模塊將 NAND FLASH 塊0中的內(nèi)容讀取出來,從而判斷是否正確地建立了壞塊表,見圖8。
通過讀取內(nèi)容發(fā)現(xiàn),新板卡中的 NAND FLASH 成功地建立了壞塊表,本測試電路中 NAND FLASH 芯片有 1 個壞塊,為第 1 761 塊。
4 結(jié)束語
通過驗證證明,本文設(shè)計的基于 FPGA 的壞塊表設(shè)計方式能夠正確地實現(xiàn)壞塊表建立和存儲,壞塊表能夠方便地被 FPGA 使用,壞塊表能完整地表征整個 NANDFLASH 芯片的塊的狀態(tài),RAM 結(jié)構(gòu)能很靈活方便地在FPGA 中進行調(diào)用,滿足對 FPGA 對 NAND FLASH 芯片的控制需要。
參考文獻:
[1] 舒文麗,吳云峰.基于NAND FLASH的海量存儲器的設(shè)計[J].電子器件,2012,2(35):44-46.
[2] 趙亞慧.基于NAND Flash的高速大容量存儲系統(tǒng)的設(shè)計[J].電光與控制,2016,5(23):37-40.
[3] 喬亞飛,,李華旺.基于FPGA的星載NAND FLASH控制器的設(shè)計[J].電子設(shè)計工程 2018,7(26):29-32.
[4] 周浩,王浩全.基于FPGA和NAND FLASH的便攜式信號采集系統(tǒng)設(shè)計[J].測控技術(shù)與儀器儀表,2018,44(9):82-86.
[5] 張雯,崔建杰.一種多通道NAND FLASH陣列的壞塊管理方案[J].電子器件,2014,10(37):33-36.
[6] 喬立巖,張鵬.一種新型NAND FLASH 壞塊管理算法的研究與實現(xiàn)[J].電子測量技術(shù), 2015,11(38):19-21.