采用FPGA和DSP直接控制硬盤實現(xiàn)存儲控制的方法
傳輸40M數(shù)據(jù)結(jié)束后,主機將根據(jù)傳輸?shù)纳葏^(qū)數(shù)填寫FAT表,判斷硬盤空間是否小于200M、已儲存的文件數(shù)是否大于256,如果為真則再次存儲數(shù)據(jù)時將使用下一個磁盤分區(qū)。
4 硬盤操作控制流程
我們一般習(xí)慣稱硬盤接口為IDE接口[3],對硬盤的操作如讀寫扇區(qū),發(fā)送命令等都是通過讀寫寄存器來完成的,每向硬盤發(fā)送一組命令后都要讀取狀態(tài)寄存器中的信息,通過狀態(tài)寄存器的值來判斷硬盤是否已經(jīng)執(zhí)行完所發(fā)送的命令。
4.1 硬盤啟動操作
硬盤加電后應(yīng)先將硬盤復(fù)位,硬盤復(fù)位方式有三種,本設(shè)計采用的是將SRST置1,當(dāng)SRST被置1后硬盤立即復(fù)位,這時應(yīng)至少等待2ms才讀取Status register。如果Status register的值為80h,則表明硬盤已完成復(fù)位。硬盤啟動流程見圖2。本文引用地址:http://butianyuan.cn/article/191820.htm
圖2 硬盤啟動程序流程圖
圖3 扇區(qū)讀寫操作程序流程圖
4.2 扇區(qū)讀寫操作
首先應(yīng)向硬盤發(fā)送命令參數(shù),將要讀寫的扇區(qū)數(shù)目寫入Sector count register,將扇區(qū)的邏輯地址寫入LBA High register、LBA Mid register和LBA Low register,將要接收命令的設(shè)備號寫入Device register。流程見圖3。
LBA=(柱面編號×磁頭數(shù)+磁頭編號)×扇區(qū)數(shù)+扇區(qū)編號-1
將命令READ SECTOR或WRITE SECTOR寫入Command register后,在400ns內(nèi)Status register的值并不可靠,所以需等待400ns才能讀取Status register,這段等待時間可以通過讀取Alternate Status register和Error register度過,讀取的數(shù)值應(yīng)被丟棄。當(dāng)狀態(tài)寄存器的值為58h時,表示硬盤已經(jīng)可以從Data register接收或傳輸數(shù)據(jù)。
評論