基于DSP的語(yǔ)音編解碼算法G.723.1優(yōu)化
Nand Flash作為一種安全、快速的存儲體,因其具有體積小、容量大、成本低、掉電數據不丟失等一系列優(yōu)點(diǎn),已逐步取代其它半導體存儲元件,成為嵌入式系統中數據存儲的主要載體。盡管Nand Flash的每個(gè)單元塊相互獨立,且每塊一般可擦除次數高達10~100萬(wàn)次,但是隨著(zhù)擦寫(xiě)次數增加,會(huì )有一些單元塊逐漸變得不穩定或失效從而形成永久性壞塊。因此,要避免頻繁地對同一塊進(jìn)行操作,盡量達到擦寫(xiě)次數均衡;同時(shí),由于擦除操作耗時(shí)較多,會(huì )對系統的實(shí)時(shí)性造成影響。為此,本文介紹了一種基于磨損均衡思想的Nand Flash存儲管理方式,并深入討論了該方式在Ti公司的DSP TMS320F28x中的程序實(shí)現。
本文引用地址:http://dyxdggzs.com/article/190490.htm1 器件介紹
本文中采用的Nand Flash芯片K9F6408U0C是一塊擁有8M(8,388,608)×8bit存儲空間及 256K(262,144)×8bit輔用存儲空間的存儲芯片,電源電壓為1.8V-3.3V。芯片內部按塊和頁(yè)的方式來(lái)組織的,如圖1所示,共分成1024個(gè)塊,每塊包含16個(gè)頁(yè),每頁(yè)內有528個(gè)字節。 F28x系列DSP是美國TI公司最新推出的C2000平臺上的定點(diǎn)DSP芯片。
圖1 K9F6408UOC內部結構示意圖
F28x系列芯片具有 低成本、低功耗和高效能等特點(diǎn),特別適用于有大量數據處理的測控場(chǎng)合。
2 Flash的特點(diǎn)及存儲管理的作用
由K9F6408U0C的基本結構可以知道,它的基本單位有塊、頁(yè)、字節等。 Nand Flash 芯片具有如下特點(diǎn):
Flash寫(xiě):通過(guò)寫(xiě)命令將每個(gè)字節存儲單元中的1變?yōu)?;寫(xiě)操作不能把0變?yōu)?。
Flash擦除:擦除命令是Flash中存儲單元0變?yōu)?的唯一途徑,一旦對某一塊中的某一位寫(xiě)0,要再改變成1,則必須執行擦除命令。
通常,對于容量較小的Flash塊的操作過(guò)程是:先把整個(gè)塊的數據讀到RAM中,在RAM中修改數據內容,再擦除整個(gè)塊,最后寫(xiě)入修改后的數據。顯然,這樣頻繁復雜的讀-擦除- 寫(xiě)操作,對于Flash的使用壽命以及系統性能是很不利的,而且微處理器中通常RAM大小有限。因此在硬件條件苛刻的嵌入式系統中就迫切需要一種合理的存儲管理方式以便有效地均衡 Flash各個(gè)存儲塊的擦寫(xiě)次數,提高Flash的使用壽命,從而提高數據存儲的安全性。
3 存儲管理系統的設計
3.1建立壞塊管理表
Nand Flash由于生產(chǎn)工藝的問(wèn)題,不可避免的會(huì )存在一些壞塊,這些壞塊在芯片出廠(chǎng)前 都已被標識好。根據Nand Flash數據手冊中的介紹,在每一塊的第一頁(yè)與第二頁(yè)的Spare area 的第六個(gè)字節(也就是該頁(yè)的第517字節)即是出廠(chǎng)時(shí)的壞塊標識位,如果某塊的該兩頁(yè)的第517字節內容不同時(shí)為0xFF,則代表該塊為廠(chǎng)家標識壞塊。這種壞塊的檢測必須在對芯片進(jìn)行擦除前進(jìn)行,因為廠(chǎng)家壞塊有可能也能夠被進(jìn)行擦除操作,如使用這種塊將對數據安全留下一定的隱患。
Nand Flash在出廠(chǎng)前會(huì )保證每塊芯片的第一塊與第二塊是完好的,所以在本文的設計中,采用的方式是將壞塊管理表存放在第一塊的第一頁(yè)的前128個(gè)字節中,每個(gè)字節的一位代表芯片的一塊,如該位為1剛表明該塊是好的,為0則表示對應塊為壞塊。壞塊管理表的建立是必需的,而且最好是在芯片進(jìn)行其它擦寫(xiě)操作前進(jìn)行。
3.2 Flash存儲空間管理
在本文設計的Flash空間管理中,Flash的存儲塊被分為空閑塊(Free,即空白沒(méi)寫(xiě)數據的好塊),有效塊(Valid,即存有有效數據的塊,不能被擦除),無(wú)效塊(Invalid,即數據已無(wú)效或是寫(xiě)入錯誤塊,可被擦除),保留塊(Reserve,用于替換新產(chǎn)生的壞塊),其它的則為壞塊,所有存儲塊的管理均采用單向鏈表方式進(jìn)行管理。
在大部分的Flash存儲空間管理系統中可能并不存在保留塊,在本系統中增加保留塊的作用主要是,當部分存儲塊因為反復擦寫(xiě)成為新的壞塊時(shí),可以用保留塊取而代之成為新的空閑塊,從而使得留給用戶(hù)的可用存儲塊總數在一定時(shí)期內是一定的,這樣做的優(yōu)點(diǎn)是可以增強數據的安全性,延長(cháng)整個(gè)Flash的使用周期,缺點(diǎn)是用戶(hù)可用的存儲空間相對減少,不過(guò)在Flash芯片技術(shù)迅速發(fā)展的今天,大容量的Flash芯片價(jià)格已經(jīng)十分低廉,數據安全才是嵌入式系統設計最值得重視的。
在本文的設計中,統一規定Flash每一塊的第一頁(yè)的Spare Area為數據塊狀態(tài)信息標記區,具體規定如表2所示:
根據上表的設計,塊擦除次數最大為224 ? 1 = 16777215 ,遠大于Flash的最大擦除次數10到100萬(wàn)次;塊狀態(tài)標記字節,0xFF代表其為空閑塊,0xFD代表其為保留塊,0xFC代表其為有效塊,0xF0代表其為無(wú)效塊,0x00則表明當前塊為壞塊,在壞塊管理表中其對應位為0。
3.3磨損均衡與無(wú)效塊回收
如圖2所示,當系統上電后,如不存在壞塊管理表則應首先應建立相應的壞塊管理表,參照壞塊表根據每一塊的第517字節建立各個(gè)鏈表Free_List,Valid_List,Invalid_List, Reserved_List,初始化并按擦除次數非遞減序排列各鏈表。當無(wú)效塊因擦除成為新的空閑塊時(shí),根據塊擦除次數插入到空閑鏈表中相應位置,當需要寫(xiě)入數據到新的空閑塊時(shí)則取用空閑鏈表的鏈首所指空閑塊,寫(xiě)入數據有效后則標識該塊為有效塊,否則標識為無(wú)效塊,通過(guò)這樣的管理方式保證每次都是使用空閑鏈表中擦除次數最小的塊,從而使磨損達到均衡。
評論