基于單片機(jī)的IDE硬盤控制的研究與設(shè)計(jì)
1.概述
本文引用地址:http://m.butianyuan.cn/article/171744.htm近年來(lái)作為數(shù)據(jù)存儲(chǔ)介質(zhì)的硬盤,其接口智能化程度越來(lái)越高,容量不斷增大,反而體積在變小,并可脫離系統(tǒng)主機(jī),控制起來(lái)比較方便,已經(jīng)受到人們的普遍重視?,F(xiàn)今,在許多以單片機(jī)為核心的持續(xù)數(shù)據(jù)采集存儲(chǔ)應(yīng)用系統(tǒng)中,數(shù)據(jù)存儲(chǔ)是一項(xiàng)關(guān)鍵技術(shù),因此,若能將脫機(jī)高速大容量硬盤應(yīng)用到此類系統(tǒng)中,則可提高讀寫速度、降低單位成本、具有很大優(yōu)勢(shì)。但是,硬盤讀寫是一個(gè)復(fù)雜的過(guò)程,它涉及到硬盤的接口方式、尋址方式、控制寄存器模型等。這樣以來(lái),我們就急需找到一種方案,占用較少的單片機(jī)資源,卻能比較方便的控制硬盤.本文通過(guò)8255[1]對(duì)單片機(jī)進(jìn)行I/O擴(kuò)展,驅(qū)動(dòng)IDE硬盤,成功的解決了上述問(wèn)題,從而使硬盤可以應(yīng)用到許多智能系統(tǒng)中。
2. 系統(tǒng)硬件結(jié)構(gòu)
如圖1所示,本系統(tǒng)由單片機(jī)(W78E52)、地址鎖存器(74HC373)、8255、施密特反向器(74HC04)、IDE硬盤驅(qū)動(dòng)器組成。單片機(jī)通過(guò)8位數(shù)據(jù)總線、A0、A1、CS、WR、RD與8255相連。單片機(jī)將8255作為I/O口擴(kuò)展,8255的端口A和端口B與IDE接口的16位數(shù)據(jù)線相連;端口C產(chǎn)生IDE總線的控制信號(hào)。IDE接口的DASP腳所接的LED作為指示燈,類似PC機(jī),當(dāng)硬盤忙時(shí),指示燈亮。
IDE[2][5]接口是將ST506控制器集成到驅(qū)動(dòng)器中,從處理器角度看,IDE接口可被描述成一系列I/O端口----一組8/16位的I/O端口,兩根片選線(CS1FX和CS3FX),讀寫控制線(RD和WR),三根地址線(DA0,DA1,DA2)和一個(gè)中斷請(qǐng)求(INTRQ)以及用來(lái)設(shè)置數(shù)據(jù)傳輸模式的控制線。IDE接口在硬盤的存取采用16位數(shù)據(jù)總線方式。在ATA[3]標(biāo)準(zhǔn)中,IDE接口對(duì)硬盤的輸入輸出操作均是通過(guò)對(duì)相應(yīng)寄存器的讀寫來(lái)實(shí)現(xiàn)的,這些端口寄存器統(tǒng)稱為命令塊寄存器,是由片選線和地址線進(jìn)行統(tǒng)一編址的,其功能如表1所示:
IDE接口的硬盤驅(qū)動(dòng)器提供兩種數(shù)據(jù)傳輸模式:PIO模式和DMA模式。由于采用PIO模式控制相對(duì)容易,并且提供了一種可編程控制輸入/輸出的快速傳輸方法,所以本系統(tǒng)使用PIO模式。該模式采用高速的數(shù)據(jù)塊I/O,以扇區(qū)為單位,用中斷請(qǐng)求方式與CPU進(jìn)行批量數(shù)據(jù)交換。通常情況下,在扇區(qū)讀寫操作時(shí),每次按16位長(zhǎng)度通過(guò)內(nèi)部的高速PIO數(shù)據(jù)寄存器進(jìn)行傳輸,每傳輸一扇區(qū)數(shù)據(jù)就產(chǎn)生一次中斷。
系統(tǒng)不能直接用8255的輸出口控制IDE接口,是由于8255有一個(gè)不良特性:當(dāng)切換芯片I/O口的輸入/輸出模式時(shí),將重新復(fù)位所有的引腳狀態(tài),當(dāng)然也包括所有的輸出信號(hào)。這對(duì)于作為數(shù)據(jù)總線的信號(hào)影響不大,但對(duì)控制信號(hào)卻有不小的沖擊,尤其是它會(huì)將IDE接口的復(fù)位線使能(IDE的控制引腳都是低電平有效),這樣就不能正常控制硬盤。因此,本系統(tǒng)通過(guò)74HC04將8255的控制端口接到IDE接口上。此時(shí),當(dāng)8255改變I/O口的工作模式時(shí),所有的輸出全部復(fù)位為“0”,經(jīng)74HC04后所有的控制信號(hào)被拉成高電平,IDE驅(qū)動(dòng)器就不會(huì)處于使能狀態(tài)。
3. 系統(tǒng)軟件設(shè)計(jì)
本系統(tǒng)的軟件設(shè)計(jì)采用程序結(jié)構(gòu)化和功能模塊化的設(shè)計(jì)方法,以便于此設(shè)計(jì)具有良好的可移植性。系統(tǒng)軟件包括主程序和任務(wù)子程序。任務(wù)子程序由讀扇區(qū) (Read_sector),寫扇區(qū) (Write_sector),錯(cuò)誤處理 (Process_error),邏輯塊地址寫(wr_lba),IDE讀 (ide_rd),IDE寫 (ide_wr)等組成。主程序流程圖如圖2所示:
單片機(jī)上電后對(duì)8255以及IDE驅(qū)動(dòng)器進(jìn)行初始化,并不停查詢鍵盤,以判斷是否有任務(wù)到達(dá),如有任務(wù),則根據(jù)命令進(jìn)入到相應(yīng)任務(wù)子程序。在進(jìn)入任務(wù)子程序之前,必須先檢測(cè)IDE驅(qū)動(dòng)器的狀態(tài),IDE驅(qū)動(dòng)器的狀態(tài)寄存器如表2所示:
評(píng)論