基于閃存的星載大容量存儲器的研究和實現
1.2 無效塊的管理本文引用地址:http://www.104case.com/article/202575.htm
三星閃存芯片在使用過程中會出現無效塊。無效塊是指一個塊中存在一個或多個無效位,其可靠性不能得到保證,必須加以標識和旁路(當然無效塊不會影響到其它塊的有效性)4并進行數據備份。為了對無效塊實現管理,可以建立一張無效塊到冗余區有效塊的映射表。映射表結構如圖2所示。映射原理如下: 開始是一張初始無效塊映射表,這張表可以根據三星公司技術手冊給出的算法建立起來。按照圖示的映射數據結構對整個存儲區進行編號,并根據這個編號對映射表進行排序。進行寫操作時,按照上述的映射結構將寫地址與映射表進行比較,比較到塊級即可。如果是無效塊,將待寫入的數據寫到被映射到的塊;如果不是,則直接寫入該塊。如果在寫某塊的某頁時出現編程錯誤,則將該塊添加進無效塊映射表(當編程出錯時就表明出錯頁對應的塊無效),同時從該出錯頁開始,將該塊后面的頁數據都寫入到對應的映射塊。這樣,在數據讀出時,可將讀地址與映射表比較,并且需要比較到頁級以確定每一頁的確切存放位置。如果該頁編程正確,則直接讀出;如果錯誤,則到被映射的塊的對應頁讀數據,并且該頁之后的頁也從被映射塊中讀數據。根據三星的技術資料,對無效塊進行讀操作是允許的,即對于編程出錯頁前面的那些編程正確的頁是可以正確讀出的,而對無效塊進行編程和擦除的操作是不推薦的,因為有時這些操作會使鄰近的塊也失效4。所以讀操作要查找到每一頁的對應存放位置,而寫操作只要查找到塊就行。查找時采用二分查找算法。擦除完后,將擦除出錯的塊也添加進無效塊映射表。無效塊映射表需要不斷維護和更新。
2 閃存構成星載大容量存儲器的系統實現方案2.1 系統的組成
該實現方案將上述關鍵問題的解決方法融合進來,系統由存儲區模塊、接口模塊、數據緩沖模塊及主控模塊四部分組成,系統原理圖如圖3所示。
2.1.1 存儲區模塊
為了實現并行和流水技術,整個存儲區模塊按如下方式構成:由4片K9K1G08U0M型三星閃存芯片組成一個子模塊,8個子模塊組成8級流水的大模塊,而這個大模塊即是整個存儲區,其總容量為32Gbit。無效塊備份的冗余區可以設在每個子模塊內部,即從子模塊的每塊芯片中預留出一部分空間。這種模塊化管理的方式既便于系統擴展,又可以在不影響系統正常工作的情況下旁路已損壞的存儲塊。
2.1.2 接口模塊
系統與外部的接口有兩個。一是與CPU的接口,主要完成系統的初始化、外部命令和地址的輸入以及內部狀態參數的輸出,同時CPU 還要對存儲區完成管理:無效塊的管理、地址的譯碼和映射等;二是與外部高速數據源的接口,主要完成外部高速數據的接收和發送。這里選用了1394高速總線作為數據源總線。
2.1.3 數據緩沖模塊
這一模塊包括數據輸入FIFO、數據輸出FIFO和一個作為數據備份的SRAM。由于閃存的寫入速度比較慢,如果沒有數據緩沖區,外部的高速數據很有可能會丟失,而且數據回放時也需要一個緩沖區使內外的數據率匹配。考慮到編程出錯時需要重新加載數據,按照流水線的工作方式,如果不進行數據備份,可能會出現出錯時的數據丟失,因此選用了一個SRAM進行數據備份。當將輸入FIFO的數據寫入FLASH時,同時也將數據寫入到SRAM進行備份;當需要重新編程時,再從SRAM中將相應的備份數據重新寫入FLASH。
2.1.4 主控模塊
這一模塊完成整個存儲器系統的內部控制,是核心控制機構,連接著存儲區、數據緩沖以及外部接口三個模塊,完成它們之間的數據、命令、地址、狀態的相互傳遞、轉換和處理。主控模塊又分為三個子模塊,即存儲區控制子模塊、存儲區數據子模塊和1394接口控制子模塊,分別由三片FPGA(現場可編程邏輯陣列)完成。
評論