簡介
在ATA標準中定義了近四十種IDE命令,其中十種為基本的(或叫強制性的),其他是可選的。1.部分基本IDE命令的功能
以下命令名後面括弧中數字為該命令的控制代碼。
①驅動器診斷(90H):該命令啟動驅動器內部的診斷程式。
②格式化磁軌(50H):該命令用來格式化一個磁軌。扇區數暫存器、柱面號暫存器、驅動器/磁頭暫存器必須設定成規定的值,
③扇區讀(20H允許重試,2lH禁止重試):使用該命令從磁碟讀取一個指定的扇區。在讀的過程中如果發生錯誤,接下來的處理則取決於是否允許重試。如果使用禁止重試命令(21H),則操作將被禁止,反之,驅動器將重讀出錯的扇區,重複的次數由製造商決定。
④扇區寫(30H允許重試,3lH禁止重試):該命令類似於讀命令,只是數據傳送的方向不同。
⑤扇區長讀(22H允許重試,23H禁止重試):與扇區讀命令不同點在於,讀時還包括扇區的ECC(ErrorCorrectionCode)位元組。
⑥扇區長寫(32H允許重試,33H禁止重試):與扇區寫命令的區別在於ECC位元組也要寫入。
⑦尋道(7XH):該命令使磁頭移動到地址暫存器指定的磁軌上。
⑧扇區校驗(40H允許重試,4lH禁止重試):與扇區讀命令相似,不傳送數據,只對讀出的數據進行校驗。
可選IDE命令功能
①DMA方式讀(C8H允許重試,C9H禁止重試):該命令與扇區讀類似,只是它使用DMA方式讀扇區緩衝區的內容。在執行該命令前,應初始化相應的DMA通道。②DMA方式寫(CAH允許重試,CBH禁止重試):該命令與扇區寫類似,只是向扇區緩衝區寫入數據時使用DMA方式。
③設定多扇區模式(C6H):用該命令設定多扇區操作時的扇區數。
④多扇區讀(C4H):它與扇區讀類似,但按塊讀取,一塊內包括多個扇區,只有當請求的多個扇區全部讀完後才產生中斷。
⑤多扇區寫(C5H):除數據傳送方向外,該命令的其他操作與多扇區讀命令相同。3.IDE命令的執行過程
讓驅動器執行IDE命令需要有一個過程。在發命令前先應做一些準備,即對有關暫存器進行設定,命令發出後,要讀取狀態暫存器,判斷規定的操作是否完成,有無錯誤,如有錯誤,還需作出相應的處理。ATA標準關於IDE命令的執行一共有五個協定。它們是PI協定針對PIO方式讀命令、PO協定針對PIO方式讀命令、ND協定針對沒有數據傳輸的命令、DM協定針對使用DMA數據傳輸的命令、VS協定商家確定的協定。與此相對應,ATA標準將IDE命令分成了五類。這裡僅以PI協定命令和PO協定命令為例說明IDE命令的執行過程。
(1)PI協定命令的執行過程
PI(PIOIn)協定是針對PIO方式讀命令的。PIO方式讀命令包括對扇區及緩衝區的一次或多次讀等多個命令,可將它們統稱為PI協定命令。按照協定,該類命令應該按下面的過程執行。首先,主機把執行命令過程中所需要的所有參數寫入地址暫存器(1F3H~1F6H)和特性暫存器(如果需要),然後把命令碼寫入命令暫存器,命令開始執行。這時驅動器設定狀態暫存器中的BSY信號,同時將磁碟上指定扇區的數據送入扇區緩衝區。當扇區緩衝區準備好,置位DRQ,清BSY,發中斷請求信號INTRQ。操作時序如圖10.19所示。
然後,主機開始讀取狀態暫存器,同時驅動器清除中斷請求信號INTRQ。如果狀態暫存器的DRQ位為1,主機就從扇區緩衝區讀取數據。數據讀完後,驅動器復位DRQ位。如果是多扇區讀(前面設定時,還要設定扇區數暫存器),此時驅動器就重新設定BSY位,準備讀下一個扇區,直到請求的扇區全部讀完。
在讀的過程中,如果發生了錯誤,驅動器仍然準備讀下一個扇區,同時設定狀態暫存器中的出錯位,讓主機決定是否繼續進行。
2.PO協定命令的執行過程
PO(PIOOut)協定是針對:PIO方式寫命令的。按照協定,該類命令應該按下面的過程執行。首先,主機把必要的參數寫入對應的地址暫存器,等待DRDY有效,然後將命令碼寫入命令暫存器,此時驅動器設定狀態暫存器的DRQ位,表示準備接收數據。主機通過數據暫存器將數據寫入扇區緩衝區,當扇區緩衝區填滿時,驅動器清除DRQ位,並置位BSY。驅動器開始將扇區緩衝區中的數據寫入磁碟。一旦寫盤結束,它會馬上清除BSY位,並發出中斷請求信號INTRQ。主機接收到中斷信號後,讀驅動器的狀態暫存器,同時將中斷信號清除。如果是寫一個扇區,則寫命令到此結束。如果是多扇區寫,此時驅動器會重新設定DRQ,開始處理下一個扇區。
從上面的PI協定命令和PO協定命令的執行過程可以看到,對磁碟介質的讀或寫是由驅動器具體完成的,
而主機發出的扇區讀/寫命令只是針對扇區緩衝區的。這一點也適用於DMA協定命令。
下面的TurboC程式是用PIO方式讀取一個扇區的內容。該例有助於理解PI協定命令的執行過程。