閱讀741 返回首頁    go 阿裏雲 go 技術社區[雲棲]


ATA接口寄存器描述

ATA接口寄存器描述

 

3ATA接口的三種數據傳輸方式

 

1PIOProgrammable Input-Output)傳輸,可以分為PIO寄存器傳輸和PIO數據傳輸。PIO寄存器傳輸主要用於對ATA設備中的寄存器進行讀寫。讀寫的數據位數為8DD[7:0]ATA主機控製器根據所要讀寫的寄存器地址設置CS0_CS1_DA[2:0]地址信號,同時將DIOW_DIOR_設為有效,ATA主機控製器或ATA設備驅動數據總線釋放數據。當DIOW_DIOR_撤銷時,ATA主機控製器或ATA設備從數據總線上讀取數據。對於PIO數據傳輸,所讀寫的地址為數據端口,讀寫數據為16位。

2MDMAMultiword DMA傳輸,用於數據傳輸。ATA主機控製器向ATA設備下達MDMA傳輸命令後,等待設備向主機發送DMARQ數據傳輸請求信號。當主機收到DMARQ信號後,向設備發送DMACK_響應信號。MDMA數據傳輸過程與PIO方式大致相同,也是通過DIOW_DIOR_的周期變化來控製數據的傳輸。在數據傳輸過程中,DMARQDMACK_握手信號一直保持有效。

3UDMAUltra DMA),也是用於數據傳輸。這種傳輸方式的傳輸速度比MDMA要快,ATA/ATAPI-5協議中所定義的UDMA傳輸方式最高數據傳輸速率是66MB/sUDMA對數據傳輸的控製信號重新進行了定義。另外,UDMA還引入了CRC數據校驗機製,保證了數據傳輸過程的正確性,但其傳輸過程較為複雜。

 

4ATA接口寄存器的定義

 

ATA主機與設備的通信是通過主機對ATA接口上的寄存器的讀寫實現的,而這些接口寄存器由主機發送的地址信號CS1_CS0_DA2DA1DA0來進行尋址。除了在DMA傳輸模式下,CS1_CS0_全有效或全無效都是不可用的地址,在這種情況下,數據線應該在釋放狀態下(即數據總線沒有驅動源)。當CS0_無效,CS1_有效時,DA[2:0]隻有在值為06H07H時地址才為有效,在其他的無效地址狀態下,設備會使數據總線處於高阻態。

ATA接口寄存器可分為命令塊寄存器和控製塊寄存器。

1)命令塊寄存器是主機用來向設備傳輸命令或從設備讀取狀態的,這組寄存器包括:

柱麵號高(Cylinder High8位寄存器

柱麵號低(Cylinder Low8位寄存器

設備/磁頭(Device/Head)寄存器

扇區數(Sector Count)寄存器

扇區號(Sector Number)寄存器

命令(Command)寄存器

狀態(Status)寄存器

特征(Features)寄存器

錯誤(Error)寄存器

數據(Data)寄存器。

2)控製塊寄存器是用來控製設備和替換狀態,這組寄存器包括:

設備控製(Device Control)寄存器

替換狀態(Alternate Status)寄存器

驅動器地址(Drive Address)寄存器

 

存儲體尋址約束

以下是存儲體開始反映命令的步驟:

1) 存儲體不處於休眠狀態;

2) 若存儲體處於休眠狀態,那麼,即使DMACK-此時變為有效,存儲體將忽略DIOW-/DIOR-變成有效。若存儲體不支持包命令特性集,那麼存儲針對命令的反映在表41中,若執行包命令特性集,反映在表42

 

存儲體被選擇意味著DEV位對應的邏輯設備號碼。

在設備被選擇和DMACK-被置為有效,時隻用於Multiword DMA,不能用於超DMA;

注:DIOX-欄除外,A=置為有效,N=置為無效,Z=釋放,X=不在乎;

DIOX-欄中:R=DIOR-被置為有效,W=DIOW-被置為有效,X=要麼DIOR-要麼DIOW-被置為有效

 

 

 

 

 

 

5     I/O寄存器描述

5.1 概述

命令寄存器用於發送命令到存儲體或將存儲體的狀態發送給主機;該寄存器包好高位的LBA,中位LBA,設備寄存器,扇區數,命令寄存器,狀態寄存器,特性寄存器,錯誤寄存器,和數據寄存器。

控製寄存器用於控製和傳遞交替狀態。該寄存器包含設備控製和交替狀態寄存器;

每個寄存器的包含如下內容:

+++地址:           寄存器的CSDA地址;

+++方向:           指明主機對寄存器是讀還是寫,隻讀,或隻寫;

+++存取約束:    指明什麼時候才可以存取;

+++作用:           指明存取該寄存器的作用;

+++功能描述:    描述寄存器的功能;

+++/位描述:   描述寄存器包含的內容

 

5.2 交替狀態寄存器():--與設備控製寄存器複用(寫)

地址:

即:CS10=10DA20=110

方向:

這是隻讀寄存器,若地址被主機寫,那麼存儲體控製寄存器為被寫

存取約束:

一旦BSY被設為1,其他的位都不能用,當存儲體處於休眠狀態,該寄存器中的值無效;

作用:

讀該寄存器不會清除一個終端等待

功能描述:

該寄存器包含和狀態寄存器同樣的內容

5.3 命令寄存器(寫):--與狀態寄存器複用(讀)

地址:

即:CS10=01DA20=111

方向:

隻寫寄存器,若地址被主機寫,表明狀態寄存器處於被讀的狀態;

存取約束:

除了DEVICE RESET命令,其他的命令隻有在BSYDRQ都被清零並且DMACK-沒有被設置為有效的情況下該寄存器;若在BSYDRQ被設為1時寫該寄存器,那麼命令寄存器寫的結果就是不確定的,除了DEVICE RESET命令。一個處於休眠模式的存儲體,若執行PACKET 命令特性集,除了DEVICE RESET命令,其他的命令寫的寄存器的值都會被忽略。

作用:

當該命令寄存器被寫完後,就開始執行命令,當這個寄存器被寫,命令模塊寄存器的內容就變成了這個命令的參數。寫這個寄存器,會清除任何等待的中斷條件;

功能描述:

該寄存器包含:發送給存儲體的命令碼;命令寫到該命令寄存器後即刻執行命令,可執行的命令和買條命令的代碼都總結在V2的附錄中的表中。

/位描述:

 

5.4數據端口

地址:

DMACK-被設為有效,CS1-CS0-都被設為無效,傳遞16位寬度的數據

即:CS10=00

方向:

該端口是一個讀/寫端口;

存取約束:

該端口隻用於DMA數據傳輸,當DMACK-DMARQ都設為有效時;

作用:

DMA輸出數據傳輸通過一係列的寫這個端口來執行,每個寫傳輸的數據都是在前一個寫數據之後。DMA輸入數據的傳輸被一係列的讀端口執行;每個讀傳輸的數據都是在前一個讀之後,每次在讀DMA輸入數據和寫DMA輸出數據的結果都是無效的;

功能描述:

數據端口是16位寬度;

區或位描述:

 

5.5 數據寄存器:

地址:

CS10=01DA20=000

方向:

/寫寄存器

存取的約束:

該寄存器隻用於PIO數據傳輸,當DRQ被設為1,並且DMACK-沒有被設為有效時;該寄存器的內容在休眠模式下無效;

作用:

PIO輸出數據傳輸是通過一係列的寫寄存器來完成的,每次寫傳輸數據在上次之後;PIO輸入數據傳輸是通過一係列的讀該寄存器來完成,每次讀傳輸數據在上次寫之後。PIO輸入期間的讀或PIO輸出期間的寫的結果都是無效的。

功能描述:

該數據寄存器的寬度是16位;一個CFA存儲體的PIO數據傳輸模式的數據寬度是8位,此時隻用到了DD7~DD0.

/位描述:

5.6設備寄存器

地址:

即:CS10=01DA20=110

方向:

/寫寄存器

存取約束:

隻有在BSYDRQ被清零,並且DMACK-被設為無效是可以寫的。它的內容隻有在BSY被清0時才有效。若BSYDRQ被設為1的時候,寫該寄存器,其結果將是無效的。若存儲體在不執行PACKET命令特性命令設置,在休眠模式下,這個寄存器的內容無效,而在執行PACKET命令特性命令設置,在休眠模式下,這個寄存器的內容有效。

作用:

當這個寄存器被主機或存儲體的信號寫的時候,DEV變成有效,其他位變成命令的參數,當命令寄存器在被寫的時候。

這個寄存器的第四位選擇存儲體,其他為示命令而定;

/位描述

------Obsolete---表示這些位不用了,一些主機會設置這些位位1,但是存儲體會忽略這些位;

------#表示這些位視命令而定

——DEV,存儲體選擇,0選存儲體0,為1選存儲體1

 

5.7 存儲體控製寄存器

地址:

即:CS10=10DA20=110

方向:

這是個隻寫寄存器,若地址被主機讀,那麼交替狀態寄存器在被主機讀;

存取約束:

隻有在DMACK-沒有設為有效時,寄存器才可以被寫;

作用:

在被寫的時候,這個寄存器的值就會起作用

功能描述:

寄存器允許主機軟複位連接的存儲體,並且可以通過選擇的存儲體,使得INTRQ信號有效或無效;當設備控製寄存器被寫的時候兩個存儲體都要響不管哪個存儲體被選擇。當SRST被設置為1兩個存儲體都要執行軟複位協議。存儲體在休眠模式應該響應SRST的信號。

/位描述

——HOB命令字節的高位)在48位尋址特性設置中定義,每次寫命令寄存器都要清除HOB位位0

——BIT63),保留;

——SRST是軟件複位位(參考6.2);

——nIEN存儲體使主機INTRQ信號有效的使能。當被選擇的存儲體的nIEN位被清零,那麼應該通過一個三態緩衝使INTRQ有效,並且根據存儲體適當地啟動有效或無效。當被選擇的存儲體的nIEN位被置為1,存儲體應該釋放INTRQ信號;

——BIT0應該被清零

 

5.8 錯誤寄存器

地址:

即:CS10=01DA20=001

方向:

這是個隻讀寄存器;若主機在寫地址那麼特性寄存器在被寫入。

存取約束:

BSYDRQ被清零,並且ERR SE被置為1,寄存器的內容是有效的。

在上電複位、執行完硬件、軟件複位或者是執行完EXECUTE DEVICE DIAGNOSTICSDEVICE RESET命令後,這個寄存器的內容應該是有效的

當存儲體在休眠狀態時該寄存器的值無效

作用:

功能描述:

在執行完所有的命令除了EXECUTE DEVICE DIAGNOSTICSDEVICE RESET命令後,若狀態寄存器的ERR位被置為1,該寄存器的內容將會有效

在上電,硬複位,軟複位後,或者執行完EXECUTE DEVICE DIAGNOSTICSDEVICE RESET命令,該寄存器包含一個診斷碼。

/位描述:

注:

——第二位-ABRT被設為1表明命令執行失敗,因為命令碼或者命令參數不合法,不支持該命令,該命令的前提條件不滿足,或出現其他故障;

——#,該位由命令決定;

5.9 特性命令寄存器--錯誤寄存器

地址:

即:CS10=01DA20=001

方向:

隻寫寄存器;若地址被主機讀,那麼錯誤寄存器在被主機讀;

存取約束:

BSYDRQ等於0DMACK-被設為無效的時候,應該寫該寄存器;若BSY,DRQ被設為0,那麼寫該寄存器的結果是無效的。

作用:

若命令寄存器被寫,那麼這個寄存器的內容就變成命令參數;

功能描述:

這個寄存器的值決定於命令的類型

 

5.10 LBA寄存器/字節記數高位寄存器

即:CS10=01DA20=101

方向:

/寫寄存器;

存取約束:

BSYDRQ被清0,並且DMACK-無效,寄存器可寫。當BSYDRQ被清0,寄存器的值有效。當BSYDRQ被置1時,寫寄存器,結果是無法確定的。在休眠模式時,寄存器的值無效。

作用:

命令寄存器被寫入,寄存器的值為命令參數。

功能描述:

寄存器的值決定於命令的類型(參考第6章)。

對於沒有執行包命令特性設置的存儲體,寄存器為LBA高寄存器。

對於有執行包命令特性值設置的存儲體,寄存器為字節記數高位寄存器。

 

5.11 LBA寄存器

 

方向:

/寫寄存器;

存取約束:

BSYDRQ被清0,並且DMACK-無效,寄存器可寫。當BSYDRQ被清0,寄存器的值有效。當BSYDRQ被置1時,寫寄存器,結果是無法確定的。在休眠模式時,寄存器的值無效。

作用:

命令寄存器被寫入,寄存器的值為命令參數。

功能描述:

寄存器的值決定於命令的類型(參考第6章)。

 

5.12 LBA寄存器/字節記數低位寄存器

方向:

/寫寄存器;

存取約束:

BSYDRQ被清0,並且DMACK-無效,寄存器可寫。當BSYDRQ被清0,寄存器的值有效。當BSYDRQ被置1時,寫寄存器,結果是無法確定的。在休眠模式時,寄存器的值無效。

作用:

命令寄存器被寫入,寄存器的值為命令參數。

功能描述:

寄存器的值決定於命令的類型(參考第6章)。

對於沒有執行包命令特性設置的存儲體,寄存器為LBA中寄存器。

對於有執行包命令特性值設置的存儲體,寄存器為字節記數低位寄存器。

 

5.13 扇區計數/中斷響應寄存器

方向:

/寫寄存器;

存取約束:

BSYDRQ被清0,並且DMACK-無效,寄存器可寫。當BSYDRQ被清0,寄存器的值有效。當BSYDRQ被置1時,寫寄存器,結果是無法確定的。在休眠模式時,寄存器的值無效。

作用:

命令寄存器被寫入,寄存器的值為命令參數。

功能描述:

寄存器的值依賴於命令類型(參考第6章)。

對於沒有執行包命令特性設置的存儲體,寄存器為扇區計數

對於有執行包命令特性值設置的存儲體,寄存器為中斷響應寄存器

 

5.14 狀態寄存器---命令寄存器(複用)

方向:

隻讀。如果寫入地址,則為命令寄存器

存取約束:

如果BSY1,寄存器的值將會被忽略,除位BSY外。在休眠模式時,寄存器的值無效。

作用:

 

當中斷掛起後讀這個寄存器會清0中斷掛起位(參考第8章)。

當一個中斷發生了,在主機能夠識別信號INTRQ之前主機不能讀狀態寄存器,否則會清除掛起位,無法識別中斷請求類型。

功能描述:

這個寄存器包含了設備狀態,寄存器值會被更新反映當前設備的狀態。

/位描述:

--BSYBusy

BSY1表示存儲體忙。在主機寫命令寄存器後,在命令完成前或是設備因覆蓋命令而執行總線釋放,存儲體會設置BSY=1DRQ=1

 

最後更新:2017-04-03 07:57:06

  上一篇:go Linux 軟連接與硬連接
  下一篇:go RESTful API 設計指南