USB 3.0 LTSSM 状态机

USB2.0在电源供应后,通过Pull Up D-来决定枚举LS,Pull Up D+有一个USB高速握手过程,来决定HS FS。USB3.0则会通过链路训练(Link Training),来准备USB3.0通信。

每当我们插上USB线的时候,对于3.0的5G频率来说,USB线全程的状态需要参数调整,在long channel和short channel的问题上可能也有不同,链路五花八门,我们需要磨练出来适合自己链路的参数

今天介绍一下USB3.0基于Upstream Facing Port(USB设备)Downstream Facing Port(USB主机)使用LTSSM(Link Training and Status State Machine) 进行链路训练过程。

USB 3.0 协议栈

我们可以看到USB实际主要是3层通信模型,协议层,链路层,物理层。链路训练主要是使用链路层定义的相关包进行协议通信的过程。

LTSSM

基于链路层,物理层提供了很多处理单元来轮转链路训练状态

同时我们可以看到LTSSM的12种状态。LTSSM有12个高级状态,用于链路训练,再训练,链路级错误处理,链路电源管理,链路测试管理。

操作状态:U0,U1,U2,U3。

链路初始化和训练状态:Rx.Detect、Polling、Hot Reset、Recoverry。

其它状态:SS.Inactive、SS.Disabled。

我们重点关注Rx.Detect和Polling状态机,Link Training主要使用这两个状态。

USB 3.0的LTSSM用于在USB 3.0设备间建立通信链接前进行链路训练。链路训练的目标是确保一个可靠的5 Gb/s信号。链路训练将适应实际链路信号条件的主要负担放在了每个链路伙伴的接收物理层(PHY)逻辑上

链路训练的主要任务包括:

接收均衡(Receiver Equalization)由于USB 3.0的高速率,传输路径上的高频损耗较大,因此接收端需要进行均衡以补偿高频损耗,保证信号完整性。训练过程中,发送端会发送特定的比特流模式(pattern),接收端根据这些模式调整均衡参数。接收机均衡逻辑的设置在链路训练期间分两步完成。

第一步:发射机首先发送 10-50 MHz 的 Polling.LFPS 脉冲串,提醒链路伙伴的 LTSSM 开始训练,并允许接收机设置低频参数(也被宽泛地称为直流参数)。由于频率较低,无论信道长度如何,接收机都应能恢复有效的 LFPS 方波信号。

第二步:接下来,发射机发送 5 Gb/s 超高速训练序列(TSEQ)有序集,让接收机建立高频均衡器参数。为了提供多种硬件均衡解决方案,发射机需要重复 32 个符号的 TSEQ 有序集 65,536 次耗费大约 4毫秒的链路训练时间,约 4mS 的链路训练时间。

时钟恢复(Clock Recovery)USB 3.0的时钟是内嵌在数据流中的,为了保证接收端可以从数据流中恢复时钟,采用了8b/10b编码。在发送训练序列(TSEQ)时,接收端会从数据流中恢复时钟。时钟恢复使用均衡期间接收到的 TSEQ 有序集。之后,在退出 U1、U2 和 U3 电源管理等状态时,使用 TS1/TS2 有序集进行时钟恢复。

数据恢复(Data Recovery)使用恢复的时钟对数据进行采样,将每个比特的数据恢复出来,并送入串并转换模块。(Serial ToParallel)

串并转换和字符锁定(Serial to Parallel Conversion and Symbol Lock)数据恢复后,需要将比特流转换为10比特一组的数据符号,并找到起始点以正确解读数据。

极性翻转(Differential Polarity Inversion)高速链路使用差分信号,极性翻转是为了确保信号的正确传输。

弹性缓冲区初始化(Elastic Buffer Initialization)弹性缓冲区作为链路时钟和本地时钟的中间过渡区域,初始化过程主要是将数据符号搬运到缓冲区中,并确保缓冲区不会出现溢出或欠载。

LTSSM的握手信号

LTSSM使用下面3种信号来握手。

LPFS

有6个LFPS信号,其中5个用于LTSSM状态转换(差异是Burst不一样),如上图12-2所示。

Ordered Sets

在链路训练过程中,TSEQ、TS1和TS2有序集以两种方式使用,如上图12-3。首先,它们使接收机物理层能够接收连接到链路合作伙伴的超高速发射机的电气接口。这包括接收机均衡化、时钟和串行数据恢复、弹性缓冲区管理等。其次,随着链路训练的进行,这些有序集的交换被用来推进LTSSM状态,直到进入U0链路状态。

Link Conmmands

USB 3.0定义了一组电源管理链路命令如上图12-4,在请求链路伙伴从U0到U1、U2、U3或U3时使用。使用链路命令代替TS1/TS2有序集有两个优点,都与速度有关。首先,链接命令的长度为8字节(TS1/TS2s的长度为16字节)。其次,使用链接命令节省了额外的时间,因为它避免了通过恢复转换(在使用TS2有序集时根据需要)。

注:LGO_Ux链路命令用于从U0过渡到电源管理状态U1-U3,从链路状态U1-U3退出需要一个LFPS握手以退出电气空闲,并通过恢复进行过渡以返回到U0。

Link Training轮转LTSSM

下面将从链路从初始状态过渡到允许 5 Gb/s 超高速数据包传输的 U0 运行状态所需的事件序列来描述链路训练。如上图7-13描述了12个状态机轮转条件。整个链路训练过程由LTSSM管理,涉及到多个状态和子状态,主要是从RX.Detect到Polling.Idle等,最终进入USB 3.0的正常工作状态U0,这个过程确保了USB 3.0设备间的可靠通信和高效数据传输。

链路初始化和训练状态Rx.Detect、Polling、HotReset、Recoverry

Rx.Detect

如上图12-9,链路训练的初始状态,设备在电源上电复位后开始处于Rx.Detect状态。也可以从其他LTSSM状态通过特定的超时或热复位转移到Rx.Detect状态。在LTSSM的Rx.Detect状态下,每个SS(SuperSpeed)设备会定期尝试检测链路伙伴,方法通过检查远端接收器的低阻抗端接来判断有SS设备接入。

Rx.Detect.Reset

Rx.Detect.Reset子状态中的要求

在Rx.Detect.Reset子状态中,设备正在等待电源开启重置初始化完成,然后才能进行链路训练。以下要求适用于LTSSM处于Rx.Detect.Reset状态时。请注意,对于面向下游(DS)的端口和面向上游(US)的端口,要求略有不同。

• 如果进入此子状态是由于电源开启重置,那么上游和下游端口将完成所需的内部初始化。

• 如果进入此子状态是由于温重启,则面向下游的端口将继续驱动温重启LFPS信号80-100毫秒(tReset)。

• 如果进入此子状态是由于温重启,则面向上游的端口将保持在此子状态,直到温重启信号结束。

退出Rx.Detect.Reset子状态的规定

• 如果进入此子状态是由于电源开启重置,那么当上游和下游端口完成所需的内部初始化时,它们将进入Rx.Detect.Active子状态(无需握手)。

• 如果进入此子状态是由于Warm Reset,则面向下游的端口在完成80-100毫秒的温重启LFPS信号后,将过渡到Rx.Detect.Active子状态(无需握手)。

• 如果进入此子状态是由于Warm Reset,则面向上游的端口将在温重启LFPS信号结束时过渡到Rx.Detect.Active子状态(无需握手)。

Rx.Detect.Active

在Rx.Detect.Active子状态中的要求

这是 Rx.Detect 链路训练状态的第二个子状态。此状态的目的是在尝试链路训练之前,为连接设备提供一个检测是否存在超高速链路伙伴的机会。在Rx.Detect.Active子状态中,设备尝试确认SuperSpeed链路伙伴的存在。该方案涉及每个发射机通过电气检测远端接收器的端接阻抗。以下要求适用于LTSSM处于Rx.Detect.Active状态时。请注意,对于面向下游(DS)的端口和面向上游(US)的端口,要求略有不同。

• 所有端口的发射机都尝试感知远端接收器的端接。

• 面向上游的端口需要计数检测尝试,并在八次尝试后过渡到SS.Disabled状态。如果发生这种情况,设备将“故障转移”并尝试以USB 2.0速度建立连接。可以参考上图9-1。

Rx.Detect.Active子状态的退出规则

在Rx.Detect.Active子状态中有三种可能的退出状态。上游(US)和下游(DS)端口都遵循的退出规则:

• 如果检测到远端低阻抗接收器端接(RRX-DC),端口将过渡到Polling状态。

仅下游(DS)端口遵循的退出规则:

• 当被指示时,面向下游的端口将过渡到SS.Disabled状态。

• 如果没有检测到远端低阻抗(RRX-DC),面向下游的端口将过渡到Rx.Detect.Quiet状态。

仅上游(US)端口遵循的退出规则:

• 如果没有检测到远端低阻抗(RRX-DC),面向上游的集线器端口将过渡到Rx.Detect.Quiet状态。

• 如果没有检测到远端低阻抗(RRX-DC),并且检测尝试次数少于八次,面向上游的外围设备端口将过渡到Rx.Detect.Quiet状态。

• 如果没有检测到远端低阻抗(RRX-DC),并且检测尝试次数达到八次,面向上游的外围设备端口将过渡到SS.Disabled状态。规范指出,八次尝试规则使设备能够在大约80毫秒内“故障转移”到USB 2.0速度。

USB3.0终端电阻检测原理

如上图20-8,20-9在USB3.0中Device连接到Host等价于连接了一个R_Term,右图为不接Device的等效电路,此时由于R_term不存在,故电路模型实际为一RC串联电路,可简单计算出时间因子:

T=R_Detect*C_Parasitic

左图为接上Device的等效电路,此时R_term存在,得出此时时间因子:

T=(R_Detect+R_Term)*(C_AC+C_Parasitic)

显然后者远远大于前者(Tcharge就是这个参数),故有无设备可根据充放电时间进行判断。计算出另外R_Term是否满足协议中规定的RTX-DC(18-30ohm)的要求,判断是否有终端电阻接入,另外接入R_term后,会对R_Detect产生分压的作用,电压会有所下降。

Rx.Detect.Quiet

在Rx.Detect.Quiet子状态中的要求

在Rx.Detect.Quiet子状态中,设备尝试在连续尝试检测链路伙伴存在之间节省电源。这在USB动态连接/移除环境中非常有用。设备在Rx.Detect状态之间每12毫秒从Rx.Detect.Active子状态转换到Rx.Detect.Quiet子状态,直到检测到链路伙伴。在Rx.Detect.Quiet期间,发射机关闭检测逻辑,并等待定时器到期,然后再次尝试。以下要求适用于LTSSM处于Rx.Detect.Quiet状态时的上游和下游端口。

• 禁用远端接收器端接检测

• 在进入子状态时启动一个12毫秒的定时器,tRxDetectQuietTimeout。

Rx.Detect.Quiet子状态的退出规则

在Rx.Detect.Quiet子状态中有两种可能的退出状态。退出规则如下:

• 每当12毫秒定时器到期时,所有端口都会过渡到Rx.Detect.Active状态。

• 当被指示时,面向下游的端口将过渡到SS.Disabled状态。

Polling

Polling是链路训练的第二步,可使设备在实际链路条件下调整其超高速发射机和接收机,以适应 5 Gb/s的运行。交换 LFPS 脉冲串和 TSEQ、TS1、TS2 有序集,可实现接收器均衡、时钟和数据恢复、差分信号反转等功能。

Polling.LFPS

在Polling.LFPS子状态中的要求

一旦检测到链路伙伴处于 Rx.Detect.Active,两个(上游和下游)端口都将进入轮询状态以训练链路。在Polling.LFPS子状态中,设备使用简单的10-50MHz LFPS方波建立接收器PHY直流工作点。Polling.LFPS的交换还启动了握手过程,这将携带它们完成剩余的链路训练。以下要求适用于LTSSMs处于Polling.LFPS子状态时的上游和下游端口。

• 进入Polling.LFPS子状态时,所有端口必须启用LFPS接收器检测。

• 一旦接收器检测到Polling.LFPS信号,它必须在80微秒内建立直流工作点。接收器可以选择也使用Polling.LFPS开始均衡器训练。

• 所有端口在进入Polling.LFPS子状态时启动一个360毫秒的定时器(tPollingLFPSTimeout)。

Polling.LFPS子状态的退出规则

上游(US)和下游(DS)端口都遵循的规则:

• 端口在以下条件满足时过渡到Polling.RxEQ状态:

1)至少发送了16个Polling.LFPS脉冲;

2)接收到了两个连续的Polling/LFPS脉冲;

3)在从链路伙伴接收到至少一个Polling.LFPS脉冲后发送了四个连续的Polling.LFPS脉冲。

polling_lfps_sent_count*(发送的LFPS突发数量)[16]

polling_lfps_received_count* (收到LFPS数量) [2]

polling_lfps_sent_after_received_count*(从链路伙伴接收到第一个 LFPS 后发送的 LFPS 突发数)[4]

• 如果360毫秒的Polling.LFPS定时器(tPollingLFPSTimeout)到期,并且满足另外两个条件,则端口过渡Compliance Mode状态:

1)自上次电源开启重置以来,端口从未完成Polling.LPFS;

2)成功完成Polling.LFPS握手以过渡到Polling.RxEQ尚未发生。

仅下游(DS)端口遵循的退出规则:

• 当被指示时,面向下游的端口将过渡到SS.Disabled状态。

• 当被指示发出温重启时,面向下游的端口将过渡到Rx.Detect状态。

• 如果360毫秒的Polling.LFPS定时器(tPollingLFPSTimeout)到期,并且自电源开启重置以来链路至少训练过一次,则面向下游的端口将过渡到Rx.Detect状态。

Polling.RxEq

在Polling.RxEQ子状态中的要求

在Polling.RxEQ子状态中,设备在SuperSpeed链路上交换第一次5 Gb/s的流量。发送和接收65,536个TSEQ有序集(每个TSEQ有序集32字节),允许接收器PHY完成均衡器训练。以下要求适用于LTSSMs处于Polling.RxEQ子状态时的上游和下游端口。

• 如果检测到线路极性反转,每个接收器必须进行纠正。

• 端口传输65,536个TSEQ有序集。

• 接收器基于接收到的TSEQ有序集训练均衡器逻辑。

Polling.RxEQ子状态的退出规则

上游(US)和下游(DS)端口都遵循的规则:

• 在接收器均衡完成并且向链路伙伴发送了65,536个TSEQ有序集后,端口自动过渡到Polling.Active状态。仅下游(DS)端口遵循的退出规则:

• 当被指示时,面向下游的端口将过渡到SS.Disabled状态。

• 当被指示发出温重启时,面向下游的端口将过渡到Rx.Detect状态。

仅上游(US)端口遵循的退出规则:

• 当检测到Warm Reset,面向上游的端口将过渡到Rx.Detect状态。

Polling.Active

在Polling.Active子状态中的要求

在Polling.Active子状态中,接收器均衡已完成,设备继续进行链路训练的剩余部分。在此子状态中使用TS1有序集,并且可能会看到TS2有序集,因为一个设备可能在其链路伙伴退出此子状态之前进入下一个子状态,Polling.Configuration。请注意,在Polling.Active状态下,面向下游(DS)的端口和面向上游(US)的端口的要求略有不同。

• 端口在进入时启动一个12毫秒的定时器(tPolling.ActiveTimeout)。

• 端口向链路伙伴传输TS1有序集。

• 接收器完成任何剩余的训练任务,然后准备过渡到Polling.Configuration子状态。

Polling.Active子状态的退出规则

在Polling.Active子状态中有三种可能的退出状态。

上游(US)和下游(DS)端口都遵循的退出规则:

• 当接收到八个连续且相同的TS1或TS2有序集时,端口过渡到Polling.Configuration子状态。仅下游(DS)端口遵循的退出规则:

• 当被指示时,面向下游的端口将过渡到SS.Disabled状态。

• 当被指示发出温重启时,面向下游的端口将过渡到Rx.Detect状态。

• 如果12毫秒的定时器(tPollingActiveTimeout)到期且未满足过渡到Polling.Configuration的要求,面向下游的端口将过渡到Rx.Detect状态。

仅上游(US)端口遵循的退出规则:

• 如果12毫秒的定时器(tPollingActiveTimeout)到期且未满足过渡到Polling.Configuration的要求,面向上游的集线器端口将过渡到Rx.Detect状态。

• 如果12毫秒的定时器(tPollingActiveTimeout)到期且未满足过渡到Polling.Configuration的要求,面向上游的外围设备端口将过渡到SS.Disabled状态。

• 当检测到温重启时,面向上游的端口将过渡到Rx.Detect状态。

Polling.Configuration

在Polling.Configuration子状态中的要求

在Polling.Configuration子状态中,链路伙伴信号表明它们已完成链路训练。此外,在此子状态中提供了设置TS2重置、环回或禁用扰码位的机会。如果设置了这些位中的一个,那么过渡到U0以外的LTSSM状态是可能的。请注意,在Polling.Configuration状态下,面向下游(DS)的端口和面向上游(US)的端口的要求略有不同。

• 端口在进入时启动一个12毫秒的定时器(tPollingConfigurationTimeout)。

• 端口向链路伙伴传输TS2有序集。端口还可以选择在TS2有序集的符号5中设置(HOt)Reset。注意:TS2重置位仅在响应从下游面向端口收到的TS2中检测到重置位设置时,由上游面向端口发送的TS2中设置。

• 端口还可以选择在TS2有序集的符号5中设置环回或禁用扰码位。Polling.Configuration子状态的退出规则

在Polling.Configuration子状态中有三种可能的退出状态。

• 当接收到八个连续且相同的TS2有序集并且发送了至少8个连续且相同的TS2后发送了16个TS2有序集时,所有端口过渡到Polling.Idle子状态。

仅下游(DS)端口遵循的退出规则:

• 当被指示时,面向下游的端口将过渡到SS.Disabled状态。

• 当被指示发出温重启时,面向下游的端口将过渡到Rx.Detect状态。

• 如果12毫秒的定时器(tPollingConfigurationTimeout)到期且未满足过渡到Polling.Idle的要求,面向下游的端口将过渡到Rx.Detect状态。

仅上游(US)端口遵循的退出规则:

• 如果12毫秒的定时器(tPollingConfigurationTimeout)到期且未满足过渡到Polling.Idle的要求,面向上游的集线器端口将过渡到Rx.Detect状态。

• 如果12毫秒的定时器(tPollingConfigurationTimeout)到期且未满足过渡到Polling.Idle的要求,面向上游的外围设备端口将过渡到SS.Disabled状态。

• 如果检测到Warm Reset,面向上游的端口将过渡到Rx.Detect状态。

Polling.Idle

在Polling.Idle子状态中的要求

在Polling.Idle子状态中,链路伙伴解码在Polling.Configuration子状态中接收到的TS2,并确定下一个LTSSM状态应该是U0、环回还是热重启。在Polling.Idle状态下,面向下游(DS)的端口和面向上游(US)的端口的要求略有不同。

• 端口在进入时启动一个2毫秒的定时器(tPollingIdleTimeout)。

• 端口解码在Polling.Configuration子状态中早些时候接收到的TS2。

• 面向下游的端口重置链路错误计数(LEC)。

• 面向上游的端口重置端口配置信息。

• 端口启用扰码,除非在接收到的TS2中明确禁用。

• 如果下一个LTSSM状态是U0,端口开始传输(逻辑)空闲符号。

• 端口准备接收来自链路伙伴的Header Sequence Number和Flow Control Credit广告。

Polling.Idle子状态的退出规则

在Polling.Idle子状态中有五种可能的退出状态。上游(US)和下游(DS)端口都遵循的退出规则:

• 当被指示并且设备能够作为环回主设备时,端口过渡到环回状态。

• 当在Polling.Configuration期间接收到带有环回位设置的TS2有序集,并且设备能够作为环回从设备时,端口过渡到环回状态。• 如果TS2有序集中没有设置环回和重置位,并且满足以下两个条件时,端口过渡到U0状态:

1)接收了八个连续的空闲符号;

2)在从链路伙伴接收至少一个空闲符号后发送了十六个连续的空闲符号。

仅下游(DS)端口遵循的退出规则:

• 当被指示时,面向下游的端口将过渡到SS.Disabled状态。

• 当被指示发出温重启时,面向下游的端口将过渡到Rx.Detect状态。

• 当被指示发出热重启时,面向下游的端口将过渡到HOT Reset状态。

• 如果2毫秒的定时器(tPollingIdleTimeout)到期且未满足过渡到U0的要求,面向下游的端口将过渡到Rx.Detect状态。

仅上游(US)端口遵循的退出规则:

• 如果2毫秒的定时器(tPollingIdleTimeout)到期且未满足过渡到U0的要求,面向上游的集线器端口将过渡到Rx.Detect状态。

• 如果2毫秒的定时器(tPollingIdleTimeout)到期且未满足过渡到U0的要求,面向上游的外围设备端口将过渡到SS.Disabled状态。

• 当检测到温重启时,面向上游的端口将过渡到Rx.Detect状态。

通过链路命令进入U0(如分析仪Enter U0,后续就开始了设备枚举)就算是链路训练完成了。

Recovery

恢复提供低延迟的重训练和返回U0状态,适用于那些已经完成完整链路训练的链路。这个状态在电源管理退出、由于不可恢复的链路错误等原因时进入。由于接收器均衡和其他参数被保留,恢复是一个低延迟的事件。

注意其中Recovery.Active Recovery.Configuration Recovery.Idle不作详细描述

Hot Reset

Hot Reset提供了一种低延迟的重置方法,适用于那些之前已经完成完整链路训练的链路。热重置避免了长时间的热重置和过渡到Rx.Detect以进行完整链路训练的过程,而是假设之前建立的某些物理层(PHY)参数仍然有效。如果热重置成功,链路伙伴将使用TS2有序集进行握手,初始化内部逻辑,并快速返回U0状态。热重置始终由下游面向端口在软件控制下发起。在热重置期间,所有端口将保持正常的发射器和接收器电气规格,包括低阻抗接收器端接(RRX-DC)。下游面向端口还将重置链路错误计数(LEC)、电源管理定时器和U1/U2不活动定时器。

注意:其中 Hot Reset.Active Hot Reset.Exit不作描述。

U0

U0是SuperSpeed连接的活跃、功能状态。在这个状态下,数据包和链路命令的发送和接收不会因为链路电源管理而产生延迟。在没有其他流量的情况下,NOP(逻辑空闲)符号和时钟补偿SKP有序集使得接收器能够与发射器保持同步。

在U0状态下的要求

当LTSSM处于U0状态时,以下要求适用。请注意,对于面向下游(DS)的端口和面向上游(US)的端口,要求略有不同。

• 端口必须遵守所有U0发射器和接收器的电气规格,包括低阻抗接收器端接,RRX-DC。

• 启动1毫秒的tU0RecoveryTimeout定时器,以跟踪连续入链路命令之间的间隔。每当接收到链路命令时,定时器都会重新启动。

• 在进入U0时,也启动一个10微秒的tU0LTimeout定时器。这个定时器跟踪连续发送给链路伙伴的链路命令之间的总线空闲间隔。在发送第一个出链路命令的符号时重置定时器,并在发送最后一个符号时开始倒数,链路进入逻辑空闲状态。

• 如果没有其他链路流量,并且10微秒的tU0LTimeout定时器(见前述项目)到期,面向下游的端口将发送一个LDN链路命令;面向上游的端口将发送一个LUP链路命令。这些链路命令重新确认链路仍在正常工作,合作伙伴仍然处于U0状态。

U0状态的退出规则

从U0状态有七种可能的退出方式(见第12-5页的图)。

上游(US)和下游(DS)端口都遵循的退出规则:

• 如果LGO_U1握手成功完成,端口将过渡到U1。

• 如果LGO_U2握手成功完成,端口将过渡到U2。

• 如果LGO_U3握手成功完成,端口将过渡到U3。注意,只有面向下游的端口,在软件控制下,才能发起到U3(挂起)的过渡。

• 如果被指示,端口将过渡到恢复状态。

• 如果检测到TS1有序集,端口将过渡到恢复状态。

• 对于与头部数据包流控制和错误处理相关的各种错误条件,端口将根据规范中的定义过渡到恢复状态。这包括PENDING_HP_TIMER、CREDIT_HP_TIMER超时,重播计数器溢出等。

• 当PENDING_HP_TIMER超时第四次时,端口将过渡到SS.Inactive。

仅下游(DS)端口遵循的退出规则:

• 当被指示时,面向下游的端口将过渡到SS.Inactive。

• 如果U3入口握手失败三次,面向下游的端口将过渡到SS.Inactive。

• 当被指示时,面向下游的端口将过渡到SS.Disabled。

• 当被指示对链路发出温重启时,面向下游的端口将过渡到Rx.Detect状态。

• 如果tU0Recovery定时器到期,表示在1毫秒内没有收到数据包或链路命令(包括LUP),面向下游的端口将过渡到恢复状态。

仅上游(US)端口遵循的退出规则:

• 自行供电设备的上游面向端口当VBUS关闭时,将过渡到SS.Disabled。

• 当检测到温重启时,上游面向端口将过渡到Rx.Detect。

• 当被指示时,上游面向端口将过渡到SS.Disabled。这发生在进入U0状态后,如果在规定的时间内没有收到端口能力LMP。

• 上游面向端口在tU0Recovery定时器到期时,如果1毫秒内没有收到数据包或链路命令(包括LDN),将过渡到恢复状态。

U1

U1是一个电源管理状态,在这个状态下,链路被禁用以在空闲时间节省电源。U1状态被假设为比U2状态节省的电源少,但在需要返回U0状态时具有较短的“退出延迟”。USB 3.0描述符使软件能够确定每个设备的U1和U2退出延迟。这些信息使电源管理软件能够为每个链路做出明智的电源管理决策。

在U1状态下的要求

在LTSSM处于U1状态时,以下要求适用。请注意,对于面向下游(DS)的端口和面向上游(US)的端口,要求略有不同。

• 端口接收器必须保持低阻抗接收器端接,RRX-DC。

• 端口发射器必须保持SuperSpeed发射器的直流共模电压,符合VTX-CM-DC-ACTIVE-DELTA的规定。

• 端口必须保持LFPS检测启用,以便识别U1退出LFPS信号。

• 面向上游的端口还必须检测Warm Reset LFPS信号。

• 当启动从U1状态退出时,端口启用LFPS发射器。

• 端口在进入U1时启用U2不活动定时器倒计时(如果U2不活动定时器的值大于0)。

• 面向下游的端口保持启用,以检测Ping.LFPS,并启用300毫秒的tU1PingTimeout定时器,以验证链路伙伴定期发送Ping.LFPS。

• 面向上游的端口每隔160-240毫秒发送Ping.LFPS。

U1状态的退出规则

在U1状态有五种可能的退出状态。

上游(US)和下游(DS)端口都遵循的退出规则:

• 如果启用了U2不活动定时器并且到期,端口将无声地过渡到U2。

• 如果U1退出LFPS握手信号完成成功,端口将过渡到恢复状态。

• 如果U1退出LFPS握手信号失败,并且2毫秒的tNoLFPSResponseTimeout超时,端口将过渡到SS.Inactive。

仅下游(DS)端口遵循的退出规则:

• 当被指示时,面向下游的端口将过渡到SS.Disabled。

• 当Ping.LFPS未收到并且300毫秒的tU1PingTimeout超时时,面向下游的端口将过渡到Rx.Detect状态。

• 当被指示对链路发出温重启时,面向下游的端口将过渡到Rx.Detect状态。

仅上游(US)端口遵循的退出规则:

• 自行供电设备的上游面向端口当VBUS关闭时,将过渡到SS.Disabled。

• 当检测到Warm Reset时,上游面向端口将过渡到Rx.Detect。

U2

U2是一个电源管理状态,在该状态下,链路在空闲时间被禁用以节省电源。U2状态被假设为比U1状态节省更多的电源,但在需要返回U0状态时具有更长的“退出延迟”。USB 3.0描述符使软件能够确定每个设备的U1和U2退出延迟。这些信息使电源管理软件能够为每个链路做出明智的电源管理决策。

在U2状态下的要求

在LTSSM处于U2状态时,以下要求适用。请注意,对于面向下游(DS)的端口和面向上游(US)的端口,要求略有不同。

• 端口发射器不需要保持SuperSpeed发射器的直流共模电压在规格VTX-CM-DC-ACTIVE-DELTA内。

• 端口接收器必须保持低阻抗接收器端接,RRX-DC。

• 端口必须保持LFPS检测启用,以便识别U2退出LFPS信号。• 面向上游的端口还必须检测温重启LFPS信号。

• 当启动从U2状态退出时,端口启用LFPS发射器。

• 面向下游的端口必须意识到链路伙伴可能处于U1或U2状态,因为U2不活动转换是无声的。如果伙伴处

于U1状态,它将每200毫秒发送Ping.LFPS;面向下游的端口必须区分Ping.LFPS和U1 LFPS退出信号。

• 面向下游的端口必须每100毫秒进行远端接收器端接检测(使用tU2RxdetDelay超时)。

U2状态的退出规则

在U2状态有四种可能的退出状态。

上游(US)和下游(DS)端口都遵循的退出规则:

• 如果U2退出LFPS握手信号完成成功,端口将过渡到恢复状态。

• 如果U2退出LFPS握手信号失败,并且2毫秒的tNoLFPSResponseTimeout超时,端口将过渡到SS.Inactive。

仅下游(DS)端口遵循的退出规则:

• 当被指示时,面向下游的端口将过渡到SS.Disabled。

• 当检测到远端高阻抗端接ZRX-HIGH_IMP_DC_POS时,面向下游的端口将过渡到Rx.Detect状态。

• 当被指示对链路发出温重启时,面向下游的端口将过渡到Rx.Detect状态。

仅上游(US)端口遵循的退出规则:

• 自行供电设备的上游面向端口当VBUS关闭时,将过渡到SS.Disabled。

• 当检测到Warm Reset时,上游面向端口将过渡到Rx.Detect。

U3 (Suspend)

U3是挂起电源管理状态,提供最大的电源节省,但涉及最长的退出延迟。与进入U1和U2电源管理状态的硬件控制不同,U3状态的进入总是由软件发起的。请求进入U3的请求起源于下游面向端口。

在U3状态下的要求

在LTSSM处于U3状态时,以下要求适用。请注意,对于面向下游(DS)的端口和面向上游(US)的端口,要求略有不同。

• 端口发射器不需要保持SuperSpeed发射器的直流共模电压在规格VTX-CM-DC-ACTIVE-DELTA内。

• 端口接收器必须保持低阻抗接收器端接,RRX-DC。

• 端口必须保持LFPS检测启用,以便识别U3退出LFPS信号。

• 面向上游的端口还必须检测温重启LFPS信号。

• 当启动从U3状态退出时,端口启用LFPS发射器。

• 面向上游的端口不发送Ping.LFPS。• 面向下游的端口禁用Ping.LFPS检测。

• 面向下游的端口每100毫秒进行远端接收器端接检测(使用tU3RxdetDelay超时)。

• 与U1和U2状态不同,如果在10毫秒的tNoLFPSResponseTimeout内无法响应U3退出LFPS信号,不会导致过渡到SS.Inactive。如果端口无法在其链路伙伴的U3退出LFPS信号内响应,当准备好返回U0时,它可以启动U3 LFPS唤醒。在重新尝试唤醒之前,应观察100毫秒的延迟(tU3WakeupRetryDelay)。

U3状态的退出规则

在U3状态有三种可能的退出状态。

上游(US)和下游(DS)端口都遵循的退出规则:

• 如果U3退出LFPS握手信号完成成功,端口将过渡到恢复状态。

• 如果U3退出LFPS握手信号失败,并且10毫秒的LFPS握手超时(tNoLFPSResponseTimeout)到期,端口将保持在U3状态。在延迟100毫秒(tU3WakeupRetryDelay)后,设备可以选择发送U3 LFPS唤醒信号以唤醒主机,当准备好返回U0时。

仅下游(DS)端口遵循的退出规则:

• 当被指示时,面向下游的端口将过渡到SS.Disabled。

• 当检测到远端高阻抗端接ZRX-HIGH_IMP_DC_POS时,面向下游的端口将过渡到Rx.Detect态。

• 当被指示对链路发出温重启时,面向下游的端口将过渡到Rx.Detect状态。仅上游(US)端口遵循的退出规则:

• 自行供电设备的上游面向端口当VBUS关闭时,将过渡到SS.Disabled。

Compliance Mode

将从轮询过程中输入Compliance Mode。LFPS子状态,用于验证超高速发射器满足各种可能的USB 3.0物理通道的电压等规定,比如USB眼图测试

Compliance Mode的要求

在Compliance Mode下,以下要求适用。请注意,Compliance Mode通常涉及一个测试夹具和一个待测设备(DUT)。DUT是九种测试模式的来源;它的链路伙伴负责在每次需要推进测试模式时发送Ping.LFPS脉冲(CP0-CP8)。

• 端口保持低阻抗接收器端接,RRX-DC。• 端口启用LFPS接收器。

• 负责发送合规测试模式的端口在发送第一个Compliance Mode(CP1)之前,必须符合SuperSpeed发射器的直流共模电压规范,VTX-CM-DC-CM。

• 端口在检测到Ping.LFPS时发送下一个Compliance Mode。

• 当最后一个Compliance Mode(CP8)处于活动状态并且再次接收到Ping.LFPS时,第一个模式(CP0)会连续发送,直到检测到Compliance Mode退出。

Compliance Mode退出规则

如图12-13所示,有两条可能的退出路径。

• 面向下游的端口在收到指示时将过渡到SS.Disabled状态。

• 面向下游的端口在收到指示对链路发出温重启时将过渡到Rx.Detect状态。

• 面向上游的端口在检测到温重启时将过渡到Rx.Detect状态。

Loopback

回环测试提供了一种标准的方法来量化SuperSpeed链路的比特错误率(BER),并帮助隔离链路本身发生的错误与与内部设备硬件问题、协议违规等相关的错误。在环回配置中有一个主设备和一个从设备。主设备通过在TS2中设置环回位来启动环回,然后提供环回数据。从设备重传发送给它的环回数据。主设备检查返回的数据是否有错误。

SS.Inactive

SS.Inactive状态是在链路无法操作的错误发生后进入的,需要软件干预。在SS.Inactive状态下,每个端口定期检查远端低阻抗接收器端接(RRX-DC)。如果检测不到,可能意味着设备已被移除。

SS.Disabled State

在SS.Disabled状态中,SuperSpeed连接被禁用,端口移除了其低阻抗接收器端接。面向下游的端口可以从任何其他LTSSM状态被指示进入SS.Disabled。对于面向上游的外围设备端口,在链路训练中尝试连接八次失败后进入SS.Disabled。任何USB 2.0重置都会导致面向上游的外围设备端口重新尝试SuperSpeed链路训练三次。如果这仍然失败,链路将保持禁用SuperSpeed。USB 2.0接口仍然可用。

USB3.0识别主要是参考 Far-end Receiver Termination RX Detect USB终端阻抗实现,如果没有检测到终端将降到USB2.0枚举。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93076.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL窗口函数与PyMySQL以及SQL注入

MySQL窗口函数与PyMySQL实战指南:从基础到安全编程 引言 在数据处理和分析领域,MySQL作为最流行的关系型数据库之一,其窗口函数功能为数据分析提供了强大的支持。同时,Python作为数据分析的主要语言,通过PyMySQL库与My…

高级项目——基于FPGA的串行FIR滤波器

给大家安利一个 AI 学习神站!在这个 AI 卷成红海的时代,甭管你是硬核开发者还是代码小白,啃透 AI 技能树都是刚需。这站牛逼之处在于:全程用 "变量名式" 幽默 生活化类比拆解 AI,从入门到入土(啊…

JPrint免费的Web静默打印控件:PDF打印中文乱码异常解决方案

文章目录JPrint是什么?中文乱码(Using fallback font xxx for xxxx)1.字体嵌入2.客户机字体安装开源地址相关目录导航使用文档端口号修改代理使用场景打印服务切换中文乱码解决方案 JPrint是什么? JPrint是一个免费开源的可视化静…

MFT 在零售行业的实践案例与场景:加速文件集成与业务协作的高效方案

零售行业竞争激烈、数字化转型迭代迅速,业务对数据与档案的传输、处理和整合要求极高。无论是新品上市市场数据,还是供应链物流单据,集成方式不论是通过API或是档案传输, 对于传输的稳定性,安全性与性能, 都会直接影响决策效率与顾客体验。MF…

OSG+Qt —— 笔记1 - Qt窗口加载模型(附源码)

🔔 OSG/OsgEarth 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) OSG+Qt所用版本皆为: Vs2017+Qt5.12.4+Osg3.6.5+OsgQt(master) 效果 代码(需将cow.osg、reflect.rgb拷贝至工程目录下) OsgForQt.ui main.cpp

开源安全云盘存储:Hoodik 实现端到端数据加密,Docker快速搭建

以下是对 Hoodik 的简单介绍: Hoodik 是一个使用 Rust 和 Vue 开发的轻量级自托管安全云存储解决方案采用了非对称RSA密钥对和AES混合加密策略,从文件存储加密到数据链路加密,全程保证数据安全支持Docker一键私有部署,数据和服务…

[C++] Git 使用教程(从入门到常用操作)

1. Git 简介 Git 是一款分布式版本控制系统,用来跟踪文件变化、协作开发、管理项目版本。 它是开源的,由 Linus Torvalds 在 2005 年开发,广泛用于开源与企业项目中。 2. 安装 Git Windows 前往 Git 官网 下载并安装。 安装时建议勾选 Git…

实盘回测一体的期货策略开发:tqsdk获取历史数据并回测,附python代码

原创内容第969篇,专注AGI,AI量化投资、个人成长与财富自由。 星球好多同学希望说说实盘,我们就从实盘开始吧。 我们选择tqsdk给大家讲解,tqsdk支持免费注册,使用模拟账户,历史和实时数据,方便…

大模型推理框架vLLM 中的Prompt缓存实现原理

背景:为什么需要Prompt缓存模块?在大模型问答多轮对话应用场景中,不同请求的 Prompt 往往有相同的前缀,比如:第一次问答:你是一名专业的电子产品客服,负责回答客户关于手机产品的咨询。请根据以…

Python之Django使用技巧(附视频教程)

概述 Django 是一个高级的 Python Web 框架,遵循 “batteries-included”(内置电池)理念,提供了构建 Web 应用所需的大部分组件,让开发者可以专注于业务逻辑而不是底层细节。视频教程:https://pan.quark.cn…

sqli-labs通关笔记-第44关 POST字符型堆叠注入(单引号闭合 手工注入+脚本注入3种方法)

目录 一、堆叠注入 二、源码分析 1、代码审计 2、SQL注入安全性分析 三、堆叠手注法 1、进入靶场 2、正确用户名密码登录 3、堆叠注入 4、查看数据库 四、联合手注法 1、获取列数 2、确认回显位 3、获取数据库名 4、获取表名 5、获取列名 6、获取字段 7、总结…

从深度伪造到深度信任:AI安全的三场攻防战

前言当大模型开始“睁眼”看世界,伪造者也开始“闭眼”造世界。2025 WAIC释放出的信号很明确:没有AI安全底座,就没有产业智能化的高楼。WAIC 把“安全”摆在与“创新”同等重要的位置,形成了“1 份共识框架+2 份重磅报…

【C++】哈希的应用:位图和布隆过滤器

目录 一、位图 1.1 位图的概念 1.2 位图的实现 1.3 位图的应用 二、布隆过滤器 2.1 布隆过滤器的提出 2.2 布隆过滤器的概念 2.3 布隆过滤器的插入和查找 2.4 布隆过滤器的删除 2.5 布隆过滤器的优点 2.6 布隆过滤器的缺点 一、位图 1.1 位图的概念 1. 面试题 给4…

C语言:指针(4)

1. 回调函数回调函数就是指通过函数指针调用的函数。如果将函数指针作为参数传递给另一个函数,另一个函数根据指针来调这个函数,那么被调用的函数就是回调函数。回调函数不是由这个函数的实现方直接调用,而是在特定的条件下由另一方调用的。例…

vue--video使用动态src时,视频不更新

问题描述 在 Vue项目中&#xff0c;尝试动态更新 标签的 元素 src 属性来切换视频时&#xff0c;遇到了一个问题&#xff1a;即使 src 已更改&#xff0c;浏览器仍不显示视频。 <template><video width"100%" height"100%" controlspause"…

计算机视觉--opencv(代码详细教程)(一)

在计算机视觉的广袤领域中&#xff0c;OpenCV 是一座极为关键的里程碑。无论是在前沿的学术研究&#xff0c;还是在蓬勃发展的工业界&#xff0c;OpenCV 凭借其强大的功能与高效的性能&#xff0c;为开发者提供了丰富的图像处理和计算机视觉算法&#xff0c;助力无数项目落地。…

物联网通讯协议-MQTT、Modbus、OPC

引言在物联网迅速发展的今天&#xff0c;设备间的通信协议扮演着至关重要的角色。它们是不同设备、系统之间实现数据交换的桥梁。本文将详细介绍三种在物联网领域广泛应用的通讯协议——MQTT、Modbus和OPC&#xff0c;包括它们的基础概念、特点及在C#中的实现方法。一、MQTT协议…

牛客周赛R104 小红的矩阵不动点

D-小红的矩阵不动点_牛客周赛 Round 104 赛时这道题卡了一段时间&#xff0c;赛时代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int ans,h; int a[505][505]; signed main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int n,m;cin>…

Rust面试题及详细答案120道(19-26)-- 所有权与借用

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

Jenkins + SonarQube 从原理到实战三:SonarQube 打通 Windows AD(LDAP)认证与踩坑记录

前言 在前两篇文章中&#xff0c;已经介绍了 SonarQube 的部署 以及 通过 sonar-cxx 插件实现 C/C 代码扫描。 本篇将重点讲 如何让 SonarQube 对接 Windows AD&#xff08;LDAP&#xff09;&#xff0c;实现域账号登录和基于 AD 组的权限管理。 一、背景与需求分析 需求分析…