SerialATAInternationalOrganization翻译.docx
《SerialATAInternationalOrganization翻译.docx》由会员分享,可在线阅读,更多相关《SerialATAInternationalOrganization翻译.docx(50页珍藏版)》请在冰豆网上搜索。
SerialATAInternationalOrganization翻译
SATA存储技术
1.并行ATA的演变
本章
关于如何实现PATA的背景知识对于理解串行ATA启用是很重要的。
SATA的设计为PATA遗留程序接口提供了兼容及为PATA定义的命令。
该章节为并行ATA的实行提供了基础水平的知识并试图做出该技术的复习或者入门资料。
下一章
下章介绍了实行串行ATA的诱因。
许多公认的PATA的缺点在SATA的实施中被解决。
本章明确了这些确定并且阐述了SATA提供的解决方案。
ATA过度到串行交互
像很多其他IO交互一样,PATA拥有一个高速串行的堂兄简称为SATA。
SATA是为ATA/ATAPI6规格的软件的兼容性所设计的。
将ATA迁移至串行接口的动机包含很多方面,其中包括:
通过减少引脚的数目来降低成本;
较低的硅尺寸意味着较低的电压。
提高在驱动和主机适配器之间的传输速度
增强可靠性
改进电缆/接口
服务器环境下对针对ATA的攻击进行定位
下一章将讨论由实现SATA带来的提升和新功能
ATA起源
ATA的起源可以追溯到在20世纪80年代中期的康柏电脑。
在那个时期,康柏主要以它的手提电脑出名。
康柏的第一个手提电脑是基于IBM的PC机和之后的PC-AAT。
PC机上的硬盘驱动最初与直接插入电脑扩展总线的硬盘控制卡组合使用并与安装进硬盘插槽里的硬盘驱动联合使用。
图1-1描述了该硬盘驱动控制器及硬盘驱动的联合。
康柏试图制造一款比原始手提电脑(有时叫luggables)更小更轻的手提电脑,而原始手提电脑在一些情况下重达40磅。
二代手提电脑设计全局尺寸时,在某些部分通过将许多IO功能整合到主板上,从而减小对扩充卡的需求并连接扩展槽。
这些集成功能包括软盘驱动接口,串行接口及并行接口。
康柏同时将硬盘控制器缩小为一个插件适配器卡并将它安装在驱动顶部。
这个实现的硬盘控制器和驱动的联合就叫做康柏集成驱动。
在此过程中,将PC-AT扩展总线延长到驱动插槽是必要的。
这一项通过一个带状电缆和一个称作主机总线适配器的小的接口电路实现。
康柏集成驱动的下一代是完全整合的,此时控制器被包含在Imprimis公司制作的雷恩硬盘驱动箱中。
IDE(集成光盘电子)驱动的出现
其他硬盘驱动厂商开始制造类似于康柏专有解决方案的整合驱动。
这些磁盘驱动器被称为IDE驱动器。
这些缩写的意义其实并不明确。
一些可能性包括:
集成光盘电子;
集成设备电路;
集成驱动原件;
智能驱动器电子;
“我个人最喜欢的是集成光盘电子,但IDE最初代表的意义可能归于:
Whocares?
双驱动器支持
IDE驱动器的另一个特征是通过一个单独的主机适配器接口和公用带状电缆来附加和解决双设备的能力。
请注意每个驱动器上的跳跃或开关必须被设定指定哪些驱动将响应为驱动器0,及哪些将响应为驱动器1。
一个与ID相关的早期问题是没有标准来实施这些驱动器。
因此有一系列的兼容性问题。
或许最通用的发生在当两个来自不同制造厂商的驱动器被连接到同一个IDE电缆。
ATA标准
最终一个在通用访问方法组内的工作组定义了一种在IBMPC-AT总线和IDE驱动器之间互相通用的标准接口规范。
该规范最终被称为ATAttachment或ATA。
第一套ATA规范最终出版为ANSIX3.221-1994.如今依然存在称为T13的定义ATA方向的ATA工作委员会。
ATA信令接口
ATA接口用框图标示如图1-4所示。
该接口包含32个信号,7个接地引脚和一个为键保留的引脚位置。
从根本上说,ATA主机总线适配器(HBA)只是延长了IBMPC-AT扩展总线到光盘控制器所在的光盘驱动。
接口包括几个主要信号组:
输入输出地址相关信号;
控制信号
数据行
DMA相关信号
这些信号组连同其他杂项信号被列出并描述在表1-1.要注意很多这种新号不能被用在ATA的实现过程中;电源的驱动是由一个单独的电源接口支持的。
2SATA出现原因
前言
关于PATA实行的背景信息对于理解SATA的实行很重要。
SATA的设计为兼容性提供了PATA传统程序接口及PATA的命令定义。
前章提供了一个基础信息来作为并行信息的复习和入门
本章
本章介绍了实行串行版本ATA的起因。
PATA的很多公认的缺点在SATA都被解决了。
该章介绍了PATA的问题及SATA提供的解决方案。
下一章
下一章提供了对SATA功能和协议的全面的概述。
SATA的设计动因和设计目标
就像许多其他IO接口一样,ATA现在拥有一个高速串行接口。
很多强制性的原因导致了这个串行接口包含了下列的需求:
更少的引脚数;
更高的性能;
简单的驱动布局
更好的电缆/接口;
更高的可靠性
更低的支持电压;
能迁移到更多的服务器;
串行接口能实现的一个极其重要的方面是包含兼容ATA的软件。
下一节讨论了PATA的问题和SATA是如何解决这些问题及是如何包含软件兼容性的。
更少的引脚数
PATA的实现包含了大量的引脚,如图1-5所示。
需注意的是,这些引脚中除留下必须的26个信号引脚外,其余很多现在不再使用也不再需要了。
过多引脚的问题是非常严重的:
在驱动和HBA上为容纳更多的引脚数而采用更大的芯片需要很高的成本;
由于高引脚数导致更多的版面空间被占据;
40引脚的接口占据了很大的空间并且造价高昂;
电线占据了更多的空间,造价高,路线繁杂,并通过整个系统阻碍了空气流通;
简而言之,与PATA相关的许多问题直接来源于高引脚数。
带有更少引脚的串行接口解决了很多PATA相关的问题
性能
PATA的使用受到物理接口和最初用于配合以8MB/sec的传输速率工作的IBMPC-AT总线的限制。
如今PATA工作在133MB/sec的速率。
为了实现更高的PATA传输速率,在每个信号之间加入了接地引脚,使得接口的尺寸加倍到80个引脚。
在性能方面使用PATA电缆和接口进行进一步的提升将更加困难。
PATA的有限的传输能力不适合需求更高传输速率的下一代硬盘驱动。
SATA的高速串行接口以1.5Gbits/sec的速率操作,这将产生一个最大值为150MB/SEC的传输速率(第一代)。
第二代SATA将传输速率加倍至300MB/sec并计划将性能提高的更多
就像“SupportforTwoDrives”中说的一样,ATA驱动需要配置跳跃来支持两个共享相同ATA总线的驱动器。
一个驱动必须选作驱动器0另一个为驱动器1.驱动器的错误设置通常会组织驱动器正常工作。
在SATA驱动器上不需要驱动选择开关/跳跃因为每个驱动都在他自己的总线上。
每个SATA驱动都只作为驱动0相应
电线和接口
PATA电线和驱动器拥有许多缺点,包括:
增加成本的多引脚数,提高空间需求,电线繁杂难于管理,典型电缆长度限制为18英寸。
除此之外,PATA接口使用了在最佳环境下易于弯曲且难以插拔的引脚接口。
最后,PATA接口不支持热插拔。
图2-1对比了PATA和SATA驱动器和接口
SATA电缆和接口拥有对PATA加以改进的下列特征:
信号电缆有7个道题(两对差分降噪和3个接地引脚);
相对于PATA的18英寸,1.0A标准规定的SATA最大电线长度为1米;
SATA电线更小,更易于管理,并且比PATA方案的成本更低;
接口为触电而不是引脚;
接口使用了更易连接的设计,有时称为盲连;
接口支持热插拔;
SATA接口更易于适配主板。
图2-2描述了SATA设备(驱动)接口和在主机适配器上的接口。
接口可以特定制作使驱动器能插入主板上插槽或在两个连接器之间架起连接。
可靠性
ATA总线不包括任何本地传输相关错误检测和报告能力。
然而,对于33Mhz及更高的传输速率的极端DMA传输操作支持CRC(循环冗余码校验)错误校验,但只在数据传输期间有效。
相反,每个通过SATA总线发送的数据包都包含一个循环冗余码校验。
这些冗余码是设计来校验每个发生的单或双位的错误。
存在极大的可能性CRC将检测到几乎每个错误。
当检测到错误时,硬件被设定为通过再次发送错误的数据包来自动重试。
该重试功能支持所有的包类型除了数据包。
这种限制是由于非常大的数据包的尺寸(高达8KB)会需要在接口缓冲以支持重试机制。
大的缓冲区的尺寸与保持驱动器低成本的目标相冲突,因此不支持数据包重试功能。
更低的电压
随着硅的制造工艺使尺寸变小,其也需求更小的电压。
由于ATA信号在5伏特的电压下传输,因此他不适合这些更小的尺寸。
相反,SATA的信号电压已降低到0.7伏特。
这允许使用更小的驱动接口芯片及更低的功率。
迁移到服务器
ATA驱动主要由于其相对于SCSI及FIBER驱动器更低的每兆字节的价格而成为一个引人注目的驱动。
许多与ATA驱动相关的缺点可以通过实现RAID来减轻影响。
RAID可以提供更多的灵活性、可靠性及提高整体性能。
并行接口两个驱动器/接口、没有热插拔支持及缺乏对其他诸如双端口驱动的服务器相关功能支持的限制,使得ATA服务器实现成为问题。
3SATA概览
前一章
前章介绍了实行串口ATA的动机。
PATA的很多公认的缺点都由SATA的实行而解决。
该章确认了这些缺点并描述了SATA提供的解决方案。
该章
该概览提供了对SATA接口操作的观念上的理解。
这包括SATA通信原理基础及按规范定义的每一层的主要功能。
随着SATAII的扩展而提出新的功能,SATA如何包含兼容PATA的软件页包含在该章中
下一章
通过SATA接口的通信主要包括传输帧信息结构。
一个FIS可能包含shadow(远程处理监督程序)或者ATA注册内容、数据、控制信息等等。
该章向读者介绍了FIS传输协议的基本信息。
随后的章节讨论了更详细的协议,并讨论了由于流量控制的要求,错误和相关问题所导致的变换。
SATA规格
SATA规格是通过SATA国际组织来升级和维护。
成员公司可以从上下载说明书。
未加入公司必须付费(最近是25美元)来下载副本。
SATA2.6版本是在本书印刷时的最新版本。
总称SATAI和SATAII在本书中用以描述由一代和二代SATA定义的特征。
需要注意的是,SATAII功能包含了3.0GB/s的传输速率,基于最新版本规格的驱动程序可以以1.5Gb/s或3.0Gb/s的速率进行操作。
此外,大多数由SATAII介绍了功能在这两种传输速率下都支持。
SATA功能总结
上章介绍了ATA的主要缺点和SATA的做出的改进。
表3-1包含更全面的SATA实现的相关功能的列表。
串行接口
串行ATA在主机适配器和每个驱动之间定义了一个高速串行连接。
SATAI版本的规格定义了1.5Gb/s(第一代)的传输速率,SATAII版本规格提高传输速率到3Gb/s(为两种速度都提供支持)。
最大带宽很容易计算,因为每个字节都是做8位到10位编码结构的一个10位的值。
GEN1speed=150MB/s
Gen2speed=300MB/s
SATA接口在HBA端口和SATA设备中由两个差分对组成。
但是,SATA的实现与操作于可在两个方向上同时进行数据传输的对偶单纯型模式的高速串行总线是非常不同的。
SATA的实现是基于在同事间仅有单一方向的半双工设计。
SATA实现了一个数据传输差分对和其他从接收设备端接收反馈的其他差分对。
就像3-1所示,当数据包(FIS)交付时,传输节点(主机或设备)从接收节点(从后主线)接收当前传输状态。
SATA与PATA的兼容性
SATA的软件兼容性允许进行硬件改进而不需要大量新固件和软件。
这一目标将压力放在了确保与PATA软件兼容运行的硬件设计上。
下面章节讨论了软件兼容性的几个方面。
遗留的编程接口
软件兼容性的主要元素自然是ATA接口编程。
图3-2将SATA采用的用以为PATA提供遗留程序支持的方法概念化。
ATA主机适配器只是提供了源于CPU穿过ATA电缆到驱动器寄存器的IO读写。
在SATA实现中,称为“影子寄存器”的任务文件副本位于主机适配器上。
一旦软件登录了影子适配器,HBA就会通过一个称为FIS的包俩将寄存器内容发送到驱动中。
所有在SATAHB和SATA驱动之间的信息交换都是连续且通过这些FIS进行的。
参考图3-3来了解HBA和SATA驱动器的更详细的视图。
需要注意的是遗留软件不知道他的IO访问无法通过驱动器直接以任务文件为目标。
考虑软件的正常程序初始化影子寄存器和发行的ATA命令推动执行。
当软件通过写入命令寄存器来发布命令时,这出发了SATAHBA执行以下的时间序列。
1.SATAHBA功过高速串行链接发送一个包含影子寄存器全部内容的包给驱动器
2.驱动接收寄存器的FIS并更新他的寄存器和FIS的内容
3.下一步,驱动器解析及解析命令;
随着命令被解析,驱动器和HBA交换一个用以完成命令的FIS的特殊序列。
这个可能包含传输。
4介绍FIS转移
前章回顾
之前的章节提供了一个SATA接口和传输协议操作的概念理解。
这包括SATA通信是如何解决级规格定义的每层的基本功能的基本信息。
SATA包含软件是如何包含与PATA软件的兼容性同样囊括在此章中,一同的还有通过SATA2.0扩展引入的新特性。
该章
通过sata接口的传输主要由传输FIS构成。
FIS可能传送影子寄存器或者ATA寄存器的内容,数据,控制信息等等。
该章向读者介绍了FIS传输协议的基础。
后续章节进一步细化了协议并讨论了由于流量控制需求,错误和相关问题而产生的变化。
下一章
下一章主要用于参考目的。
它包括与每个FIS相关的细节,包括每个FIS内的所有字段的定义
大纲
无论是HBA上还是SATA设备上FIS的起源,传输协议是相同的。
图4-1更为细节化的表示出SATA接口层,展示了发送器和接受端。
下面的讨论描述了在发送、接收和报告FIS传输状态过程中每一岑的行为。
接下来的例子描述了一个通过使用传统方法经由软件发送命令而作为结果的HBA发送的FIS。
FIS传输
该节着重于在HBA和SATA驱动器之间的传输及在FIS传说协议中每一层所扮演的角色。
例子用于解释从主机软件发出读DMA命令后所带来的行动结果。
注意,SATA层执行的功能本质上都是同样不考虑是HBA还是驱动驱动在传输FIS。
应用层(HBA)
主机软件通过执行一系列用于建立和发布命令的IO写命令来对HBA发布命令。
在一个SATAHBA中这些写目标是影子寄存器。
当主机软件将DMA读命令代码写到命令寄存器中时,实际的DMA读命令才执行。
SATA规则要求PATA执行如下所述的相同的行为:
当软件写入影子命令寄存器中时,HBA必须在命令寄存器写命令的400ns内设置BSY状态位;
当BSY(或DRQ)设置时,软件不允许写其他的影子寄存器,包括:
功能,扇区数,LBA低位,LBA中位,LBA高位或者设备寄存器。
命令寄存器的写入触发将整个影子寄存器的内容交付传输层
传输层(HBA)
一旦软件发布命令(此例中为一个DMA读命令),运输层表4-2.传输层有几个与交付寄存器FIS有关的责任,如下所示:
创建一个兼容的FIS
通知链路层FIS等待交付;
在传输过程中通知链路层流控制要求。
图4-2也展示了故意做小以减小SATA端口成本的传输缓冲区的存在
FIS(帧信息结构)
SATA使用12类FIS来支持ATA和SATA扩展定义的大数量的命令。
每一个FIS包含标识被转移的特定FIS的ID的值。
表4-1列出了所有通过2.0版本的规格定义的SATAFIS。
注意到有几个FIS类型是用以达到数个目的的。
例如,设置设备位的FIS由SATA驱动器用于修改HBA影子寄存器中的具体位,他也被用于事件通知。
FIS信息和结构在第5章中详细描述。
FIS传输就绪
在接到FIS传输请求时,链路层创建了一个“传输就绪”原语并将其发送给物理层传输给驱动器。
驱动器检测X_RDY原语,若他准备接受一个FIS,它返回一个“接收就绪”(R_RDY)原语给HBA。
注意,这些原码信号不断,直到该发送一个不同的原码为止。
5FIS类型和结构
上一章
通过SATA接口的传输主要由传输FIS构成。
一个FIS可能交付影子寄存器或者ATA寄存器的内容、数据、控制信息等等。
上一章向读者介绍了FIS传输协议的基础信息。
后续章节进一步细化了协议并讨论了由于控制需求,错误和相关问题而产生的多种情况。
该章
该章主要用于参考目的。
包括每个FIS相关的细节。
下一章
链路传输协议是主要在发送端和接收端之间的链路层上执行。
该章讨论了传输层和链路在在传说FIS时采用的各个步骤。
内容
多种特征可以与各个FIS相关联,包括:
每个FIS包含一个8位ID值用以识别其类型;
FIS的大小总是4个字节的倍数
给定的FIS的方向可能是HBA到驱动,驱动到HBA或兼有之;
一些FIS拥有由FIS内位字段定义的标准定义变化的交替的格式。
FIS最小的尺寸为4字节;
FIS最大的尺寸为8196字节;
表5-1总结了所有FIS类型,包括他们的ID,大小,导向和版本。
寄存器FIS-主机到设备
一个被发送到SATA设备的寄存器FIS总是包含HBA影子寄存器的内容。
两个特定事件可触发HBA发送一个寄存器FIS:
1.一个影子命令寄存器的写入命令;
2.一个影子控制寄存器的写入命令;
图5-1描述了影子寄存器的设置并高亮显示了命令和控制寄存器。
寄存器FIS内容反映了最近由主机软件写入影子寄存器的值。
图5-2描述了由写入影子命令或控制寄存器产生的寄存器FIS内容和格式。
注意,规格用柱形、表头和行业术语来定义包含影子寄存器在内的字段。
表5-2描述了每个字段的内容并指定了相应的LBA地址(若适用);
寄存器FIS-主机设备
在SATA中,软件不能直接访问驱动器内的ATA寄存器。
当驱动器执行命令和在ATA寄存器内更新状态信息时,状态信息直到影子寄存器升级之前对于主机软件是不可见的。
因此对于驱动器而言有必要去读取ATA寄存器并通过一个。
。
将他们的内容交付给HBA。
6传输和链接协议
上一章
上一章主要提供参考。
他包含了每个FIS相关细节,包括每个FIS所有字段的定义。
该章
链路传输协议主要是在发送者和接受者之间的链路层上执行。
该章讨论了在传输一个FIS过程中传输层和链路层的各个步骤
下一章
当一个FIS通过SATA链接传输时,传输错误通常被检测到并报告回传输设备。
通过检测传输错误,传输被通知错误。
保留一个错误FIS的副本之后,传输层重新传输FIS。
下一章讨论在FIS重试允许的情况下的机制和条件。
概览
FIS交付通常是由软件启用一个特定的命令来触发的。
每个命令由一个在HBA和驱动器之间交换的FIS序列构成。
在一些情况下FIS起源于应用层,在其他情况下FIS决定于命令层。
正如前所述,不管FIS来源于何,用于每个FIS交付的传输协议本质上是一样的。
传输层和链接层一同工作以创建和控制每个FIS的交付。
传输层创建和储存每个传输缓冲区中的FIS并通知链路层FIS交付正在待命。
链路层通过交付和接受原码来管理大部分传输协议。
图6-1细化描述了与每个FIS发送和接收相关的传输层和链路层执行步骤。
以下部分的描述假定了FIS传输成功进行。
后续章节细化了诸如FIS传输重试和流控制的协议变化。
FIS传输
图6-2描述了与为传输和管理协议而准备FIS相关的主要元素。
链路层管理与每个FIS相关的活动序列。
这些活动序列包括生成和接受的基本内容,连同通过链路层为交付准备每个FIS。
这个过程包含几个步骤:
链接传输请求/仲裁;
FIS传输(传输层到链路层);
制定每个FIS的开始和结束帧原码;
FIS混杂;
原始抑制加扰;
8到10位编码;
初代-FIS传输
原码起源在链路层提供FIS传输期间的控制和阶段信息及诸如连接电源管理的功能。
图6-3是一个描述了原码来源的总体框架。
就像所有通过串口链接的信息交付一样,原码是由8到10位编码器编码。
原码包含一个10位的控制值及紧随的3位连续的数据值。
其他结构使用术语“有序集合”来表示这类序列。
在SATA中,一旦一个SATA链接通过OOB信号初始化,他时常是带有原码,偶尔也有FIS。
图6-4展示了10位的编码值和同步原码的结构。
反复发送的同步原码,反映了在SATA接口上的空闲状态,在大多数执行中是最流行的原码。
表6-1列出了FIS传输
发送的原码并描述了每个原码的目的。
表6-2描述了接收FIS的设备传输的原码。
、
7FIS重试
前一章
链接传输协议主要在发射器和接收器之间的链路层执行。
上一章讨论了在传输FIS时传输层和链路层进行的各个步骤
该章
当一个FIS通过SATA链接传输时,传输错误通常被发现并报告给传输设备。
在检测传输错误时,传输层被通知失败。
在保留一个失败FIS之后,传输层重新传输FIS。
该章讨论了在FIS允许重试时的机制和条件。
下一章
当执行大数据传输时,传输层中的传输和接收缓存在没有流量控制机制的情况下可以溢出或下溢。
下一章描述了流量控制机制和协议。
内容
在很多情况下FIS传输错误在没有软件通知的情况下可以通过简单的FIS重发被覆盖。
这个重试机制是由传输层管理并需要可以在发送后保留FIS副本的缓冲区。
注意,重试可以被HBA或驱动器执行。
那些FIS可以被重试
一个FIS只有在他可以全部储存在重放缓存区时才有资格重试。
表7-1列出了每个FIS类型和他的大小。
数据FIS是迄今为止最大的,最大大小为2049DWs(8196字节)。
注意,总大小仅包含前部和负载,因为CRC,SOF和EOF是被链路层添加的。
其他FIS类型的大小均小于7DWs(28字节)。
出于成本考虑,传输层的传输缓存不需要存储整个数据FIS,从而从重试协议中消除了数据FIS。
这允许一个28字节的传输缓存来支持除通常用于测试和诊断操作的BIST类型外所有其他FIS类型的FIS重试。
没有缓存足以储存最大大小的数据FIS,故不支持重试。
数据FIS传输导致了主机总线适配器内部状态的改变,无论通过DMA控制器改变其状态还是通过改变其余PIO重复计数,FIS的数据传输都不能重试。
重试协议概述
重试协议是否执行是由一个接收设备返回的R_ERR握手原码来出发的。
图7-1描述了无论是HBA还是驱动接收一个R_ERR原码表明FIS是随同一下错误条件的类型被接收。
在此例中FIS的内容保留在传输层的传输缓存中因此可以重试。
规则不限制可尝试的重试次数。
若FIS重新传输重复失败,主机软件将最终超时,这通常导致链接接口被重置。
什么错误导致了重试常识?
SATA硬件可以很容易的设计为自动重发一个通过链路层传输失败或有其他问题的FIS。
通常,自然产生的瞬态错误是有资格并可以通过重试协议来回复的。
例如,错误可能是由于例如噪声或由于电源噪声等的传输问题。
这样的错误通常在链路层中被检测到通过传输层来解决。
其他FIS错误可能由传输层自己检测到。
无论是HBA还是驱动传输一个框架,传输错误都是通过接收借点被检测出来并且通常经由R_ERR原码回报到传输节点上。
在任何情况下,这些链接传输错误是在HBA中的SATA错误寄存器中报告的。
图7-2描述了传输层和链路层及FIS错误检测与报告功能。
使用了多个错误检测机制及两个错误回报机制:
1.R_ERR交付回传输借点(HBA及驱动器);
2.通知上层在SATA错误寄存器中设置合适的位(当HBA从驱动器中接收R_ERR原码或在接收帧时HBA检测到一个错误)
在大多数帧传输错误的情况下,一个R_ERR原码被发送以回报错误。
但是,一些错误种类不循序重试。
各种情况将在接下来的章节中讨论。
传输错误——出自链路层检测
链路层检测两种类型的错误,这两种通常是由于链接传输错误:
CRC错误
不一致错误
这些错误将回报给传输层,其需要返回一个R_ER