大家好,我是广元兄。很高兴和大家分享信号完整性的相关知识。希望大家点赞,分享。有什么问题加微交流学习,微信号【SI_Basic】。
Slogan:一起学习,共同进步!
这篇文档是SATA3.2版本,2013年的文档。
之前一直搞不清协议和总线以及接口间的关系,做了简单的总结,其实有些可以接口是复用的:
这里有讲到SAS和SATA,它们有共通性,比如相同的供电接口/规范,SATA硬盘可以直接插在SAS接口上工作,但SAS硬盘无法接在SATA接口上工作。
当然它们之间也是有区别的:
- SAS针对企业级的,SATA针对消费类产品;
- SAS支持双端口,SATA支持单端口;
- SAS支持全双工传输数据,SATA支持半双工;
- SAS支持8m线缆,SATA支持1m线缆。
针对服务器,多磁盘设备,比如多个SATA设备,通过RAID卡进行管理,使用的是RAID功能。关于RAID,简单地说,RAID是一种把多块独立的硬盘(物理硬盘)按不同方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据冗余的技术。
SATA3.2协议一共分为五层:应用层、命令层、传输层、链路层和物理层。根据SATA接口协议,SATA主机端和设备端实现通信时,各层之间进行数据交互。
物理层:实现主机端控制器与设备端控制器的链路初始化和速度协商,并将主机和设备的链路状态向链路层反馈,建立数据通道,实现串并转换、并串转换等操作。
SATA的电气性能部分,简单地列一下:
这里没有针对损耗和串扰给出相关的标准,但是在线缆(Cable)部分,就给出了量化的指标:
线缆部分,还有一点,需要注意的是:SATA支持的最大电流1.5A。
不同于PCIe只在TX端摆放耦合电容,SATA Gen1可选,Gen2和Gen3的TX/RX端都要摆放,容值≤12nF。
高速信号的协议测试,针对Gen3测试部分,有一个CIC(Compliance Interconnect Channel)一致性互连通道的问题。
一致性互连通道 (CIC) 定义为应用于发射器配对连接器的一组校准物理测试电路,代表着最高损耗的互连。
CIC用于发射端上的信号电气特性是否匹配连接器以确保符合Gen3i的输入电气规范,作为频率函数的这种最坏情况损耗的幅度在数学上定义为发射一致性传递函数 (TCTF)。任何线性、无源、差分双端口(例如,SATA 电缆)在所有频率上的损耗都大于 TCTF 并且满足 ISI 损耗约束(定义如下)被定义为 CIC一致性互连通道。
之前提到CIC,以为是CRC循环冗余校验(Cyclic Redundancy Check, CRC)一种利用除法及余数的原理来作错误侦测的,根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术。
链路层:接收传输层的数据,计算数据的CRC校验值,给数据加上帧头、帧尾和CRC校验信息。帧流量管控,从构建的帧中获取数据,使用 8b/10b 对每个字节进行编码或解码,并插入控制字符以便可以正确解码10位数据流。
基元(Primitives)是用于控制和提供串行线路状态的 Dword 实体。基元始终以控制字符开头,所有基元都使用 K28.3 控制字符来表示基元的开始,但以 K28 开头的 ALIGNp 除外。
一些基元的功能:
- ALIGNp 基元:物理层依靠ALIGNp进行数据对齐,成对发送;
- DMATp基元:通知发送端停止数据传输;
- CONTp基元:避免连续发送长串重复信息,减少EMI;
- HOLDp:流量的管控,避免接收数据缓冲区溢出。
链路层状态机是链路层的控制中心,主要包括四个部分:
- 空闲状态机;
- 发送状态机;
- 接收状态机;
- 电源管理状态机。
传输层:在链路层和应用层之间,负责组帧和解帧,主机和设备通过传输帧(Frame)的交互完成数据传递。
传输层不需要知道帧是如何传输和接收的。传输层简单地构造用于传输的帧信息结构 (FIS) 并分解接收到的 FIS。
FIS 是一组在主机和设备之间传递信息。如前所述,基元用于定义 FIS 的边界,并且可以插入以控制信息流的速率。本节描述 FIS 的信息内容称为有效负载(Payload),信息内容分为三类:
- 寄存器类型;
- 设置类型;
- 数据类型。
命令层:分为设备命令层和主机命令层
设备命令层/主机命令层主要是对收到的ATA/ATAPI命令的解析,并作出相关的回复。
主要的几条命令有:
- Non-data:检查设备的状态或者功能设置;
- PIO data in/out:主机端发送命令到设备端,设备端接到命令,准备好空间,接受/发送数据;
- NCQ:(Native Command Queue)命令的特点是主机可以一次发送多个命令,而不是一个命令完成再发送第二个命令,设备端决定命令的执行顺序。命令对应的数据不再限制一个数据库内,而是受FIS大小限制。例如主机发送两个PIO IN命令,设备可能只需要回一个PIO SETUP FIS和一个Data FIS就完成数据传输。这样在传输数据时,可以减小主机端与设备端FIS交互,提高传输数据的效率。
应用层:负责所有ATA命令的解析和执行,向处理器报告硬盘的运行状态,发起数据读写请求,完成硬盘工作模式的设置和读取等。
文档的第八章,当然别的章也有提到OOB(Out of Band)。SATA信号链接的建立主要是靠OOB(Out Of Band)的检测实现的,并且向上层链路层提供了物理层的连接情况。
OOB实际上主要有COMRESET/COMINIT与COMWAKE三个PHY信号线。
OOB主要作用:
- 初始化(initialization),对应COMINIT信号,设备端送往主机端,要求信号初始化。
- 传输速率的协商与对接,决定主机端与设备端做Gen1,Gen2或Gen3的传输,对应于COMRESET信号;
- 从省电状态的唤醒与重置,对应于 COMWAKE信号。
需要注意的是,虽然COMREST和COMINIT形式上是一样的,但COMREST只能从主机端到设备端,而COMINIT只能从设备端到主机端。
除了前面所说的RAID卡,还有SAS卡和HBA卡。
SAS卡:在某些不支持sas的服务器上面额外增加的一块pcie卡。便于服务器安装sas硬盘。一般支持做Raid0、1、10、1E或者直接识别sas硬盘。同时也兼容sata硬盘。
HBA卡:主机总线适配器(Host Bus Adapter,HBA)是一个在服务器和存储装置间提供输入/输出(I/O)处理和物理连接的电路板和/或集成电路适配器,是服务器内部的I/O通道与存储系统的I/O通道之间的物理连接,这种连接也可以是通用服务器和存储服务器之间的连接。
主机总线适配卡内部有一个小的中央处理器,一些内存作为数据缓存以及连接光纤通道和总线的连接器件等。这个小的中央处理器负责PCI和光纤通道两种协议的转换。它还有其他的一些功能,初始化与光纤通道网络连接的服务器端口,支持上层协议例如TCP/IP,SCSI等,8b/10b的编码解码等。
HBA卡种类:FC-HBA卡(俗称:光纤网卡)、iSCSI-HBA卡(RJ45接口)。