SATA協議14種FIS介紹



FIS(Frame Information Structure)解析

FIS是一種用於Host和device之間信息傳輸的機制,每個FIS的格式都是固定的,並且對應唯一的ID,SATA Spec定義了14類FIS ID。



但是,實際上,我們用到主要是8類:

FIS Type

FIS IDDiscriptionSize
H2D 27hSend command to drive5 DWs
D2H34hResponds status to host5 DWs
DMA Activate39hActivate a DMA data transfer1 DW
DMA Setup41hStart a DMA data transfer7 DWs
PIO Setup5Fh

 Start a PIO transfer

PIO=Programmed Input/Output 

5 DWs
DATA46hData packet2049 DWs
SDBA1hResponds a command completion for NCQ command2 DWs
BIST58h SATA Built-In Self-Test3 DWs


(1) Register FIS-H2D(27h)

用來傳輸主機的Shadow Register(可以理解爲CPU的傳達室)的資料到設備,與ATA/ATAPI指令字和寄存器相容。 


當Device接收到一個有效的Register FIS - H2D,檢查C bit的內容,然後更新命令寄存器 / 控制寄存器中的內容中,

C bit爲‘1’,Device按照Command Register中的命令執行命令,

C bit爲‘0’,Device按照Control Register中的內容執行控制請求。 



(2) Register FIS-D2H(34h)

D2H的作用如下:

  • 從Device送往Host端,傳送裝置的狀態變化。

  • 當Device完成一個命令,向主機報告指令完成的狀態。

  • Device用於修改host中shadow block裏的command register和control register。



(3) SDB(Set Device Bits)(A1h)

SDB的作用是Device用來改寫host 的shadow register中的error或status的某些bits;

這些bits包括Error全部8 bits和Status中的6 bits,

SDB FIS不改變狀態寄存器中的bit7 BSY(Busy)、bit3 DRQ(Data Request)。



下表中的“i”表示host在收到該FIS以後,如果shadow status register中BSY和DRQ位都爲0時,host進入中斷等待狀態(實際上表明device進入中斷等待狀態)



(4) DMA Activate(39h)--Device to Host

DMA Active FIS的特性主要是:

  • Device發送該FIS同意主機以DMA方式向設備發送資料,

  • 是Device對主機DMA寫命令的一個迴應,

  • 當發送完FIS後,Device必須進入接收DMA資料接收狀態, 

  • 每發送一個DMA DATA FIS後,要再次收到DMA Activate FIS才能發送下一個DMA DATA FIS; 



(5) DMA Setup(41h)--Bidirectional

進行DMA操作的第一步,目的是爲了建立DMA操作參數。

發送方通過發送這個FIS,要求對方配置好DMA控制器,同時存儲空間必須按要求處於準備狀態。


     D bit爲‘0’,代表發送方傳送資料;

     D bit爲‘1’,代表接收方傳送資料, 傳輸時一方的D爲1,另一方的D爲0。

     DMA Transfer Count表示傳輸Bytes計數。



(6) PIO Setup(5Fh)--Device to Host

由設備發送給主機,告訴主機相關PIO操作參數,包括了在PIO傳輸前和傳輸後shadow register的內容。


  • 在PIO傳輸資料的過程中,Device必須先發送這個FIS給主機,表示Device準備好發送或接受數據。 

  • 與DMA傳輸一樣,每傳一個DATA FIS就要一個PIO SETUP FIS傳輸下一個DATA FIS; 



(7) DATA FIS(46h)--Bidirectional

DATA FIS比較簡單,就是用來傳輸資料,比如說對硬盤的讀寫操作,

資料包的長度是不定的,除去SOF、EOF、CRC和FIS類型等標誌外,最多2048個Dwords。 



(8) BIST Activate(58h)--Bidirectional

讓對方進入測試模式,是一個雙向可用的FIS,接收方以R_OK迴應,完成測試工作之後就進入BIST交換狀態了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章