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

中国教育装备采购网2016-04-13 10:15围观1371次我要分享

  随着我们对SATA协议的逐步分析,SATA的物理层、链路层、传输层的基本原理和结构我们基本上都搞清楚了,现在,我们来看SATA协议的最后一部分,应用层的原理与结构,有的文献上将应用层内部划分出一个命令层来,但总的来看,功能上都是类似的。

  应用层是 SATA协议的顶层结构,它负责所有ATA指令的执行与解析,向处理器报告当前硬盘运行状态,生成对数据的读写请求,读取和设置硬盘的工作性能模式,还包括对控制指令模块寄存器的访问。SATA应用层和PATA协议的应用层功能相同,主要负责所有ATA指令的解析和向处理器报告当前工作状态。当主机的BIOS程序或软件向硬盘控制器发送主机指令时,应用层对主机发送的SATA指令进行解析和执行,它通过指令和控制寄存器来接收指令,硬盘控制器的微处理器通过中断和状态信息设置状态寄存器,响应相应的操作,并向主机报告当前的工作状态,微处理器指示硬盘系统软件执行下一步操作,设置ATA协议内部DMA的控制,实现数据的高速传输。主机向指令寄存器写入指令,并读取指令的状态信息,设备处理器通过设置指令寄存器中的各种参数,控制中断、复位和其他各种状态。

  应用层的命令处理部分,也可称之为命令层,主要负责ATA命令的解析。在发送端,命令层将主机端的映射寄存器(Shadow Register Block)或者设备端的ATA 寄存器(ATA Register)内更新的寄存器值提取出来并转换成对应不同交互机制的命令类型,然后通知传输层构造 FIS;在接收端,命令层通过解析传输层的FIS所携带的信息,判断出是哪一种命令类型并作相对应的操作。SATA2.0标准协议中规定的命令主要包括两大部分:与PATA兼容的ATA命令集和SATA新特性添加的新命令。其中常用的主要有IDENTIFY DEVICE、READ DMA、READ DMA EXT、READ SECTOR(S)、WRITE DMA EXT等。为了实现这些命令,SATA2.0标准协议将他们分为12个类型,每一种类型对应着不同的交互机制,每一种命令还采用不同的命令码来加以区分,具体见表1、2 所示。

  表1 SATA命令类型


  表2 SATA常用命令表

  以READ DMA EXT命令为例,介绍整个交互机制和过程。READ DMA EXT命令属于DMA-In 命令类型,命令码位25h。该命令使用DMA数据传输方式从设备端向主机端发送数据,一次DMA传输的数据必须为8K字节的整数倍。其交互过程如下图1所示:


  图1 DMA-In类型命令交互过程

  详细流程为:

  1、主机软件首先初始化主机端的DMA控制器,包括指定用于存放硬盘数据的内存空间地址;

  2、主机软件初始化主机端的映射寄存器(BSY=0);

  3、主机软件向主机端映射寄存器发起READ DMA EXT命令(BSY=1),命令层识别该命令的交互机制并通知传输层构造一个Register FIS - Host to Device 发送到设备端;

  4、设备端接收到该FIS后,校验其正确性并解析出命令内容;

  5、设备端执行命令-READ DMA EXT,读取硬盘中目标扇区的数据并存储在硬盘本地缓存中;

  6、设备端然后通过Data FIS向主机端发送数据,根据扇区数决定发送Data FIS的数量,一次Data FIS所能传输的数据量为16个扇区(16×512Bytes=8KB);

  7、主机端接收到数据后校验是否出现错误;

  8、通过DMA 控制器将主机端的缓存中的数据转移到主机内存中,当速度不匹配时需要进行流量控制;

  9、当数据全部发送完成后,设备端将完成状态通过Register FIS-Device to Host发送给主机端;

  10、主机端更新映射寄存器组中的值;

  11、主机端向主机软件发起中断,报告完成状态,结束命令。

  应用层是SATA2.0标准协议的顶层,它为主机软件提供编程接口,负责执行所有的ATA命令。应用层包含映射寄存器和SATA协议规定的寄存器组,主机软件可以根据中断标志和状态信息访问并更新这些寄存器,使得SATA标准接口根据命令完成相应的操作。主机端映射寄存器与PATA相兼容,包括了命令寄存器、设备寄存器、设备控制寄存器、错误寄存器、状态寄存器等。下面对这些寄存器进行简要介绍,如表 3所示。


  表3 主机端映射寄存器表

  除了映射寄存器之外,SATA还规定了16组SCR寄存器(Status and Control Register,状态控制寄存器)。SCR寄存器独立于映射寄存器之外,用于SATA标准接口新特性的状态报告和错误信息。目前协议使用了 5 组,剩下的作为未来升级使用,其定义见表4。


  表4 SCR 寄存器定义表

  SATA 传输层完成各种FIS帧的封装后,应用层利用这些封装好的 FIS进行接口通讯。协议根据接口各种数据传输方式需要,定义设计各种不同的数据传输控制流程, SATA 协议设备端常用数据传输控制操作流程:

  非数据命令类型操作流程

  非数据命令操作类型主要读取或设置SATA接口设备端的状态或属性信息等,如SLEEP , IDLE , FLUSH CACHE等命令。设备端收到此类命令后,执行该命令并以发送响应FIS帧作为回应,而响应FIS帧中包括了执行命令后的状态信息以及可能的出错信息,具体执行操作流程如图2所示。


  图2 非数据命令类型操作流程

  2. PIO数据读写命令类型操作流程

  PIO 数据读写操作命令类型主要用作从 SATA 设备端的硬盘内部扇区中读取少量数据,如读取设备整体属性的命令IDENTIFY,扇区读取命令READ等。设备端收到命令后,设置状态寄存器并准备发送数据,准备完毕后先发送PIO SETUP FIS信息帧,然后再将准备好的数据封装成DATA FIS信息帧发送给主机端,如此循环直至数据传输完毕,最后发送响应 FIS信息帧表示传输完毕,具体执行操作流程如图3。


  图3 PIO数据读命令类型操作流程

  3. DMA 数据读写命令类型操作流程

  DMA 数据传输与 PIO大致相同,不同点在于DMA传输操作需要配置 DMA控制器,并利用该控制器来进行数据传输操作,而且一次可以传输多个DATA FIS信息帧,因此DMA数据传输率比PIO较高。

  总体上看,SATA的应用层主要完成命令的处理和数据的传输,这些操作和PATA协议高度兼容,并添加了体现SATA特性的一些新的寄存器和命令。理解这些寄存器和命令的使用,是主机端驱动开发和设备端数据读取的基础。

  通过连续5篇文章的分析,我们对SATA协议已经有了一个清晰的认识,对SATA的框架基本上分析了一遍,但“光说不练是假把式”,后续的文章中,我们将动用SATA协议分析的利器-SATA总线分析仪,连接主板和SATA硬盘,具体的展现SATA主机端和设备端通信的细节,敬请期待。

  关于达思科技

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

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

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

  微信号:woocs

  长按识别二维码关注

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

  投稿:woocs@qq.com

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

相关阅读