采用FPGA和DSP直接控制硬盤(pán)實(shí)現存儲控制的方法
摘 要 介紹了采用FPGA和DSP直接控制硬盤(pán)進(jìn)行數據存儲的方法,并采用一片FIFO作為數據緩存,能夠滿(mǎn)足80Khz數據采樣率系統的存盤(pán)要求。
關(guān)鍵詞 FPGA;DSP;硬盤(pán);數據存儲
1 引言
數據存儲是數據采集過(guò)程中的一個(gè)重要環(huán)節,目前大部分數據存儲系統都是用內置工控機的方法完成數據保存任務(wù),這種方法系統功耗大,硬件成本高,不適用于具有內記功能要求的系統。本系統采用FPGA和DSP直接控制硬盤(pán)進(jìn)行數據存儲,并采用一片FIFO 作為數據緩存,設計思路比較新穎,硬件結構簡(jiǎn)單,成本低,直接控制硬盤(pán)的方法可將系統功耗降至最低,具有自動(dòng)內記功能,能及時(shí)存儲采集到的數據。本系統已經(jīng)應用于某信號采集設備中,實(shí)踐證明可滿(mǎn)足使用要求,能夠滿(mǎn)足80Khz數據采樣率系統的存盤(pán)要求。
2 系統實(shí)現方案
本設計采用FPGA和DSP直接控制硬盤(pán)[1][2],并采用一片FIFO作為數據緩存,系統采用DSP完成文件管理工作,利用FPGA實(shí)現DSP與硬盤(pán)的接口。具體框圖如圖1所示。
圖1 方案實(shí)現框圖
首先由采集控制板FPGA將FIFO復位,需要儲存數據時(shí)數據流直接將數據寫(xiě)入FIFO,當存儲控制板FPGA查詢(xún)到FIFO的狀態(tài)為非空時(shí)就輸出BIO信號通知DSP啟動(dòng)存盤(pán)程序。DSP先訪(fǎng)問(wèn)硬盤(pán)確定所需參數,如下一個(gè)文件應使用的文件名,保存文件的邏輯扇區號等。然后DSP向硬盤(pán)發(fā)出存盤(pán)命令,當硬盤(pán)響應控制命令后,DSP通知FPGA可以向硬盤(pán)傳輸數據。存盤(pán)時(shí)FPGA從FIFO中讀出數據并將數據打包,由8bit變?yōu)?6bit,并寫(xiě)入硬盤(pán)數據寄存器。當存滿(mǎn)40M時(shí),DSP通知采集控制系統已寫(xiě)滿(mǎn)一個(gè)文件,采集控制系統將FIFO復位完成一次存盤(pán)操作。
3 存儲控制程序流程
程序啟動(dòng)后,首先將硬盤(pán)Device register中的SRST置1使硬盤(pán)復位,在硬盤(pán)復位后讀取MBR0和BPB0,在FAT中找到Special Sector并檢查是否有標志位0x55FF,如果沒(méi)有則說(shuō)明硬盤(pán)是第1次被使用,如果有則從中讀取參數準備傳輸數據。
(1) 為了在每次啟動(dòng)程序后能迅速查找到應使用的文件名、下一個(gè)空簇的位置、正在使用的磁盤(pán)等參數,將硬盤(pán)第3簇中第1扇區標志為Special Sector,用于儲存這些參數。
(2)每個(gè)磁盤(pán)被劃分出200M空間為保留區,當發(fā)現磁盤(pán)空間不足200M時(shí)即顯示磁盤(pán)已滿(mǎn),不在用當前磁盤(pán)存儲數據而是使用下一個(gè)磁盤(pán)。
(3)每個(gè)磁盤(pán)第2簇為目錄區,因使用短文件名無(wú)子目錄,所以當每簇為16扇區時(shí)目錄區共可儲存256個(gè)文件名。
(4)數據文件大小固定為40M。
如果硬盤(pán)是第一次被使用,則主機順次讀取MBR0、BPB0、MBR1、BPB1直到查詢(xún)到最后一個(gè)硬盤(pán)分區,并將相關(guān)參數如每個(gè)分區的大小、分區的邏輯地址、每個(gè)分區數據空間起始段的邏輯地址、FAT表邏輯地址等信息寫(xiě)入Special Sector,并做一個(gè)文件的目錄(32字節)將第一個(gè)文件命名為“000.dat”。
當FAT中第三簇被標志為壞簇時(shí),表明已經(jīng)在硬盤(pán)上劃分Special Sector并已存入硬盤(pán)參數。主機從Special Sector中讀取下一個(gè)可用空簇,并計算這一簇在FAT中的位置并將FAT讀入C54的RAM中,讀取Special Sector中的文件名及相關(guān)參數并將其寫(xiě)入目錄區。然后查詢(xún)BIO,當BIO為低電平時(shí)開(kāi)始傳輸數據(參見(jiàn)儲存板接口),傳輸數據時(shí)FPGA啟動(dòng)元件 trans_data,由主機發(fā)出XF作為啟動(dòng)信號。FPGA從FIFO中每讀出2Bytes向硬盤(pán)寫(xiě)一次,連續寫(xiě)256次,即向硬盤(pán)傳輸512字節數據。主機每發(fā)出一個(gè)XF下降沿FPGA就從FIFO中讀取512字節數據并存入硬盤(pán)。
評論