摘要
本文主要阐述了SATA(串行ATA)规范的核心内容,重点解析了SATA接口的逻辑结构及其各层功能和关键要点。通过对SATA规范的深入分析,本文帮助读者更好地理解SATA接口的工作原理、性能特点以及它在存储设备发展中的重要作用。同时,本文还将持续更新,为读者提供对SATA技术全面而深刻的认知。
文章目录
- 摘要
- 一. SATA 定义
- 二. SATA的逻辑结构
-
- 2.1 Phy Layer(物理层)
- 2.2 Link Layer(链路层)
- 2.3 Transport Layer(传输层)
- 2.4 Device & Host Command
-
- 2.4.1 Power-on and COMRESET protocol
- 2.4.2 Software reset protocol
- 2.4.3 EXECUTE DEVICE DIAGNOSTIC command protocol
- 2.4.4 DEVICE RESET command protocol
- 2.4.5 Non-data command protocol
- 2.4.6 PIO DATA-IN command protocol
- 2.4.7 PIO DATA-OUT command protocol
- 2.4.8 DMA DATA-IN command protocol
- 2.4.9 DMA DATA-OUT command protocol
- 2.4.10 READ DMA QUEUED command protocol
- 2.4.11 WRITE DMA QUEUED command protocol
- 2.4.12 FPDMA Read command protocol
- 2.4.13 FPDMA Write command protocol
- 2.5 Application and Command Layer(应用层)
- 三. Error Handle(错误处理)
- 四. Register(寄存器)
- 五. Q&A
- 六. 参考资料
- 七、意见与反馈
一. SATA 定义
SATA(Serial Advanced Technology Attachment): 是一种用于连接计算机和存储设备的接口标准。
- 高速传输:相比之前的并行 ATA 接口,SATA 提供了更高的数据传输速率(1.5 / 3 / 6 Gbps)。
- 串行传输:采用串行方式传输数据,减少了并行传输中的信号干扰和同步问题,提高了数据传输的准确性和稳定性。
二. SATA的逻辑结构
如图2所示,按逻辑功能划分,SATA可以分为 Application Layer(应用层),Transport Layer(传输层), Link Layer(链路层),Phy Layer(物理层)。
- Application Layer(应用层): 负责处理Command。
- Transport Layer(传输层): 根据Command的种类构造和分解FIS(Frame Information Structure)。
- Link Layer(链路层): 在FIS前后插入控制字符,并进行编码和解码(8b/10b),以及CRC(Cyclic Redundancy Check)校验。
- Phy Layer(物理层):通过OOB(Out-of-Band)信号的检测和Primitives的交互,实现Host与Device之间的链路初始化;使用串行的方式传输和接收数据。
2.1 Phy Layer(物理层)
SATA物理层负责主机与存储设备间的数据传输,利用8b/10b编码平衡信号、便于时钟同步并降低误码率。通过差分信号对实现高速串行传输,支持1.5 Gbps、3 Gbps和6 Gbps的速率,并向下兼容。物理层还负责链路的初始化和同步,以及信道训练和时钟恢复,确保数据传输的稳定性。同时,其电气特性设计增强了抗干扰性,保证了传输的可靠性。
Phy Layer(物理层)的主要作用如下:
- 串并转换:Rx通道将串行信号转为并行信号, Tx通道将并行信号转为串行信号。
- OOB信号的产生和检测:生成并检测OOB信号(Out Of Band),用于建立信号连接。
- 字节对齐:检测Align Primitive ,调整对齐边界。
- 向Link Layer发送状态(已连接、未连接、已连接但是速率协商失败)。
2.1.1 OOB(Out Of Band)
OOB(Out Of Band)由一组特殊的二进制数据的Brust组成(如图3所示),主要是用于建立信号连接。其作用可以分为以下四个部分
- 初始化(initialization)。
- 传输速率的协商与对接(Speed negotiation)
- 重置(Reset)。
- 从省电状态(Slumer/Partial)的唤醒。
OOB信号可以分为 COMRESET, COMINIT ,COMWAKE,每种信号都有其特殊作用。
- COMRESET:Host对Device进行硬件重置以及SATA信号的重新建立。
- COMINIT:由Device送往Host,要求信号初始化。
- COMWAKE:Host或是Device装置可以激发该信号来将 Phy 从省电状态(Slumer/Partial)中唤醒。
COMRESET, COMINIT ,COMWAKE三者主要是由4个Gen1 ALIGNp Primitives(这个后面会进行介绍) 的 brust或者 4Gen1 Dwords(4 个 D24.3 characters)的brust。由图3 我们可以看出,COMRESET和COMINIT结构保持一致,不同的是,COMWAKE中的时间间隔(T1)为320ns,而COMRESET/COMINIT的时间间隔(T2)为106.7ns。
2.1.2 Power management(电源管理)
在SATA(Serial ATA)协议中,Phy Layer(物理层)的Power management(电源管理)设计主要是为了减少功耗,特别是在设备不活跃的情况下。SATA电源管理在Phy Layer(物理层)通常在几种不同的电源状态间进行转换。这些状态包括:
-
Active:在Active状态下,Device 和 Host 之间的 Phy Layer(物理层)连接是完全激活的,可以正常传输或接收数据。
-
Partial:在Partial状态下,Device 中的Signal Lines处于 Common mode voltage(电压低于Active状态下的电压)。在这样的状态下,功耗较低,恢复到Active状态的时间较短(大约为10微秒)。
-
Slumber:在Slumber状态下,允许更低的电压值(限制在正常范围内,0-2000mV),比Partial模式进一步降低了功耗,适合较长时间的不活跃状态。Slumber模式会关闭更多的电路,以实现更大的功耗节省,恢复到Active状态的时间稍长(大约为10毫秒)。
-
DevSleep:在DevSleep状态下,Device几乎完全关闭,只保留一个最小的电源保持部分连接。DevSleep是SATA 3.2引入的一个更深度的电源管理模式,旨在显著降低功耗。当需要恢复时,恢复时间较长,但功耗也最低,适合更长时间的不活动状态。
为了更合理的控制功耗,SATA 设置了不同模式之间的自由转换。
- Partial/Slumber => PHYRDY:
Host/Device发送COMWAKE将Device/Host从省电模式唤醒。 - PHYRDY => Partial/Slumber
由PHYRDY 转为 Partial/Slumber的过程如4所示
2.1.3 Power on(上电)
在SATA接口的上电过程中,涉及一系列初始化步骤,以确保主机与设备之间的连接能够稳定、可靠地建立。SATA设备的上电过程主要分为以下几个阶段:
- Host 发送COMRESET并循环检测Device的回复。
- Device发送COMINIT,并循环检测Host的回复。
- 收到Device的COMINIT后, Host回复COMWAKE,并循环检测Device的回复。
- 收到Host的COMWAKE后, Device回复COMWAKE,循环检测Device的回复。并以最高速度发送ALIGN primitive。
- 收到Device的COMWAKE后, Host以最低速率发送D10.2。同时如果接收到来自Device的ALIGN后,以相同的速度发送ALIGN给Device
- 当Host接收到三个非ALIGNp后,链结建立完成,进入正常操作。
其中需要注意以下几点
- 在1完成后,如果Device没有回复COMINIT,那么Host就会一直发送COMRESET,直到Host
Software的介入才会停止。 - 在3完成后,Host至少要在873.8 us内接检测到ALIGNp,否则会重新启动Power on程序(发送COMRESET),直到Host Software的介入。
- 在4中,如果Device在54.6us内未检测到来自Host的ALlGNp且没有额外的速度可以使用,则进入错误处理,等待重新连接。
2.1.4 Speed negotiation(速度协商)
在SATA协议中,Speed Negotiation(速率协商)是指主机和设备在链路初始化过程中,确定数据传输速率的步骤。SATA的速率协商过程使得主机和设备能够在兼容的最大速率下进行通信。SATA目前支持三种数据传输速率:1.5 Gbps(SATA I)、3.0 Gbps(SATA II)和6.0 Gbps(SATA III)。
Power On(上电)的最后就是Host和Device在进行速度协商。协商的过程如下
- Device 以 Gen3(6 Gbps)de 速度发送ALIGNp Primit