浅析SATA Physical Layer物理层OOB信号

一、SATA物理层概述

说OOB之前,首先得了解一下SATA结构以及物理层的含义。

SATA主要包括:应用层(Application Layer), 传输层(Transport Layer),链路层(Link Layer)以及物理层(Physical Layer), SATA结构如下图:
在这里插入图片描述
这四个主要部分的作用是什么呢?

Application Layer/Command Layer(可解读为同一层) :

  1. 最高层级的Layer,进行ATA或ATAPI command的执行,

  2. implementation上很多是用软件处理.

Transport Layer :

  1. 将Application Layer要做的Command转化成FIS的handshake,

  2. 对FIS的组成和解开.

Link Layer :

  1. 将要打出去的data做编码, 将收进来的data做解码,

  2. 维持Link Layer的handshake机制.

Physical Layer :

  1. Tx和Rx串行流(serial stream),

  2. 上电时序,

  3. 支持SATA电源管理选项,

  4. OOB(Out-of-Band)信号的产生与检测.

从上面的介绍中,我们看到物理层中有一个关键的功能就是OOB(Out-of-Band)信号的产生与检测, 这就是我们今天的主角~

二、OOB(Out of Band)信号解析

SATA信号链结的建立主要是靠OOB(Out Of Band)的检测实现的,并且向上层Link Layer提供了物理层的链结情况。

OOB主要的作用包括以下几点:

初始化(initialization),

传输速率的协商与对接(Speed negotiation),

—透过OOB handshake,host与device可以决定要在Gen1,Gen2或Gen3做data传输。

重置(Reset),

从省电状态(Slumer/Partial)的唤醒,

OOB信号实际上主要有COMRESET/COMINIT与COMWAKE三个PHY信号线。

1、COMRESET:Host对Device进行硬件重置以及SATA信号的重新建立。

2、COMINIT:由Device送往Host,要求信号初始化。

3、COMWAKE:Host或是Device装置可以激发该信号来将PHY从省电状态(Slumer/Partial)抽离。

COMRESET/COMINIT由两部分相互间隔构成,一部分是突发长度为160个UI (Unit Interval)约106.7ns的ALIGN,另一部分是长度为480UI约320ns的Idle。
在这里插入图片描述
需要注意的是,虽然COMREST和COMINIT形式上是一样的,但COMREST只能从host到device,而COMINIT只能从device到host。

COMWAKE同样是有两部分相互间隔组成,一部分是突发长度为160个UI (Unit Interval)约106.7ns的ALIGN,另一部分是长度为160个UI约106.7ns的Idle。
在这里插入图片描述
SATA信号通迅链结建立过程是什么?我们先来看一幅图哈~
在这里插入图片描述
看不懂?没关系,我们一步步的来解析一下详细的过程:
1、主机重置,发出COMREST。
2、设备检测到COMRESET后以COMINIT回应。
—COMINIT为重新连接开始信号,设备可以在任意时间发送COMINIT重新建立连接。
3、若没有COMINIT的通知,HOST就会重复步骤1,直到DEVICE回复为止,这也是系统允许热插拔的关键。
4、主机calibrate,发出COMWAKE。
5、设备接收到COMWAKE后,设备连续发送6个COMWAKE信号,接着连续发送ALIGN进行传送速度的协商。
6、主机锁存资料。主机接收到COMWAKE后,以支援的最低速率连续发送D10.2资料,同时锁存检测接收的资料,当检测到设备发送的ALIGN后,以接收的速率将ALIGN转发给设备。
注:D10.2是0101010101…这样0和1交替的波形, 可以让device端更容易做clock recovery的动作.
7、主机在发送了COMWAKE后至少要在880ps内接检测到ALIGN,否则主机重启上电序列重新检测设备,直到应用层将其终止。
8、设备锁存资料,检测到ALIGN后发送同步信号SYNC,通讯建立成功,进入到正常操作模式。如在54.6us内未检测到ALlGN,则进入错误处理,等待重新连接。
9、当主机接收到三个非ALIGN后,链结建立完成,进入正常操作。

Device与Host连接是首先从Device支持的最高速开始的,如果最高速不满足则用较低速率再次匹配,直到最低速率也不能匹配后Device将进入error状态; 换速等待时间为54.6us(2048个ALIGN DWORD传输时间);
在这里插入图片描述
三、实例分享

我们来看个小编工作中遇到的一个实例–fail现象是正常上电之后SATA SSD无法被识别。

抓取正常上电之后fail sample SATA trace如下:
在这里插入图片描述
从上面的SATA trace结合前面SATA通讯链路建立的9个步骤,我们可以发现第六步之后就出问题了:

Device传送最高速度(6.0G)的Align无法顺利被SATA analyzer解析出来,再降速送Align(3.0G, 1.5G)依然无法被SATA analyzer解析, host也没有回应, speed negotiation失败。最终,Host再次发送COMRESET,进入死循环。
正是由于SATA信号通讯链路无法建立,导致SATA SSD在上电之后始终无法被识别到。
最后附上SSD可以被正确识别的SATA trace供各位看官参考:
在这里插入图片描述

  • 12
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
OOB(Out-of-Band)信号在FPGA(Field-Programmable Gate Array)中的实现通常涉及以下步骤: 1. OOB信号定义:首先,需要确定所需的OOB信号的功能和规范。这可能包括OOB信号的名称、电气特性、传输协议等。 2. 硬件设计:在FPGA的硬件设计中,需要根据OOB信号的规范来设计相应的电路。这可能涉及使用逻辑门、寄存器、时钟等组件来实现所需的功能。 3. 约束设置:在FPGA设计中,需要进行约束设置以确保正确的时序和电气特性。这包括设置时钟频率、信号延迟和时序要求等。 4. 逻辑设计和编程:基于OOB信号定义和硬件设计,需要进行逻辑设计和编程,将所需的功能映射到FPGA中。这可以使用硬件描述语言(如VHDL或Verilog)来完成。 5. 仿真和验证:在实际部署之前,需要进行仿真和验证来确保OOB信号在FPGA中的正确功能。这可以通过使用仿真工具和测试平台来完成。 6. FPGA配置:一旦硬件设计和验证通过,可以将FPGA配置为实现所需的OOB信号功能。这通常涉及将逻辑设计编译成位流文件,并将其加载到FPGA芯片中。 7. 集成和系统测试:最后,需要将FPGA集成到整个系统中,并进行系统级测试以确保OOB信号的正确性和可靠性。 需要注意的是,具体的OOB信号实现方法可能因应用场景和需求而有所不同。上述步骤提供了一般的指导,但在实际应用中可能需要根据具体情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值