基于NANDFLASH的大容量視頻存儲系統(tǒng)的設計
引言
科技的發(fā)展,尤其是航空、航天、航海技術的發(fā)展,對于科研設備所拍攝的視頻數據以及設備運行情況的監(jiān)視錄像,都迫切地需要一種容量大、速度快、存儲性能可靠的圖像存儲設備。傳統(tǒng)的存儲介質主要以早期的磁帶機和其后的磁盤為主,由于磁帶機存儲密度低,存儲內容不易査找,已經退出了歷史舞臺。而磁盤受到強烈震動后容易丟失數據,嚴重制約了它在航空、航天、航海領域中的應用。與傳統(tǒng)的硬盤相比,NADNFLASH作為一種新興的半導體存儲器件具有存儲密度高、可靠性高、體積小、質量輕、功耗小、壽命長、無噪聲、抗震動、能適應惡劣的力學和溫度環(huán)境等優(yōu)點。由此可見,基于NADNFLASH的大容量存儲系統(tǒng)的研究具有更為重要的意義。
1 系統(tǒng)概述
本系統(tǒng)以ADI公司的高性能DSP芯片BF533為核心,用并行外圍接口(PPD來接收中心控制板的視頻數據和控制命令,并將處理結果和存儲在介質中的視頻數據傳輸給中心控制板;以Sumsung公司的NANDFLASH芯片K9WBG08U1M為存儲介質;用Altera公司的FPGA芯片EP2C35來實現對FLASH的時序控制。根據實際需求,本系統(tǒng)使用了100片K9WBG08U1M芯片,存儲深度可達400GB,其安全存儲速率可達5MB/s。該系統(tǒng)的視頻數據釆用文件的形式來管理,即每個視頻文件都有一個文件表項,里面包含文件名稱、文件地址以及文件大小等信息,此表項存放在FLASH的文件列表中,在進行存儲、下載、剪切、刪除等操作時,都需要將文件列表讀到DSP的SDRAM中,以確定目標文件的地址,從而進行后續(xù)處理。
2 系統(tǒng)硬件設計
2.1 芯片的選擇
K9WBGO8U1M芯片通過8位復用的I/O總線多周期輸入尋址,即共分5個周期,前2個周期輸入A0?All的頁內地址(列地址),后3個周期輸入A12?A30的頁地址(行地址)。其單片存儲容量為(4G十128M)B,內部由兩片K9KAGO8UOM芯片構成,而K9KAG08U0M芯片又分為8192塊,每塊64頁,每頁(4K+128)B。該芯片以頁為單位來進行編程和讀操作,典型編程時間為200倨,最大編程時間為700Ms,最小寫周期為25ns,最小串行讀周期為50ns;以塊為單位進行擦除,典型擦除時間為1.5ms。其內部有一個頁寄存器,在進行編程和讀操作時,先將要寫或要讀的一頁數據緩存到頁寄存器中,然后寫入編程命令開始頁編程或發(fā)送讀使能信號開始串行讀。由此可以計算出FLASH的最快寫入速率為4096B/(200俸十4096X25ns)^13Mb/s,安全寫入速率為4096B/(700fzs+4096X25ns)^5Mb/so考慮到數據的安全寫入,我們選取了最大編程時間700”,即安全寫入速率為5MB/so
2.2 系統(tǒng)硬件結構框圖
本系統(tǒng)作為網絡視頻存儲系統(tǒng)的子系統(tǒng),通過DSP的半雙工接口PPI與中心控制板進行通信。首先將接收到的數據緩存在SDRAM中,然后對緩存下來的數據進行分析,辨別命令類型后進行與命令相應的操作,同時通過UART這個低速通道向中心控制板返回實時狀態(tài)信息。其硬件結構框圖如圖1所示。
FPGA作為DSP的異步外設連接到DSP的系統(tǒng)總線上,DSP通過存儲器DMA的方式向FPGA發(fā)送數據和讀取FPGA內部RAM中的數據??紤]到FPGA自身I/O引腳數量的限制和引腳驅動能力,本系統(tǒng)采用兩片FPGA來驅動100片FLASH,FLASH陣列分為25組,每組4片FLASH,共用一套數據/地址總線和控制總線,各片FLASH通過片選信號來選中。
DSP的PPI接口接收到的視頻數據是經過MPEG-4格式壓縮過的,其最大bit流速率為4Mb/s。PPI的總線時鐘頻率最大可達133MHz,也就是數據傳輸速率最大可達133MX16b/s,所以對于4Mb/s的視頻數據完全可以滿足要求。視頻數據到達存儲板后,由FPGA負責寫入存儲器,存儲芯片K9WBG08U1M的寫入速率為5MB/s,每路視頻數據率為4Mb/s=0.5MB/s,故存儲芯片K9WBG08U1M也可以達到存儲速率的要求。
2.3 FLASH的驅動設計
本系統(tǒng)采用FPGA給FLASH提供總線驅動和譯碼邏輯,以其中一片FPGA為例,其具體實現圖如圖2所示。
在FPGA內部構建兩個雙口RAM,一個用于存儲操作,一個用于下載操作。當進行存儲操作時,FPGA首先接收DSP發(fā)送的數據(包含地址信息)存儲在雙口RAM中,此過程采用MDMA的方式。數據接收完成后,DSP給FPGA發(fā)送啟動信號,此時FPGA開始產生FLASH控制時序將存儲在雙口RAM中的數據寫入FLASH中,同時根據地址信息譯碼產生相應的片選信號來選中某一片FLASH芯片。在編程過程中,只要保證下一次MDMA結束前當前頁編程已經結束,就可以產生一個脈沖通知DSP準備下一頁寫入操作,這樣可以讓MDMA與編程同時進行,從而提高寫入速率;同理,在進行下載操作時,先將FLASH中的數據緩存到雙口RAM中,然后通知DSP進行MDAM操作即可。圖3給出了存儲操作的功能仿真波形。從圖中可以看出完全滿足FLASH的寫入時序,經驗證,此模塊實現的存儲
效果非常好。
圖3 存儲模塊的功能仿真波形
3 系統(tǒng)軟件設計
系統(tǒng)上電復位加載完程序之后,程序對寄存器初始化完成后就進入循環(huán)等待狀態(tài),準備接收中心控制發(fā)送的命令。當通過PPI接收到命令后,就對命令進行分析,判斷中心控制板要存儲板完成什么操作,如視頻文件存儲、下載、剪切、復制或刪除等等。文件存儲流程圖如圖4所示。
當上位機通過網絡給中心控制板發(fā)送開始命令后,中心控制板首先發(fā)送開始拍攝命令和拍攝視頻參數給前端視頻壓縮系統(tǒng),建立TCP鏈接,然后發(fā)送開始命令給存儲板。存儲板接收到中心控制分系統(tǒng)發(fā)送過來的命令后,首先讀取文件列表到DSP的SDRAM當中,DSP檢索出其中的文件個數和最后一個文件的存儲地址,在SDRAM中添加新文件表項到當前的文件列表,然后擦除先前存儲在FLASH中的文件列表后重新寫入修改過后的文件列表。根據系統(tǒng)壓縮的要求,如果前端壓縮后的碼流速度為2Mb/s,為了使得DSP集中處理數據,我們擬定中心控制板和存儲板之間每4s傳輸一次數據。由于每次壓縮后的數據長度不是一個既定數,因此只能按照最大數據長度來傳輸,即每次傳輸1MB。由于PPI接口寄存器位寬的限制,每次傳輸數據長度不能超過(128K-DB,我們設定每次傳輸長度為100KB,則DSP通過PPI接收的數據需要通過11次才能接收完畢。中心控制分系統(tǒng)把有效數據長度作為一個參數放置在數據的末尾,存儲板按照這個參數對緩存到SDRAM中的數據進行處理,剩余無效數據拋掉。
4 壞塊的檢測處理
由于制作工藝等原因,NANDFLASH在出廠時會存在隨機分布的壞塊,另外FLASH在使用過程中也會造成壞塊。如果冒然對壞塊進行操作,會造成數據的丟失,影響數據的完整性。另外,在檢測編程和擦除結束標志時,FLASH的I/O返回的狀態(tài)不穩(wěn)定,會導致程序進入無限等待狀態(tài),這樣會大大影響整個系統(tǒng)的性能。因此,有必要對FLASH進行壞塊檢測和處理。
檢測壞塊的方法有兩種:一種方法是利用芯片出廠時廠家給的壞塊信息,它被廠家標記在壞塊的第一頁和第二頁的備用空間的首字節(jié)中,即頁內地址(列地址)為4096的字節(jié)中。如果這兩個字節(jié)都是OxFF,則表明當前塊不是壞塊,否則為壞塊。另一種方法是將當前塊先擦除,然后讀出當前塊的數據,如果讀出的數據不全是OxFF,則表明此塊為壞塊(考慮到不使用備用空間)。
由于壞塊與有效塊相互獨立,互不影響,所以對FLASH進行操作時只要將壞塊跳過即可??紤]到本系統(tǒng)的視頻數據采用文件的形式存儲,也就是說在讀寫操作之前DSP需要準確知道文件的存儲地址,包括文件的開始地址和結束地址,所以必須要將檢測出來的壞塊表存儲在DSP的存儲器中。如果將壞塊列表存放在NANDFLASH中,會存在一個問題:存放壞塊列表的地方本身就在壞塊區(qū)該如何處理,如果做特殊處理的話會影響程序的一致性。另外,每次搜索之前都得把壞塊列表從NANDFLASH中讀出來,這樣的話程序會進入好幾次中斷,從而影響整個程序的流程??紤]到程序燒寫FLASH有16Mb,而DSP程序不超過20KB,于是可以將壞塊列表放在程序燒寫FLASH中,也就是說程序燒寫FLASH既存放程序,又存放壞塊列表。這樣,DSP可以對壞塊列表進行直接訪問。
5 結語
在整個系統(tǒng)的測試過程中,本部分工作正常,對NANDFLASH的訪問能跳過壞塊,保證數據的正確性和完整性。另外,如何采用流水線方式提高存儲速率是今后研究的重點。
20210830_612c73515157b__基于NANDFLASH的大容量視頻存儲系統(tǒng)的設計