1 Register - Host to Device
描述:将映像寄存器内容由主机发送至设备,用于发送命令;
发送:
�初始化:c="1"时,写命令寄存器;c="0"时,写设备控制寄存器;
�写完命令寄存器后 400ns 内,BSY 置位;若写完设备控制寄存器并将 SRST 由“0”
置"1",则在 400ns 内将 BSY 置位;
�状态寄存器中 BSY="1"或 DRQ="1"时,主机禁止写 Feature(7:0)、Count(7:0)、
LBA(23:0)、Device Register,此时任意写 DeviceRegister 的操作(除设备复位外)
会被忽略;
接收:
�设备刷新命令、控制块寄存器,然后执行新命令/新控制(以寄存器 c 为依据)的
请求;
�此 FIS 只在状态改变时发送;
2 Register - Device to Host
描述:将映像寄存器内容由设备发送至主机,用于指明命令完成的状态或改变主机适配器映
像寄存器内容;
发送:
�通常命令完成时发送;
�当 BSY="1"或 DRQ="1"时,此 FIS 只能用于请求总线释放命令,将状态寄存器中
的 SERV 置位;当 BSY="0"且 DRQ="0"时,用 Set Device Bit FIS 将 SERV 置位;
� SERV 随此 FIS 写至映像寄存器,准确反映等待服务请求的状态;
接收:
�接收到的寄存器内容传递至主机适配器的映像寄存器;
� BSY=0 且 DRQ=0 时,主机适配器忽略此 FIS 内容,不更新映像寄存器内容;
3 Set Device Bits - Device to Host
描述:设备用来载入设备专有的存取的映像寄存器区块位;这些区块位是:8bit 的 Error 和
6bit 的 Status(Status(6:4)&Status(2:0));
此 FIS 包含 1bit 控制信号,使主机适配器在 BSY="0"且 DRQ="0"时产生中断;
发送:
�设备发送此 FIS 以改变 Error/Status Register 中的值;
�请求总线释放命令服务时,用此 FIS 置位 SERV(此时中断位 I="1");
接收:
�主机适配器接到此信号时将 Error、Status(6:4)、Status(2:0)载入;
� BSY、DRQ 值应不变;
�若中断位 I="1",BSY="0"且 DRQ="0",则主机适配器进入中断等待状态;
4 DMA Activate - Device to Host
描述:设备用来通知主机开始 DMA 数据发送;
主机为完成所有数据发送请求可能需发送许多数据 FIS,此时主机需等待一个 DMA
Activate FIS 成功接收;
发送:
�设备发送此 FIS 至主机用来初始化主机至设备的 DMA 数据流,这是匹配 DMA 写入命令的数据传送的一部分;
�设备发送此 FIS 时应当做好准备接收带有 DMA Data 的 Data - Host to Device FIS;
接收:
�接收到此 FIS,主机适配器 DMA 控制器准备就绪,则主机适配器应当初始化 DATA
FIS 发送,发送匹配 DMA 控制器内容所指向的主机存储区域内的数据;
�若接收到此 FIS,主机适配器 DMA 控制器未准备就绪,则主机适配器应设立一个
内部状态表明 DMA 控制器已被设备激活,一旦准备就绪则开始发送;
5 DMA Setup - Bidirectional
描述:此 FIS 用于初始化第一方 DMA 访问主机内存,用于请求主机或设备在发送数据之前
程序化它的 DMA 控制器;
此 FIS 允许将实际的主机内存分离出来,分离方式是用一个基础内存描述符号引用的
存储区域,来表示主机授权设备访问的存储区域;
主机、设备会提前一些时间接收到 64 位 DMA 缓存描述符号;
通过缓存偏移(buffer offset)可以在 buffer 内任意寻址;
传统模式设备或其驱动不需支持第一方 DMA,但这在未来的设备中是必要的;
发送:
�主机或设备发送 DMA Setup 是 DMA 访问的第一步;
�发送目的是为一个或多个数据传输建立 DMA 硬件环境;
� DMA Setup 只在 DMA 环境需要改变时被请求发送;
�许多 DATA FIS 随后发送(例如传输计数超出最大 DATA FIS 或 DATA 传输中断),
此时应将数据放置在 FIS 的连续地址中,除非中间介入 DMA Setup 改变 DMA 环
境;
接收:
�收到 DMA Setup 时,应验证 DMA Setup 请求,加入缓存描述符号、规定的偏移量、
计数是有效的,用 FIS 中的信息程序化并装备适配器的 DMA 控制器;
�验证 DMA Setup 有效后,D="0",接收 FIS 的一方用一个或多个 DATA 回应,直到
DMA Context 耗尽;D="1",接收 FIS 的一方需准备好接收 DATA;
�若中断位 I="1",则 DMA 传送完成时应产生等待状态,DMA 传送完成依系统不同
而定,但通常包括传输计数耗尽或 DMA 控制器发现错误;
注意:
� 第一方 DMA 访问分为两类:命令或状态传输,用户数据传输。其中用户传输通常
不产生中断;
� Auto-Activate:主机到设备的第一方 DMA 传输需传输 DMA Setup 并随后传输 DMA
Activate,由于设备只在准备好接收时发送 DMA Setup,所以常常通过将 DMA Setup
中的"A"置位来省去 DMA Activate 的发送;
� 主机总线适配器需保证第一方 DMA 数据期间无中断,除非映像寄存器中 Error 位
置位,否则主机应保证除需要的数据负载和软复位的 FIS 以外任何 FIS 不能从主机
传向设备。
6 BIST Activate - Bidirectional
描述:BIST(Build In Self Test)用于给接收 FIS 一方选择一种反馈模式;
发送方发完 FIS,将应用层、传输层、物理层准备好以传送数据流,直到接收方 FIS
接收成功的信号,此 FIS 才算成功发送;7 PIO Setup - Device to Host
描述:设备用来提供给主机有关 PIO DATA 阶段的足够信息,让主机适配器更有效率地处理
PIO DATA 传输;
对 PIO DATA 传输来说,每一个 DATA FIS 之前设备需要向主机发送此 FIS,不论主
机到设备数据发送还是设备到主机都遵循此规则;
ATA 标准中有严格的定时限制约束,PIO Setup 中包含初始和结束的状态值,此状态
值用于主机首先用信号通知主机软件准备状态,并 PIO 写入 DATA(BSY="0",
DRQ="1"),然后突然令 DRQ="0",可能令 BSY="1"通知主机软件;
发送:(Host to Device)
�设备发送此 FIS 来为 PIO data 负载传输作准备;
� PIO data 负载传输中开头、结尾的状态值将由 FIS 存入映像寄存器;
�设备需准备好接收主机发送的 PIO Setup FIS 的回馈数据信号;
接收:(Host to Device)
�接收到设备发来的 PIO Setup,主机应更新所有映像寄存器并将 E_status 值存入临
时寄存器;
�传输长度值应存入倒数计时寄存器;
�检测到映像状态寄存器变化,主机软件卡是对数据映像寄存器进行一些列写操作,
并产生一个 Data FIS 发给 Device;
�对数据映像寄存器的每一个写操作会导致一个字的数据加入到 FIS 中,并使
Countdown 渐减;
� E_Status 值应在 Countdown 到达终值的 400ns 内传送至映像状态寄存器;
�传送字数为奇数时,最后一字放在最低位(word 0),高位补 0;
发送:(Device to Host)
�设备发送此 FIS 来为 PIO data 负载传输作准备;
� PIO data 负载传输中开头、结尾的状态值将由 FIS 存入映像寄存器;
�设备需准备好在发送 PIO Setup FIS 之后发送数据信号;
接收:(Device to Host)
�接收到设备发来的 PIO Setup,主机应更新所有映像寄存器并将 E_status 值存入临
时寄存器;
�传输长度值应存入倒数计时寄存器;
�检测到映像状态寄存器变化,主机软件卡是对数据映像寄存器进行一些列读操作,
并产生一个 Data FIS 发给 Device;
�对数据映像寄存器的每一个读操作会导致一个字的数据加入到 FIS 中,并使
Countdown 渐减;
� E_Status 值应在 Countdown 到达终值的 400ns 内传送至映像状态寄存器;
�传送字数为奇数时,最后一字放在最低位(word 0),高位补 0;
8 Data - Bidirectional
描述:此 FIS(两种)用来传递数据,比如读出或写入到硬件驱动的一部分数据;
此 FIS 只是数据传送的一部分,此 FIS 前、后均有传输动作;
负载中的字节数不明确,SOFp 与 EOFp 之间,不包含 FIS TYPE、CRC 都为数据字;
发送:
�设备发送 Data FIS 在以下情况:传统 PIO 读模式、DMA 读、第一方 DMA 写入主机 MEM;
�设备先于 Data FIS 应发送环境设置(如先发 DMA Setup);
�主机发送 Data FIS 在以下情况:PIO 写、DMA 写、第一方 DMA 读取主机 MEM;
�主机先于 Data FIS 应发送环境设置;
� DMA 操作需发送许多 Data,在传输中断或数据过长时有可能产生分割;
�回应 PIO Setup 发送 Data 时,Data FIS 应包含 PIO Setup FIS 中的传输计数;
�传输若被分割为多个 FIS,所有中间 FIS 应包含完成的全部 Dword;
接收:
�主机或设备都不缓存整个 Data FIS 来检验 CRC;
�数据错误应反映在整个命令完成状态中;