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交换状态了。

猜你喜欢

转载自blog.csdn.net/qq_40155300/article/details/82625009