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