硬盘数据恢复技术之SATA协议分析(四)

中国教育装备采购网2016-04-12 11:08围观1421次我要分享


  前面的几篇文章中,我们已经分析了SATA协议的物理层和链路层,下面继续分析SATA协议的传输层。

  传输层的功能,简单的说,就是面向应用层和链路层来调整适应两层传输的数据格式,它根据应用层的读写请求指令和链路层的应答信息来启动数据包的传送,传输层控制主机和硬盘之间传输控制指令和数据的帧信息结构(Frame Information Structures,FIS)的格式,传输层不会改变传输数据的内容,只会将要传输至应用层的数据打包成数据帧的结构,并且将接收到的数据帧还原成数据传输至链路层。

  具体来说,传输层主要负责FIS帧信息结构的封装与解析。发送数据时,传输层将映射寄存器中的命令,数据等按协议规定结构进行封装,之后将封装帧信息结构传递给链路层进行发送;接收数据时,传输层会将链路层传递的数据流按照SATA协议规定的相应数据结构进行解析,检查FIS中的各种控制字查看数据传输状态。传输层位于数据链路层的上一层,主要负责 FIS(Frame Information Structure,帧信息结构)的封装与解封。它不需要知道一帧数据具体是如何传输的,只负责在发送端按照上层命令构造FIS,在接收端提取出FIS 中的数据和控制信息。

  当传输层接收到上层FIS封装请求后,需要完成的功能包括:

  1、收集基于FIS请求类型的FIS内容;

  2、按照既定的顺序排列FIS内容;

  3、向数据链路层发送帧传输请求并发送FIS;

  4、管理Buffer/FIFO数据流,需要时告知数据链路层流量控制;

  5、接收来自数据链路层的对方的传输状态报告;

  6、向上层报告正确或错误传输状态;

  当传输层接收到来自数据链路层的FIS后,需要完成的功能包括:

  1、接收FIS并确定其类型;

  2、根据FIS的类型将FIS内容分配到指定的位置;

  3、对于主机端的传输层而言,接收到FIS的同时也需要向设备端返回一个FIS;

  4、向上层报告正确或错误传输状态。

  传输层接收到来自于应用层的命令请求后,根据命令的不同将相关寄存器中的信息按照SATA标准协议规定的格式封装为FIS传递给数据链路层。当数据链路层成功接收后,向传输层反馈一个传输完成的状态标志。传输层接收到来自数据链路层的FIS后,判断该FIS是否有效以及类型。如果是有效的类型,则按照SATA标准协议规定格式进行解析,并将其中的数据映射到对应的寄存器中,然后通知应用层更新相应寄存器的值。如果是无效的类型,则丢弃。就是说,对寄存器的操作,是在传输层完成的。表1为SATA的寄存器列表

  表1 SATA寄存器列表

硬盘数据恢复技术之SATA协议分析(四)

  FIS(Frame Information Struction,帧信息结构)是一组 DWs的集合,用于主机端和设备端之间的信息交换(包括数据和控制信息),配合 SOFP和 EOFP作为开始和结束标志组成完整的一帧数据。SATA协议一共定义了八种FIS,包括寄存器、配置和数据三大类型,每一种 FIS 的第一个DW的第一个字节是类型代码,代表FIS的类型和名称。此外还预留了六组类型值以备未来版本升级使用。表2为FIS的类型

  表2 SATA协议的FIS的类型

  具体介绍一下各个FIS的功能和结构:

  主机寄存器信息帧,Register FIS - Host to Device,用于将主机端寄存器组中更新过的值传递到设备端寄存器组中,该FIS只能由主机发送。每当主机端寄存器组的值发生变化,主机端可以发起一次Register FIS - Host to Device到设备端,设备端将接解析出的信息更新到自己的ATA 寄存器组中,并执行相应的操作。Register FIS - Host to Device 的类型代码为 27h,位于第一DW第一字节处,该FIS 共有5 个DWs。其中,C 位的值(“0”或“1”)取决于主机端寄存器组中命令寄存器(Command Register)或设备控制寄存器(Device Control Register)发生了变化,特征寄存器(Feature Register)、设备寄存器(Device Register)、LBA 地址寄存器(LBA Address Register)等从对应的主机端寄存器组中获取,R 位和保留字节一律赋值“0”,该帧结构如下图所示:

硬盘数据恢复技术之SATA协议分析(四)

  图1 Register FIS - Host to Device 帧结构图

  在主机端的命令寄存器或控制寄存器中的内容被改变时,主机端则立即触发将映射寄存器的内容按早定义的FIS结构封装发送出去。当设备端接收到一个主机寄存器信息帧时,主机端按协议定义的结构提出帧信息的命令,控制信息,更新自身映射寄存器中相应的信息,并来判断是执行命令操作或执行控制操作。

  从图1可看出,该帧由5组DW组成,共20个字节构成,包含了各个必要的寄存器的信息。

  设备信息帧,Register FIS - Device to Host 用于将设备端寄存器组中更新过的值传递到主机端寄存器组中以反馈命令执行情况,该 FIS 只能由设备发送。每当设备完成了一次命令,设备端便会发起一次 Register FIS - Device to Host 到主机端,主机端接收并解析出信息更新自己的寄存器组。Register FIS - Device to Host 的类型代码为34h,位于第一 DW 第一字节处,该FIS共有5个DWs。其中,I 位是中断标志位,错误寄存器(Error Register)、状态寄存器(Status Register)、LBA 地址寄存器等从对应的设备端寄存器组中获取,R位和保留字节一律赋值“0”,其帧结构如图2所示:

硬盘数据恢复技术之SATA协议分析(四)

  图2 Register FIS - Device to Host 帧结构图

  当设备端完成了某项命令之后,需要更新主机端的映射寄存器状态时,则发送设备寄存器信息帧至主机端,通过状态寄存器的信息向主机报告命令完成状态及可能的错误信息。当主机端接收到一个设备寄存器信息帧,主机端会按照协议规定的格式对信息帧进行解析,并更新映射寄存器中的内容。

  DMA响应信息帧,DMA Activate FIS用于设备端响应主机端发起的 DMA 传输请求,该FIS只能由设备发送。当主机端需要发送多个Data FISes以完成一次DMA传输过程时,主机端在每次发送 Data FIS 之前都必须确认成功接收到DMA Activate FIS,这说明设备端已经做好了接收 Data FIS 的准备。DMA Activate FIS 的类型代码为 39h,位于第一 DW 第一字节处,该 FIS 共有1个DWs,其帧结构如图3所示:

硬盘数据恢复技术之SATA协议分析(四)

  图3 DMA Activate FIS 帧结构图

  DMA建立信息帧,DMA Setup FIS 用于设备端以 First-Party DMA 方式访问主机内存时,在正式传输数据之前,对主机/设备端DMA 控制器进行配置。该FIS允许设备端自行建立DMA通道,直接对DMA控制器发送请求通知,可由主机/设备发送。DMA Setup FIS 的类型代码为41h,位于第一DW第一字节处,该FIS共有7个DWs。其中,D 位代表数据传输方向;A 位表示第一次发送Data FIS是否需要 DMA Activate FIS 触发;I 位是DMA传输完成的中断标志;R位和保留字节一律赋值“0”,其帧结构如图4所示:

硬盘数据恢复技术之SATA协议分析(四)

  图4 DMA Setup FIS 帧结构图

  数据信息帧,Data FIS 用于主机端和设备端之间传递数据,主机/设备均可发送。Data FIS 的类型代码为 46h,位于第一DW第一字节处。该FIS的长度是不确定的,根据实际情况而定,最大值不能超过2048个DWs。如果待发送的数据不足DW的整数倍,那么需要在数据末尾补“0”,其帧结构如图5所示:

硬盘数据恢复技术之SATA协议分析(四)

  图5 Data FIS 帧结构图

  BIST响应信息帧,BIST Activate FIS 用于使接收方进入回环测试模式,主机/设备均可发送。BIST Activate FIS 的类型代码为58h,位于第一DW第一字节处。正常工作时不会出现,其帧结构如图6所示:

硬盘数据恢复技术之SATA协议分析(四)

  图6 BIST Activate FIS 帧结构图

  PIO传输建立信息帧,PIO Setup FIS 用于设备端向主机端提供关于 PIO 数据的充足信息,使得主机端可以更有效地控制 PIO数据传输,该 FIS只能由设备发送。在PIO传输中,无论是主机端发送数据给设备端还是设备端发送数据给主机端,在每一次传输 Data FIS之前设备端都会给主机端发送一次PIO Setup FIS。PIO Setup FIS 的类型代码为 5Fh,位于第一DW第一字节处,该FIS共有5个DWs。其中,D 位代表数据传输方向;I 是中断标志位;R 位和保留字节一律赋值“0”,其帧结构如图7所示:

硬盘数据恢复技术之SATA协议分析(四)

  图7 PIO Setup FIS 帧结构图

  无论设备端需要准备发送或接收数据,在设备端与主机端之间以 PIO数据传输方式进行数据传输时,设备端都需要向主机端发送PIO 操作信息帧,通知主机端 PIO 操作的各项相关信息,如 PIO 传输前后的地址,扇区大小,状态等。当该信息帧传输完毕后,设备端则进入发送或接收数据状态,等待主机端的相应信息。

  设备置位信息帧,Set Device Bits FIS 用于更新主机端寄存器组中仅对设备开放写权限的寄存器值,比如错误寄存器、状态寄存器中的 6位,该 FIS 只能由设备发送。设备端首先对自己的寄存器进行改写,然后向主机端发送一个 Set Device Bits FIS,当主机端接收到将改写过的内容后更新自己的寄存器。Set Device Bits FIS 的类型代码为A1h,位于第一DW第一字节处,该FIS共有2个DWs。其中,Status Hi 表示状态寄存器的 4、5、6 位;Status Lo表示状态寄存器的 0、1、2 位;I 是中断标志位;R 位和保留字节一律赋值“0”,其帧结构如图8所示:

硬盘数据恢复技术之SATA协议分析(四)

  图8 Set Device Bits FIS 帧结构图

  由以上分析,可知,SATA的传输层,主要处理信息包,所用到的寄存器与PATA协议的类似。下一篇文章中将介绍SATA的应用层的原理与结构,敬请关注。

  关于达思科技

  达思科技,国家级高新技术企业,天津市国家保密局涉密载体数据恢复唯一协作单位,数据恢复和取证行业著名品牌,是一家以技术研发为核心生产力的技术型企业,在国内乃至全亚洲数据恢复与取证技术领先!

  达思科技 中国数据恢复与取证专家!

  更多数据恢复与取证技术、互联网请关注微信公众订阅号:woocs

  微信号:woocs

硬盘数据恢复技术之SATA协议分析(四)

  长按识别二维码关注

  专注数据恢复与取证技术、互联网

  投稿:woocs@qq.com


来源:达思凯瑞技术(北京)有限公司作者:达思凯瑞技术(北京)有限公司

相关阅读