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