基于FPGA的IDE硬盤(pán)接口卡的實(shí)現
本文采用FPGA實(shí)現了IDE硬盤(pán)接口協(xié)議。系統提供兩套符合ATA-6規范的IDE接口,一個(gè)與普通IDE硬盤(pán)連接,另一個(gè)與計算機主板上的IDE接口相連。系統采用FPGA實(shí)現接口協(xié)議,完成接口數據的截獲、處理(在本文中主要是數據加密)和轉發(fā),支持PIO和Ultra DMA兩種數據傳輸模式。下面重點(diǎn)介紹用FPGA實(shí)現接口協(xié)議的方法。
1 IDE接口協(xié)議簡(jiǎn)介
1.1 IDE接口引腳定義
IDE(Integrated Drive Electronics)即“電子集成驅動(dòng)器”,又稱(chēng)為ATA接口。表1列出了ATA標準中IDE接口上的信號。其中,帶“-”的信號(如RESET-)表示低電平有效?!胺较颉笔窍鄬τ谟脖P(pán)而言,I表示進(jìn)入硬盤(pán),O表示從硬盤(pán)出來(lái),I/O表示雙向。
表1:IDE接口引腳定義
1.2 IDE控制器的寄存器組
主機對IDE硬盤(pán)的控制是通過(guò)硬盤(pán)控制器上的兩組寄存器來(lái)實(shí)現的。一組為命令寄存器組;另一組為控制/診斷寄存器,如表2所示。
表2寄存器組
特征寄存器中的內容作為命令的一個(gè)參數,其作用隨命令而變。扇區數寄存器指示該次命令所需傳輸數據的扇區數。扇區號寄存器、柱面數寄存器(低、高)、驅動(dòng)器/磁頭寄存器三者合稱(chēng)為介質(zhì)地址寄存器,指示該次命令所需傳輸數據首扇區的地址,尋址方式可以用“柱面/磁頭/扇區(CHS)”或“邏輯塊地址(LBA)”方式,在驅動(dòng)器/磁頭寄存器中指定。
命令寄存器存儲執行的命令代碼。當向命令寄存器寫(xiě)入命令時(shí),相關(guān)的參數必須先寫(xiě)入。命令寫(xiě)入后,硬盤(pán)立即開(kāi)始命令的執行。狀態(tài)寄存器保存硬盤(pán)執行命令后的結果,供主機讀取。其主要位有:BSY-驅動(dòng)器忙,DRDY-驅動(dòng)器準備好,DF-驅動(dòng)器故障,DRQ-數據請求,ERR-命令執行出錯。輔助狀態(tài)寄存器與狀態(tài)寄存器的內容完全相同,但讀該寄存器時(shí)不清除中斷請求。錯誤寄存器包含了命令執行出錯時(shí)硬盤(pán)的診斷信息。
數據寄存器為PIO傳輸模式下,主機和硬盤(pán)控制器的緩沖區之間進(jìn)行數據交換的寄存器。數據端口為DMA傳輸模式下專(zhuān)用的數據傳輸通道。
1.3 IDE數據傳輸方式
IDE接口的數據傳輸包括PIO和DMA兩種方式。PIO模式是硬盤(pán)數據傳輸的基本方式。在PIO方式下,數據的傳輸以數據塊(1個(gè)或者多個(gè)扇區)為單位,每傳輸完一個(gè)數據塊后,硬盤(pán)都會(huì )產(chǎn)生一個(gè)中斷請求,并向主機報告命令執行結果。
在DMA方式下,主機和硬盤(pán)之間需要通過(guò)一系列握手信號建立一個(gè)DMA通道,數據以數據流的形式傳輸。當傳輸完一個(gè)命令的所有數據時(shí),硬盤(pán)產(chǎn)生一個(gè)中斷請求,并向主機報告命令執行結果。DMA方式又分為Ultra DMA和Multiword DMA兩種。Ultra DMA方式在選通信號的上升沿和下降沿均鎖定數據,提高了數據的傳輸速率,并且在數據傳輸結束時(shí)還要進(jìn)行CRC校驗。
2 FPGA內部框圖
本設計采用Actel公司的ProASIC PLUS系列FPGA芯片,其內部框圖如圖1所示。
寄存器組一保存從主機寫(xiě)入的命令及命令參數,在控制模塊的作用下轉發(fā)給硬盤(pán)。寄存器組二保存從硬盤(pán)讀出的命令執行結果,供主機讀取??刂颇K負責產(chǎn)生對主機及對硬盤(pán)的各種IDE協(xié)議控制信號,并協(xié)調各模塊之間的工作??刂颇K采用狀態(tài)機的設計方法,其軟件設計流程將在下一節中詳細介紹。數據處理單元對數據進(jìn)行加/解密運算。緩沖區一、二則作為數據處理單元的輸入/輸出緩存。在PIO方式下,數據的處理以數據塊為單位,緩沖區充當RAM的作用;在Ultra DMA方式下,數據以數據流的形式處理,緩沖區充當FIFO的作用。
3系統軟件流程
開(kāi)機時(shí),FPGA檢測到復位信號,初始化內部寄存器組,并對硬盤(pán)進(jìn)行復位操作,硬盤(pán)復位完畢后FPGA進(jìn)入空閑狀態(tài)。FPGA在空閑狀態(tài)時(shí)會(huì )檢測主機是否有寫(xiě)命令操作(通常一個(gè)命令的寫(xiě)入,要先寫(xiě)特征寄存器、扇區數寄存器、扇區號寄存器、柱面數低位寄存器、柱面數高位寄存器、驅動(dòng)器/磁頭寄存器6個(gè)命令參數寄存器,最后將命令寫(xiě)入命令寄存器)。當主機依次將寄存器組一寫(xiě)完后,FPGA對主機置BSY位,并將命令轉發(fā)給硬盤(pán),同時(shí)判斷命令類(lèi)型,根據不同的命令,進(jìn)入相應的命令處理流程。
如果是無(wú)數據命令,FPGA等待硬盤(pán)命令的執行,命令執行完畢后,硬盤(pán)產(chǎn)生一個(gè)中斷請求,此時(shí)FPGA將執行結果讀入寄存器組二中,并向主機產(chǎn)生中斷請求。如果是有數據命令,則根據數據傳輸的模式,分別進(jìn)入到下述的PIO命令處理流程及Ultra DMA命令處理流程。
3.1 PIO命令處理流程
以PIO模式傳輸數據的命令有Write Sectors、Write Multiple、Read Sectors和Read Multiple。當FPGA判斷出是PIO模式的數據傳輸命令時(shí),轉向PIO命令處理流程。下面我們以PIO寫(xiě)操作為例介紹。
FPGA首先查詢(xún)硬盤(pán)的BSY位。若BSY為0則將硬盤(pán)的狀態(tài)寄存器讀入寄存器組二,并查詢(xún)DRQ位。若DRQ為1則表明硬盤(pán)已準備好接收數據。此時(shí)主機可以向緩沖區一寫(xiě)入數據塊(本設計中,我們設定數據塊的大小為1個(gè)扇區共512字節)。主機寫(xiě)完一個(gè)數據塊后FPGA對主機置BSY位,數據處理單元開(kāi)始進(jìn)行加密運算,并將加密后的數據寫(xiě)入緩沖區二。加密運算完成后,FPGA將緩沖區二中的數據寫(xiě)入硬盤(pán)數據緩存區,并進(jìn)入等待狀態(tài)。硬盤(pán)將數據寫(xiě)入物理介質(zhì)(磁碟)后會(huì )產(chǎn)生一個(gè)中斷請求,報告已完成該數據塊的寫(xiě)操作。FPGA將執行結果讀入寄存器組二中,向主機產(chǎn)生中斷請求,并再次查詢(xún)DRQ位,若DRQ為1則進(jìn)入下一個(gè)PIO數據塊的傳輸過(guò)程,若DRQ為0則表示該命令所有數據全部傳完,FPGA進(jìn)入空閑狀態(tài)。
此外,IDEntify Device命令是主機以PIO方式從硬盤(pán)讀出512字節的屬性信息(包括硬盤(pán)的型號、容量等)。此時(shí),數據處理單元不應對該命令的數據進(jìn)行加/解密運算。
3.2 Ultra DMA命令處理流程
以Ultra DMA模式傳輸數據的命令有Write DMA和Read DMA。下面我們以Ultra DMA寫(xiě)操作為例介紹Ultra DMA命令處理流程。
DMA傳輸通道的建立都是由硬盤(pán)通過(guò)DMARQ來(lái)請求的。FPGA接收到硬盤(pán)的DMA請求后首先初始化主機至FPGA的DMA通道,緊接著(zhù)初始化FPGA至硬盤(pán)的DMA通道。此時(shí)主機經(jīng)FPGA到硬盤(pán)的DMA通道即已建立,主機向緩沖區一寫(xiě)入數據,同時(shí)數據處理單元對數據進(jìn)行加密運算,并將加密后的數據寫(xiě)入緩沖區二,FPGA則將緩沖區二中的數據寫(xiě)入硬盤(pán)。在傳輸過(guò)程中,若硬盤(pán)要求暫?;蛘呔彌_區二空,則FPGA暫停向硬盤(pán)發(fā)送數據;若緩沖區一滿(mǎn),則FPGA要求主機暫停發(fā)送數據。
主機和硬盤(pán)都可以隨時(shí)停止當前的DMA傳輸,未傳完的數據將等待硬盤(pán)下一次的DMA請求時(shí)再進(jìn)行傳輸。如果硬盤(pán)提出中止傳輸,FPGA將撤除FPGA至硬盤(pán)的DMA通道,同時(shí)向主機提出中止傳輸,撤除主機至FPGA的DMA通道,并計算該次所傳數據的CRC校驗。然后FPGA進(jìn)入等待狀態(tài),等待硬盤(pán)下一次的DMA請求。
圖3 PIO命令處理流程
如果主機提出中止傳輸,FPGA將撤除主機至FPGA的DMA通道,同時(shí)繼續向硬盤(pán)發(fā)送數據,直到將接收到主機的數據發(fā)送完畢,即緩沖區二空后,向硬盤(pán)提出中止傳輸,撤除FPGA至硬盤(pán)的DMA通道,并計算CRC校驗。然后FPGA進(jìn)入等待狀態(tài),等待硬盤(pán)下一次的DMA請求。
在等待狀態(tài)下,若FPGA接收到硬盤(pán)的中斷請求,則說(shuō)明該次命令的所有數據已經(jīng)傳完,命令結束。FPGA將命令執行結果讀入寄存器組二,向主機產(chǎn)生中斷請求,進(jìn)入空閑狀態(tài)。若接收到硬盤(pán)的DMA請求,則說(shuō)明硬盤(pán)還未接收到該次命令的所有數據,此時(shí)需要判斷主機是否已將所有數據發(fā)送完。如果主機并沒(méi)有將所有數據發(fā)送完,則再次建立FPGA兩側的DMA通道,開(kāi)始新一輪的DMA傳輸;如果主機已將所有數據發(fā)送完,則重新建立FPGA至硬盤(pán)的DMA通道,直到將緩沖區二中的數據發(fā)送完,并計算CRC校驗。
4 結束語(yǔ)
本文采用FPGA實(shí)現了兩套符合ATA-6規范的IDE接口,完成主機與硬盤(pán)之間數據的截獲、處理和轉發(fā)。經(jīng)測試,系統在DOS、Windows 98、Windows 2000、Windows XP及 Red Hat Linux 9.0操作系統環(huán)境下,使用希捷、邁拓、三星、西數等公司的多種型號硬盤(pán)均工作正常,支持PIO和Ultra DMA兩種數據傳輸模式。由于通過(guò)FPGA實(shí)現一個(gè)完整的IDE接口,若對系統稍加改動(dòng),如在數據處理單元中加入相應的文件系統,即可實(shí)現脫機讀寫(xiě)IDE硬盤(pán),用于數據采集的海量存儲等多種場(chǎng)合,使系統具有較好的通用性。
本文作者創(chuàng )新點(diǎn):作者針對硬盤(pán)數據易泄密及高速大容量數據采集困難等問(wèn)題,提出在主機和硬盤(pán)之間使用FPGA芯片構建一個(gè)雙向IDE硬盤(pán)通道,實(shí)現兩套符合ATA-6規范的IDE接口,FPGA對主機與硬盤(pán)間的數據流進(jìn)行處理及轉發(fā),以實(shí)現硬盤(pán)數據加密、數據高速采集存儲及脫機控制硬盤(pán)等操作。系統支持PIO和Ultra DMA兩種數據傳輸模式,對操作系統透明,較常見(jiàn)的單向IDE通道,該系統通用性強,有較好的推廣價(jià)值。本文側重于用FPGA實(shí)現IDE接口協(xié)議,對實(shí)現過(guò)程及方法做了詳細描述,對讀者有較高的參考實(shí)用價(jià)值。
參考文獻:
1 T13 Technical Committee. Information Technology-AT Attachment with Packed Interface-6 (ATA/ATAPI-6). [S] Revision 1e. 2001
2 Friedhelm Schmidt,精英科技譯,SCSI總線(xiàn)和IDE接口:協(xié)議、應用和編程(第二版),[M] 中國電力出版社,2001.3
3 Actel Corporation. Libero User’s Guide. 2004
4 Actel Corporation,Pro ASIC PLUS Data sheet, Version v3.5,2004.4
5 基于FPGA的高速連續數據采集系統的設計 [J] 黃新財 佃松宜 汪道輝 《微計算機信息》2005年第21卷第2期58頁(yè)
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論