1. 程式人生 > >SATA協議基本FIS Type結構介紹

SATA協議基本FIS Type結構介紹

FIS(Frame Information Structure)解析

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

 

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

FIS Type

FIS ID Discription Size
H2D  27h Send command to drive 5 DWs
D2H 34h Responds status to host 5 DWs
DMA Activate 39h Activate a DMA data transfer 1 DW
DMA Setup 41h Start a DMA data transfer 7 DWs
PIO Setup 5Fh

 Start a PIO transfer

PIO=Programmed Input/Output 

5 DWs
DATA 46h Data packet 2049 DWs
SDB A1h Responds a command completion for NCQ command 2 DWs
BIST 58h  SATA Built-In Self-Test 3 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交換狀態了。