朱偉亭(中國船舶重工集團公司第七一○研究所,湖北 宜昌 443003)
目前在許多水中兵器中都需要一種測量儀器來測量各種數據與信息。在這些測量儀器中都需要存儲芯片來進行數據的存儲與運算。因此,存儲器的選擇是至關重要的,因為NAND FLASH芯片具有高密度、大容量、高數據存儲速率和非易失性等優點,在許多測量儀器中都使用了這一存儲芯片。這種芯片具有記錄準確,數據完整有效;因此應用效果良好。然而實際工作中我們發現,有時候因為記錄大容量數據而發現了NAND FLASH芯片有壞塊的現象,導致了試驗數據記錄的不連續性,本文針對存儲芯片的特性進行分析,進行了壞塊識別和處理,使測量儀器的存儲可靠性和安全性得以提高。
測量儀器選用的NAND FLASH芯片為K9K8G08U0M,圖1為K9K8G08U0M的結構示意圖,整個芯片共由8192塊(block)組成,每個塊又由64頁(page)組成,每頁包含2112字節,其中前2048個字節為主存儲區,后64個字節是每頁保留的擴展區(space area),主要存儲效驗信息、效驗碼之類的數據,具體對應方式如圖1所示。頁是寫入數據的最小單元,塊是擦除的最小單元,在對FLASH進行寫操作(頁編程)時,只能把相應的位由1寫為0,只有對塊進行擦寫操作時,才能把該塊內所有位由0寫為1,所以,寫入數據時如果該頁內已有數據,必須先擦除該塊。
由于工藝和使用環境問題,NAND FLASH會不可避免出現一定比例的壞塊。壞塊是指包含一位或多位錯誤的塊,由于制造工藝不能保證存儲單元在其生命周期中保持性能的可靠,因此,在NAND的生產及使用過程中會產生壞塊,而且壞塊是隨機分布的,可能在出廠時就存在壞塊,也可能于使用過程中產生壞塊。

圖1 擴展區具體對應方式
壞塊定義為包含一位或多位錯誤的塊,分為初始壞塊和使用壞塊。
初始壞塊:是在生產過程中產生的壞塊,在芯片出廠時通常對每塊的前兩頁進行檢查,若沒能有效清零則將壞塊信息標志在該塊第一頁的擴展區的某一特定位置。
使用壞塊:在NAND FLASH使用過程中,出現塊清零、編程、讀取錯誤時,均可定義該塊在使用過程中產生了新的壞塊。
在FLASH中塊與塊之間是相互獨立的,壞塊不會影響好塊的性能。
初始壞塊識別:第一次使用FLASH芯片時,清零之前先要讀取壞塊信息,依次讀出FLASH所有塊對應擴展區的初始壞塊標志,并建立初始壞塊信息表,程序流程如圖2所示。

圖2 初始壞塊信息表程序流程圖
使用壞塊識別:K9K8G08U0M內包含了一個狀態寄存器,向命令寄存器寫入70h命令后,可以將狀態寄存器的內容輸出到I/O管腳上。可以通過讀I/O管腳電平來判斷寫/擦除操作是否成功:低電平代表成功,高電平代表失敗。以擦除操作為例,將依次對每塊進行擦除,將擦除失敗的信息形成使用壞塊信息表,程序流程如圖3所示。
當壞塊被識別到后,對存儲區內壞塊進行相應管理才能有效完成存儲。其中壞塊管理包括:(1)壞塊信息存儲:將獲取的壞塊信息存儲在好塊中以防丟失,這是壞塊管理中非常關鍵的一步。(2)屏蔽壞塊:根據壞塊信息表內容,在進行存儲操作時,可直接進行壞塊跳過或進行壞塊替換來達到屏蔽壞塊的目的。下面介紹具體處理方法和實現途徑。

圖3 使用壞塊信息表程序流程圖
設要求測量儀器記錄的數據總量為L(Mbyte),現考慮開辟存儲器一塊存儲空間為3L(Mbyte),存儲量是數據量的3倍,即有2倍冗余量。K9K8G08U0M存儲總量為1(Gbyte)=1024(Mbyte),實際使用時3L是遠小于1(Gbyte)的。根據圖2、圖3的流程分別建立初始壞塊表1和使用壞塊表2,設初始壞塊表1內壞塊總數為X塊,3L使用存儲空間內壞塊總數為X1塊;使用壞塊表2內壞塊總數為Y塊,3L使用存儲空間內壞塊總數為Y1塊。先在使用存儲器前對存儲器進行器件篩選,確保在預留的3L(Mbyte)空間內初始壞塊總數為0,并保證總初始壞塊率≤1‰,因K9K8G08U0M有8192塊,則X≤Y,X1≤Y1且X≤8,X1=0。編制存儲專用測試程序針對3L特定存儲區進行專門測試,如回收數據量、回收速度、回收錯誤率及壞塊信息等。
在進行存儲操作前必須將上一次記錄的數據全部擦除后才能正確存儲,利用這一特點,在每次進行試驗記錄前先進行清零操作,即將FLASH所有塊依次執行塊擦除操作,每塊塊擦除指令執行后查詢是否成功,如果不成功,便將此信息列入使用壞塊表中,因X1=0,意味著沒有初始壞塊,則現在記載的壞塊信息全部為使用過程中產生的,那么必須實時更新。每次操作一次清零,就將壞塊信息表內容更新。
由于三星公司能確保FLASH芯片出廠時第0塊第0頁是不會損壞的,將壞塊總數和使用壞塊信息表內容存儲在第0塊第0頁中,目前內記儀中采用了按頁存儲技術,在每次進行頁編程時,將當前塊與使用壞塊信息表進行比對,若是壞塊,則跳過整塊,在下一塊第0頁繼續存儲,每塊依次比較,確保存儲的正確性,當壞塊總數等于比較次數時,表明后續存儲內已無壞塊,可順序按塊按頁存儲。流程圖如圖4所示。

圖4 壞塊處理程序流程圖
前面已提到在一次試驗時分析試驗數據時發現了在存儲器存在壞塊時,數據記錄不連續的情況,具體表現形式如圖6所示。由于在內記儀進行數據記錄時,在固定時間間隔內會提供準確的北京時間信息,在碰到壞塊時,存儲的數據在壞塊前后時間是不連續的。在圖5中可明顯看出在畫面中間部位數據發生了不連續現象。
當運用上述處理壞塊的方法,進行軟硬件優化設計后,在碰到壞塊時,前后塊的存儲數據連續,時間信息也連續,沒有產生漏記現象。記錄的數據如圖6所示。

圖5 數據記錄不連續圖

圖6 壞塊處理后數據連續記錄圖
FLASH芯片因其存儲容量大、體積小、掉電數據不丟失及可多次擦寫的優點,已廣泛應用于各個領域,但始終受到壞塊問題的制約,因此壞塊的處理尤為重要,本文介紹了一種壞塊處理方法,成功的應用在產品型號研制中,提高了記錄的可靠性和安全性。
[1]董永帥.FLASH文件系統及存儲管理技術研究與實現[D].華中科技大學,2008.
[2]彭兵,步凱,許欣. NAND Flash壞塊管理研究[J].微處理機.2009,4,(2): 114.
[3]張勝勇,高世杰,吳志勇.基于FPGA的NAND Flash壞塊處理方法[J].計算機工程.36(6):239-240.