天天看點

SATA協定14種FIS介紹



FIS(Frame Information Structure)解析

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

SATA協定14種FIS介紹

但是,實際上,我們用到主要是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中的内容執行控制請求。 

SATA協定14種FIS介紹

(2) Register FIS-D2H(34h)

D2H的作用如下:

  • 從Device送往Host端,傳送裝置的狀态變化。
  • 當Device完成一個指令,向主機報告指令完成的狀态。
  • Device用于修改host中shadow block裡的command register和control register。
SATA協定14種FIS介紹

(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)。

SATA協定14種FIS介紹

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

SATA協定14種FIS介紹

(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; 
SATA協定14種FIS介紹

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

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

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

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

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

     DMA Transfer Count表示傳輸Bytes計數。

SATA協定14種FIS介紹

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

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

  • 在PIO傳輸資料的過程中,Device必須先發送這個FIS給主機,表示Device準備好發送或接受資料。 
  • 與DMA傳輸一樣,每傳一個DATA FIS就要一個PIO SETUP FIS傳輸下一個DATA FIS; 
SATA協定14種FIS介紹

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

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

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

SATA協定14種FIS介紹

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

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

SATA協定14種FIS介紹

繼續閱讀