ata接口寄存器描述
3、ata接口的三種資料傳輸方式
(1)pio(programmable input-output)傳輸,可以分為pio寄存器傳輸和pio資料傳輸。pio寄存器傳輸主要用于對ata裝置中的寄存器進行讀寫。讀寫的資料位數為8位dd[7:0]。ata主機控制器根據所要讀寫的寄存器位址設定cs0_、cs1_、da[2:0]位址信号,同時将diow_或dior_設為有效,ata主機控制器或ata裝置驅動資料總線釋放資料。當diow_或dior_撤銷時,ata主機控制器或ata裝置從資料總線上讀取資料。對于pio資料傳輸,所讀寫的位址為資料端口,讀寫資料為16位。
(2)mdma(multiword dma)傳輸,用于資料傳輸。ata主機控制器向ata裝置下達mdma傳輸指令後,等待裝置向主機發送dmarq資料傳輸請求信号。當主機收到dmarq信号後,向裝置發送dmack_響應信号。mdma資料傳輸過程與pio方式大緻相同,也是通過diow_或dior_的周期變化來控制資料的傳輸。在資料傳輸過程中,dmarq和dmack_握手信号一直保持有效。
(3)udma(ultra dma),也是用于資料傳輸。這種傳輸方式的傳輸速度比mdma要快,ata/atapi-5協定中所定義的udma傳輸方式最高資料傳輸速率是66mb/s。udma對資料傳輸的控制信号重新進行了定義。另外,udma還引入了crc資料校驗機制,保證了資料傳輸過程的正确性,但其傳輸過程較為複雜。
4、ata接口寄存器的定義
ata主機與裝置的通信是通過主機對ata接口上的寄存器的讀寫實作的,而這些接口寄存器由主機發送的位址信号cs1_、cs0_、da2、da1、da0來進行尋址。除了在dma傳輸模式下,cs1_和cs0_全有效或全無效都是不可用的位址,在這種情況下,資料線應該在釋放狀态下(即資料總線沒有驅動源)。當cs0_無效,cs1_有效時,da[2:0]隻有在值為06h和07h時位址才為有效,在其他的無效位址狀态下,裝置會使資料總線處于高阻态。
ata接口寄存器可分為指令塊寄存器和控制塊寄存器。
(1)指令塊寄存器是主機用來向裝置傳輸指令或從裝置讀取狀态的,這組寄存器包括:
柱面号高(cylinder high)8位寄存器
柱面号低(cylinder low)8位寄存器
裝置/磁頭(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-被置為有效
指令寄存器用于發送指令到存儲體或将存儲體的狀态發送給主機;該寄存器包好高位的lba,中位lba,裝置寄存器,扇區數,指令寄存器,狀态寄存器,特性寄存器,錯誤寄存器,和資料寄存器。
控制寄存器用于控制和傳遞交替狀态。該寄存器包含裝置控制和交替狀态寄存器;
每個寄存器的包含如下内容:
+++位址:
寄存器的cs和da位址;
+++方向:
指明主機對寄存器是讀還是寫,隻讀,或隻寫;
+++存取限制:
指明什麼時候才可以存取;
+++作用:
指明存取該寄存器的作用;
+++功能描述:
描述寄存器的功能;
+++區/位描述:
描述寄存器包含的内容;
位址:
即:cs(1:0)=10;da(2:0)=110;
方向:
這是隻讀寄存器,若位址被主機寫,那麼存儲體控制寄存器為被寫;
存取限制:
一旦bsy被設為1,其他的位都不能用,當存儲體處于休眠狀态,該寄存器中的值無效;
作用:
讀該寄存器不會清除一個終端等待;
功能描述:
該寄存器包含和狀态寄存器同樣的内容。
即:cs(1:0)=01;da(2:0)=111;
隻寫寄存器,若位址被主機寫,表明狀态寄存器處于被讀的狀态;
除了device reset指令,其他的指令隻有在bsy和drq都被清零并且dmack-沒有被設定為有效的情況下寫該寄存器;若在bsy或drq被設為1時寫該寄存器,那麼指令寄存器寫的結果就是不确定的,除了device
reset指令。一個處于休眠模式的存儲體,若執行packet
指令特性集,除了device reset指令,其他的指令寫的寄存器的值都會被忽略。
當該指令寄存器被寫完後,就開始執行指令,當這個寄存器被寫,指令子產品寄存器的内容就變成了這個指令的參數。寫這個寄存器,會清除任何等待的中斷條件;
該寄存器包含:發送給存儲體的指令碼;指令寫到該指令寄存器後即刻執行指令,可執行的指令和買條指令的代碼都總結在v2的附錄中的表中。
區/位描述:
當dmack-被設為有效,cs(1)-和cs(0)-都被設為無效,傳遞16位寬度的資料
即:cs(1:0)=00;
該端口是一個讀/寫端口;
該端口隻用于dma資料傳輸,當dmack-和dmarq都設為有效時;
dma輸出資料傳輸通過一系列的寫這個端口來執行,每個寫傳輸的資料都是在前一個寫資料之後。dma輸入資料的傳輸被一系列的讀端口執行;每個讀傳輸的資料都是在前一個讀之後,每次在讀dma輸入資料和寫dma輸出資料的結果都是無效的;
資料端口是16位寬度;
區或位描述:
即cs(1:0)=01;da(2:0)=000;
讀/寫寄存器
存取的限制:
該寄存器隻用于pio資料傳輸,當drq被設為1,并且dmack-沒有被設為有效時;該寄存器的内容在休眠模式下無效;
pio輸出資料傳輸是通過一系列的寫寄存器來完成的,每次寫傳輸資料在上次之後;pio輸入資料傳輸是通過一系列的讀該寄存器來完成,每次讀傳輸資料在上次寫之後。pio輸入期間的讀或pio輸出期間的寫的結果都是無效的。
該資料寄存器的寬度是16位;一個cfa存儲體的pio資料傳輸模式的資料寬度是8位,此時隻用到了dd7~dd0.
即:cs(1:0)=01;da(2:0)=110;
隻有在bsy和drq被清零,并且dmack-被設為無效是可以寫的。它的内容隻有在bsy被清0時才有效。若bsy或drq被設為1的時候,寫該寄存器,其結果将是無效的。若存儲體在不執行packet指令特性指令設定,在休眠模式下,這個寄存器的内容無效,而在執行packet指令特性指令設定,在休眠模式下,這個寄存器的内容有效。
當這個寄存器被主機或存儲體的信号寫的時候,dev變成有效,其他位變成指令的參數,當指令寄存器在被寫的時候。
這個寄存器的第四位選擇存儲體,其他為示指令而定;
區/位描述
------obsolete---表示這些位不用了,一些主機會設定這些位位1,但是存儲體會忽略這些位;
------#表示這些位視指令而定;
——dev,存儲體選擇,為0選存儲體0,為1選存儲體1;
5.7 存儲體控制寄存器
即:cs(1:0)=10,da(2:0)=110;
這是個隻寫寄存器,若位址被主機讀,那麼交替狀态寄存器在被主機讀;
隻有在dmack-沒有設為有效時,寄存器才可以被寫;
在被寫的時候,這個寄存器的值就會起作用
寄存器允許主機軟複位連接配接的存儲體,并且可以通過選擇的存儲體,使得intrq信号有效或無效;當裝置控制寄存器被寫的時候兩個存儲體都要響不管哪個存儲體被選擇。當srst被設定為1兩個存儲體都要執行軟複位協定。存儲體在休眠模式應該響應srst的信号。
——hob(指令位元組的高位)在48位尋址特性設定中定義,每次寫指令寄存器都要清除hob位位0;
——bit(6:3),保留;
——srst是軟體複位位(參考6.2);
——nien是存儲體使主機intrq信号有效的使能。當被選擇的存儲體的nien位被清零,那麼應該通過一個三态緩沖使intrq有效,并且根據存儲體适當地啟動有效或無效。當被選擇的存儲體的nien位被置為1,存儲體應該釋放intrq信号;
——bit0應該被清零
即:cs(1:0)=01;da(2:0)=001;
這是個隻讀寄存器;若主機在寫位址那麼特性寄存器在被寫入。
當bsy和drq被清零,并且err或
se被置為1時,寄存器的内容是有效的。
在上電複位、執行完硬體、軟體複位或者是執行完execute device diagnostics或device reset指令後,這個寄存器的内容應該是有效的。
當存儲體在休眠狀态時該寄存器的值無效。
無
在執行完所有的指令除了execute device diagnostics或device reset指令後,若狀态寄存器的err位被置為1,該寄存器的内容将會有效。
在上電,硬複位,軟複位後,或者執行完execute device diagnostics或device reset指令,該寄存器包含一個診斷碼。
注:
——第二位-abrt被設為1表明指令執行失敗,因為指令碼或者指令參數不合法,不支援該指令,該指令的前提條件不滿足,或出現其他故障;
——#,該位由指令決定;
隻寫寄存器;若位址被主機讀,那麼錯誤寄存器在被主機讀;
當bsy和drq等于0且dmack-被設為無效的時候,應該寫該寄存器;若bsy,或drq被設為0,那麼寫該寄存器的結果是無效的。
若指令寄存器被寫,那麼這個寄存器的内容就變成指令參數;
這個寄存器的值決定于指令的類型。
5.10
lba高寄存器/位元組記數高位寄存器
即:cs(1:0)=01;da(2:0)=101;
讀/寫寄存器;
當bsy和drq被清0,并且dmack-無效,寄存器可寫。當bsy和drq被清0,寄存器的值有效。當bsy或drq被置1時,寫寄存器,結果是無法确定的。在休眠模式時,寄存器的值無效。
指令寄存器被寫入,寄存器的值為指令參數。
寄存器的值決定于指令的類型(參考第6章)。
對于沒有執行包指令特性設定的存儲體,寄存器為lba高寄存器。
對于有執行包指令特性值設定的存儲體,寄存器為位元組記數高位寄存器。
5.11
lba低寄存器
5.12
lba中寄存器/位元組記數低位寄存器
對于沒有執行包指令特性設定的存儲體,寄存器為lba中寄存器。
對于有執行包指令特性值設定的存儲體,寄存器為位元組記數低位寄存器。
5.13 扇區計數/中斷響應寄存器
寄存器的值依賴于指令類型(參考第6章)。
對于沒有執行包指令特性設定的存儲體,寄存器為扇區計數。
對于有執行包指令特性值設定的存儲體,寄存器為中斷響應寄存器。
5.14 狀态寄存器---指令寄存器(複用)
隻讀。如果寫入位址,則為指令寄存器
如果bsy置1,寄存器的值将會被忽略,除位bsy外。在休眠模式時,寄存器的值無效。
當中斷挂起後讀這個寄存器會清0中斷挂起位(參考第8章)。
當一個中斷發生了,在主機能夠識别信号intrq之前主機不能讀狀态寄存器,否則會清除挂起位,無法識别中斷請求類型。
這個寄存器包含了裝置狀态,寄存器值會被更新反映目前裝置的狀态。
--bsy(busy)
bsy為1表示存儲體忙。在主機寫指令寄存器後,在指令完成前或是裝置因覆寫指令而執行總線釋放,存儲體會設定bsy=1或drq=1。