朱偉亭(中國船舶重工集團公司第七一○研究所,湖北 宜昌 443003)
目前在許多水中兵器中都需要一種測量儀器來測量各種數(shù)據(jù)與信息。在這些測量儀器中都需要存儲芯片來進行數(shù)據(jù)的存儲與運算。因此,存儲器的選擇是至關重要的,因為NAND FLASH芯片具有高密度、大容量、高數(shù)據(jù)存儲速率和非易失性等優(yōu)點,在許多測量儀器中都使用了這一存儲芯片。這種芯片具有記錄準確,數(shù)據(jù)完整有效;因此應用效果良好。然而實際工作中我們發(fā)現(xiàn),有時候因為記錄大容量數(shù)據(jù)而發(fā)現(xiàn)了NAND FLASH芯片有壞塊的現(xiàn)象,導致了試驗數(shù)據(jù)記錄的不連續(xù)性,本文針對存儲芯片的特性進行分析,進行了壞塊識別和處理,使測量儀器的存儲可靠性和安全性得以提高。
測量儀器選用的NAND FLASH芯片為K9K8G08U0M,圖1為K9K8G08U0M的結構示意圖,整個芯片共由8192塊(block)組成,每個塊又由64頁(page)組成,每頁包含2112字節(jié),其中前2048個字節(jié)為主存儲區(qū),后64個字節(jié)是每頁保留的擴展區(qū)(space area),主要存儲效驗信息、效驗碼之類的數(shù)據(jù),具體對應方式如圖1所示。頁是寫入數(shù)據(jù)的最小單元,塊是擦除的最小單元,在對FLASH進行寫操作(頁編程)時,只能把相應的位由1寫為0,只有對塊進行擦寫操作時,才能把該塊內(nèi)所有位由0寫為1,所以,寫入數(shù)據(jù)時如果該頁內(nèi)已有數(shù)據(jù),必須先擦除該塊。
由于工藝和使用環(huán)境問題,NAND FLASH會不可避免出現(xiàn)一定比例的壞塊。壞塊是指包含一位或多位錯誤的塊,由于制造工藝不能保證存儲單元在其生命周期中保持性能的可靠,因此,在NAND的生產(chǎn)及使用過程中會產(chǎn)生壞塊,而且壞塊是隨機分布的,可能在出廠時就存在壞塊,也可能于使用過程中產(chǎn)生壞塊。
圖1 擴展區(qū)具體對應方式
壞塊定義為包含一位或多位錯誤的塊,分為初始壞塊和使用壞塊。
初始壞塊:是在生產(chǎn)過程中產(chǎn)生的壞塊,在芯片出廠時通常對每塊的前兩頁進行檢查,若沒能有效清零則將壞塊信息標志在該塊第一頁的擴展區(qū)的某一特定位置。
使用壞塊:在NAND FLASH使用過程中,出現(xiàn)塊清零、編程、讀取錯誤時,均可定義該塊在使用過程中產(chǎn)生了新的壞塊。
在FLASH中塊與塊之間是相互獨立的,壞塊不會影響好塊的性能。
初始壞塊識別:第一次使用FLASH芯片時,清零之前先要讀取壞塊信息,依次讀出FLASH所有塊對應擴展區(qū)的初始壞塊標志,并建立初始壞塊信息表,程序流程如圖2所示。
圖2 初始壞塊信息表程序流程圖
使用壞塊識別:K9K8G08U0M內(nèi)包含了一個狀態(tài)寄存器,向命令寄存器寫入70h命令后,可以將狀態(tài)寄存器的內(nèi)容輸出到I/O管腳上。可以通過讀I/O管腳電平來判斷寫/擦除操作是否成功:低電平代表成功,高電平代表失敗。以擦除操作為例,將依次對每塊進行擦除,將擦除失敗的信息形成使用壞塊信息表,程序流程如圖3所示。
當壞塊被識別到后,對存儲區(qū)內(nèi)壞塊進行相應管理才能有效完成存儲。其中壞塊管理包括:(1)壞塊信息存儲:將獲取的壞塊信息存儲在好塊中以防丟失,這是壞塊管理中非常關鍵的一步。(2)屏蔽壞塊:根據(jù)壞塊信息表內(nèi)容,在進行存儲操作時,可直接進行壞塊跳過或進行壞塊替換來達到屏蔽壞塊的目的。下面介紹具體處理方法和實現(xiàn)途徑。
圖3 使用壞塊信息表程序流程圖
設要求測量儀器記錄的數(shù)據(jù)總量為L(Mbyte),現(xiàn)考慮開辟存儲器一塊存儲空間為3L(Mbyte),存儲量是數(shù)據(jù)量的3倍,即有2倍冗余量。K9K8G08U0M存儲總量為1(Gbyte)=1024(Mbyte),實際使用時3L是遠小于1(Gbyte)的。根據(jù)圖2、圖3的流程分別建立初始壞塊表1和使用壞塊表2,設初始壞塊表1內(nèi)壞塊總數(shù)為X塊,3L使用存儲空間內(nèi)壞塊總數(shù)為X1塊;使用壞塊表2內(nèi)壞塊總數(shù)為Y塊,3L使用存儲空間內(nèi)壞塊總數(shù)為Y1塊。先在使用存儲器前對存儲器進行器件篩選,確保在預留的3L(Mbyte)空間內(nèi)初始壞塊總數(shù)為0,并保證總初始壞塊率≤1‰,因K9K8G08U0M有8192塊,則X≤Y,X1≤Y1且X≤8,X1=0。編制存儲專用測試程序針對3L特定存儲區(qū)進行專門測試,如回收數(shù)據(jù)量、回收速度、回收錯誤率及壞塊信息等。
在進行存儲操作前必須將上一次記錄的數(shù)據(jù)全部擦除后才能正確存儲,利用這一特點,在每次進行試驗記錄前先進行清零操作,即將FLASH所有塊依次執(zhí)行塊擦除操作,每塊塊擦除指令執(zhí)行后查詢是否成功,如果不成功,便將此信息列入使用壞塊表中,因X1=0,意味著沒有初始壞塊,則現(xiàn)在記載的壞塊信息全部為使用過程中產(chǎn)生的,那么必須實時更新。每次操作一次清零,就將壞塊信息表內(nèi)容更新。
由于三星公司能確保FLASH芯片出廠時第0塊第0頁是不會損壞的,將壞塊總數(shù)和使用壞塊信息表內(nèi)容存儲在第0塊第0頁中,目前內(nèi)記儀中采用了按頁存儲技術,在每次進行頁編程時,將當前塊與使用壞塊信息表進行比對,若是壞塊,則跳過整塊,在下一塊第0頁繼續(xù)存儲,每塊依次比較,確保存儲的正確性,當壞塊總數(shù)等于比較次數(shù)時,表明后續(xù)存儲內(nèi)已無壞塊,可順序按塊按頁存儲。流程圖如圖4所示。
圖4 壞塊處理程序流程圖
前面已提到在一次試驗時分析試驗數(shù)據(jù)時發(fā)現(xiàn)了在存儲器存在壞塊時,數(shù)據(jù)記錄不連續(xù)的情況,具體表現(xiàn)形式如圖6所示。由于在內(nèi)記儀進行數(shù)據(jù)記錄時,在固定時間間隔內(nèi)會提供準確的北京時間信息,在碰到壞塊時,存儲的數(shù)據(jù)在壞塊前后時間是不連續(xù)的。在圖5中可明顯看出在畫面中間部位數(shù)據(jù)發(fā)生了不連續(xù)現(xiàn)象。
當運用上述處理壞塊的方法,進行軟硬件優(yōu)化設計后,在碰到壞塊時,前后塊的存儲數(shù)據(jù)連續(xù),時間信息也連續(xù),沒有產(chǎn)生漏記現(xiàn)象。記錄的數(shù)據(jù)如圖6所示。
圖5 數(shù)據(jù)記錄不連續(xù)圖
圖6 壞塊處理后數(shù)據(jù)連續(xù)記錄圖
FLASH芯片因其存儲容量大、體積小、掉電數(shù)據(jù)不丟失及可多次擦寫的優(yōu)點,已廣泛應用于各個領域,但始終受到壞塊問題的制約,因此壞塊的處理尤為重要,本文介紹了一種壞塊處理方法,成功的應用在產(chǎn)品型號研制中,提高了記錄的可靠性和安全性。
[1]董永帥.FLASH文件系統(tǒng)及存儲管理技術研究與實現(xiàn)[D].華中科技大學,2008.
[2]彭兵,步凱,許欣. NAND Flash壞塊管理研究[J].微處理機.2009,4,(2): 114.
[3]張勝勇,高世杰,吳志勇.基于FPGA的NAND Flash壞塊處理方法[J].計算機工程.36(6):239-240.