USB 3.2规范中译本 第7章 链路
-
链路层具有维持链路连接性的责任,从而确保在两个链路伙伴之间的成功数据传输。基于包(packets)和链路命令(link commands)定义了健壮的链路流程控制。数据包在链路层被准备好,携带数据和不同的信息在主机和设备之间传输。链路命令的定义是为了链路伙伴两者之间的通信。包帧(Packet frame)有序集(ordered sets)和链路命令有序集也被构造得可以容忍一个符号错误。此外,错误检测也被融入数据包和链接命令,用来验证包和链路命令的完整性。在链路层也有链路训练,链路测试/调试,以及链路电源管理。 这是通过引入链路训练状况状态机【Link Training Status State Machine(LTSSM)】而得以实现的。 本章的重点是解决以下几个问题:
- 包分帧(Packet Framing)
- 链路命令定义和用法(Link command definition and usage)
- 链路初始化和流程控制(Link initialization and flow control)
- 链路电源管理(Link power management)
- 链路错误规则和恢复(Link error rules/recovery)
- 复位(Resets)
- LTSSM规范(LTSSM specifications)

7.1 字节序 【Byte Ordering】
包或链路命令的多字节字段以小端(little-endian)顺序在总线上搬移, 即最低有效字节(LSB)最先传输,最高有效字节(MSB)最后传输。图7-2显示了一个字节序的例子。
数据包或链路命令的每一个字节都要在物理层使用的8B/10B编码进行编码。请参阅第6.3节关于8b/10b编码和位序的介绍。

7.1.1 Gen 1 Line Code
Gen 1操作可以基于SuperSpeed USB或SuperSpeedPlus USB。
- Gen 1x1操作应基于SuperSpeed USB。
- Gen 1x2操作应基于SuperSpeedPlus USB。
7.1.2 Gen 2 Line Code
为了提高Gen 2操作的有效吞吐量,使用128b/132b线路编码来替代Gen 1操作中使用的8b/10b线路编码。基于128b/132b线路编码定义了两种块类型。控制块用于传输TSEQ、TS1、TS2、SYNC、SDS和SKP有序集。数据块用于传输数据包、链路命令和空闲符号。请参阅第6.3节了解128b/132b块定义和位排序。除非在Polling.Configuration或Recovery.Configuration中接收到的TS2有序集中断言的禁用扰码位禁用,否则默认情况下数据块中的每个符号都会被扰码。详情请参阅第7.5.4.9和第7.5.10.4节。
Gen 2操作可以是Gen 2x1或Gen 2x2。Gen 2操作应基于SuperSpeedPlus USB。
7.2 链路管理和流程控制 【Link Management and Flow Control】
本节包含有关链路数据完整性,流程控制和链路电源管理的信息。
- 包和包分帧【packet and packet framing】一节定义每个数据包的包类型,包结构和CRC的要求。
- 链路命令【link command】部分定义在链路层级上控制各种功能性的特殊链路命令。
- 逻辑空闲【logical idle】定义了一个特殊的符号供U0使用。
- 流程控制【flow control】定义了用于包事务的一组握手规则。
7.2.1 包和包分帧 【Packets and Packet Framing】
超高速使用数据包来传输信息。详细的链路管理包(LMP),事务包(TP),等时时间戳包(ITP),以及数据包(DP)等包格式被定义在8.2节。
7.2.1.1 头包结构 【Header Packet Structure】
所有的头包(header packets)都是20个符号长,如图7-3的格式。这包括LMPs, TPs, ITPs, 以及DPHs。头包包括3个部分,一个头包分帧符号(header packet framing),一个包头(packet header),以及一个链路控制字(Link Control Word)。
7.2.1.1.1 头包分帧符号 【Header Packet Framing】
头包分帧符号(header packet framing),HPSTART有续集,是一个基于K-符号(K-symbols)的4个符号的头包起始帧有续集(header packet starting frame ordered set)。它定义为3个连续的SHP后面紧跟一个K-符号EPF。一个头包应该总是以HPSTART有续集开始。头包分帧符号(header packet framing)的构造是为了达到1个符号的容错性(error tolerance)。
在Gen 2操作中,HPSTART有序集是所有头包(非延迟DPH除外)的帧有序集,定义为三个连续的SHP符号,后跟一个EPF符号。非延迟Gen 2 DPH使用DPHSTART有序集,定义为三个连续的DPHP符号,后跟一个EPF符号。请参阅表6-2了解帧符号定义。
- 所有头包(非延迟Gen 2数据包头除外)应始终以HPSTART有序集开始。
- 非延迟Gen 2数据包头应始终以DPHSTART有序集开始。
- 延迟Gen 2数据包头应始终以HPSTART有序集开始,并且不应包含长度字段副本。
头包帧的构造是为了实现一个符号错误容忍度。


7.2.1.1.2 包头 【Packet Header】
一个包头包含如图7-5格式的14字节。它包括12字节头信息以及2字节CRC-16。CRC-16用来保护该12字节头信息的数据完整性。

包头的CRC-16的实现定义如下:
- CRC-16多项式应该是100Bh。
注意:CRC-16多项式与USB 2.0使用的不相同。
- CRC-16的初值应为FFFFh。
- CRC-16应该对所有的12字节的头信息进行计算,不包含任何分帧符号。
- CRC-16计算应该从字节0的比特0开始,并继续到12个字节的每个的比特7。
- CRC-16的余数(remainder)应该被补偿(complemented)。
- CRC-16的残差(residual)应该为F6AAh。【译注:校对概念的准确性!】
注意:在接收端,CRC-16的余数(remainder)加上偏移量FFFFh,会得到CRC-16的一个常量残差(residual)F6AAh。
图7-6显示了CRC-16的余数(remainder)的生成。输出比特顺序列出在表7-1中。


7.2.1.1.3 链路控制字 【Link Control Word】
2字节的链路控制字(Link Control Word)的格式如图7-7所示。它用于链路级和端到端的流量控制。
在超高速(SuperSpeed)操作中,链路控制字(Link Control Word)应包含一个3位的报文头序列号、3位保留位、一个3位的集线器深度索引、一个延迟位(DL)、一个延迟位(DF)和一个5位的CRC-5校验码。在超高速增强(SuperSpeedPlus)操作中,链路控制字应包含一个4位的报文头序列号、2位保留位、一个3位的集线器深度索引、一个延迟位(DL)、一个延迟位(DF)和一个5位的CRC-5校验码。

CRC-5保护流程控制字的数据完整性。CRC-5的实现定义如下:
- CRC-5多项式应该是00101b。
- CRC-5的初值应为11111b。
- CRC-5是对流程控制字的其余11比特进行计算。
- CRC-5计算应该从比特0开始,并继续到比特10。
- CRC-5的余数(remainder)应该被补偿(complemented),将流程控制字的MSb映射到比特11,下一个MSb映射到比特12,如此下去,直到LSb被映射到比特15。
- CRC-5的残差(residual)应该为01100b。【译注:校对概念的准确性!】
注意:在接收端,CRC-5的余数(remainder)加上偏移量11111b,会得到CRC-5的一个常量残差(residual)01100b。
图7-8显示了CRC-5的余数(remainder)的生成。

7.2.1.2 数据包负载结构 【Data Packet Payload Structure】
数据包是特殊类型的包,由数据包头【Data Packet Header (DPH)】以及数据包负载【Data Packet Payload (DPP)】组成。DPH定义在7.2.1.1节。而另一方面,DPP则由数据包负载分帧符号(data packet payload framing),以及可变长度的数据,紧跟4字节的CRC-32组成。图7-9描述了DPP的格式。

7.2.1.2.1 数据包负载分帧符号 【Data Packet Payload Framing】
DPP分帧符号包含8个K-符号,一个4符号的DPP起始帧有续集(DPP starting frame ordered set),以及一个4符号的结束帧有续集(ending frame ordered set)。正如图7-8所示,一个DPPSTART有续集,实际上是一个DPP起始帧有续集(DPP starting frame ordered set),包含3个连续的K符号SDP,紧跟一个K符号EPF。第二种类型,DPPABORT有续集,是一个DPP中止帧有续集(DPP aborting frame ordered set),包含2个连续的K-符号EDB(无效包结束,end of nullified packet),紧跟一个K-符号的EPF。DPPEND有续集用来指示一个常规的完整DPP的结束。DPPABORT有续集用来指示DPP的不正常结束。
7.2.1.2.2 数据包负载 【Data Packet Payload】
DPP部分包含0到1024数据字节,紧跟4字节的CRC-32。任何的提前中止DPP都应该包含一个DPPABORT有续集。DPP应该紧跟在其相应的DPH后面,中间不能有间隙。
CRC-32保护数据负载的数据完整性。CRC-32的实现定义如下:
- CRC-32多项式应该是04C1 1DB7h。
- CRC-32的初值应为FFFF FFFFh。
- CRC-32是对DPP的所有字节进行计算,不包括任何包的分帧符号。
- CRC-32计算应该从字节0的比特0开始,并继续到每个DPP字节的比特7。
- CRC-32的余数(remainder)应该被补偿(complemented)。
- CRC-32的残差(residual)应该为C704DD7Bh。【译注:校对概念的准确性!】
注意:在接收端,CRC-32的余数(remainder)加上偏移量FFFF FFFFh,会得到CRC-32的一个常量残差(residual)C704DD7Bh。
图7-10说明了CRC-32余数的生成。输出比特顺序列于表7-2中。


在第一代(Gen 1)操作中,任何数据包处理过程(DPP)的提前终止都应以DPPABORT有序集结束。
在第二代(Gen 2)操作中,端口应始终通过完成符合其相关DPPH(数据包处理头)中定义的长度字段规格的数据包处理过程(DPP)传输来保持DPP边界,除非存在以下条件。
- 一个下游端口被指示发出热重置(Warm Reset)。
注: 在声明检测到热重置之前,上游端口可能已经进入恢复(Recovery)状态。
- 一个端口被指示进入恢复(Recovery)。
注: 强烈建议端口在进入恢复状态之前完成DPP传输,以便简化传输实现。
在所有其他情况下,处于Gen 2操作中的端口应执行以下操作之一:
- 在完成DPP传输后,附加DPPEND OS。
- 在DPP被无效化的情况下,立即在其DPHP之后附加DPPABORT OS。
- 在DPP部分无效化的情况下,完成由其相关DPHP中的长度字段定义的DPP后,附加DPPABORT OS,类似于DPP的正常结束。 如果传输的数据不可用,端口可以在DPP中填充空闲符号(Idle Symbols),但必须使CRC-32字段无效。是否传输部分无效化的DPP是具体实现相关的。
7.2.1.2.3 数据包头和数据包负载之间的间隙【Spacing Between Data Packet Header and Data Packet Payload】
在数据包头(DPH)和其相应的数据包负载(DPP)之间不应该有任何间隙。这显示在图7-11中。

在第7.2.4节将描述关于如何在链路层传送和接收头包的更多细节。
7.2.1.3 Gen 2 Packet Placement
在Gen 2操作中,数据包放置应满足以下规则:
- 所有数据包都应放置在数据块(data blocks)中。
- 数据包的放置可以从数据块内的任何符号位置开始,并且可以跨越到下一个连续的数据块。
有关Gen 2数据包放置的示例,请参考附录D。
7.2.2 链路命令【Link Commands】
链路命令用于链路层的数据完整性,流程控制和链路电源管理。链路命令具有固定的8个符号长,并包含重复的符号来增加容错性。参考第7.3节更多细节。链路命令名称具有L-前缀,以便区分其是用于链路层的,并避免与包相冲突。
7.2.2.1 链路命令结构【Link Command Structure】
链路命令应该是8个符号长,并使用下面图7-11的格式构建。首先的4个符号,LCSTART,是链路命令起始帧有续集(link command starting frame ordered set),由3个连续的SLC紧跟EPF组成。其次的4个符号由一个两个符号的链路命令字(link command word)和其复制品(replica)组成。两个链路命令字都被加扰了(scrambled)。表7-3总结了,链路命令结构。

7.2.2.2 链路命令字定义【Link Command Word Definition】
链路命令字(Link command word)共16比特长,具有被5比特CRC-5(见图7-13)保护的11比特链路命令信息。11比特链路命令信息定义于表7-4。CRC-5的计算与图7-6中显示的链路控制字(Link Control Word)相同。



链路命令被定义用于4种使用方式。
第一,链路命令被用于确保包的成功传输。
第二,链路命令被用于链路流程控制(link flow control)。
第三,链路命令被用于电源管理。
最后,一个特殊的链路命令被定义用于上游面端口在U0下展示其存在(an upstream port to signal its presence in U0)。
链路伙伴之间的成功头包事务要求恰当的头包确认(header packet acknowledgement)。Rx头包缓冲信用交换(Rx Header Buffer Credit exchange)有益于链路流程控制。头包确认和Rx头包缓冲信用交换由不同的链路命令来实现。LGOOD_n (n = 0 to 7) 和 LBAD被用于确认一个头包是否已经被恰当接收。LRTY被用于通知头包已经被重传(re-sent)。 LCRD_A, LCRD_B, LCRD_C, 以及LCRD_D被用于通知Rx Header Buffers已经可用,按信用而言(terms of Credit)。在下面的小节中,使用LCRD_x,其中x指代A, B,C, 或者D。参见表7-5的详情。
LGOOD_n使用一个明确的叫做头包序列号(Header Sequence Number)的数字索引来表示头包的顺序。头包序列号(Header Sequence Number)以0开始,并且每个头包都基于模8加法(modulo-8 addition)增加1。索引相应于接收到的头包序列号(Header Sequence Number),用于流程控制以及检测丢失或者破损的头包。
LCRD_x使用明确的以字母顺序的索引(alphabetical index)。索引A, B, C, D, A, B, C…在每个头包被处理并且Rx头包缓冲信用(Rx Header Buffer Credit)可用时被递增1。该索引用于确保Rx头包缓冲信用(Rx Header Buffer Credit)被按照顺序接收到,这样丢失一个LCRD_x就可以被检测出来。
对于超高速增强(SuperSpeedPlus)USB,定义了类型1和类型2流量类别。类型1流量类别,即类型1数据包,包括以下数据包类型:周期性DP(数据包)、TP(事务包)、ITP(初始化事务包)和LMP(链路管理包)。类型2流量类别,即类型2数据包,仅包括异步DP。在Gen 1x2和Gen 2x1操作中,LCRD1_A、LCRD1_B、LCRD1_C和LCRD1_D是用于类型1流量类别的链路命令,用于表示类型1报文头数据包或数据包的接收缓冲区可用性,以信用形式表示。LCRD2_A、LCRD2_B、LCRD2_C和LCRD2_D是用于类型2流量类别的链路命令,用于表示类型2数据包的接收缓冲区可用性,以信用形式表示。在Gen 2x2操作中,为每个流量类别分别增加了三个额外的接收报文头缓冲区信用(LCRD1_E/LCRD1_F/LCRD1_G,LCRD2_E/LCRD2_F/LCRD2_G),以维持突发性能。
在以下章节中,使用LCRD_x或LCRD1_x/LCRD2_x,其中x表示A、B、C、D、E、F或G。具体细节见表7-5。LGOOD_n使用一个明确的数字索引,称为报文头序列号,用于表示报文头数据包的顺序。对于超高速操作,报文头序列号从0开始,并且基于模8加法,随着每个报文头数据包的增加而递增。对于超高速增强操作,报文头序列号的递增基于模16加法。该索引对应于接收到的报文头序列号,用于流量控制以及检测丢失或损坏的报文头数据包。
LCRD_x 和 LCRD1_x/LCRD2_x 使用明确的字母索引。索引按照 A, B, C, D, A, B, C…(Gen 1x1、Gen 1x2 或 Gen 2x1)或 A, B, C, D, E, F, G, A, B, C…(Gen 2x2)的顺序,随着每个报文头数据包的处理以及接收报文头缓冲区信用(Rx Header Buffer Credit)的可用性而递增。该索引用于确保接收报文头缓冲区信用按顺序接收,以便能够检测到缺失的 LCRD_x 或 LCRD1_x/LCRD2_x。LCRD1_x 和 LCRD2_x 的索引操作是独立的。
LBAD 和 LRTY 不使用索引。
LGO_U1、LGO_U2、LGO_U3、LAU、LXU 和 LPMA 是用于链路电源管理的链路命令。
LDN 和 LUP 是由下游端口和上游端口使用的特殊链路命令,用于指示它们在 U0 状态下的端口存在。LDN 和 LUP 的使用情况在表 7-5 中描述。
关于链路命令使用的额外要求和示例可以在第 7.2.4 节中找到。
Table 7-5. Link Command Definitions
| 链路命令 | 定义 – 见第7.2.4.1, 7.2.4.2, 以及7.5.6节中详细的使用和要求 |
|---|---|
| LGOOD_n | n (0, 1, 2, ....7 ):头包序列号(Header Sequence Number) 由接收到头包的端口在下列所有条件都是真时发送:• 头包具有有效的结构并可以被接收器识别。• CRC-5 和CRC-16 都有效。• 接收到的头包中的头包序列号(Header Sequence Number)与所期望的Rx头包序列号(Rx Header Sequence Number)匹配。• 在接收器端具有Rx头包缓冲(Rx Header Buffer)可用来存储接收到的头包。 接收到的头包中的头包序列号(Header Sequence Number)与所期望的Rx头包序列号(Rx Header Sequence Number)不匹配将会导致端口转换进入Recovery。 由发送头包的端口所接收到。这是从链路伙伴来的对具有头包序列号(Header Sequence Number)为"n"的头包已经被恰当接收到的确认。接收到LGOOD_n而不匹配所期望的ACK Tx头包序列号(ACK Tx Header Sequence Number)将会导致端口转换进入Recovery。 也可以被端口在进入U0时发送,作为头包序列号广告(Header Sequence Number Advertisement)来初始化两个端口的ACK Tx头包序列号(ACK Tx Header Sequence Number)。 参考第7.2.4.1节中的详情。 |
| LBAD | 不好的头包(Bad header packet)。 由接收头包的端口在响应无效头包时发送。接收到的包的CRC-5和/或CRC-16被损坏。接收到LBAD 将导致端口重新发送在最后一次被LGOOD_n确认之后的所有的头包。 参考第7.2.4.1节中的详情。 |
| LCRD_x | x (A, B, C, D):Rx头包缓冲信用索引(Rx Header Buffer Credit Index)。 通知一个Rx头包缓冲信用(Rx Header Buffer Credit)已经可用。 由端口在接收到满足下面情形的头包时发送:• LGOOD_n已经被或者即将被发送【已勘误】。• 头包已经被处理,并且Rx Header Buffer Credit 已经可用。 LCRD_x 按照字母顺序发送,并且绕回到A,没有跳跃。丢失LCRD_x 将会导致链路转换进入Recovery。 参考第7.2.4.1节中的详情。 |
| LRTY | 由端口在响应接收到的LBAD而重新发送第一个头包之前发送。 |
| LGO_U1 | 由请求进入U1的端口发送。 |
| LGO_U2 | 由请求进入U2的端口发送。 |
| LGO_U3 | 由请求进入U3的下游面端口发送。上游面端口应该接受该请求。 |
| LAU | 由接受进入U1,U2或者U3的端口发送。 |
| LXU | 由拒绝进入U1或U2的端口发送。 |
| LPMA | 由端口在接收到LAU时发送。用来配合(in conjunction with)LGO_Ux以及LAU握手来保证两个端口都处于相同状态。 |
| LUP | 设备在U0时存在。由上游面端口在没有包或者其他链路命令要被传输时,每隔10 μs 发送一次。参考7.5.6.1节中的详情。 |
7.2.2.3 链路命令的放置【Link Command Placement】
链路命令的放置应该满足下面的规则:
• 链路命令不应该被放置在头包结构内部(例如, 在LMPs, TPs, ITPs, 或者DPHs内部)。
• 链路命令不应该被放置在DP结构的DPP内部。
• 链路命令不应该被放置在DPH和DPP之间。
• 链路命令可以被放置在头包之前或者之后,除了不能被放置在DPH和DPP之间例外。
• 多个链路命令被允许背靠背(back to back)传输。
• 链路命令不能在所有已经调度的SKP有续集被全部传完之前被发送。
注意:在第10.7.5到10.7.12节中可以找到关于调度链路命令的更多规则。
在Gen 2操作中,链路命令的放置应满足以下额外规则:
- 所有链路命令都应放置在数据块中。
- 链路命令的放置可以从数据块内的任何符号位置开始,并且可以跨越到下一个连续的数据块。
有关Gen 2操作中链路命令放置的示例,请参考附录D。
7.2.3 逻辑空闲【Logical Idle】
逻辑空闲(Logical Idle)定义为一段长为一个或者多个符号周期的时间,期间没有信息(包或链路命令)正被在链路上传输。一个特殊D-符号(00h),定义为空闲符号【Idle Symbol (IS)】,只要在U0状态任何时间满足逻辑空闲定义,就应该被端口传送。该IS应该被按照第6.4.3节定义的规则加扰。

7.2.4 链路命令用于流程控制,错误恢复以及电源管理
链路命令被用于链路层的头包流程控制(flow control),来识别丢失或者损坏的头包,并发起/确认链路层的电源管理的转换。每个链路命令的构造和描述在第7.2.2节中可以找到。
7.2.4.1 头包链路控制和错误恢复【Header Packet Flow Control and Error Recovery】
头包链路控制(Header packet flow control)被用于所有的头包。它要求链路的每端都遵循特定的头包缓冲和传输顺序的限制(specific header buffer and transmission ordering constraints),以保证包的成功传输和链路互操作。本节详细地描述包流程控制(packet flow control)的规则。
7.2.4.1.1 初始化【Initialization】
链路初始化(Link Initialization)是指在链路从轮询(Polling)、恢复(Recovery)或热重置(Hot Reset)状态转换到U0状态时,对端口进行初始化的过程。
对于SuperSpeed USB,链路初始化包括以下内容:
- 报文头序列号(Header Sequence Number)广播:用于标记数据包的顺序,链路层通过它来确认和重传数据包。
- 接收报文头缓冲区信用(Rx Header Buffer Credit)广播:在两个端口之间交换接收报文头缓冲区的可用性信息。
对于SuperSpeedPlus USB,链路初始化除了上述内容外,还包括:
- 类型1接收缓冲区信用(Type 1 Rx Buffer Credit)广播:用于表示类型1数据包(如周期性DP、TP、ITP和LMP)的接收缓冲区可用性。
- 类型2接收缓冲区信用(Type 2 Rx Buffer Credit)广播:用于表示类型2数据包(仅包含异步DP)的接收缓冲区可用性。
这些初始化步骤确保了链路在进入正常工作状态(U0)后能够正确地传输数据包和管理流量。
-
以下是端口应满足的要求:
- 端口应维护两个发送报文头序列号:
- 一个是发送报文头序列号(Tx Header Sequence Number),定义为首次传输(非重传)报文头时将被分配的序列号。
- 另一个是确认发送报文头序列号(ACK Tx Header Sequence Number),定义为接收报文头的端口通过LGOOD_n确认的预期序列号。
- 端口应维护一个接收报文头序列号(Rx Header Sequence Number):
- 定义为接收报文头时预期的序列号。
- 端口应维护接收报文头缓冲区信用计数:
- 在SuperSpeed操作中,端口应维护两个接收报文头缓冲区信用计数:
- 本地接收报文头缓冲区信用计数(Local Rx Header Buffer Credit Count):定义为端口接收器可用的接收报文头缓冲区信用数量。
- 远程接收报文头缓冲区信用计数(Remote Rx Header Buffer Credit Count):定义为链路伙伴端口可用的接收报文头缓冲区信用数量。
- 在SuperSpeedPlus操作中,端口应维护两个类型1接收缓冲区信用计数(Type 1 Rx Buffer Credit Count)和两个类型2接收缓冲区信用计数(Type 2 Rx Buffer Credit Count):
- 本地类型1接收缓冲区信用计数(Local Type 1 Rx Buffer Credit Count):定义为端口接收器可用的类型1接收缓冲区信用数量。
- 远程类型1接收缓冲区信用计数(Remote Type 1 Rx Buffer Credit Count):定义为链路伙伴端口可用的类型1接收缓冲区信用数量。
- 本地类型2接收缓冲区信用计数(Local Type 2 Rx Buffer Credit Count):定义为端口接收器可用的类型2接收缓冲区信用数量。
- 远程类型2接收缓冲区信用计数(Remote Type 2 Rx Buffer Credit Count):定义为链路伙伴端口可用的类型2接收缓冲区信用数量。
- 在SuperSpeed操作中,端口应维护两个接收报文头缓冲区信用计数:
- 端口应有足够的发送报文头缓冲区:
- 在SuperSpeed操作中,端口应有足够的发送报文头缓冲区,以容纳最多四个未确认的报文头。
- 在SuperSpeedPlus操作中,端口应有足够的类型1/类型2发送报文头缓冲区,以容纳最多四个(Gen 1x2或Gen 2x1)或七个(Gen 2x2)未确认的类型1报文头,以及另外四个(Gen 1x2或Gen 2x1)或七个(Gen 2x2)未确认的类型2数据包报文头。
- 端口在远程接收缓冲区信用计数为零时不应传输数据包:
- 在SuperSpeed操作中,如果远程接收报文头缓冲区信用计数为零,则端口不应传输任何报文头。
- 在SuperSpeedPlus操作中,如果远程类型1接收缓冲区信用计数为零,则端口不应传输任何类型1数据包;如果远程类型2接收缓冲区信用计数为零,则不应传输任何类型2数据包。
- 端口应有足够的接收缓冲区:
- 在SuperSpeed操作中,端口应有足够的接收报文头缓冲区,以接收最多四个报文头。
- 在SuperSpeedPlus操作中,端口应有足够的接收缓冲区,以接收最多四个或七个最大DPP(数据包处理过程)大小的类型1数据包,以及另外四个或七个最大DPP大小的类型2数据包。
- 进入U0状态时的操作:
- 在SuperSpeed操作中,端口应启动PENDING_HP_TIMER和CREDIT_HP_TIMER,以期待接收报文头序列号广播和接收报文头缓冲区信用广播。
- 在SuperSpeedPlus操作中,端口应启动PENDING_HP_TIMER以及类型1和类型2的CREDIT_HP_TIMER,以期待接收报文头序列号广播和类型1及类型2接收缓冲区信用广播。
- 端口应启动报文头序列号广播(Header Sequence Number Advertisement)。
- 在SuperSpeed操作中,端口应启动接收报文头缓冲区信用广播(Rx Header Buffer Credit Advertisement)。在SuperSpeedPlus操作中,端口应启动类型1和类型2接收缓冲区信用广播(Type 1 and Type 2 Rx Buffer Credit Advertisements)。
- 端口应维护两个发送报文头序列号:
-
报文头序列号广播是指通过在两个端口之间交换报文头序列号来初始化确认发送报文头序列号(ACK Tx Header Sequence Number)。这个报文头序列号是端口正确接收的最后一个报文头的序列号。报文头序列号广播的主要目的是在恢复(Recovery)前后维持链路流量,使得端口在重新进入U0状态时能够知道在恢复之前成功发送的最后一个报文头是什么,并决定其发送报文头缓冲区(Tx Header Buffers)或类型1/类型2发送报文头缓冲区中的哪些报文头可以被清除或需要重传。
-
设置初始接收报文头序列号(Rx Header Sequence Number):
-
如果端口从轮询(Polling)或热重置(Hot Reset)进入U0,接收报文头序列号为零。
-
如果端口从恢复(Recovery)进入U0,接收报文头序列号是下一个预期报文头的序列号。
-
-
设置初始发送报文头序列号(Tx Header Sequence Number):
-
如果端口从轮询或热重置进入U0,其发送报文头序列号为零。
-
如果端口从恢复进入U0,其发送报文头序列号与恢复前的发送报文头序列号相同。
-
注意:重传的报文头应保持其最初分配的报文头序列号。
-
-
启动报文头序列号广播:端口通过发送LGOOD_n(其中“n”等于接收报文头序列号减一)来启动报文头序列号广播。
- 注意:减法操作基于SuperSpeed操作中的模8运算,以及SuperSpeedPlus操作中的模16运算。
-
设置初始确认发送报文头序列号(ACK Tx Header Sequence Number):端口应将其初始确认发送报文头序列号设置为在接收报文头序列号广播期间收到的序列号加一。
- 注意:加法操作基于SuperSpeed操作中的模8运算,以及SuperSpeedPlus操作中的模16运算。
-
发送报文头的限制:
-
在SuperSpeed操作中,端口在接收到报文头序列号广播且有可用的远程接收报文头缓冲区信用(Remote Rx Header Buffer Credit)之前,不得发送任何报文头。
-
在SuperSpeedPlus操作中,端口在接收到报文头序列号广播且有可用的远程类型1或类型2接收缓冲区信用(Remote Type 1 or Type 2 Rx Buffer Credit)之前,不得发送任何类型1或类型2数据包。
-
-
低功耗链路状态的限制:端口在接收和发送报文头序列号广播之前,不得请求进入低功耗链路状态。
- 注意:低功耗链路状态初始化的规则(参见第7.2.4.2节)仍然适用。
-
端口在接收到报文头序列号广播(Header Sequence Number Advertisement)时,应清除其发送报文头缓冲区(Tx Header Buffers)或类型1/类型2发送报文头缓冲区(Type 1/Type 2 Tx Header Buffers)中的报文头。端口应执行以下操作之一:
a. 如果端口从轮询(Polling)或热重置(Hot Reset)进入U0,应清除其发送报文头缓冲区或类型1/类型2发送报文头缓冲区中的所有报文头。
b. 如果端口从恢复(Recovery)进入U0,应清除其发送报文头缓冲区或类型1/类型2发送报文头缓冲区中在恢复之前已发送的所有报文头,但不包括那些报文头序列号大于(在SuperSpeed操作中为模8,而在SuperSpeedPlus操作中为模16)接收到的报文头序列号广播中的报文头序列号的报文头。
注:例如,在SuperSpeed操作中,如果接收到LGOOD_1的报文头序列号广播,则端口应清除其发送报文头缓冲区或类型1/类型2发送报文头缓冲区中报文头序列号为1、0、7、6的报文头。
-
-
对于SuperSpeed USB,接收报文头缓冲区信用广播(Rx Header Buffer Credit Advertisement)是指通过在两个端口之间交换可用的本地接收报文头缓冲区信用数量来初始化远程接收报文头缓冲区信用计数。该广播的主要目的是使端口在进入U0时与其链路伙伴对齐其远程接收报文头缓冲区信用计数。在接收报文头缓冲区信用广播期间,应应用以下规则:
-
端口应在报文头序列号广播期间发送LGOOD_n之后启动接收报文头缓冲区信用广播。
-
端口应在发送接收报文头缓冲区信用之前初始化以下内容:
a. 端口应将其发送报文头缓冲区信用索引初始化为A。
b. 端口应将其接收报文头缓冲区信用索引初始化为A。
c. 端口应将其远程接收报文头缓冲区信用计数初始化为零。
d. 端口应继续处理其接收报文头缓冲区中的那些报文头,这些报文头在进入恢复之前已被LGOOD_n确认,或在恢复期间被验证,然后更新本地接收报文头缓冲区信用计数。
e. 端口应根据以下内容设置其本地接收报文头缓冲区信用计数:
- 如果端口从轮询或热重置进入U0,其本地接收报文头缓冲区信用计数为4。
- 如果端口从恢复进入U0,其本地接收报文头缓冲区信用计数为可用于传入报文头的数量。
-
端口应通过传输LCRD_x来执行接收报文头缓冲区信用广播,以通知其链路伙伴。端口应根据其本地接收报文头缓冲区信用计数传输以下内容之一:
a. 如果本地接收报文头缓冲区信用计数为1,则传输LCRD_A。
b. 如果本地接收报文头缓冲区信用计数为2,则传输LCRD_A和LCRD_B。
c. 如果本地接收报文头缓冲区信用计数为三,则传输LCRD_A、LCRD_B和LCRD_C。
d. 如果本地接收报文头缓冲区信用计数为四,则传输LCRD_A、LCRD_B、LCRD_C和LCRD_D。
-
接收端口从其链路伙伴接收到LCRD_x时,每次接收到一个LCRD_x,其远程接收报文头缓冲区信用计数应增加一,最多增加到四。
-
如果端口的远程接收报文头缓冲区信用计数为零,则端口不应传输任何报文头。
-
端口在接收和发送LCRD_x以完成接收报文头缓冲区信用广播之前,不应请求进入低功耗链路状态。
注:低功耗链路状态初始化的规则(参见第7.2.4.2节)仍然适用。
对于SuperSpeedPlus USB,类型1/类型2接收缓冲区信用广播(Type 1/Type 2 Rx Buffer Credit Advertisement)的过程与SuperSpeed USB中定义的接收报文头缓冲区信用广播的过程相同。在两个流量类别之间进行接收缓冲区信用广播时,没有特定的顺序要求。可以同时发送LCRD1_x和LCRD2_x。在SuperSpeedPlus USB的类型1/类型2接收缓冲区信用广播期间,应应用以下规则:
-
端口应在报文头序列号广播期间发送LGOOD_n之后启动类型1/类型2接收缓冲区信用广播。
-
端口应在发送类型1/类型2接收缓冲区信用之前初始化以下内容:
a. 端口应将其类型1/类型2发送报文头缓冲区信用索引初始化为A。
b. 端口应将其类型1/类型2接收缓冲区信用索引初始化为A。
c. 端口应将其远程类型1/类型2接收缓冲区信用计数初始化为零。
d. 端口应继续处理其类型1/类型2接收缓冲区中的数据包,这些数据包在进入恢复之前已被LGOOD_n确认,或在恢复期间被验证,然后更新本地类型1/类型2接收缓冲区信用计数。
e. 端口应根据以下内容设置其本地类型1/类型2接收缓冲区信用计数:
-
如果端口从轮询或热重置进入U0,其本地类型1/类型2接收缓冲区信用计数为4。
-
如果端口从恢复进入U0,其本地类型1/类型2接收缓冲区信用计数为可用于传入数据包的类型1/类型2接收缓冲区的数量。
-
端口应通过传输LCRD1_x/LCRD2_x来执行类型1/类型2接收缓冲区信用广播,以通知其链路伙伴。端口应根据其本地类型1/类型2接收缓冲区信用计数传输以下内容之一:
a. 如果本地类型1/类型2接收缓冲区信用计数为一,则传输LCRD1_A/LCRD2_A。
b. 如果本地类型1/类型2接收缓冲区信用计数为二,则传输LCRD1_A和LCRD1_B/ LCRD2_A和LCRD2_B。
c. 如果本地类型1/类型2接收缓冲区信用计数为三,则为LCRD1_A、LCRD1_B和LCRD1_C / LCRD2_A、LCRD2_B和LCRD2_C。
d. 如果本地类型1/类型2接收缓冲区信用计数为四,则为LCRD1_A、LCRD1_B、LCRD1_C和LCRD1_D / LCRD2_A、LCRD2_B、LCRD2_C和LCRD2_D。
e. 如果本地类型1/类型2接收缓冲区信用计数为五,则为LCRD1_A、LCRD1_B、LCRD1_C、LCRD1_D和LCRD1_E / LCRD2_A、LCRD2_B、LCRD2_C、LCRD2_D和LCRD2_E。注意,接收缓冲区信用计数为五或更多时适用于Gen 2x2操作。
f. 如果本地类型1/类型2接收缓冲区信用计数为六,则为LCRD1_A、LCRD1_B、LCRD1_C、LCRD1_D、LCRD1_E和LCRD1_F / LCRD2_A、LCRD2_B、LCRD2_C、LCRD2_D、LCRD2_E和LCRD2_F。
g. 如果本地类型1/类型2接收缓冲区信用计数为七,则为LCRD1_A、LCRD1_B、LCRD1_C、LCRD1_D、LCRD1_E、LCRD1_F和LCRD1_G / LCRD2_A、LCRD2_B、LCRD2_C、LCRD2_D、LCRD2_E、LCRD2_F和LCRD2_G。
-
一个端口从其链路伙伴接收LCRD1_x/LCRD2_x时,每接收一次LCRD1_x/LCRD2_x,其相应的远程类型1/类型2接收缓冲区信用计数应增加一,最多增加到四或七。
-
如果相应的远程类型1或类型2接收缓冲区信用计数为零,则端口不应传输任何类型1或类型2数据包。
-
在类型1和类型2接收缓冲区信用通告期间,端口在接收和发送LCRD1_x和LCRD2_x之前,不应请求进入低功耗链路状态。
注意:低功耗链路状态初始化的规则(参见第7.2.4.2节)仍然适用。
- 当端口从恢复状态进入U0时,应额外应用以下规则:
- 在恢复之前发送LBAD的端口,在进入U0后不应期望在重试头数据包之前从其链路伙伴接收LRTY。
- 在恢复之前接收LBAD的端口,在进入U0后不应在重试头数据包之前向其链路伙伴发送LRTY。
注意:存在一种情况,即端口在恢复之前发送了LBAD,但其链路伙伴可能正确接收也可能未正确接收。在这种情况下,LBAD/LRTY的规则不适用。详细信息请参见第7.2.4.1.4节和第7.2.4.1.12节。
- 当进入恢复状态且下一个状态是热复位或回环时,端口可以选择继续处理所有正确接收的数据包。
7.2.4.1.2 LGOOD_n和LCRD_x用法的总体规则
-
对于SuperSpeed USB,接收头缓冲区信用应按照字母顺序传输LCRD_A、LCRD_B、LCRD_C、LCRD_D,然后回到LCRD_A。如果接收到的LCRD_x不符合字母顺序,则视为丢失了一个链路命令,并应启动进入恢复状态的转换。
-
对于SuperSpeedPlus USB,在Gen 1x2或Gen 2x1操作中,类型1接收缓冲区信用应按照字母顺序传输LCRD1_A、LCRD1_B、LCRD1_C、LCRD1_D;在Gen 2x2操作中,还需传输LCRD1_E、LCRD1_F、LCRD1_G,然后回到LCRD1_A。如果接收到的LCRD1_x不符合字母顺序,则视为丢失了一个链路命令,并应启动进入恢复状态的转换。
-
头部数据包应按照头部序列号的数值顺序从0发送到其最大值,然后回到0。如果接收到的LGOOD_n不符合数值顺序,则视为丢失了一个链路命令,并应启动进入恢复状态的转换。
-
头部数据包的传输可能会被延迟。当这种情况发生时,集线器应在链路控制字中设置DL位,外围设备或主机也可以选择设置。以下是一些(但并非全部)可能导致这种延迟的条件:
- 当头部数据包被重新发送时。
- 当链路处于恢复状态时。
- 对于SuperSpeed USB,当远程接收头部缓冲区信用计数为零时。对于SuperSpeedPlus USB,当远程类型1或类型2接收缓冲区信用计数为零时。
- 对于SuperSpeed USB,当发送头部缓冲区不为空时。对于SuperSpeedPlus USB,当类型1/类型2发送头部缓冲区不为空时。
注意:延迟位只有在ITP中被设置时才有意义。如果设备使用ITP来同步其内部时钟,则应忽略任何设置了延迟位的ITP。
7.2.4.1.3 发送头包【Transmitting Packets】
本节描述了SuperSpeed操作中的头部数据包传输以及SuperSpeedPlus操作中的类型1/类型2数据包传输。
-
在发送头部数据包或类型1/类型2数据包之前,端口应将发送头部序列号添加到链路控制字中的头部序列号字段。
-
发送头部数据包或类型1/类型2数据包将消耗一个发送头部缓冲区或类型1/类型2发送头部缓冲区。相应地,在传输完成后,发送头部序列号应增加一,或者如果达到最大头部序列号,则回绕到零。
-
重试头部数据包或类型1/类型2数据包的传输不会消耗额外的发送头部缓冲区或类型1/类型2发送头部缓冲区,并且发送头部序列号应保持不变。
-
在接收到LBAD时,端口应发送LRTY,然后重新发送所有尚未通过LGOOD_n确认的头部数据包,但不包括恢复状态。有关端口从恢复状态进入U0时适用的额外规则,请参阅第7.2.4.1.1节。
-
在重新发送头部数据包之前,端口应在链路控制字中设置延迟位,并重新计算CRC-5。
注意:头部数据包中的CRC-16保持不变。 -
对于SuperSpeed USB,如果接收到有效的LCRD_x,则远程接收头部缓冲区信用计数应增加一。
-
对于SuperSpeedPlus USB,如果接收到有效的LCRD1_x,则远程类型1接收缓冲区信用计数应增加一。如果接收到有效的LCRD2_x,则远程类型2接收缓冲区信用计数应增加一。
-
对于SuperSpeed USB,如果在进入U0之后首次发送头部数据包(包括在恢复状态之后重新发送的情况),远程接收头部缓冲区信用计数应减少一。
-
对于SuperSpeedPlus USB,如果在进入U0之后首次发送类型1数据包(包括在恢复状态之后重新发送的情况),远程类型1接收缓冲区信用计数应减少一。对于类型2数据包,远程类型2接收缓冲区信用计数也适用相同的操作。
-
当头部数据包在接收到LRTY之后被重试时,远程接收头部缓冲区信用计数或远程类型1/类型2接收缓冲区信用计数不应发生变化。
7.2.4.1.4 延迟数据包头【Deferred DPH】
延迟数据包头(Deferred DPH)应被视为事务数据包(TP)用于缓冲和信用计数目的。延迟DPH的格式请参考第7.2.1.1.1节。
7.2.4.1.5 接收头包【Receiving Header Packets】
本节涵盖了接收所有头部数据包,但Gen 2 DPH除外,Gen 2 DPH在第7.2.4.1.6节中描述。
- 当接收到头部数据包时,应执行以下验证:
- CRC-5
- CRC-16
- 接收到的头部数据包中的头部序列号与接收头部序列号是否匹配
- 是否有可用的接收头部缓冲区来存储头部数据包
- 如果头部数据包通过了上述四个标准,则定义为“正确接收”。
- 当头部数据包被正确接收时,端口应发出一个LGOOD_n,其中“n”对应于接收头部序列号,并将接收头部序列号增加一(或者如果达到最大头部序列号,则回绕到0)。
- 在SuperSpeed操作中,端口应消耗一个接收头部缓冲区,直到其被处理。
- 在SuperSpeedPlus操作中,端口应消耗一个类型1接收缓冲区信用,直到其被处理。
- 如果头部数据包未被“正确接收”,则会发生以下情况之一:
- 如果头部数据包有一个或多个CRC-5或CRC-16错误,端口应发出一个LBAD。端口应忽略随后接收到的所有头部数据包,直到接收到一个LRTY,或者链路进入恢复状态。有关端口从恢复状态进入U0时适用的额外规则,请参阅第7.2.4.1.1节。
- 如果接收到的头部数据包中的头部序列号与接收头部序列号不匹配,或者端口没有可用的接收头部缓冲区来存储头部数据包,则端口应进入恢复状态。
- 在SuperSpeed操作中,发送LBAD之后,端口应继续发出LCRD_x,如果接收头部缓冲区信用变得可用。
- 在SuperSpeedPlus操作中,发送LBAD之后,如果其相应的类型1/类型2接收缓冲区信用变得可用,端口应继续发出LCRD1_x/LCRD2_x。
- 如果端口连续三次未能接收到头部数据包,则应直接进入恢复状态。在第三次错误时,端口不应发出第三个LBAD。
7.2.4.1.6 在Gen 2操作中接收数据包头(Header Packet)
在接收到数据包头(DPH)时,端口应执行以下验证:
- CRC-5
- CRC-16
- 接收到的头部数据包中的头部序列号与接收头部序列号是否匹配
- 是否有可用的接收缓冲区(Rx Buffer)来存储头部数据包或数据包
如果DPH通过了上述所有四个标准,则定义为“正确接收”。端口应忽略长度字段副本。
当DPH被正确接收时,端口应发出一个LGOOD_n,其中“n”对应于接收头部序列号,并将接收头部序列号增加一(如果达到最大头部序列号,则回绕到0)。
端口应消耗一个类型1或类型2接收缓冲区信用,直到其被处理且接收缓冲区可用。
如果DPH未被“正确接收”,则会发生以下情况之一:
- 如果DPH有一个或多个CRC-5或CRC-16错误,但两个长度字段副本有效且相同,端口应发出一个LBAD,并跟踪紧随DPH之后的关联数据包尾(DPP)。端口应忽略随后接收到的所有数据包,直到接收到LRTY,或者链路进入恢复状态。
注意:有效长度字段的范围是0~1024。详细信息请参阅第7.2.1.2节。 - 如果以下任一条件发生,端口应进入恢复状态: a. 两个长度字段副本不一致。
b. 接收到的DPH中的头部序列号与接收头部序列号不匹配。
c. 接收缓冲区没有足够的空间来存储接收到的数据包。
在发送LBAD之后,如果相应的类型1或类型2接收缓冲区信用变得可用,端口应继续发出LCRD1_x或LCRD2_x。
如果端口连续三次未能接收到数据包头,则应直接进入恢复状态。在第三次错误时,端口不应发出第三个LBAD。
7.2.4.1.7 SuperSpeed 接收端头部缓冲区信用(SuperSpeed Rx Header Buffer Credit)
每个端口的接收器必须具备四个接收头部缓冲区信用,这被称为本地接收头部缓冲区信用(Local Rx Header Buffer Credit)。本地接收头部缓冲区信用的数量表示端口能够接收的头部数据包的数量,并由本地接收头部缓冲区信用计数(Local Rx Header Buffer Credit Count)进行管理。
-
如果一个头部数据包被“正确接收”,端口将消耗一个本地接收头部缓冲区信用。本地接收头部缓冲区信用计数应减少一。
-
在完成头部数据包处理后,端口应通过以下步骤恢复一个本地接收头部缓冲区信用:
- 发送一个LCRD_x。
- 按字母顺序递增信用索引(如果头部缓冲区信用索引达到D,则回绕到A)。
- 将本地接收头部缓冲区信用计数增加一。
注意:LCRD_x索引用于确保接收头部缓冲区信用按字母顺序发送,以便能够检测到缺失的LCRD_x。
7.2.4.1.8 SuperSpeedPlus 类型1/类型2接收缓冲区信用
每个端口应具备以下两类接收缓冲区信用:
- 端口应在其接收器中为类型1流量类别配置四个或七个类型1接收缓冲区信用。这被称为本地类型1接收缓冲区信用(Local Type 1 Rx Buffer Credit)。
- 端口应在其接收器中为类型2流量类别配置四个或七个类型2接收缓冲区信用。这被称为本地类型2接收缓冲区信用(Local Type 2 Rx Buffer Credit)。
本地类型1和类型2接收缓冲区信用的操作规则是相同的。它们各自表示端口能够接收的类型1或类型2数据包的数量,并由各自的本地类型1和类型2接收缓冲区信用计数进行管理。以下描述涉及本地类型1/类型2接收缓冲区信用的管理:
- 如果相应的类型1或类型2数据包被“正确接收”,端口应消耗一个本地类型1或类型2接收缓冲区信用。本地类型1/类型2接收缓冲区信用计数应减少一。
- 在完成类型1或类型2数据包的处理,并且相应的类型1或类型2接收缓冲区可用后,端口应通过以下步骤恢复一个本地类型1或类型2接收缓冲区信用:
- 发送一个LCRD1_x或LCRD2_x。
- 按字母顺序递增信用索引(如果接收缓冲区信用索引达到D(Gen 1x2或Gen 2x1)或G(Gen 2x2),则回绕到A)。
- 将本地类型1或类型2接收缓冲区信用计数增加一。
注意:LCRD1_x或LCRD2_x的索引用于确保接收缓冲区信用按字母顺序发送,以便能够检测到缺失的LCRD1_x或LCRD2_x。
7.2.4.1.9 接收数据包负载【Receiving Data Packet Payload】
在Gen 1操作中,DPP的处理应遵循以下规则:
- 如果满足以下两个条件,则应开始DPP处理:
- 正确接收了一个DPH。
- 在其DPH之后立即正确接收了一个DPPSTART有序集合。
- 当检测到一个有效的DPPEND有序集合时,DPP处理应完成。
- 当满足以下条件之一时,DPP处理应被中止:
- 检测到一个有效的DPPABORT有序集合。
- 在检测到有效的DPPEND或DPPABORT有序集合之前,检测到一个不属于有效DPPEND或DPPABORT有序集合的K符号。端口应忽略与DPP相关的相应DPPEND或DPPABORT有序集合。
- DPP的长度已达到sDataSymbolsBabble(见表10-19),但未检测到有效的DPPEND或DPPABORT有序集合。
• 如果DPP的DPH被损坏,则应丢弃该DPP。
• 如果DPP没有紧随其DPH之后,则应丢弃该DPP。
在Gen 2操作中,DPP的处理应遵循以下规则:
• 如果满足以下条件,则应开始DPP处理:
- 正确接收了一个DPH,或者DPH接收不正确但声明了一个有效的DPP长度字段副本。
- 在其DPH之后立即接收了一个DPPSTART有序集合或DPPABORT有序集合。
• DPP处理应遵循以下规则: - 当在DPP预期结束位置(由有效长度字段加4指示)检测到有效的DPPEND有序集合或DPPABORT有序集合时,DPP处理应完成。
- 如果在DPP预期结束位置(由有效长度字段加4指示)未检测到DPPEND有序集合或DPPABORT有序集合,则DPP处理应被中止。端口应进入恢复状态。
- 如果在DPH之后立即检测到DPPABORT有序集合而没有DPPSTART有序集合,则DPP处理应完成。
7.2.4.1.10 接收LGOOD_n 【Receiving LGOOD_n】
• 端口应该在其Tx Header Buffer 保持每一个被发送过的头包,直到它接收到一个LGOOD_n。当接收到一个LGOOD_n时,端口应该做如下事项:
- 如果该LGOOD_n是Header Sequence Number Advertisement,并且端口是从Recovery进入U0,则端口应该清空Tx Header Buffers中所保持的Header Sequence Numbers小于或等于所接收到的Header Sequence Number的头包,并且将其ACK Tx Header Sequence Number初始化成所接收到的Header Sequence Number加上1。
注意:比较和递增是模8操作。
- 如果端口接收到一个LGOOD_n,但是该LGOOD_n不是Header Sequence Number Advertisement,则它应该清空其Tx Header Buffer中Header Sequence Number与接收到的Header Sequence Number一致的头包,并基于模8操作将ACK Tx Header Sequence Number递增1。
- 如果端口接收到一个LGOOD_n,但是该LGOOD_n不是Header Sequence Number Advertisement,如果接收到的如果端口接收到一个LGOOD_n,但是该LGOOD_n不是Header Sequence Number Advertisement不匹配ACK Tx Header Sequence Number,则端口应该转换到Recovery。ACK Tx Header Sequence Number应该不变。
注意:接收到乱序的LGOOD_n意味着丢失或者损坏了链路命令,从而应该转换进入Recovery。
7.2.4.1.11 接受LCRD_x/LCRD1_x/LCRD2_x【Receiving LCRD_x/LCRD1_x/LCRD2_x】
- 在SuperSpeed操作中,端口应根据接收到的LCRD_x调整其远程接收头包缓冲区信用计数:
- 端口在接收到LCRD_x时,应将其远程接收头包缓冲区信用计数加1。
- 如果端口接收到顺序错误的LCRD_x,则应转换到恢复状态。
注:接收到顺序错误的信用意味着丢失或损坏的链路命令,端口应转换到恢复状态。
- 在SuperSpeedPlus操作中,端口应根据接收到的LCRD1_x和LCRD2_x相应地调整其远程Type 1和Type 2接收缓冲区信用计数:
- 端口在接收到LCRD1_x或LCRD2_x时,应相应地将其远程Type 1或Type 2接收缓冲区信用计数加1。
- 如果端口接收到顺序错误的LCRD1_x或LCRD2_x,则应转换到恢复状态。
7.2.4.1.12 接受LBAD【Receiving LBAD】
在接收到LBAD时,端口应在重新发送未通过LGOOD_n确认的头包之前发送一个LRTY。此外,还应遵循以下规则:
- 集线器(Hub)的行为:
- 集线器应在所有重新发送的头包的链路控制字(Link Control Word)中设置DL位,并重新计算CRC-5。
- 在SuperSpeed操作中重新发送数据包(DP)时,集线器应丢弃DPP。
- 在SuperSpeedPlus操作中重新发送数据包(DP)时,集线器应丢弃DPP,并用一个无效化的DPP(nullified DPP)替换。无效化的DPP的定义可参考第7.2.1.2.2节。
- 主机或外设的行为:
- 主机或外设可以选择在任何重新发送的头包的链路控制字中设置DL位,并重新计算CRC-5。
- 如果重新发送的包是DP,并且DPH中的DL位未设置,则DPH应后跟DPP。
注意:
- 重新发送等时(isochronous)传输包(ITP)会使得等时时间戳值失效。
- 在重新发送的头包中,CRC-16保持不变。
如果在接收到LBAD时,Tx头包缓冲区或Type 1/Type 2 Tx头包缓冲区中没有未确认的头包,则端口应发送一个LRTY。
注:这是一种错误情况,LBAD是由于链路错误而产生的。
7.2.4.1.13 发送器定时器【Transmitter Timers】
PENDING_HP_TIMER被规定用于覆盖从一个头包发送给链路伙伴到该头包被链路伙伴确认之间的时间段。这一时间是从HP发起端的连接器开始测量的,从HP的最后一个符号被传输到对应的LGOOD_n或LBAD的最后一个符号被接收为止。设置这一时间限制的目的是允许端口检测其链路伙伴发送的头包确认是否丢失或损坏。PENDING_HP_TIMER的超时值在表7-7中列出。PENDING_HP_TIMER的操作应基于以下规则:
-
端口应具有一个仅在U0状态下激活的PENDING_HP_TIMER,且满足以下条件之一:
- 端口传输了一个头包,但尚未被其链路伙伴确认,除了在接收LBAD和重新传输Tx头包缓冲区或Type 1/Type 2 Tx头包缓冲区中最老的头包之间的期间。
- 端口正在等待其链路伙伴的头序列号通告。
-
如果满足以下条件之一,则应启动PENDING_HP_TIMER:
- 端口进入U0状态,等待头序列号通告。
- 传输了一个头包,并且在Tx头包缓冲区或Type 1/Type 2 Tx头包缓冲区中没有先前传输但未确认的头包。
- 在响应LBAD时重新传输了最老的头包。
-
如果一个头包通过LGOOD_n确认,并且在Tx头包缓冲区或Type 1/Type 2 Tx头包缓冲区中仍有传输但未确认的头包,则PENDING_HP_TIMER应被重置并重新启动。
-
如果满足以下条件之一,则PENDING_HP_TIMER应被重置并停止:
- 接收到头序列号通告。
- 接收到LGOOD_n确认,并且Tx头包缓冲区或Type 1/Type 2 Tx头包缓冲区中所有传输的头包都已确认。
- 接收到LBAD确认。
-
如果满足以下两个条件,则端口应转换到恢复状态:
- PENDING_HP_TIMER超时。
- 对于SuperSpeed USB,完成了一个传出头包的传输,或者一个传出DPP的传输以DPPEND完成或以DPPABORT终止。
- 注:这是为了允许在不截断头包的情况下平稳地转换到恢复状态。
-
对于SuperSpeed USB,还规定了一个CREDIT_HP_TIMER,用于覆盖从头包传输且其远程接收头包缓冲区信用计数小于四,到接收到远程接收头包缓冲区信用并使其信用计数恢复到四的时间段。该计时器的目的是确保在合理的时间限制内接收到远程接收头包缓冲区信用。这将允许发送头包的端口在时间限制内收回远程接收头包缓冲区信用,以便继续传输过程。同时,这也为接收头包的端口提供了足够的时间来处理头包。
翻译:
对于SuperSpeedPlus USB,规定了两个CREDIT_HP_TIMER。
一个Type 1 CREDIT_HP_TIMER用于覆盖从Type 1数据包传输且其远程Type 1接收缓冲区信用计数小于四(Gen 1x2或Gen 2x1)或七(Gen 2x2),到接收到远程Type 1接收缓冲区信用并使其信用计数恢复到四或七的时间段。
一个Type 2 CREDIT_HP_TIMER用于覆盖从Type 2数据包传输且其远程Type 2接收缓冲区信用计数小于四或七,到接收到远程Type 2接收缓冲区信用并使其信用计数恢复到四或七的时间段。
CREDIT_HP_TIMER的超时值在表7-7中列出。
对于SuperSpeed USB,CREDIT_HP_TIMER的操作应基于以下规则:
-
端口应仅在U0状态下激活CREDIT_HP_TIMER,并且满足以下条件之一:
- 端口的远程接收头包缓冲区信用计数小于四。
- 端口正在等待其链路伙伴的头序列号通告和接收头包缓冲区信用通告。
-
当发送头包或重试的头包,或者端口进入U0状态时,应启动CREDIT_HP_TIMER。
-
当接收到有效的LCRD_x时,应重置CREDIT_HP_TIMER。
-
如果接收到有效的LCRD_x且远程接收头包缓冲区信用计数小于四,则应重新启动CREDIT_HP_TIMER。
-
如果满足以下两个条件,则端口应转换到恢复状态:
- CREDIT_HP_TIMER超时。
- 完成了一个传出头包的传输,或者一个传出DPP的传输以DPPEND完成或以DPPABORT终止。
- 注:这是为了允许在不截断头包的情况下平稳地转换到恢复状态。
对于SuperSpeedPlus USB,Type 1/Type 2 CREDIT_HP_TIMER的操作应基于以下规则:
- 端口应仅在U0状态下激活其Type 1/Type 2 CREDIT_HP_TIMER,并且满足以下条件之一:
- 端口的相应远程Type 1/Type 2接收缓冲区信用计数小于四(Gen 1x2或Gen 2x1)或七(Gen 2x2)。
- 端口正在等待其链路伙伴的头序列号通告和Type 1/Type 2接收缓冲区信用通告。
- 当发送相应的数据包或重试的数据包,或者端口进入U0状态时,应启动Type 1/Type 2 CREDIT_HP_TIMER。
- 当接收到相应的LCRD1_x或LCRD2_x时,应重置Type 1或Type 2 CREDIT_HP_TIMER。
- 如果接收到有效的LCRD1_x或LCRD2_x且相应的远程Type 1或Type 2接收缓冲区信用计数小于四或七,则应重新启动Type 1或Type 2 CREDIT_HP_TIMER。
- 如果Type 1或Type 2 CREDIT_HP_TIMER超时,则端口应转换到恢复状态。

注1:
超时值还包括由长活动电缆引入的传播延迟,以及可能存在于主机端和/或设备端的额外重定时器(re-timers)。需要意识到,端口接收HP时对链路命令返回的任何延迟都可能导致吞吐量性能下降。
- 在SS(SuperSpeed)操作中,端口在接收到HP后,应在3.0微秒内返回相应的LGOOD_n或LBAD。请注意,此延迟是基于最大DPP负载的DP(数据包)刚刚被传输的最坏情况。在这种情况下,端口必须等待当前DP传输完成,随后是SKP有序集合和之前的链路命令。
- 在SSP(SuperSpeedPlus)操作中,端口在接收到HP后,应在1.5微秒内返回相应的LGOOD_n或LBAD。请注意,此延迟是基于最大DPP负载的DP刚刚被传输的最坏情况。在这种情况下,端口必须等待当前DP传输完成,随后是SKP有序集合和之前的链路命令。
- 端口在接收到链路命令后,应在200纳秒内完成链路命令处理。
注2:
放宽超时值是为了允许一些低成本实现,尽管这可能会以牺牲其链路伙伴的性能为代价(导致链路伙伴的性能停滞)。
7.2.4.2 链路电源管理和流程【Link Power Management and Flow】
请求进入低功耗链路状态是在U0期间完成的。链路命令LGO_U1, LGO_U2, 以及 LGO_U3被端口用来请求进入低功耗状态。LAU 或者 LXU 由另一个端口发送来做出响应。LPMA仅由端口在响应LAU时发送。关于从低功耗状态退出/唤醒的详情在第7.5.7, 7.5.8, 以及 7.5.9节描述。
7.2.4.2.1 链路电源管理定时器【Link Power Management Timers】
端口应具备三个定时器用于链路电源管理。首先,PM_LC_TIMER用于端口发起进入低功耗链路状态的请求,其设计目的是确保能够迅速进入低功耗链路状态。其次,PM_ENTRY_TIMER用于端口接受进入低功耗链路状态的请求,其设计目的是确保链路两端的端口能够进入相同的低功耗链路状态,无论LAU(Link Acknowledge Ux)或LPMA(Link Partner in low-power mode Acknowledge)是否丢失或损坏。最后,Ux_EXIT_TIMER用于端口发起从U1或U2状态的退出,其规定是为了确保U1或U2状态退出的时间有界,并且不会影响头包传输的延迟。这三个定时器的超时值在表7-8中规定。
端口应根据以下规则操作PM_LC_TIMER:
- 请求进入低功耗链路状态的端口应在发送LGO_Ux链路命令的最后一个符号后启动PM_LC_TIMER。
- 请求进入低功耗链路状态的端口在接收到LAU或LXU的最后一个符号时,应禁用并重置PM_LC_TIMER。
端口应根据以下规则操作PM_ENTRY_TIMER:
- 接受进入低功耗链路状态请求的端口应在发送LAU的最后一个符号后启动PM_ENTRY_TIMER。
- 接受进入低功耗链路状态请求的端口在接收到LPMA的最后一个符号,或者在其接收器检测到TS1有序集合时,应禁用并重置PM_ENTRY_TIMER。需要注意的是,如果LPMA被损坏,端口可能会在PM_ENTRY_TIMER超时之前在其接收器丢失位锁。在这种情况下,端口不应因位错误而主动进入恢复状态,而应继续保留在U0状态,直到PM_ENTRY_TIMER超时。
端口应根据以下规则操作Ux_EXIT_TIMER: • 发起U1或U2退出的端口在开始发送LFPS退出握手信号时,应启动Ux_EXIT_TIMER。 • 发起U1或U2退出的端口在进入U0状态时,应禁用并重置Ux_EXIT_TIMER。

7.2.4.2.2 低功耗链路状态的发起【Low Power Link State Initiation】
端口在满足以下所有条件之前,不应发送LGO_U1、LGO_U2或LGO_U3:
-
它已对所有接收到的数据包发送了LGOOD_n和LCRD_x,或LCRD1_x/LCRD2_x。
-
它已对所有传输的数据包接收了LGOOD_n和LCRD_x,或LCRD1_x/LCRD2_x。
- 注:这意味着端口必须在进入低功耗链路状态之前,接收并返回所有信用。
-
它没有待传输的数据包。
-
它在进入U0状态时已完成头序列号通告和接收头缓冲区信用通告,或Type 1/Type 2接收缓冲区信用通告。
- 注:这意味着端口已向其链路伙伴发送了头序列号通告和接收头缓冲区信用通告,或Type 1/Type 2接收缓冲区信用通告,并且也从其链路伙伴接收了头序列号通告和接收头缓冲区信用通告,或Type 1/Type 2接收缓冲区信用通告。
-
它被更高层指示发起进入低功耗链路状态。
更高层可能指示链路层发起进入低功耗链路状态的例子包括:
a. U1或U2不活动计时器到期(参见第10章中的PORT_U1_TIMEOUT和PORT_U2_TIMEOUT);
b. 接收到SetPortFeature(PORT_LINK_STATE)请求;
c. 设备实现特定的机制。 -
它已满足更高层发起进入低功耗链路状态的条件。例如:
- (a) 设置了U1_enable/U2_enable,或者U1_TIMEOUT/U2_TIMEOUT不为零;
- (b) 设备已接收到对每个先前传输的数据包的ACK TP(确认传输包);
- (c) 设备没有等待在PING之后跟随的TP(传输包);
- (d) 设备没有等待在时间戳请求之后跟随的时间戳。
- 注:关于这些以及其他示例,可参考第8章。
端口在接收到LGO_U1或LGO_U2时,应执行以下操作之一:
- 如果因接收到设置链路功能的LMP(链路管理包)而断言了强制链路电源管理接受字段(Force Link PM Accept),端口应发送LAU(链路接受Ux)。
- 如果满足以下所有条件,端口应发送LAU: a. 它已对所有接收到的数据包传输了LGOOD_n、LCRD_x或LCRD1_x/LCRD2_x序列。 b. 它已对所有传输的数据包接收了LGOOD_n、LCRD_x或LCRD1_x/LCRD2_x序列。 c. 它没有待传输的数据包。 d. 它没有被更高层指示拒绝进入低功耗状态。更高层可能指示链路层拒绝进入低功耗状态的例子包括:
- (1) 下游端口未启用U1或U2(即,PORT_U1_TIMEOUT或PORT_U2_TIMEOUT被设置为零);
- (2) 设备尚未接收到对先前传输的数据包的ACK TP(确认传输包,参考第8章);
- (3) 设备接收到一个ping TP(参考第8章中关于ping数据包的定义以获取更多信息)。
- 如果上述任何条件未满足,端口应发送LXU(链路拒绝Ux)。
7.2.4.2.3 U1/U2进入流程【U1/U2 Entry Flow】
无论是下游端口还是上游端口都可以发起U1/U2的进入或退出。通过使用表7-5中定义的链路命令来实现进入低功耗U1或U2链路状态。
-
端口应发送一个LGO_U1或LGO_U2链路命令来请求进入低功耗链路状态。
-
发送LGO_Ux后,端口应启动其PM_LC_TIMER。
-
端口应通过发送一个LAU接受LGO_Ux,或者通过发送一个LXU拒绝LGO_U1或LGO_U2,并保持在U0状态。
-
发送LGO_U1或LGO_U2后,端口在接收到LXU或重新进入U0之前不应发送任何数据包。
-
发送LGO_U1或LGO_U2后,端口应继续接收和处理数据包和链路命令。
-
接收到LXU后,端口应保持在U0状态。
-
如果在PM_LC_TIMER超时时未收到单个LAU或LXU,端口应发起向恢复状态(Recovery)的转换。
-
发送LAU后,端口应启动PM_ENTRY_TIMER。
-
接收到LAU后,端口应发送一个LPMA,然后进入请求的低功耗链路状态。
-
发送LAU或LPMA后,端口不应发送任何数据包或链路命令。
-
发送LAU的端口在PM_ENTRY_TIMER超时之前接收到LPMA时,应进入相应的低功耗链路状态。
-
发送LAU的端口在满足以下所有条件时,应在PM_ENTRY_TIMER超时后进入请求的低功耗链路状态:
- 未接收到LPMA。
- 未接收到TS1有序集合。
- 注:这意味着LPMA可能被损坏,而发送LGO_Ux的端口已进入Ux状态。
-
发送LAU的端口如果在PM_ENTRY_TIMER超时之前接收到TS1有序集合,则应进入恢复状态(Recovery)。
- 注:这意味着LAU可能被损坏,而发送LGO_Ux的端口已进入恢复状态。
-
发送LAU的端口在PM_ENTRY_TIMER超时之前不应对接收到的LFPS Ux_Exit信号(定义于第6.9.2节)响应Ux LFPS退出握手。
- 注:这意味着LPMA可能被损坏,而发送LGO_Ux的端口已发起Ux退出。在这种情况下,发送LAU的端口应完成低功耗链路状态的进入过程,然后响应Ux退出。
还存在一种端口从U1直接转换到U2的情况:
- 处于U1状态的端口如果满足以下两个条件,则应直接进入U2状态:
- 端口的U2不活动计时器已启用。
- U2不活动计时器超时,并且未接收到U1 LFPS退出信号。
7.2.4.2.4 U3 进入流程【U3 Entry Flow】
只有下游端口可以发起U3进入,而上游端口不应拒绝U3进入。
- 在被指示后,下游端口应通过发送LGO_U3来启动U3进入过程。
- 发送LGO_U3后,下游端口应启动PM_LC_TIMER。
- 上游端口应以LAU响应下游端口的LGO_U3请求。
- 在发送LAU之后,上游端口不应再发送任何数据包或链路命令。
- 在发送LGO_U3之后,下游端口应忽略上游端口发送的任何数据包。
- 注:这是一种特殊情况,即上游端口在接收LGO_U3之前正在发送一个头包。
- 在接收到LGO_U3后,上游端口应以LAU响应。所有未确认的数据包处理应被终止。
- 在发送LAU之后,上游端口应启动PM_ENTRY_TIMER。
- 在接收到LAU后,下游端口应发送一个LPMA,然后转换到U3状态。
- 如果满足以下所有三个条件,下游端口应转换到恢复状态(Recovery),并在重新进入U0后重新发起U3进入。
- PM_LC_TIMER超时。
- 未接收到LAU。
- 连续尝试进入U3的次数少于三次。
- 上游端口在满足以下两个条件之一时应转换到U3状态:
- 接收到LPMA。
- PM_ENTRY_TIMER超时且未接收到LPMA。
- 下游端口在连续三次尝试进入U3失败后应转换到eSS.Inactive状态。
7.2.4.2.5 并发低功耗链路管理流程【Concurrent Low Power Link Management Flow】
并发低功耗链路管理流程(Concurrent low power link management flow)适用于当下行端口和上行端口两者同时发起进入低功耗链路状态请求的情形。
• 如果下行端口已经发送了LGO_U1, LGO_U2, or LGO_U3而又接收到了LGO_U1 or LGO_U2,则它应该发送一个LXU。
• 如果上行端口已经发送了LGO_U1 or LGO_U2而又接收到了LGO_U1, LGO_U2,则它应该等待直到接收到一个LXU并发送一个LAU 或 LXU。
• 如果上行端口已经发送了LGO_U1 or LGO_U2而又从下行端口接收到了LGO_U3,则它应该等待直到接收到一个LXU并发送一个LAU。
• 如果下行端口被高层指示要求启动转换到U3,而一个到U1或U2的转换已经被发起了但是还没完成,则端口应该首先完成正在进行中的转换到U1或U2,接着返回到U0并请求进入U3。
7.2.4.2.6 并发的低功耗链路管理和恢复流程【Concurrent Low Power Link Management and Recovery Flow】
并发的低功耗链路管理和恢复流程(Concurrent low power link management and Recovery flow)适用于一个端口发送了一个低功耗链路状态的进入请求,而另一个端口发送了Recovery。发送低功耗链路状态进入请求的端口应该满足如下规则:
• 发送LGO_Ux后,如果接收到了TS1有序集,端口应该转换进入Recovery。
• 当从Recovery再次进入U0后,如果进入低功耗链路状态的条件仍然有效,端口应该重新发起如第7.2.4.2.3节和第7.2.4.2.4节描述的低功耗链路状态的进入过程。
7.2.4.2.7 低功耗链路状态退出流程【Low Power Link State Exit Flow】
从低功耗链路状态退出指的是从U1/U2退出,或者从U3唤醒。这一过程通过第6.9.2节中定义的LFPS退出信令完成。成功的LFPS握手过程将使下游端口和上游端口都进入恢复(Recovery)状态。
在第7.2.4.2.1节中定义的Ux_EXIT_TIMER仅适用于端口尝试从U1或U2退出时。当端口发起U3唤醒时,不应使用该定时器。
在第7.2.4.2.1节中定义的U1_MIN_RESIDENCY_TIMER仅适用于处于U1状态的端口。对于发起U1进入的端口,该定时器从其发送LPMA开始,在连接器侧测量,直到它开始传输U1_LFPS_Exit信号。对于接受U1进入的端口,该定时器从其接收LPMA开始,在连接器侧测量,直到它开始传输U1_LFPS_Exit信号。如果LPMA被损坏,则从PM_ENTRY_TIMER超时开始测量,直到它开始传输U1_LFPS_Exit信号。
- 端口应在U1_MIN_RESIDENCY_TIMER到期后才发起U1退出。
- 从U1/U2的退出应遵循以下流程。U3唤醒遵循相同的流程,但U3唤醒期间不启用Ux_EXIT_TIMER。
- 如果端口正在发起U1/U2退出,则应开始发送在第6.9.2节中定义的U1/U2 LFPS退出握手信号,并启动Ux_EXIT_TIMER。
- 如果端口正在发起U3唤醒,则应开始发送在第6.9.2节中定义的U3 LFPS唤醒握手信号。
- 端口在接收到U1/U2退出或U3唤醒LFPS握手信号后,应通过响应在第6.9.2节中定义的U1/U2退出或U3唤醒LFPS信号来开始U1/U2退出或U3唤醒。
- 在第6-30表中定义的tNoLFPSResponseTimeout之前成功完成LFPS握手的端口应转换到恢复(Recovery)状态。
- 发起U1或U2退出的端口如果满足以下两个条件之一,则应转换到eSS.Inactive:
- 在tNoLFPSResponseTimeout时,未满足成功LFPS握手的条件。
- Ux_EXIT_TIMER超时,链路未转换到U0。
- 发起U3唤醒的端口如果在tNoLFPSResponseTimeout时未满足成功LFPS握手的条件,则应保持在U3状态,并在至少100毫秒的延迟后可以再次发起U3唤醒。
- 无法在tNoLFPSResponseTimeout内响应U3 LFPS唤醒的根端口应在准备好返回到U0时发起U3 LFPS唤醒。
7.3 链路错误规则/恢复【Link Error Rules/Recovery】
7.3.1 超高速比特错误概览【Overview of SuperSpeed Bit Errors】
超高速时序裕量(SuperSpeed timing budget)是基于链路的统计学随机比特错误概率小于10-12而设。 包分帧(Packet framings)以及链路命令分帧(link command framing)能容忍1个符号错误。在链路流程控制下的比特错误检测在第7.2.4节详细描述。
7.3.2 链路错误类型,检测和恢复【Link Error Types, Detection, and Recovery】
在两个链路伙伴之间进行的数据传输是通过数据包的形式完成的。定义了一组链路命令,以确保数据包能够成功地跨越链路传输。此外,还定义了其他链路命令来管理链路的连接性。当链路上出现符号错误时,数据包或链路命令的完整性可能会受到损害。因此,不仅需要构建数据包或链路命令以提高容错能力,还需要明确规定链路数据完整性的处理,以便能够检测到任何使数据包或链路命令失效或损坏的错误,并能够恢复链路错误。
在链路层存在各种类型的错误。这包括数据包或链路命令上的错误、链路训练过程中的错误,或者在链路从一个状态转换到另一个状态时发生的错误。本节详细描述了这些链路错误的检测和恢复。
7.3.3 链路错误统计【Link Error Statistics】
为了提高链路操作的质量,实现了两种链路错误统计计数,并且这些统计信息可供上层访问,以便上层根据这些数据决定是否需要对端口进行重新配置。
7.3.3.1 链路错误计数【Link Error Count】
链路错误计数(Link Error Count)被定义为记录端口从U0状态转换到恢复(Recovery)状态以恢复错误事件的次数。所有下游端口都应实现链路错误计数。
链路错误计数的操作应遵循以下规则:
- 在SuperSpeedPlus操作中,端口应实现一个链路错误计数器,该计数器可以统计多达65,535个错误事件。如果链路错误计数器达到其最大计数值,则该计数器应饱和(不再增加)。
- 如果满足以下条件之一,链路错误计数器应被重置为零:
- 上电复位(PowerOn Reset)、热复位(Hot Reset)或温复位(Warm Reset)。
- 根据指令(Directed)。
- 每当端口从U0状态转换到恢复(Recovery)状态以恢复错误事件时,链路错误计数器应增加1。
7.3.3.2 软错误计数【Soft Error Count】
7.3.3.2 软错误计数
软错误计数被定义为记录端口发生的可纠正或可检测的错误事件数量,这些错误事件不需要通过转换到恢复(Recovery)状态来恢复链路。只有支持SuperSpeedPlus操作的端口可以选择性地实现软错误计数。
软错误计数的操作应遵循以下规则:
- 在SuperSpeedPlus操作中,端口应统计多达65,535个错误事件。如果软错误计数达到其最大计数值,则该计数器应饱和(不再增加)。
- 如果满足以下条件之一,软错误计数应被重置为零:
- 上电复位(PowerOn Reset)、热复位(Hot-Reset)或温复位(Warm-Reset)。
- 根据指令(Directed)。
- 如果检测到以下任何一种错误,软错误计数应增加1:
- 块头中的单比特错误。
- CRC-5、CRC-16或CRC-32错误。
- 单符号帧错误。
- 空闲符号错误。
- 单个SKP符号错误。
- 可选地,DPH长度字段副本中的错误。
7.3.4 头包错误【Header Packet Errors】
检测到几种类型的头包错误。它们是:
- 缺少头包
- 由于CRC错误导致的无效头包
- 接收头序列号不匹配
无论如何,链路错误计数仅在链路层的一类错误中递增,而这些错误会导致链路过渡到恢复状态。对于不会导致链路进入恢复状态的错误,链路错误计数将保持不变。
7.3.4.1 包分帧错误【Packet Framing Error】
一个包帧有序集的构造方式是使得在有序集内的任何单个符号损坏都不会阻止其包帧识别。 头包帧有序集和DPP帧有序集都是使用四符号有序集构造的。头包仅包含一个包帧有序集,位于包的开头,如第7.2.1节所定义。DPP以起始包帧有序集开始,并以结束包帧有序集结束,如第7.2.2节所定义。
- 如果满足以下两个条件之一,则应声明一个有效的HPSTART有序集、有效的DPHSTART有序集或有效的DPP帧有序集:
- 在四个连续符号周期中的至少三个符号是有效的包帧符号。
- 四个符号的顺序如表7-9所定义。 注意:如果一个HPSTART有序集或一个DPHSTART有序集有两个或更多符号损坏,则头包将无法检测到,因此会导致头包丢失。同样,如果在Gen 1操作中DPP帧有序集损坏,将导致数据包有效载荷丢失。在Gen 2操作中,DPP帧有序集的损坏将导致数据包有效载荷边界丢失。
- 头包丢失将导致端口过渡到恢复状态,具体取决于以下哪个条件首先成立:
- 端口在其PENDING_HP_TIMER超时时传输头包。
- 端口在检测到接收头序列号错误时接收头包。
- 在Gen 2操作中,DPP帧有序集丢失将导致端口过渡到恢复状态。

7.3.4.2 头包错误【Header Packet Error】
每个头包包含一个CRC-5和一个CRC-16,以确保可以验证头包的数据完整性。CRC-5用于检测链路控制字中的位错误。CRC-16用于检测包头中的位错误。可以使用CRC-5或CRC-16检查来检测头包错误。
- 如果满足以下条件,则应声明头包错误:
- 检测到有效的HPSTART有序集或DPHSTART有序集。
- CRC-5或CRC-16检查失败,如第7.2.1节所定义,或对于SuperSpeed USB,包头或链路控制字中出现的任何K符号阻止CRC-5或CRC-16检查完成。
- 如果端口检测到头包错误,则应发送LBAD,如第7.2.4.1节所定义。
- 如果端口连续三次未能接收到头包,则应过渡到恢复状态。详情请参见第7.2.4.1.4节。
7.3.4.3 Rx头包序列号错误【Rx Header Sequence Number Error】
每个端口包含一个接收头序列号,如第7.2.4.1节所定义,并在进入U0时初始化。接收到头包后,端口需要将嵌入在头包中的头序列号与其接收器中存储的接收头序列号进行比较。这确保了头包的有序传输和接收,可以检测到丢失或损坏的头包。
- 如果满足以下条件,则会发生接收头序列号错误:
- 接收到头包且未检测到头包错误。
- 接收到的头包中的头序列号与接收头序列号不匹配。
- 检测到接收头包序列号错误的端口应过渡到恢复状态。
7.3.5 链路命令错误【Link Command Errors】
链路命令由四符号链路命令帧有序集LCSTART、一个两符号链路命令字及其重复组成。链路命令的构造方式使得链路命令帧有序集内的任何单个符号损坏都不会使链路命令的识别无效。此外,在Gen 2操作中,两链路命令字中的任何单个位错误都不会破坏链路命令的正确解析。
- 如果满足以下两个条件,则应声明检测到链路命令:
- 在四个连续符号周期中的至少三个符号是有效的链路命令符号。
- 四个符号的顺序如表7-10所述。
- 对于SuperSpeed USB,如果两个链路命令字相同,它们都包含表7-4中定义的有效链路命令信息,并且它们都通过了CRC-5检查,则声明为有效链路命令。
对于SuperSpeedPlus USB,如果满足以下条件之一,则应声明为有效链路命令:
- 两个链路命令字相同,它们包含表7-4中定义的有效链路命令信息,并且通过了CRC-5检查。
- 一个链路命令字包含表7-4中定义的有效链路命令信息,并通过了CRC-5检查,而另一个链路命令字包含无效的链路命令信息或未通过CRC-5检查。
- 检测到链路命令但不满足有效链路命令条件时,应声明为无效链路命令。
- 无效链路命令应被忽略。
- 检测到LGOOD_n、LCRD_x或LCRD1_x/LCRD_2_x丢失的端口应过渡到恢复状态。 注意:当连续接收到的两个LGOOD_n不按数字顺序排列时,声明LGOOD_n丢失。LGOOD_n、LBAD或LRTY丢失也可以在PENDING_HP_TIMER超时时推断。LCRD_x或LCRD1x/LCRD2x丢失在连续接收到的两个LCRD_x或LCRD1_x/LCRD2_x不按字母顺序排列时声明,或在CREDIT_HP_TIMER或Type 1/Type 2 CREDIT_HP_TIMER超时时未接收到LCRD_x或LCRD1_x/LCRD2_x时声明。
- 检测到LGO_Ux、LAU或LXU丢失的端口应过渡到恢复状态。 注意:在PM_LC_TIMER超时时未接收到LAU或LXU时,声明LGO*Ux、LAU或LXU丢失。
- 检测到LUP丢失的下行端口应过渡到恢复状态(参见第7.5.6节了解LUP检测)。 注意:LPMA丢失不会使链路过渡到恢复状态。它只会导致接受LGO_Ux的端口的Ux进入延迟(详情参见第7.2.4.2节)。
- 检测到LDN丢失的上行端口应过渡到恢复状态(参见第7.5.6节了解LDN检测)。

7.3.6 ACK Tx 头包序列号错误【ACK Tx Header Sequence Number Error】
每个端口都有一个定义与第7.2.4.1节的ACK Tx Header Sequence Number。该ACK Tx Header Sequence Number 是在 Header Sequence Number Advertisement期间被初始化的。在发送一个头包后,端口期待从其链路伙伴处接收到一个LGOOD_n以明确确认该头包被恰当接收。在接收到LGOOD_n时,LGOOD_n中包含的Header Sequence Number将被与ACK Tx Header Sequence Number相比较。比较的输出将决定是否发生了ACK Tx Header Sequence Number错误。
- 如果下列条件被满足,则声明一个ACK Tx Header Sequence Number错误:
- 接收到一个有效的LGOOD_n。
- 接收到的LGOOD_n中包含的Header Sequence Number与ACK Tx Header Sequence Number不匹配。
- 该LGOOD_n不是用于Header Sequence Number Advertisement。
- 检测到ACK Tx Header Sequence Number 错误的端口应该转换到Recovery。
- Link Error Count应该在每次由于出错而转换到Recovery时被增加1。
7.3.7 头包序列号宣告错误【Header Sequence Number Advertisement Error】
每个端口都要求在进入U0时首先执行一次Header Sequence Number Advertisement。Header Sequence Number Advertisement的详情在第7.2.4节描述。Header Sequence Number Advertisement是链路初始化的第一步,用来确保链路流程在Recovery前后维持未被中断(maintained un-interrupted)。在Header Sequence Number Advertisement期间的发生的任何错误都必须被检测到并发起恰当的错误恢复。
- 如果下列条件之一是真,则发生Header Sequence Number Advertisement错误:
- PENDING_HP_TIMER超时但是没有接收到Header Sequence Number Advertisement。
- 在发送Header Sequence Number Advertisement之前接收到头包。
- 在Header Sequence Number Advertisement之前接收到LCRD_x或LGO_Ux。
- 检测到Header Sequence Number Advertisement错误的端口应该转换到Recovery。
- Link Error Count应该在每次由于出错而转换到Recovery时被增加1。
7.3.8 Rx超高速头包缓冲信用宣告错误【SuperSpeed Rx Header Buffer Credit Advertisement Error】
在进入U0后,每个端口都有要求在Header Sequence Number Advertisement之后执行Rx Header Buffer Credit Advertisement。Rx Header Buffer Credit Advertisement的详情在第7.2.4节描述。
• 如果下列条件之一是真,则发生Rx Header Buffer Credit Advertisement错误:
- CREDIT_HP_TIMER超时但是没有接收到LCRD_x。
- 在发送LCRD_x之前接收到头包。
- 在LCRD_x之前接收到LGO_Ux。
• 检测到Rx Header Buffer Credit Advertisement错误的端口应该转换到Recovery。
• Link Error Count应该在每次由于出错而转换到Recovery时被增加1。
7.3.9 SuperSpeedPlus 类型1/类型2接收缓冲区信用宣告错误【SuperSpeedPlus Type 1/Type 2 Rx Buffer Credit Advertisement Error 】
对于SuperSpeedPlus USB,类型1接收缓冲区信用广告错误检测的操作与类型2接收缓冲区信用广告相同。 每个端口在进入U0后需要在头序列号广告之后执行类型1和类型2接收缓冲区信用广告。类型1/类型2接收缓冲区信用广告的详细信息在第7.2.4节中描述。
- 如果满足以下条件之一,则会发生类型1/类型2接收缓冲区信用广告错误:
- 在类型1或类型2 CREDIT_HP_TIMER超时时未接收到相应的LCRD1_x或LCRD2_x。
- 在发送LCRD1_x之前接收到类型1包,或在发送LCRD2_x之前接收到类型2包。
- 在接收到LCRD1_x或LCRD2_x之前接收到LGO_Ux。
- 检测到类型1/类型2接收缓冲区信用广告错误的端口应过渡到恢复状态。
7.3.10 训练序列错误【Training Sequence Error】
在Polling.Active、Polling.Configuration、Recovery.Active和Recovery.Configuration子状态中的TS1和TS2有序集期间,符号损坏是预期的,直到满足过渡到下一个状态的要求。从这些子状态中的任何一个超时都被视为训练序列错误。
- 从Polling.Active、Polling.Configuration、Recovery.Active或Recovery.Configuration子状态超时将导致训练序列错误。
- 对于SuperSpeedPlus操作,在Polling.Active或Polling.Configuration中检测到训练序列错误时,端口应过渡到Polling.PortMatch以协商下一个端口能力。详情请参见第7.5.4节。
- 对于SuperSpeed操作,在检测到训练序列错误时,应遵循以下链路状态过渡之一:
- 如果在Polling期间发生训练序列错误且cPollingTimeout小于2,下行端口应过渡到Rx.Detect。
- 如果在Polling期间发生训练序列错误且cPollingTimeout为2,下行端口应过渡到eSS.Inactive。
- 如果在Polling期间发生训练序列错误,集线器的上行端口应过渡到Rx.Detect。
- 如果在Polling期间发生训练序列错误,外围设备的上行端口应过渡到eSS.Disabled。
- 如果在Recovery期间发生训练序列错误且过渡到Recovery不是尝试热重置,下行端口应过渡到eSS.Inactive。
- 如果在Recovery.Active和Recovery.Configuration期间发生训练序列错误且过渡到Recovery是尝试热重置,下行端口应过渡到Rx.Detect。
- 如果在Recovery期间发生训练序列错误,上行端口应过渡到eSS.Inactive。
- 链路错误计数将保持不变。
7.3.11 Gen 1 8b/10b 错误【Gen 1 8b/10b Errors】
当接收器解码8b/10b符号时,会有两种类型的错误。一种是差错错误,当接收到的8b/10b符号的运行差异不是+2、0或-2时,会声明差错错误。另一种是解码错误,当接收到无法识别的8b/10b符号时,会发生解码错误。 在收到8b/10b错误通知时:
- 端口可以选择执行以下操作:
- 如果链路正在接收头包,它应发送LBAD。
- 如果链路正在接收链路命令,它应忽略该链路命令。
- 如果链路正在接收DPP,它应丢弃该DPP。
- 链路错误计数应保持不变。
7.3.12 Gen 2x1 块头错误【Gen 2x1 Block Header Errors 】
块头错误有两种类型:可纠正的单比特块头错误和可检测但不可纠正的双比特块头错误。
- 在检测到单比特块头错误时,PHY应纠正该错误并将错误事件报告给链路层。软错误计数应增加一个。
- 在检测到双比特块头错误时,PHY应将错误事件报告给链路层。端口应过渡到恢复状态。
7.3.13 Gen 2x2 块头错误【Gen 2x2 Block Header Errors 】
请参阅第6.13.4节关于Gen 2x2操作中的数据条带化。BH0是传输在通道0上的块头,BH1是传输在通道1上的块头。由于BH0和BH1是相同的,如果PHY将BH0和BH1关联起来,可以进一步增强块头错误检测和纠正。这种关联的实现是可选的。
- 如果以下任一条件为真,PHY应声明接收到有效的块头:
- BH0和BH1都是有效且相同的。如果执行单比特错误纠正,应将错误事件报告给链路层。端口应相应地将软错误计数增加一个。
- 如果PHY将BH0和BH1关联起来,并且一个块头有效而另一个块头无效。如果执行单比特错误纠正,应相应地将错误事件报告给链路层。端口应将软错误计数增加一个。
- 如果以下任一条件为真,PHY应声明接收到无效的块头:
- BH0和BH1都是无效的。PHY应将错误事件报告给链路层。端口应过渡到恢复状态。
- BH0和BH1都是有效但不相同的。PHY应将错误事件报告给链路层。端口应过渡到恢复状态。
- 如果PHY不将BH0和BH1关联起来,并且其中一个块头无效。PHY应将错误事件报告给链路层。端口应过渡到恢复状态。
7.3.14 错误类型和恢复总结
表7-11总结了链路错误类型、错误计数和不同的错误路径以恢复链路。 在某些情况下,也会收到意外的链路命令或头包。这些情况包括但不限于以下内容:
- 在接收到头序列号广告和远程接收头缓冲区信用广告或类型1/类型2接收缓冲区信用广告之前,接收到意外的链路命令,如LBAD、LRTY、LAU、LXU或LPMA。
- 在从恢复状态进入U0后,接收到头序列号广告,其ACK传输头序列号与传输头缓冲区或类型1/类型2传输头缓冲区中的任何头包不对应。
- 在未发送LBAD的情况下接收到LRTY。
- 接收到既不是头序列号广告也不是头包确认的LGOOD_n。
- 在未发送LGO_Ux的情况下接收到LAU或LXU。
- 在未发送LAU的情况下接收到LPMA。
- 在链路初始化期间接收到意外的头包。
这些错误情况大多不是由于链路错误引起的。端口在这些情况下的行为是未定义的,并且是具体实现相关的。建议端口忽略这些意外的链路命令或头包。 如果端口根据TS2有序集被指示进入不同的链路状态,下游端口的TS2有序集将覆盖上游端口的TS2有序集。例如,如果下游端口在其TS2有序集中发出热重置,而上游端口发出环回模式,热重置将覆盖环回模式。端口应进入热重置状态。
| 错误类型 | 描述/示例 | 错误恢复路径 | 更新链路错误计数? | 更新软错误计数?(SuperSpeedPlus USB) |
|---|---|---|---|---|
| 缺少头包帧 | 只有有效的包帧有序集将在接收端声明。 | 延迟过渡到恢复 | 是 | 否 |
| 头包错误 | 任何头包CRC错误。 | 头包重试过程 | 否 | 是 |
| 接收头序列号错误 | 接收到的头包中的头序列号与接收头序列号不匹配。 | 恢复 | 是 | 否 |
| 确认传输头序列号错误 | 接收到的LGOOD_n(不是头序列号广告)中的头序列号与确认传输头序列号不匹配。 | 恢复 | 是 | 否 |
| 头序列号宣告错误 | 在PENDING_HP_TIMER超时时未收到LGOOD_n。 在发送LGOOD_n之前收到头包。 在接收到LGOOD_n之前收到LCRD_x或LCRD1_x/LCRD2_x或LGO_Ux。 | 恢复 | 是 | 否 |
| 接收头缓冲区信用广告错误(SuperSpeed USB) | 在CREDIT_HP_TIMER超时时未收到LCRD_x。 在发送LCRD_x之前收到头包。 在接收到LCRD_x之前收到LGO_Ux。 | 恢复 | 是 | 否 |
| 类型1/类型2接收缓冲区信用广告错误(SuperSpeedPlus USB) | 在类型1/类型2 CREDIT_HP_TIMER超时时未收到LCRD1_x/LCRD2_x。 在发送LCRD1_x/LCRD2_x之前收到包。 在接收到LCRD1_x/LCRD2_x之前收到LGO_Ux。 | 恢复 | 是 | 否 |
| 训练序列错误 | 从轮询到Rx.Detect或eSS.Disabled超时而未达到U0。 从恢复到eSS.Inactive超时而未达到U0。 从恢复到Rx.Detect超时而未达到U0。 从Polling.Active或Polling.Configuration到Polling.PortMatch超时(仅限SuperSpeedPlus USB)。 | 从恢复到eSS.Inactive超时需要软件干预。 | 否 | 否 |
| 无效链路命令 | 有效的链路命令帧但无效的链路命令字。 | 忽略 | 否 | 是 |
| 缺少链路命令 | 未检测到有效的链路命令帧。 | 如果缺少LGOOD_n或LCRD_x或LCRD1_x/LCRD2_x,则延迟过渡到恢复。 | 是 | 否 |
| 8b/10b错误(Gen 1) | 在PHY层检测到。 | 不适用 | 否 | 不适用 |
| Gen 2x1块头单比特错误 | 在PHY层检测并纠正。 | 可纠正 | 否 | 是 |
| Gen 2x1块头双比特错误 | 可检测 | 恢复 | 是 | 否 |
| 单比特SKP/SKPEND错误(Gen 2) | 可检测 | 可纠正 | 否 | 是 |
| Gen 2x2块头双比特错误 | 可通过BH0/BH1关联纠正(可选) | 可纠正 | 否 | 是 |
| Gen 2x2块头多比特错误 | 可通过BH0/BH1关联检测(可选) | 恢复 | 是 | 否 |
7.4 上电复位和带内复位【PowerOn Reset and Inband Reset】
与链路相关的复位有两类。第一类是上电复位,当电源接通时,恢复存储元件、寄存器或存储器到预定状态。上电复位后,LTSSM(在第7.5节中描述)应进入Rx.Detect。第二类是带内复位,使用增强型SuperSpeed或LFPS信号在链路上传播复位。有两种机制完成带内复位:热复位和温复位。无论是上电复位还是带内复位完成后,链路应按照第7.4.2节的描述过渡到U0。
7.4.1 上电复位【PowerOn Reset】
上电复位在电源接通时恢复存储元件、寄存器或存储器到预定状态(有关自供电设备何时接通电源的说明,请参阅第9.1.1.2节)。端口必须负责其内部复位信号和定时。 当上电复位被断言或V BUS无效时,应发生以下情况:
- 接收器终端应符合表6-22中定义的ZRX-HIGH-IMP-DC-POS规范。
- 发射器应保持表6-18中定义的恒定直流共模电压(VTX-DC-CM)。 当上电复位完成且V BUS有效时,应发生以下情况:
- 端口的LTSSM应初始化为Rx.Detect。请注意,双通道端口在配置通道确定之前不应进入Rx.Detect。
- LTSSM和PHY级变量(如接收均衡设置)应重置为默认值。
- 端口的接收器终端应符合表6-22中定义的RRX-DC规范。 注意:除eSS.Disabled外,Rx终端应始终在操作过程中保持。
7.4.2 带内复位【Inband Reset】
只有在被指示时,下游端口才会生成带内复位。 生成带内复位有两种机制。第一种机制是热复位,通过发送带有复位位的TS2有序集来定义。热复位会使LTSSM过渡到热复位状态。热复位完成后,将发生以下情况:
- 下游端口应重置其链路错误计数。
- 如果实现了SuperSpeedPlus操作,端口应重置软错误计数。
- 端口应将其PM计时器和相关的U1和U2超时值重置为零。
- 上游端口的端口配置信息应保持不变。详情请参阅第8.4.5和8.4.6节。
- PHY级变量(如接收均衡设置)应保持不变。
- 端口的LTSSM应过渡到U0。
带内复位的第二种机制是温复位。温复位的信号定义为满足表6-30中tReset要求的LFPS信号。温复位会使LTSSM过渡到Rx.Detect,重新训练链路(包括接收均衡器),重置上游端口,然后过渡到U0。上游端口应在所有链路状态下(除eSS.Disabled外)启用其LFPS接收器和温复位检测器。温复位完成后,将发生以下情况:
- 下游端口应重置其链路错误计数和软错误计数。
- 上游端口的端口配置信息应重置为默认值。详情请参阅第8.4.5和8.4.6节。
- PHY级变量(如接收均衡设置)应重新初始化或重新训练。
- 端口的LTSSM应通过Rx.Detect和Polling过渡到U0。
下游端口可以通过两种方式被指示重置链路,“PORT_RESET”或“BH_PORT_RESET”,如第10.3.1.6节所述。当被指示“PORT_RESET”时,下游端口应根据其LTSSM状态发出热复位或温复位。当被指示“BH_PORT_RESET”时,下游端口应在其任何LTSSM状态下(除eSS.Disabled外)发出温复位。 如果被指示“PORT_RESET”,下游端口应根据以下条件发出热复位或温复位:
-
如果下游端口处于U3、环回、合规模式或eSS.Inactive状态,应使用温复位。
-
如果下游端口处于U0状态,应使用热复位。
-
如果下游端口处于轮询或恢复的过渡状态,应使用热复位。
-
如果下游端口处于U1或U2状态,应使用LFPS退出握手退出U1或U2,过渡到恢复状态,然后过渡到热复位。
-
如果由于U1或U2中的LFPS握手超时导致热复位失败,下游端口应过渡到eSS.Inactive状态,直到软件干预或检测到上游端口被移除。
-
如果由于TS1/TS2握手超时导致热复位失败,下游端口应过渡到Rx.Detect并尝试温复位。
-
如果下游端口处于eSS.Disabled状态,则禁止带内复位。
如果被指示“BH_PORT_RESET”,应发出温复位,并且将发生以下情况:
- 下游端口应在所有链路状态下(除eSS.Disabled外)启动温复位并过渡到Rx.Detect。
- 上游端口应在所有链路状态下(除eSS.Disabled外)启用其LFPS接收器和温复位检测器。
- 接收到温复位的上游端口应过渡到Rx.Detect。有关温复位检测的详细信息,请参阅第6.9.3节。
7.5 链路训练和状态状态机(LTSSM)
链路训练和状态状态机(LTSSM)是为链路连接性和链路电源管理定义的状态机。LTSSM由12个不同的链路状态组成,可以根据其功能进行分类。首先,有四个操作链路状态:U0、U1、U2和U3。U0是启用增强型SuperSpeed链路的状态。数据包传输正在进行或链路处于空闲状态。U1是低功耗链路状态,没有数据包传输,增强型SuperSpeed链路连接可以禁用以节省链路功耗。U2也是低功耗链路状态,与U1相比,U2提供了更多的节能机会,但代价是增加了退出延迟。U3是链路挂起状态,可以实现更积极的节能机会。
其次,有四个链路状态:Rx.Detect、Polling、Recovery和Hot Reset,这些状态用于链路初始化和训练。Rx.Detect表示初始上电链路状态,端口尝试确定其增强型SuperSpeed链路伙伴是否存在。在检测到增强型SuperSpeed链路伙伴存在后,将开始链路训练过程。Polling是定义为两个链路伙伴的增强型SuperSpeed发射器和接收器进行训练、同步并准备好进行数据包传输的链路状态。Recovery是定义为当两个链路伙伴从低功耗链路状态退出时,或当链路伙伴检测到链路未正确运行在U0状态时,或当链路伙伴决定更改链路操作模式时重新训练链路的链路状态。Hot Reset是允许下游端口重置其上游端口的状态。
第三,引入了两个其他链路状态:Loopback和Compliance Mode,用于比特错误测试和发射器合规性测试。最后,定义了两个更多的链路状态。eSS.Inactive是链路错误状态,链路处于不可操作状态,需要软件干预。eSS.Disabled是增强型SuperSpeed连接被禁用的链路状态,链路可能在USB 2.0模式下运行。
LTSSM状态转换的配置信息和请求主要由软件控制。所有LTSSM对“指示”的引用均指上层机制。 还为LTSSM定义并实现了各种计时器,以确保LTSSM的成功运行。超时值汇总在表7-12中。
所有在链路层使用的计时器的精度公差为0~+50%,但U2不活动计时器除外(有关U2不活动计时器的精度,请参阅第10.4.1节)。所有超时值必须在上电复位或带内复位后设置为指定值。所有计数器也必须在上电复位或带内复位后初始化。
在状态机描述中,状态进入和退出条件的列表没有优先级。状态机图是概述,可能不包括所有的转换条件。
表7-12. LTSSM状态转换超时
| 名称 | 初始状态 | 超时到下一个状态 | 超时值 |
|---|---|---|---|
| teSSInactiveQuietTimeout | eSS.Inactive.Quiet | eSS.Inactive.Disconnect.Detect | 12 ms |
| tRxDetectQuietTimeoutDFP1 | Rx.Detect.Quiet | Rx.Detect.Active | 12 ms(最小值) 120 ms(最大值) |
| tRxDetectQuietTimeoutUFP | Rx.Detect.Quiet | Rx.Detect.Active | 12 ms |
| tPollingLFPSTimeout | Polling.LFPS/Polling.LFPSPlus | Compliance/Rx.Detect/eSS.Disabled/eSS.Inactive | 360 ms |
| tPollingSCDLFPSTimeout(SuperSpeedPlus操作) | Polling.LFPS或Polling.LFPSPlus | Polling.RxEQ | 60 µs |
| tPollingLBPMLFPSTimeout(SuperSpeedPlus操作) | Polling.PortMatch或Polling.PortConfig | Rx.Detect/eSS.Disabled/eSS.Inactive | 12 ms |
| tPollingActiveTimeout | Polling.Active | Rx.Detect/Polling.PortMatch/eSS.Disabled/eSS.Inactive | 12 ms(x1) 24 ms(x2) |
| tPollingConfigurationTimeout | Polling.Configuration | Rx.Detect/Polling.PortMatch/eSS.Disabled/eSS.Inactive | 12 ms(x1) 24 ms(x2) |
| tPollingIdleTimeout | Polling.Idle | Rx.Detect/Polling.PortMatch/eSS.Disabled/eSS.Inactive | 2 ms |
| tU0RecoveryTimeout | U0 | Recovery | 1 ms |
| tU0LTimeout | U0 | U0 | 10 µs |
| tNoLFPSResponseTimeout | U1 | eSS.Inactive | 2 ms |
| PORT_U2_TIMEOUT | U1 | U2 | U2 Inactivity字段在LMP中设置(详情请参阅第8.4节) |
| tU1PingTimeout | U1 | Rx.Detect | 300 ms |
| tNoLFPSResponseTimeout | U2 | eSS.Inactive | 2 ms |
| tNoLFPSResponseTimeout | U3 | U3 | 10 ms |
| tRecoveryActiveTimeout | Recovery.Active | eSS.Inactive, Rx.Detect | 12 ms |
| tRecoveryConfigurationTimeout | Recovery.Configuration | eSS.Inactive, Rx.Detect | 6 ms |
| tRecoveryIdleTimeout | Recovery.Idle | eSS.Inactive | 2 ms |
| tLoopbackExitTimeout | Loopback.Exit | eSS.Inactive | 2 ms |
| tHotResetActiveTimeout | Hot Reset.Active | eSS.Inactive | 12 ms |
| tHotResetExitTimeout | Hot Reset.Exit | eSS.Inactive | 2 ms |
| tU3WakeupRetryDelay | U3 | U3 | 100 ms |
| tU2RxdetDelay | U2 | U2 | 100 ms |
| tU3RxdetDelay | U3 | U3 | 100 ms |
备注:
- 建议在选择使用较大的tRxDetectQuietTimeoutDFP计时器值时考虑系统状态。在系统处于活动状态时使用较小的值,而在系统处于待机/睡眠或其他空闲状态时使用较大的值,这样可以在活动状态下对连接事件有更高的响应能力,同时在系统空闲状态下实现节能。
- 在轮询超时后,端口应过渡到不同的状态。详情请参阅第7.5.4.3节。
- U2不活动计时器的精度在第10.4.1节中规定。
所有状态机图都有转换条件的描述。这些描述仅供参考。状态转换的具体实现应遵循每节中的描述。
图7-14. 链路训练和状态状态机的状态图

7.5.1 eSS.Disabled
eSS.Disabled是一个端口的低阻抗接收终端被移除的状态。这是一个端口的增强型SuperSpeed连接被禁用的状态。有关外围设备行为的详细信息,请参阅第10.18节。有关集线器上游端口和下游端口行为的详细信息,请参阅第10.3至10.6节。
对于下游端口和集线器上游端口,eSS.Disabled不包含任何子状态。对于外围设备的上游端口,它包含两个子状态:eSS.Disabled.Default和eSS.Disabled.Error。eSS.Disabled也是自供电集线器上游端口的逻辑断电状态。eSS.Disabled.Default也是自供电外围设备上游端口的逻辑断电状态。
当被指示时,下游端口应从任何其他状态过渡到此状态。当VBUS无效时,自供电集线器或外围设备上游端口应过渡到此状态。
7.5.1.1 下游端口和集线器上游端口的eSS.Disabled【eSS.Disabled for Downstream Ports and Hub Upstream Ports】
下游端口和集线器上游端口的eSS.Disabled不包含任何子状态。
7.5.1.1.1 eSS.Disabled要求【eSS.Disabled Requirements】
- 在eSS.Disabled期间,VBUS可能存在。
- 端口的接收终端应呈现表6-22中定义的Z RX-HIGHIMP-DC-POS的高阻抗接地。
- 端口应禁用传输和接收LFPS和增强型SuperSpeed信号。
7.5.1.1.2 退出eSS.Disabled【Exit from eSS.Disabled】
- 当被指示时,下游端口应过渡到Rx.Detect。
- 上游端口应仅在VBUS过渡到有效或被指示时过渡到Rx.Detect。
7.5.1.2 外围设备上游端口的eSS.Disabled【eSS.Disabled for Upstream Ports of Peripheral Devices】
外围设备的eSS.Disabled操作类似于集线器上游端口,除了它在USB 2.0总线复位时仅尝试有限次数的增强型SuperSpeed尝试。
7.5.1.2.1 eSS.Disabled子状态机【eSS.Disabled Substate Machine】
外围设备的eSS.Disabled有两个子状态,如图7-15所示:
- eSS.Disabled.Default
- eSS.Disabled.Error
eSS.Disabled.Default是自供电外围设备的逻辑断电状态。
7.5.1.2.2 eSS.Disabled要求【eSS.Disabled Requirements】
外围设备上游端口的要求与第7.5.1.1.1节中定义的相同。此外,外围设备上游端口应实现一个tDisabledCount计数器。tDisabledCount计数器的操作应满足以下要求:
- tDisabledCount计数器应在以下两种情况下之一被重置为零:
- VBUS无效
- 成功的端口配置交换
- tDisabledCount计数器应在进入eSS.Disabled.Default时递增。
7.5.1.2.3 退出eSS.Disabled.Default【Exit from eSS.Disabled.Default】
- 如果满足以下条件之一,外围设备上游端口应过渡到Rx.Detect:
- 当VBUS过渡到有效时。
- 当检测到USB 2.0总线复位且tDisabledCount小于3时。
- 当被指示时。
- 如果tDisabledCount为3,外围设备上游端口应过渡到eSS.Disabled.Error。
7.5.1.2.4 退出eSS.Disabled.Error【Exit from eSS.Disabled.Error】
- 在上电复位时,外围设备上游端口应过渡到Rx.Detect。
- 在检测到VBUS无效时,自供电外围设备上游端口应过渡到eSS.Disabled.Default。
- 在检测到USB 2.0总线复位时,外围设备上游端口应保持在eSS.Disabled.Error。

当然,我可以帮你翻译这段内容:
7.5.2 eSS.Inactive
eSS.Inactive是链路增强型SuperSpeed操作失败的状态。下游端口只能在被指示时,或在检测到表6-22中规定的远端接收终端(RRX-DC)缺失时,或在温复位时退出此状态。上游端口只能在温复位时,或在检测到表6-22中规定的远端接收终端(RRX-DC)缺失时退出到Rx.Detect。
在eSS.Inactive期间,端口会定期执行远端接收终端检测。如果检测到断开连接,端口将返回到Rx.Detect。如果未检测到断开连接,链路将保持在eSS.Inactive状态,直到软件干预。
7.5.2.1 eSS.Inactive子状态机
eSS.Inactive包含以下子状态机,如图7-16所示:
- eSS.Inactive.Disconnect.Detect
- eSS.Inactive.Quiet
7.5.2.2 eSS.Inactive要求
- VBUS应存在。
- 单通道操作中的接收终端应符合表6-22中规定的要求(RRX-DC)。
- x2操作中配置通道的接收终端应符合表6-22中规定的要求(RRX-DC)。
- 在此状态下,发射器共模不需要在规范范围内。
7.5.2.3 eSS.Inactive.Quiet
eSS.Inactive.Quiet是一个子状态,在该状态下,端口已禁用其远端接收终端检测,以便在等待软件干预时节省额外的电力。
7.5.2.3.1 eSS.Inactive.Quiet要求【eSS.Inactive.Quiet Requirements 】
- 远端接收终端检测功能应被禁用。
- 进入子状态时应启动一个12毫秒的计时器(teSSInactiveQuietTimeout)。
7.5.2.3.2 退出eSS.Inactive.Quiet【Exit from eSS.Inactive.Quiet】
- 计时器(teSSInactiveQuietTimeout)超时时,端口应过渡到eSS.Inactive.Disconnect.Detect。
- 当被指示时,下游端口应过渡到eSS.Disabled。
- 当发出温复位时,下游端口应过渡到Rx.Detect。
- 检测到温复位时,上游端口应过渡到Rx.Detect。
7.5.2.4 eSS.Inactive.Disconnect.Detect
eSS.Inactive.Disconnect.Detect是一个子状态,在该状态下,端口将执行远端接收终端检测,以确定其链路伙伴在eSS.Inactive期间是否断开连接,或过渡到eSS.Inactive是否由于其链路伙伴断开连接。
7.5.2.4.1 eSS.Inactive.Disconnect.Detect 要求
- 发射器必须执行第6.11节中描述的远端接收器终端检测。
7.5.2.4.2 从 eSS.Inactive.Disconnect.Detect 退出
- 如果未检测到符合表6-22中定义的规范的远端低阻抗接收器终端(RRX-DC),端口应转换到 Rx.Detect。
- 如果检测到符合表6-22中定义的规范的远端低阻抗接收器终端(RRX-DC),端口应转换到 eSS.Inactive.Quiet。

7.5.3 Rx.Detect
Rx.Detect 是 LTSSM 的上电状态,适用于下行端口和上行端口。在发出温重置(Warm Reset)时,它也是下行端口的状态;在检测到来自任何其他链路状态(除了 eSS.Disabled)的温重置时,它也是上行端口的状态。Rx.Detect 的目的是检测远端接收器终端到地的阻抗。Rx.Detect.Reset 是一个默认的重置状态,用于两个端口在温重置后同步操作;如果没有温重置,这个子状态会立即退出。Rx.Detect.Active 是用于远端接收器终端检测的子状态。Rx.Detect.Quiet 是一个节能子状态,在该状态下,远端接收器终端检测功能被禁用。端口将在 Rx.Detect 期间定期执行远端接收器终端检测。
7.5.3.1 Rx.Detect 子状态机
Rx.Detect 包含一个子状态机,如图 7-17 所示,具有以下子状态:
- Rx.Detect.Reset
- Rx.Detect.Active
- Rx.Detect.Quiet
7.5.3.2 Rx.Detect 要求
- 在此状态下,发射器的共模不需要符合规范。
- 必须保持表 6-22 中定义的低阻抗接收器终端(RRX-DC)。
7.5.3.3 Rx.Detect.Reset
Rx.Detect.Reset 是一个子状态,旨在使两个端口在温重置(Warm Reset)时同步操作。在此子状态下,下行端口应在指示时生成温重置。如果上行端口在检测到温重置时进入 Rx.Detect,它应保持在此子状态,直到温重置完成。 对于不是由于温重置而进入 Rx.Detect 的端口,它应立即退出。
7.5.3.3.1 Rx.Detect.Reset 要求
如果端口在温重置时进入 Rx.Detect,应应用以下要求。详情请参阅第 6.9.3 节。
- 下行端口应在表 6-30 中定义的 tReset 持续时间内传输温重置。 注意:这包括在恢复过程中热重置尝试失败的情况。详情请参阅第 7.4.2 节。
- 上行端口应保持在此状态,直到检测到温重置完成。
7.5.3.3.2 从 Rx.Detect.Reset 退出
- 如果进入 Rx.Detect 不是由于温重置,端口应直接转换到 Rx.Detect.Active。 注意:在上电期间不存在温重置。
- 下行端口应在传输温重置的 tReset 持续时间后转换到 Rx.Detect.Active,如表 6-30 中定义。
- 下行端口应在指示时转换到 eSS.Disabled。
- 上行端口应在不再接收到来自下行端口的 LFPS 温重置信号时转换到 Rx.Detect.Active,如第 6.9.3 节中定义。
7.5.3.4 Rx.Detect.Active
Rx.Detect.Active 是一个子状态,用于检测增强型 SuperSpeed 链接伙伴的存在。端口将执行第 6.11 节中定义的远端接收器终端检测。
7.5.3.5 Rx.Detect.Active 要求
- 发射器应启动第 6.11 节中描述的远端接收器终端检测。
- 上行端口应统计远端接收器终端检测事件的数量。远端接收器终端的检测定义在第6.11节中。注意:此计数值由外围设备用于确定何时需要转换到 eSS.Disabled。它也被集线器用于控制其下行端口状态机。详情请参阅第10.3.1.1节。
7.5.3.6 从 Rx.Detect.Active 退出
- 端口在检测到表6-22中定义的远端低阻抗接收器终端(RRX-DC)时应转换到 Polling。注意,对于支持 x2 操作的上行端口,远端低阻抗接收器终端(RRX-DC)仅在配置通道上呈现。详情请参阅第6.11.1节。
- 如果未检测到表6-22中定义的远端低阻抗接收器终端(RRX-DC),下行端口应转换到 Rx.Detect.Quiet。
- 下行端口应在指示时转换到 eSS.Disabled。
- 如果未检测到表6-22中定义的远端低阻抗接收器终端(RRX-DC),集线器的上行端口应转换到 Rx.Detect.Quiet。
- 当满足以下两个条件时,外围设备的上行端口应转换到 Rx.Detect.Quiet:
- 未检测到表6-22中定义的远端低阻抗接收器终端(RRX-DC)。
- 远端接收器终端检测事件的数量少于八次。
- 当满足以下两个条件时,外围设备的上行端口应转换到 eSS.Disabled:
- 未检测到表6-22中定义的远端低阻抗接收器终端(RRX-DC)。
- 远端接收器终端检测事件的数量已达到八次。 注意:对远端接收器终端检测次数的限制是为了允许增强型 SuperSpeed 外围设备在传统平台上在80毫秒后转换到 USB 2.0。
7.5.3.7 Rx.Detect.Quiet
Rx.Detect.Quiet 是一个子状态,在该状态下端口已禁用其远端接收器终端检测。
7.5.3.7.1 Rx.Detect.Quiet 要求
- 远端接收器终端检测应被禁用。
- 下行端口在进入子状态时应启动一个超时为12毫秒到120毫秒的计时器(tRxDetectQuietTimeoutDFP)。
- 上行端口在进入子状态时应启动一个超时为12毫秒的计时器(tRxDetectQuietTimeoutUFP)。
7.5.3.7.2 退出 Rx.Detect.Quiet
- 下行端口应在 tRxDetectQuietTimeoutDFP 定时器(12 毫秒到 120 毫秒)超时时转换到 Rx.Detect.Active。
- 上行端口应在 tRxDetectQuietTimeoutUFP 定时器(12 毫秒)超时时转换到 Rx.Detect.Active。
- 下行端口应在指示时转换到 eSS.Disabled。

7.5.4 Polling
Polling是用于链路训练的状态。在Polling期间,在超高速训练(SuperSpeed training)被启动之前,两个端口之间应该发生一个Polling.LFPS握手。比特锁(Bit lock),符号锁(symbol lock),以及Rx均衡训练(Rx equalization trainings)是使用TSEQ,TS1,以及TS2训练有序集来达到的。
7.5.4.1 Polling子状态机(Substate Machines)
Polling包含如图7-16所示的子状态机,具有如下子状态:
- Polling.LFPS
- Polling.RxEQ
- Polling.Active
- Polling.Configuration
- Polling.Idle
7.5.4.2 Polling的要求
- 端口应保持其在表6-22中定义的低阻抗接收终端(RRX-DC)。
- 下行端口应实现一个计数器(cPollingTimeout),用于计算由于超时从任何轮询子状态转换到Rx.Detect的连续转换事件次数。cPollingTimeout的操作应遵循以下规则:
- 在以下任一条件下应将其重置为零: a. 上电复位。 b. 端口上的热复位。 c. 退出到eSS.Disabled、eSS.Inactive或U0。 d. 检测到表6-22中定义的远端低阻抗接收终端(RRX-DC)的移除。
- 如果在任何轮询子状态中由于超时而转换到Rx.Detect,则应将其增加一或饱和到二。
7.5.4.3 Polling.LFPS
Polling.LFPS 是一个子状态,旨在建立物理层(PHY)在低频信号(LFPS)操作中的直流工作点,并在退出 Rx.Detect 后同步两个链路伙伴之间的操作。这也是一个端口基于各种 Polling.LFPS 签名识别自身的子状态。在 x2 操作中,LFPS 操作在配置通道上执行。
7.5.4.3.1 Polling.LFPS 要求
-
进入时,LFPS 接收器应启用以接收第 6.9.1 节中定义的 Polling.LFPS 信号。
-
进入时,端口应在 80 微秒内建立其 LFPS 工作条件。
-
下行端口应在上电复位或热复位时禁用其过渡到合规模式的路径。
-
如果指示,下行端口应启用其过渡到合规模式的路径。
-
上行端口在上电复位时应始终启用其过渡到合规模式的路径。
-
处于 SuperSpeed 操作的端口应传输 Polling.LFPS。
-
处于 SuperSpeedPlus 操作的上行端口应传输表 6-33 中定义的 SCD1。如果在接收到的 Polling.LFPS 突发中未检测到 SCD1 或 SCD2 的签名,它应按以下方式之一执行:
- 如果它已接收到十六个或更多连续的 Polling.LFPS 突发且 tPollingSCDLFPSTimeout 计时器未到期,它应切换到 SuperSpeed 操作并在传输四个 SCD1 后以不变的 tRepeat 传输 Polling.LFPS。
注意:这可能意味着其 SuperSpeed 链路伙伴可能由于 tRepeat 变化而无法识别 SCD1 中的 Polling.LFPS 突发。
- 如果 tPollingSCDLFPSTimeout 计时器已到期,它应切换到 SuperSpeed 操作,以准备在满足所有其他退出条件时过渡到 Polling.RxEQ。
注意:这可能意味着其 SuperSpeed 链路伙伴可能首先进入 Polling.LFPS,可以识别 SCD1 或 SCD2 中具有变化 tRepeat 的 Polling.LFPS 突发,并且已满足 Polling.RxEQ 的所有退出条件。
如果合规模式被禁用,处于 SuperSpeedPlus 操作的下行端口应传输表 6-33 中定义的 SCD1。如果在接收到的 Polling.LFPS 突发中未检测到 SCD1 或 SCD2 的签名,它应按以下方式之一执行:
- 如果它已接收到十六个或更多连续的 Polling.LFPS 突发且 tPollingSCDLFPSTimeout 计时器未到期,它应切换到 SuperSpeed 操作并在传输四个 SCD1 后以不变的 tRepeat 传输 Polling.LFPS。 注意:这可能包括但不限于其 SuperSpeed 链路伙伴可能无法识别 SCD1 中具有变化 tRepeat 的 Polling.LFPS 突发的情形。
- 如果 tPollingSCDLFPSTimeout 计时器已到期,它应切换到 SuperSpeed 操作,以准备在满足所有其他退出条件时过渡到 Polling.RxEQ。 注意:这可能意味着其 SuperSpeed 链路伙伴可能首先进入 Polling.LFPS,可以识别 SCD1 或 SCD2 中具有变化 tRepeat 的 Polling.LFPS 突发,并且已满足 Polling.RxEQ 的所有退出条件。
如果合规模式被启用,处于 SuperSpeedPlus 操作的下行端口可以传输 SCD1 或 SCD2。
处于 SuperSpeedPlus 操作的端口应实施一个 60 微秒的计时器(tPollingSCDLFPSTimeout),以监控在完成 SuperSpeed Polling.LFPS 握手后 LFPS 信号的缺失。在此期间,端口应继续传输 Polling.LFPS 或 SCD1 直到计时器到期。
如果检测到其链路伙伴处于 SuperSpeed 操作,处于 SuperSpeedPlus 操作的端口应准备好进行 SuperSpeed 操作。 注意:没有为 SuperSpeedPlus 端口在检测到其链路伙伴处于 SuperSpeed 操作时重新配置为 SuperSpeed 操作分配时间。SuperSpeedPlus 端口应尽快切换到 SuperSpeed 操作以进行其接收器均衡训练。任何配置时间都会导致其链路伙伴发送的 TSEQ 有序集减少。
当成功完成 Polling.LFPS 握手或进入合规模式时,端口应禁用其过渡到合规模式的路径。
进入子状态时应启动一个 360 毫秒的计时器(tPollingLFPSTimeout)。
当端口准备退出到 Polling.RxEQ 时,应建立 eSS PHY 的工作条件。
处于 SuperSpeed 操作的 eSS 接收器可以选择性地启用以接收 TSEQ 有序集进行接收器均衡器训练。 注意:首先进入 Polling.RxEQ 的端口将开始传输 TSEQ 有序集,而另一个端口仍处于 Polling.LFPS。启用 Polling.LFPS 中的 SuperSpeed 接收器将允许端口在完成 Polling.LFPS 退出握手要求的同时开始接收器均衡器训练。
7.5.4.3.2 退出Polling.LFPS
- 如果端口以 SuperSpeed 操作开始,当满足以下两个条件时,它应过渡到 Polling.RxEQ:
- 发送至少 16 个连续的符合第 6.9 节定义的 Polling.LFPS 突发。
- 完成 SS Polling.LFPS 握手,接收两个连续的 Polling.LFPS 突发,并在接收到一个 Polling.LFPS 突发后发送四个连续的 Polling.LFPS 突发。
- 如果在接收到一个 SCD1 或 SCD2(如第 6.9.4.2 节定义)后发送两个 SCD1,处于 SuperSpeedPlus 操作的端口应过渡到 Polling.LFPSPlus。
- 如果端口以 SuperSpeedPlus 操作开始,当满足以下条件时,它应过渡到 Polling.RxEQ 并切换到 SuperSpeed 操作:
- 在接收到的 Polling.LFPS 突发中未检测到 SCD1 或 SCD2。
- 发送至少四个连续的 SCD1。
- 完成 SS Polling.LFPS,接收两个连续的 Polling.LFPS 突发,并在接收到一个 Polling.LFPS 突发后发送一个 SCD1 或四个连续的 Polling.LFPS 突发。
- 满足以下任一条件: i. 未观察到超过 tPollingSCDLFPSTimeout 的 LFPS 信号。 注意:这也包括但不限于 SS 链路伙伴可以识别具有变化 tRepeat 的 Polling.LFPS 突发并已满足 Polling.RxEQ 的退出条件的情形。 ii. 在 tPollingSCDLFPSTimeout 计时器到期前,在满足上述三个条件后发送十六个额外的具有不变 tRepeat 的 Polling.LFPS 突发。 注意:这也包括但不限于 SS 链路伙伴可能无法识别具有变化 tRepeat 的 Polling.LFPS 突发的情形。 注意:此条件意味着 SuperSpeed 链路伙伴已进入 Polling.RxEQ 并传输 TSEQ 有序集。
图 7-18 提供了 SSP 端口切换到 SS 操作的多个示例时间图。
- 上行端口应在 360 毫秒计时器(tPollingLFPSTimeout)超时并满足以下两个条件时过渡到合规模式:
- 端口在上电复位后从未成功完成 Polling.LFPS。
- 未满足过渡到 Polling.RxEQ 或 Polling.LFPSPlus 的条件。 注意:如果上电复位后第一次尝试 Polling.LFPS 握手失败,这意味着可能存在被动测试负载,应启动合规测试。如果上电复位后第一次尝试 Polling.LFPS 握手成功,这意味着链路两侧存在增强型 SuperSpeed 端口,并且不打算进行合规测试。因此,当链路重新训练时,Polling.LFPS 握手的任何后续超时仅表示链路训练失败,而不是进入合规模式的信号。
- 如果满足以下三个条件,下行端口应在 360 毫秒计时器(tPollingLFPSTimeout)超时时过渡到合规模式:
- 启用合规模式。
- 在启用合规模式后,端口从未成功完成 Polling.LFPS 握手。
- 未满足过渡到 Polling.RxEQ 或 Polling.LFPSPlus 的条件。 注意:如果禁用合规模式,下行端口可能会进入 Rx.Detect 再次尝试 Polling.LFPS 握手,或根据 cPollingTimeout 的计数值进入 eSS.Inactive 以进行软件干预。
- 如果 cPollingTimeout 小于二且合规模式被禁用,下行端口应在 360 毫秒计时器(tPollingLFPSTimeout)超时时过渡到 Rx.Detect。
- 如果 cPollingTimeout 为二,下行端口应在 360 毫秒计时器(tPollingLFPSTimeout)超时时过渡到 eSS.Inactive。
- 集线器的上行端口应在上电复位后训练一次且未满足过渡到 Polling.RxEQ 的条件时,在 360 毫秒超时(tPollingLFPSTimeout)后过渡到 Rx.Detect。
- 外围设备应在上电复位后训练一次且未满足过渡到 Polling.RxEQ 的条件时,在 360 毫秒超时(tPollingLFPSTimeout)后过渡到 eSS.Disabled。
- 下行端口应在指示时过渡到 eSS.Disabled。
- 下行端口应在指示发出热复位时过渡到 Rx.Detect。
- 上行端口应在检测到热复位时过渡到 Rx.Detect。
图 7-18 显示了 SSP 端口切换到 SS 操作的示例时间图。




7.5.4.4 Polling.LFPSPlus
Polling.LFPSPlus 是一个子状态,其中端口在 SuperSpeedPlus 操作中执行 SCD2 握手,以进一步确认其链路伙伴的 SuperSpeedPlus 能力。
7.5.4.4.1 Polling.LFPSPlus 要求
- 在 SuperSpeedPlus 操作中的端口应传输表 6-33 中定义的 SCD2。如果在接收到的 64 个连续 Polling.LFPS 中找不到 SCD2,则应传输具有不变 tRepeat 的 Polling.LFPS,而不是 SCD2。
- 注意:这是一个极端情况,其中在 SuperSpeed 操作中的端口传输与 SCD1 重合的 Polling.LFPS 并保持在 Polling.LFPS 中。
- 从 Polling.LFPS 进入此子状态时,360 毫秒计时器 (tPollingLFPSTimeout) 的操作应继续而不重置。
- 如果检测到其链路伙伴在 SuperSpeed 操作中,则在 SuperSpeedPlus 操作中的端口应准备好进行 SuperSpeed 操作。
- 在 SuperSpeedPlus 操作中的端口应实现一个 60 微秒计时器 (tPollingSCDLFPSTimeout) 以监控 SuperSpeed Polling.LFPS 握手完成后 LFPS 信号的缺失。
7.5.4.4.2 退出 Polling.LFPSPlus
- 如果在接收到一个 SCD2 后传输了两个 SCD2(如第 6.9.4.2 节所定义),则在 SuperSpeedPlus 操作中的端口应转换到 Polling.PortMatch。
- 如果满足以下两个条件之一,则在 SuperSpeedPlus 操作中的端口应转换到 Polling.RxEQ 并切换到 SuperSpeed 操作:
- 观察到超过 tPollingSCDLFPSTimeout 的时间内没有 LFPS 信号。
- 注意:此条件意味着 SuperSpeed 链路伙伴已进入 Polling.RxEQ 并传输 TSEQ 有序集。
- 传输了二十个具有不变 tRepeat 的 Polling.LFPS 爆发后,未检测到 SCD2。
- 注意:此条件保证在 SuperSpeedPlus 操作中的端口连接到 SuperSpeed 操作中的端口时,如果 SuperSpeed 操作中的端口无法识别 SCD1 和 SCD2 中具有变化 tRepeat 的 Polling.LFPS,并且恰好传输与 SCD1 匹配的 Polling.LFPS,则会接收到二十个连续的 Polling.LFPS 以退出此子状态。
- 观察到超过 tPollingSCDLFPSTimeout 的时间内没有 LFPS 信号。
- 如果 360 毫秒计时器超时 (tPollingLFPSTimeout) 并且 cPollingTimeout 小于二,则下游端口应转换到 Rx.Detect。
- 如果 360 毫秒计时器超时 (tPollingLFPSTimeout) 并且 cPollingTimeout 为二,则下游端口应转换到 eSS.Inactive。
- 集线器的上游端口应在 360 毫秒超时 (tPollingLFPSTimeout) 后转换到 Rx.Detect。
- 外围设备应在 360 毫秒超时 (tPollingLFPSTimeout) 后转换到 eSS.Disabled。
- 下游端口应在被指示时转换到 eSS.Disabled。
- 下游端口应在被指示发出 Warm Reset 时转换到 Rx.Detect。
- 上游端口应在检测到 Warm Reset 时转换到 Rx.Detect。
Figure 7-19 展示了一个 SSP 端口在 Polling.LFPSPlus 子状态中切换到 SS 操作的示例时序图。

7.5.4.5 Polling.PortMatch
Polling.PortMatch 是一个子状态,其中两个处于 SuperSpeedPlus 操作的端口执行 LBPM 握手,以宣布、匹配并决定两个链路伙伴之间的最高共同能力。LBPM 握手包括两个操作阶段。第一阶段是宣布表 7-13 中定义的 PHY Capability LBPM。第二阶段是每个端口解码 PHY Capability LBPM,并通过传输 PHY Capability Match 调整到最高共同 PHY 能力。
7.5.4.5.1 PHY Capability LBPM 定义、排序和回退
SuperSpeedPlus 端口能力基于以下 LBPM 定义。有关 LBPM 详细信息,请参见第 6.9.5 节。
表 7-13. PHY LBPM 定义
| LBPM Type | LBPM Subtype | LBPM Subtype | LBPM Subtype | LBPM Subtype | LBPM Subtype | LBPM Subtype | LBPM Subtype |
|---|---|---|---|---|---|---|---|
| b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 |
| [b1:b0] = 00 : PHY Capability | [b1:b0] = 00 : PHY Capability | [b3:b2] = 00 : 5 Gbps[b3:b2] = 01 : 10 Gbps [b3:b2] = 10/11 : Reserved | [b3:b2] = 00 : 5 Gbps[b3:b2] = 01 : 10 Gbps [b3:b2] = 10/11 : Reserved | Reserved (00) | Reserved (00) | 0 : single-lane1 : dual-lane | Reserved (00) |
| [b1:b0] = 01 : PHY Ready | [b1:b0] = 01 : PHY Ready | In single-lane operation: Reserved (000000) | In single-lane operation: Reserved (000000) | In single-lane operation: Reserved (000000) | In single-lane operation: Reserved (000000) | In single-lane operation: Reserved (000000) | In single-lane operation: Reserved (000000) |
| [b1:b0] = 01 : PHY Ready | [b1:b0] = 01 : PHY Ready | x2 re-timer to announce its presence:[b4:b2] = 000 : no re-timers [b4:b2] = 001 – 111 : number of re-timers and re-timer address index. Refer to Section E.3.4.2.1 for details. | x2 re-timer to announce its presence:[b4:b2] = 000 : no re-timers [b4:b2] = 001 – 111 : number of re-timers and re-timer address index. Refer to Section E.3.4.2.1 for details. | x2 re-timer to announce its presence:[b4:b2] = 000 : no re-timers [b4:b2] = 001 – 111 : number of re-timers and re-timer address index. Refer to Section E.3.4.2.1 for details. | Reserved (0) | x2 operation:0 : UFP1 : DFP | x2 operation: For DFP:0 : Config Done. DFP ready to exit1 : RT Config. DFP to address re-timers For UFP:Reserved (0) |
| [b1:b0] = 10/11 : Reserved | [b1:b0] = 10/11 : Reserved | Reserved | Reserved | Reserved | Reserved | Reserved | Reserved |
注意:LBPM 的编码和解码依赖于 LTSSM 状态。在 Polling.PortMatch 中仅定义了一种 LBPM 类型(PHY Capability LBPM)。
定义了两种类型的 LBPM。PHY Capability LBPM 用于宣布端口的 PHY 能力。初始值应描述端口的最高 PHY 能力。宣布的 PHY 能力可能会在以后进行调整,以匹配链路伙伴的能力,或者如果链路在训练期间未能达到 U0,则两个端口需要回退到较低速率。
PHY Ready LBPM 定义了两个目的。一个是用于端口发送通知,表明其已完成 PHY 重新配置,并准备在 PHY Capability LBPM 定义的匹配端口能力下进行链路训练。另一个是用于 x2 操作中的重定时器在 PHY Ready LBPM 握手期间宣布其存在。有关 PHY Ready LBPM 的使用,请参见第 7.5.4.6 节。注意,有两种类型的 PHY Ready LBPM 握手。第一种类型是 DFP PHY Ready LBPM 的第 7 位被置位。这表明在完成重定时器存在公告后,将来版本中可能会有一个选项,DFP 可能希望解决重定时器问题。这称为 RT Config。第二种类型是 DFP PHY Ready LBPM 的第 7 位被清除。这表明 DFP 要么已完成 RT Config 并准备退出,要么绕过 RT Config 并直接退出。有关详细信息,请参见第 7.5.4.6.1 节。
- 端口应按以下顺序排列其 PHY 能力:Gen 2x2、Gen 2x1、Gen 1x2 和 Gen 1x1。启动 PHY 能力在表 7-14 中定义。
表 7-14. 启动 PHY 能力匹配
| DFP | DFP | DFP | DFP | ||
|---|---|---|---|---|---|
| Gen 1x1 | Gen 1x2 | Gen 2x1 | Gen 2x2 | ||
| UFP | Gen 1x1 | Gen 1x1 | Gen 1x1 | Gen 1x1 | Gen 1x1 |
| UFP | Gen 1x2 | Gen 1x1 | Gen 1x2 | Gen 1x1 | Gen 1x2 |
| UFP | Gen 2x1 | Gen 1x1 | Gen 1x1 | Gen 2x1 | Gen 2x1 |
| UFP | Gen 2x2 | Gen 1x1 | Gen 1x2 | Gen 2x1 | Gen 2x2 |
- 如果 SuperSpeedPlus 端口的最高 PHY 能力是 Gen 2x2,则应遵循表 7-15 中显示的 PHY 能力回退顺序。注意,如果端口从 Gen 2x2 回退到 Gen 2x1,或从 Gen 1x2 回退到 Gen 1x1,则应在配置通道上以 Gen 2x1 或 Gen 1x1 运行。
- 如果 SuperSpeedPlus 端口的最高 PHY 能力是 Gen 2x1,则其下一个公布的 PHY 能力应为 Gen 1x1。
- 如果 SuperSpeedPlus 端口的最高 PHY 能力是 Gen 1x2,则其下一个公布的 PHY 能力应为 Gen 1x1。
| 当前 PHY 能力 | 下一个公布的 PHY 能力 | 备注 |
|---|---|---|
| Gen 2x2 | Gen 2x1 | 故障可能发生在一条或两条通道上。回退到 Gen 2x1 是为了在不发生通道间干扰的情况下保持 Gen 2 操作。 |
| Gen 2x1 | Gen 1x2 | 故障可能是由于链路未达到 Gen 2 损耗预算。 |
| Gen 1x2 | Gen 1x1 | 故障可能发生在一条或两条通道上。回退到 Gen 1x1 是为了在不发生通道间干扰的情况下保持 Gen 1 操作。 |
| Gen 1x1 | Gen 1x1, USB 2.0 或其他 | 参见第 7.5.4.8.2 节。 |
7.5.4.5.2 Polling.PortMatch 要求
- 进入此子状态时,应启动一个 12 毫秒的计时器 (tPollingLBPMLFPSTimeout)。
- 从 Polling.LFPSPlus 进入此子状态时,端口应传输表 7-13 中定义的连续 PHY Capability LBPM,以宣布其最高 PHY 能力。
- 从 Polling.Active、Polling.Configuration 或 Polling.Idle 进入此子状态时,端口应传输表 7-13 中定义的连续 PHY Capability LBPM,以宣布其从先前 PHY 能力开始的下一个最高 PHY 能力。
- 端口应解码接收到的 PHY Capability LBPM 或 PHY Ready LBPM,并与其自身的 PHY 能力进行比较。
- 具有较高 PHY 能力的端口应通过传输与其链路伙伴匹配的 PHY Capability LBPM 来调整其 PHY 能力。
- 具有较低 PHY 能力的端口应继续传输其自身的 PHY Capability LBPM,并监控其链路伙伴的 PHY Capability LBPM。
- 两个端口应继续上述 PHY Capability LBPM 交换的交互过程,直到它们匹配 PHY 能力。
7.5.4.5.3 退出 Polling.PortMatch
- 在接收到两个连续且匹配的 PHY Capability LBPM 或 PHY Ready LBPM 后,端口应在发送四个连续且匹配的 PHY Capability LBPM 后转换到 Polling.PortConfig。
- 注意:从 Polling.PortMatch 退出并准备进行 PHY 操作而无需重新配置的端口可以立即传输 PHY Ready LBPM。
- 如果 12 毫秒计时器超时 (tPollingLBPMLFPSTimeout) 且 cPollingTimeout 小于二,下游端口应转换到 Rx.Detect。
- 如果 12 毫秒计时器超时 (tPollingLBPMLFPSTimeout) 且 cPollingTimeout 为二,下游端口应转换到 eSS.Inactive。
- 如果 12 毫秒计时器超时 (tPollingLBPMLFPSTimeout) 且不满足转换到 Polling.PortConfig 的条件,集线器的上游端口应转换到 Rx.Detect。
- 如果 12 毫秒计时器超时 (tPollingLBPMLFPSTimeout) 且不满足转换到 Polling.PortConfig 的条件,外围设备应转换到 eSS.Disabled。
- 下游端口应在被指示时转换到 eSS.Disabled。
- 下游端口应在被指示发出 Warm Reset 时转换到 Rx.Detect。
- 上游端口应在检测到 Warm Reset 时转换到 Rx.Detect。
7.5.4.6 Polling.PortConfig
Polling.PortConfig 是一个子状态,其中端口根据在 Polling.PortMatch 中匹配的 PHY Capability LBPM 进行配置,并与其链路伙伴同步,从此子状态退出到 Polling.RxEQ。这也是 x2 操作中重定时器宣布其存在的子状态。有关更多详细信息,请参见附录 E。
7.5.4.6.1 Polling.PortConfig 要求
- 进入此状态时,如果端口正在根据在 Polling.PortMatch 中协商的 PHY Capability LBPM 准备其 PHY 重新配置,则应将其发射器置于电气空闲状态。端口应执行以下 PHY 重新配置:
- 发射器的直流共模电压应在表 6-19 中定义的规范 (V TXCM-DCACTIVE-IDLE-DELTA) 内。
- 端口应保持其低阻抗接收器终端 (RRX-DC),如表 6-22 中定义。
- 端口应准备在每个协商的通道上传输 TSEQ OS。
- 端口应准备在每个协商的通道上接收 TSEQ OS 以进行接收器均衡训练。
- 配置为 x2 操作的端口应在两个通道上都准备好进行链路训练。
- 端口应监控接收到的 LBPM 并执行 PHY Ready LBPM 握手。它由端口在接收到两个连续且相同的 PHY Ready LBPM 后发送四个连续且相同的 PHY Ready LBPM 定义。
- 从 Polling.PortMatch 进入子状态时,12 毫秒计时器 (tPollingLBPMLFPSTimeout) 的操作应继续而不重置。在 x2 操作中,以下附加规则适用:
- 下游端口在发送第 7 位未置位的 PHY Ready LBPM 时应继续 tPollingLBPMLFPSTimeout 计时器而不重置。
- 下游端口在完成第 7 位置位的 PHY Ready LBPM 握手后应重置 tPollingLBPMLFPSTimeout 计时器。当准备通过传输第 7 位未置位的 PHY Ready LBPM 退出到 Polling.RxEQ 时,应重新启动 tPollingLBPMLFPSTimeout 计时器。注意,RT Config 的持续时间由 DFP 上层管理。
- 上游端口在完成 PHY Ready LBPM 握手并检测到来自 DFP 的 PHY Ready LBPM 的第 7 位置位后,应重置 tPollingLBPMLFPSTimeout 计时器并保持在此子状态。
- 在 x2 操作中,下游端口应启动附录 E 中定义的重定时器存在公告。如果 PHY Ready LBPM 握手的第 7 位置位,下游端口在完成 PHY Ready LBPM 握手后应保持在此子状态。注意,这是 DFP 在未来版本中执行其他操作的中间状态。如果准备转换到 Polling.RxEQ,下游端口应传输第 7 位未置位的 PHY Ready LBPM。
- 在 x2 操作中,完成来自 DFP 的第 7 位置位的 PHY Ready LBPM 握手后,上游端口应执行以下操作:
- 它应保持在此子状态,将其发射器保持在 LFPS EI,并继续寻找来自 DFP 的第 7 位未置位的 PHY Ready LBPM。注意,在此期间,DFP 可能发送非 PHY Ready LBPM 或保持在 LFPS EI。图 7-20 显示了 x2 操作中端口的示例时序图。
- 检测到来自 DFP 的第 7 位未置位的 PHY Ready LBPM 后,应准备退出到 Polling.RxEQ 并响应 PHY Ready LBPM 以完成 PHY Ready LBPM 握手。
- 在完成PHY重新配置后,端口应连续发送PHY就绪LBPM(链路伙伴管理)以通知其链路伙伴。有关PHY就绪LBPM的定义,请参见表7-13。请注意,在x2操作中,PHY就绪LBPM仅在配置通道上传输。

(a) DFP通过取消置位其PHY就绪LBPM的第7位来启动退出到Polling.RxEQ。请注意,在此过程中还会执行重定时器存在公告。在此子状态中,DFP/UFP都继续tPollingLBPMLFPSTimeout计时器。DFP/UFP完成PHY就绪LBPM握手并过渡到Polling.RxEQ。

(b) DFP发送第7位置位的PHY就绪LBPM。在完成PHY就绪LBPM握手后,DFP、UFP和重定时器都保持在此子状态中。DFP和UFP的tPollingLBPMLFPSTimeout计时器将被重置并禁用。当准备过渡到Polling.RxEQ时,DFP启动第7位取消置位的PHY就绪LBPM并启动tPollingLBPMLFPSTimeout计时器。UFP在检测到来自DFP的PHY就绪LBPM后,响应PHY就绪LBPM。DFP和UFP完成PHY就绪LBPM握手并过渡到Polling.RxEQ。
7.5.4.6.2 退出Polling.PortConfig
- 在单通道操作中,当PHY就绪LBPM握手完成时,端口将过渡到Polling.RxEQ。这是通过端口在接收到两个连续且相同的PHY就绪LBPM后发送四个连续且相同的PHY就绪LBPM来定义的。
- 在x2操作中,如果满足以下两个条件,端口将过渡到Polling.RxEQ。请注意,在x2操作中,PHY就绪LBPM交换仅在配置通道上进行。
- PHY就绪LBPM握手完成。
- 观察到DFP的PHY就绪LBPM的第7位取消置位。
- 下行端口在12毫秒计时器超时时,如果cPollingTimeout小于2,则过渡到Rx.Detect。
- 下行端口在12毫秒计时器超时时,如果cPollingTimeout为2,则过渡到eSS.Inactive。
- 集线器的上行端口在12毫秒计时器超时时,如果不满足过渡到Polling.RxEQ的条件,则过渡到Rx.Detect。
- 外围设备在12毫秒计时器超时时,如果不满足过渡到Polling.RxEQ的条件,则过渡到eSS.Disabled。
- 下行端口在指示时过渡到eSS.Disabled。
- 下行端口在指示发出Warm Reset时过渡到Rx.Detect。
- 上行端口在检测到Warm Reset时过渡到Rx.Detect。
7.5.4.7 Polling.RxEQ
Polling.RxEQ是接收器均衡训练的子状态。端口需要完成其接收器均衡训练。对于x2操作的端口,链路训练在每个协商通道上同时进行。
7.5.4.7.1 Polling.RxEQ要求
- 在Gen 1操作中,应启用通道极性反转的检测和校正,如第6.4.2节所述。在Gen 1x2操作中,应在两个通道上启用通道极性反转的检测和校正。
- 端口应传输表6-3中定义的Gen 1操作的相应TSEQ有序集,或表6-9中定义的Gen 2操作的相应TSEQ有序集。对于Gen 2操作,请参阅第6.4.1.2.1节了解在传输TSEQ有序集时插入SYNC有序集的情况。
- 端口应在退出此子状态时完成接收器均衡训练。
注意:可能存在这样一种情况,即较早进入Polling.RxEQ的端口正在传输TSEQ有序集,而其链路伙伴仍在发送Polling.LFPS以满足从Polling.LFPS或Polling.LFPSPlus到Polling.RxEQ的退出条件。在这种情况下,如果其链路伙伴处于电气空闲状态,近端串扰可能会导致端口使用其自己的TSEQ有序集训练其接收器均衡器。为了避免接收器自我训练,端口可以忽略TSEQ有序集的开始部分(约30微秒),或继续均衡器训练直到完成TSEQ有序集的传输。
7.5.4.7.2 退出Polling.RxEQ
-
在Gen 1操作中,端口在每个协商通道上传输65,536个连续的表6-3中定义的TSEQ有序集后,应过渡到Polling.Active。
-
在Gen 2操作中,端口在每个协商通道上传输524,288个表6-8中定义的TSEQ有序集后,应过渡到Polling.Active。
-
下行端口在指示时应过渡到eSS.Disabled。
-
下行端口在指示发出Warm Reset时应过渡到Rx.Detect。
-
上行端口在检测到Warm Reset时应过渡到Rx.Detect。
7.5.4.8 Polling.Active
Polling.Active是链路接收器训练继续进行的子状态。TS1有序集在每个协商通道上交换。在x2操作中,端口在每个通道上独立进行链路训练,并在每个协商通道满足退出条件时进入下一个状态。
7.5.4.8.1 Polling.Active要求
- 在x1操作中,进入此子状态时应启动12毫秒计时器(tPollingActiveTimeout)。在x2操作中,应使用24毫秒计时器。请注意,在x2操作中,计时器应继续运行,直到每个通道满足Polling.Configuration的退出条件。
- 端口应在每个协商通道上传输相同的TS1有序集。请注意,在Gen 2操作中,TS1有序集的符号14和15可能因直流平衡而不同。还要注意,在x2操作中,一个通道可能比另一个通道更早完成TS1有序集退出握手。在这种情况下,成功完成TS1有序集退出握手的通道应继续传输TS1有序集,直到端口准备好过渡到下一个状态。
- 在Gen 2操作中,端口应在每32个TS1有序集中插入一个SYNC有序集。详情请参阅第6.4.1.2节。
- 在Gen 2操作中,端口应执行第6.3.2.3和第6.4.1.2.4节中定义的块对齐和扰码器同步。
- 应完成通道极性检测和校正。
- 端口应监控每个协商通道上的退出握手。
- 在x2操作中,端口应在其接收器上执行通道间去偏斜。
- 未能与其链路伙伴成功训练的端口应重新配置为其支持的下一个能力。 注意:例如,当Gen 1x2操作中的端口未能与其链路伙伴成功握手时,应重新配置为Gen 1x1操作。有关PHY能力回退机制,请参阅第7.5.4.5节。
- 接收器应使用TS1或TS2有序集进行训练。 注意:根据链路条件和不同的接收器实现,一个端口的接收器训练可能比另一个端口更快。当这种情况发生时,较早完成接收器训练的端口将进入Polling.Configuration并开始传输TS2有序集,而另一个端口仍在Polling.Active中使用TS2有序集完成其接收器训练。
7.5.4.8.2 退出Polling.Active
-
在Gen 1操作中,端口在每个协商通道上接收到八个连续且相同的TS1或TS2有序集后,应过渡到Polling.Configuration。
-
在Gen 2操作中,端口在每个协商通道上接收到八个连续且相同的TS1或TS2有序集后,应过渡到Polling.Configuration,但不包括TS1或TS2有序集的符号14和15。 注意:TS1和/或TS2有序集之间的SYNC OS和SKP OS不会使TS1 OS和TS2 OS的连续检测失效。符号14和15用于TS1或TS2有序集标识符或直流平衡调整。
-
在SuperSpeed操作中,下行端口在12毫秒计时器超时时,如果满足以下两个条件,应过渡到Rx.Detect:
- 不满足过渡到Polling.Configuration的条件。
- cPollingTimeout小于2。
-
在SuperSpeed操作中,下行端口在12毫秒计时器超时时,如果满足以下两个条件,应过渡到eSS.Inactive:
- 不满足过渡到Polling.Configuration的条件。
- cPollingTimeout为2。
-
在SuperSpeed操作中,集线器的上行端口在12毫秒计时器超时时,如果不满足过渡到Polling.Configuration的条件,应过渡到Rx.Detect。
-
在SuperSpeed操作中,外围设备的上行端口在12毫秒计时器超时时,如果不满足过渡到Polling.Configuration的条件,应过渡到eSS.Disabled。
-
在SuperSpeedPlus操作中,下行端口在12毫秒计时器超时时,如果不满足过渡到Polling.Configuration的条件,应过渡到Polling.PortMatch以协商替代操作。
-
在SuperSpeedPlus操作中,集线器的上行端口在12毫秒计时器超时时,如果不满足过渡到Polling.Configuration的条件,应过渡到Polling.PortMatch以协商替代操作。
-
在SuperSpeedPlus操作中,外围设备的上行端口在12毫秒计时器超时时,如果不满足过渡到Polling.Configuration的条件,应过渡到Polling.PortMatch以协商替代操作。
-
下行端口在指示时应过渡到eSS.Disabled。
-
下行端口在指示发出Warm Reset时应过渡到Rx.Detect。
-
上行端口在检测到Warm Reset时应过渡到Rx.Detect。
7.5.4.9 Polling.Configuration
Polling.Configuration是一个子状态,在此状态下,两个链路伙伴完成增强型SuperSpeed训练。
7.5.4.9.1 Polling.Configuration要求
- 端口在进入此子状态时应在每个协商通道上传输相同的TS2有序集,并根据以下内容设置TS2有序集中的链路配置字段。请注意,在Gen 2操作中,TS2有序集的符号14和15可能因直流平衡而不同。
- 当被指示时,下行端口应在TS2有序集中设置复位位。 注意:上行端口只能在Hot Reset.Active状态下在TS2有序集中设置复位位。详情请参阅第7.5.12.3节。
- 当被指示时,端口应在TS2有序集中设置环回位。
- 当被指示时,端口应在TS2有序集中设置禁用扰码位。
- 在Gen 2操作中,端口应在每32个TS2有序集中插入一个SYNC有序集。详情请参阅第6.4.1.2节。
- 在Gen 2操作中,端口应保持第6.3.2.3和第6.4.1.2.4节中定义的块对齐和扰码器同步。
- 端口应监控每个协商通道上的退出握手。
- 未能与其链路伙伴成功训练的端口应重新配置为其支持的下一个能力。 注意:例如,当Gen 1x2操作中的端口未能与其链路伙伴成功握手时,应重新配置为Gen 1x1操作。有关PHY能力回退机制,请参阅第7.5.4.5节。
- 在x1操作中,进入此子状态时应启动12毫秒计时器(tPollingConfigurationTimeout)。在x2操作中,应使用24毫秒计时器。请注意,在x2操作中,计时器应继续运行,直到每个通道满足Polling.Idle的退出条件。
7.5.4.9.2 退出Polling.Configuration
- 在Gen 1操作中,当每个协商通道满足以下两个条件时,端口应过渡到Polling.Idle:
- 接收到八个连续且相同的TS2有序集。
- 在接收到第一个八个连续且相同的TS2有序集后发送十六个TS2有序集。
- 在Gen 2操作中,当每个协商通道满足以下两个条件时,端口应过渡到Polling.Idle:
- 接收到八个连续且相同的TS2有序集,不包括符号14和15。
- 在接收到第一个八个连续且相同的TS2有序集后发送十六个TS2有序集,不包括符号14和15。 注意:TS2有序集之间的SYNC OS和SKP OS不会使TS2 OS的连续检测失效。
- 在SuperSpeed操作中,下行端口在12毫秒计时器超时时,如果满足以下两个条件,应过渡到Rx.Detect:
- 不满足过渡到Polling.Idle的条件。
- cPollingTimeout小于2。
- 在SuperSpeed操作中,下行端口在12毫秒计时器超时时,如果满足以下两个条件,应过渡到eSS.Inactive:
- 不满足过渡到Polling.Idle的条件。
- cPollingTimeout为2。
- 在SuperSpeed操作中,集线器的上行端口在12毫秒计时器超时时,如果不满足过渡到Polling.Idle的条件,应过渡到Rx.Detect。
- 在SuperSpeed操作中,外围设备的上行端口在12毫秒计时器超时时,如果不满足过渡到Polling.Idle的条件,应过渡到eSS.Disabled。
- 在SuperSpeedPlus操作中,下行端口在12毫秒计时器超时时,如果不满足过渡到Polling.Idle的条件,应过渡到Polling.PortMatch以协商替代操作。
- 在SuperSpeedPlus操作中,集线器的上行端口在12毫秒计时器超时时,如果不满足过渡到Polling.Idle的条件,应过渡到Polling.PortMatch以协商替代操作。
- 在SuperSpeedPlus操作中,外围设备的上行端口在12毫秒计时器超时时,如果不满足过渡到Polling.Idle的条件,应过渡到Polling.PortMatch以协商替代操作。
- 下行端口在指示时应过渡到eSS.Disabled。
- 下行端口在指示发出Warm Reset时应过渡到Rx.Detect。
- 上行端口在检测到Warm Reset时应过渡到Rx.Detect。
7.5.4.10 Polling.Idle
Polling.Idle是一个子状态,在此状态下,端口解码在Polling.Configuration中接收到的TS2有序集并确定下一个状态。
7.5.4.10.1 Polling.Idle要求
- 端口应解码在Polling.Configuration中接收到的TS2有序集并进入下一个状态。
- 下行端口应重置其链路错误计数。
- 上行端口应将其端口配置信息重置为默认值。详情请参阅第8.4.5和第8.4.6节。
- 在Gen 1操作中,如果在Polling.Configuration中接收到的TS2有序集中未置位禁用扰码位,端口应默认启用扰码。
- 在Gen 1操作中,如果被指示或在Polling.Configuration中接收到的TS2有序集中置位了禁用扰码位,端口应禁用扰码。
- 在Gen 1操作中,如果下一个状态是U0,端口应传输空闲符号。如果下一个状态是环回或热复位,端口可以传输空闲符号。
- 在Gen 2操作中,如果下一个状态是U0,端口应在数据块开始前在每个协商通道上传输一个SDS有序集,并附带空闲符号。如果下一个状态是环回或热复位,端口可以传输SDS有序集。在Gen 2x2操作中,数据条带化应在SDS之后开始。有关数据条带化的详细信息,请参阅第6.13.4节。 注意:在SDS有序集和SKP有序集同时安排的情况下,应首先传输SKP有序集。
- 在Gen 2操作中,如果SDS有序集损坏,端口可以忽略并继续处理后续数据块。端口可以选择在检测到错误时恢复SDS有序集。
- 在x2操作中,通道间去偏斜应在每个协商通道上接收到SDS后完成。
- 在Gen 2操作中,如果被指示或在Polling.Configuration中接收到的TS2有序集中置位了禁用扰码位,端口应在完成SDS有序集传输后禁用扰码。
- 未能与其链路伙伴成功训练的端口应重新配置为其支持的下一个能力。 注意:例如,当Gen 1x2操作中的端口未能与其链路伙伴成功握手时,应重新配置为Gen 1x1操作。有关PHY能力回退机制,请参阅第7.5.4.5节。
- 进入此状态时应启动2毫秒计时器(tPollingIdleTimeout)。在x2操作中,计时器应继续运行,直到每个通道满足过渡到下一个状态的条件。
- 端口应能够接收来自其链路伙伴的头序列号广告。 注意:两个端口的退出时间差异将导致一个端口先进入U0并开始头序列号广告,而另一个端口仍在Polling.Idle中。
7.5.4.10.2 退出Polling.Idle
- 当被指示为环回主机且端口能够成为环回主机时,端口应过渡到环回。详情请参阅第7.5.11节。
- 如果在Polling.Configuration中接收到的TS2有序集中置位了环回位,端口应作为环回从机过渡到环回。详情请参阅第7.5.4.9节。
- 下行端口在指示时应过渡到热复位。
- 上行端口在Polling.Configuration中接收到的TS2有序集中置位了复位位时应过渡到热复位。
- 当每个协商通道满足以下两个条件时,端口应过渡到U0:
- 接收到八个连续的空闲符号。
- 在接收到一个空闲符号后发送十六个空闲符号。
- 在SuperSpeed操作中,下行端口在指示时应过渡到eSS.Disabled。
- 在SuperSpeed操作中,下行端口在2毫秒计时器超时时,如果满足以下两个条件,应过渡到Rx.Detect:
- 不满足过渡到U0的条件。
- cPollingTimeout小于2。
- 在SuperSpeed操作中,下行端口在2毫秒计时器超时时,如果满足以下两个条件,应过渡到eSS.Inactive:
- 不满足过渡到U0的条件。
- cPollingTimeout为2。
- 在SuperSpeed操作中,集线器的上行端口在2毫秒计时器超时时,如果不满足过渡到U0的条件,应过渡到Rx.Detect。
- 在SuperSpeed操作中,外围设备的上行端口在2毫秒计时器超时时,如果不满足过渡到U0的条件,应过渡到eSS.Disabled。
- 在SuperSpeedPlus操作中,下行端口在2毫秒计时器超时时,如果不满足过渡到U0的条件,应过渡到Polling.PortMatch以协商替代操作。
- 在SuperSpeedPlus操作中,集线器的上行端口在2毫秒计时器超时时,如果不满足过渡到U0的条件,应过渡到Polling.PortMatch以协商替代操作。
- 在SuperSpeedPlus操作中,外围设备的上行端口在2毫秒计时器超时时,如果不满足过渡到U0的条件,应过渡到Polling.PortMatch以协商替代操作。
- 下行端口在指示发出Warm Reset时应过渡到Rx.Detect。
- 上行端口在检测到Warm Reset时应过渡到Rx.Detect。
7.5.5 Compliance Mode
Compliance Mode用于测试发射器是否符合电压和定时规范。传输的几种不同测试模式如表6-14所定义。Compliance Mode不包含任何子状态机。 请注意,对于下行端口,进入Compliance Mode的默认设置是禁用的。可以在指示时选择启用。这是为了防止由于连接了无法在上电时退出Polling.LFPS的坏设备,或下行端口未能及时响应而自动进入Compliance Mode。
7.5.5.1 Compliance Mode Requirements
- 端口应保持表6-22中定义的低阻抗接收器终端(RRX-DC)。
- LFPS接收器用于控制测试模式序列。
- 进入Compliance Mode后,端口应等待其eSS Tx DC共模电压达到表6-19中定义的VTX-DC-CM规范,然后开始发送表6-14中定义的第一个合规测试模式。
- 在x2操作中,端口应在每个协商通道上独立传输合规测试模式。
- 端口应在检测到第6.9.1节中定义的Ping.LFPS后连续传输下一个合规测试模式。请注意,在x2操作中,端口应仅在配置通道上监控Ping.LFPS。
- 端口应在检测到Ping.LFPS并且测试模式已达到最终测试模式后,连续传输第一个合规测试模式。
7.5.5.2 Exit from Compliance Mode
- 下行端口在指示发出Warm Reset时应过渡到Rx.Detect。
- 上行端口在检测到Warm Reset时应过渡到Rx.Detect。
- 下行端口在指示时应过渡到eSS.Disabled。
7.5.6 U0
U0是可以传输和接收数据包的正常操作状态。U0不包含任何子状态机。
7.5.6.1 U0 Requirements
- 端口应符合表6-18中定义的发射器规范。
- 端口应保持表6-22中定义的低阻抗接收器终端(RRX-DC)。
- 应启用LFPS接收器。
- 端口应启用1毫秒计时器(tU0RecoveryTimeout)以测量两个连续链路命令之间的时间间隔。每次接收到链路命令时,该计时器将被重置并重新启动。
- 端口应启用10微秒计时器(tU0LTimeout)。当发送任何链路命令或数据包的第一个符号时,该计时器应被重置,并在发送任何链路命令或数据包的最后一个符号后重新启动。当链路处于逻辑空闲状态时,该计时器应处于活动状态。
- 当10微秒计时器(tU0LTimeout)到期时,下行端口应传输一个LDN。
- 当10微秒计时器(tU0LTimeout)到期时,上行端口应传输一个LUP。
- 端口应在HP响应时间(tDHPResponse)内使用LGOOD_n或LBAD确认接收到的头数据包。这是在端口连接器处测量的,从接收到HP的第一个比特到传输LGOOD_n或LBAD的第一个比特。如果端口使用了重定时器接收HP,HP响应时间应考虑重定时器的额外延迟。
7.5.6.1 U0 Requirements
- 在Gen 1x1操作中,tDHPResponse应小于2540 ns。
- 在Gen 2x1操作中,tDHPResponse应小于1610 ns。
- 在Gen 1x2操作中,tDHPResponse应小于2270 ns。
- 在Gen 2x2操作中,tDHPResponse应小于1355 ns。 注意,tDHPResponse包括一些最坏情况下的延迟,在Gen 1x1操作中tDPacket = 2140 ns,在Gen 2x1操作中tDPacket = 910 ns,当额外的数据包安排在相应的LGOODn或LBAD之前时。建议在Gen 1x1操作中设计在没有数据包延迟LGOODn或LBAD传输时在400 ns内响应LGOOD_n或LBAD,在Gen 2x1操作中在700 ns内响应。详情请参阅第E.1.2.3节的图E-5。
- 端口应根据tDHPResponse定义的时间使用LAU或LXU确认接收到的LGO_Ux。
7.5.6.2 Exit from U0
- 端口应在成功完成LGO_U1进入序列后过渡到U1。详情请参阅第7.2.4.2节。
- 端口应在成功完成LGO_U2进入序列后过渡到U2。详情请参阅第7.2.4.2节。
- 端口应在成功完成LGO_U3进入序列后过渡到U3。详情请参阅第7.2.4.2节。
- 下行端口在连续三次尝试进入U3失败时应过渡到eSS.Inactive。
- 端口应在检测到第7.3节中所述的任何错误时过渡到Recovery,这些错误将导致链路过渡到Recovery。
- 端口应在任何协商通道上检测到TS1有序集时过渡到Recovery。
- 端口应在指示时过渡到Recovery。
- 端口应在PENDINGHPTIMER连续第四次超时时过渡到eSS.Inactive。 注意:这意味着链路已连续三次过渡到Recovery,并且每次过渡到Recovery都是由于PENDINGHPTIMER超时。
- 下行端口在指示时应过渡到eSS.Disabled。
- 下行端口在指示时应过渡到eSS.Inactive。
- 上行端口在指示时应过渡到eSS.Disabled。 注意:在进入U0并成功完成训练和链路初始化后,两个端口需要在tPortConfiguration时间内使用端口能力LMP交换端口能力信息,如第8.4.5节所定义。这包括以下情况:
- 直接从Polling进入U0;
- 通过热复位间接从Polling进入U0;
- 从Recovery进入U0,并且在退出Polling后端口配置尚未成功完成。在这种情况下,两个端口应通过完成剩余的LMP交换继续端口配置过程。
7.5.6.1 U0 Requirements
- 如果端口在tPortConfiguration时间内未收到端口能力LMP,下行端口应被指示过渡到eSS.Inactive,上行端口应被指示过渡到eSS.Disabled。
- 下行端口在1毫秒内未收到任何链路命令(tU0RecoveryTimeout)时应过渡到Recovery。 注意:在1毫秒内未收到任何链路命令(包括LUP)意味着链路处于严重错误状态,或上行端口已被移除。为适应这两种情况,下行端口将过渡到Recovery并尝试重新训练链路。如果重新训练失败,它将过渡到eSS.Inactive。在eSS.Inactive期间,下行端口将尝试进行远端接收器终端检测。如果确定不存在表6-22中定义的远端低阻抗接收器终端(RRX-DC),它将进入Rx.Detect。否则,它将等待软件干预。
- 上行端口在1毫秒内未收到任何链路命令或数据包(如第7.2.4.1.4节所述)时应过渡到Recovery(tU0RecoveryTimeout)。
- 下行端口在指示发出Warm Reset时应过渡到Rx.Detect。
- 上行端口在检测到Warm Reset时应过渡到Rx.Detect。
- 上行端口在检测到VBUS关闭时应过渡到eSS.Disabled。 注意:此条件仅适用于自供电的上行端口。eSS.Disabled是自供电上行端口的逻辑断电状态。
7.5.7 U1
U1是一个低功耗状态,在该状态下不传输数据包,并且两个端口同意进入一个可以将增强型SuperSpeed PHY置于低功耗状态的链路状态。U1不包含任何子状态。过渡到其他状态如图7-22所示。
7.5.7.1 U1 Requirements
-
发射器DC共模电压应在每个协商通道上符合表6-19中定义的规范(VTX-CM-DCACTIVE-IDLE-DELTA)。
-
端口应保持表6-22中定义的低阻抗接收器终端(RRX-DC)。如果端口处于x2操作中,应在每个协商通道上启用其低阻抗接收器终端(RRX-DC)。
-
端口应启用第6.9.2节中定义的U1退出检测功能。如果端口处于x2操作中,应在配置通道上启用此功能。
-
端口在启动退出U1时应启用其LFPS发射器。如果端口处于x2操作中,应在配置通道上启动退出U1。
-
如果U2不活动计时器具有非零超时值,端口在进入此状态时应启用其U2不活动计时器。
-
下行端口应启用其Ping.LFPS检测。如果端口处于x2操作中,应在配置通道上启用其Ping.LFPS检测。
-
下行端口应启用300毫秒计时器(tU1PingTimeout)。当接收到Ping.LFPS时,该计时器将被重置并重新启动。
-
上行端口应传输表6-30中定义的Ping.LFPS。如果端口处于x2操作中,应在配置通道上传输Ping.LFPS。
7.5.7.2 Exit from U1
- 下行端口在指示时应过渡到eSS.Disabled。
- 下行端口在300毫秒计时器(tU1PingTimeout)到期时应过渡到Rx.Detect。
- 下行端口在指示发出Warm Reset时应过渡到Rx.Detect。
- 上行端口在检测到Warm Reset时应过渡到Rx.Detect。
- 自供电的上行端口在未检测到有效的VBUS时应过渡到eSS.Disabled,如第11.4.5节所定义。
- 端口在U2不活动计时器超时时应过渡到U2,如第10.4.2.4和第10.6.2.4节所定义。
- 端口在成功完成符合第6.9.2节中U1 LFPS退出握手信号的LFPS握手后应过渡到Recovery。
- 端口在2毫秒(tNoLFPSResponseTimeout)LFPS握手计时器超时时,如果未成功完成符合第6.9.2节中U1 LFPS退出握手信号的LFPS握手,应过渡到eSS.Inactive。

7.5.8 U2
U2是一个链路状态,与U1相比,允许更多的节能机会,但退出延迟增加。U2不包含任何子状态。过渡到其他状态如图7-23所示。
7.5.8.1 U2 Requirements
-
发射器DC共模电压不需要在每个协商通道上符合表6-19中定义的规范(VTX-CM-DC-ACTIVE-IDLE-DELTA)。
-
端口应保持表6-22中定义的低阻抗接收器终端(RRX-DC)。如果端口处于x2操作中,应在每个协商通道上启用其低阻抗接收器终端(RRX-DC)。
-
当下行端口处于U2时,其上行端口可能处于U1或U2。如果上行端口处于U1,它将定期发送Ping.LFPS。下行端口应区分Ping.LFPS和U1 LFPS退出握手信号。
-
端口应启用第6.9.2节中定义的U2退出检测功能。如果端口处于x2操作中,应在配置通道上启用此功能。
-
端口在启动退出U2时应启用其LFPS发射器。如果端口处于x2操作中,应在配置通道上启动退出U2。
-
下行端口应每100毫秒(tU2RxdetDelay)执行一次远端接收器终端检测。请注意,在x2操作中,下行端口应在配置通道上执行远端接收器终端检测。
7.5.8.2 Exit from U2
- 下行端口在指示时应过渡到eSS.Disabled。
- 下行端口在检测到表6-22中定义的远端高阻抗接收器终端(ZRX-HIGH-IMP-DC-POS)时应过渡到Rx.Detect。
- 下行端口在指示发出Warm Reset时应过渡到Rx.Detect。
- 上行端口在检测到Warm Reset时应过渡到Rx.Detect。
- 自供电的上行端口在未检测到有效的VBUS时应过渡到eSS.Disabled,如第11.4.5节所定义。
- 端口在成功完成符合第6.9.2节中U2 LFPS退出信号的LFPS握手后应过渡到Recovery。
- 端口在2毫秒LFPS握手计时器超时时(tNoLFPSResponseTimeout),如果未成功完成符合第6.9.2节中U2 LFPS退出握手信号的LFPS握手,应过渡到eSS.Inactive。

7.5.9 U3
U3是一个链路状态,在该状态下设备进入挂起状态。显著节省链路和设备功耗。U3不包含任何子状态。过渡到其他状态如图7-24所示。
7.5.9.1 U3 Requirements
- 发射器DC共模电压不需要在每个协商通道上符合表6-19中定义的规范(VTX-CM-DC-ACTIVE-IDLE-DELTA)。
- 端口应保持表6-22中定义的低阻抗接收器终端(RRX-DC)。如果端口处于x2操作中,应在每个协商通道上启用其低阻抗接收器终端(RRX-DC)。
- 应禁用LFPS Ping检测。
- 端口应启用第6.9.2节中定义的U3唤醒检测功能。如果端口处于x2操作中,应在配置通道上启用此功能。
- 端口在启动退出U3时应启用其LFPS发射器。如果端口处于x2操作中,应在配置通道上启动退出U3。
- 下行端口应每100毫秒(tU3RxdetDelay)执行一次远端接收器终端检测。请注意,在x2操作中,下行端口应在配置通道上执行远端接收器终端检测。
- 无法在tNoLFPSResponseTimeout内响应U3 LFPS唤醒的端口可以在准备返回U0时启动U3 LFPS唤醒。
7.5.9.2 Exit from U3
- 下行端口在指示时应过渡到eSS.Disabled。
- 下行端口在检测到表6-22中定义的远端高阻抗接收器终端(ZRX-HIGH-IMP-DC-POS)时应过渡到Rx.Detect。
- 下行端口在指示发出Warm Reset时应过渡到Rx.Detect。
- 上行端口在检测到Warm Reset时应过渡到Rx.Detect。
- 自供电的上行端口在未检测到有效的VBUS时应过渡到eSS.Disabled,如第11.4.5节所定义。
- 端口在成功完成符合第6.9.2节中U3唤醒信号的LFPS握手后应过渡到Recovery。
- 端口在10毫秒LFPS握手计时器超时时(tNoLFPSResponseTimeout),如果未成功完成符合第6.9.2节中U3唤醒握手信号的LFPS握手,应保持在U3状态。100毫秒(tU3WakeupRetryDelay)后,如果LFPS握手不成功且仍需退出U3,则端口应启动U3唤醒LFPS握手信号以唤醒主机。

7.5.10 Recovery
Recovery链路状态用于重新训练链路、执行热复位或切换到环回模式。为了重新训练链路并尽量减少恢复延迟,两个链路伙伴不训练接收器均衡器,而是保持最后训练的均衡器配置。仅传输TS1和TS2有序集以同步链路并交换表6-6中定义的链路配置信息。
7.5.10.1 Recovery Substate Machines
Recovery包含一个子状态机,如图7-25所示,具有以下子状态:
- Recovery.Active
- Recovery.Configuration
- Recovery.Idle
7.5.10.2 Recovery Requirements
- 端口应符合表6-18中定义的发射器规范。
- 端口应保持表6-22中定义的低阻抗接收器终端(RRX-DC)。
- 对于SuperSpeed USB,Tx Header Buffers和Rx Header Buffers中的所有头数据包应根据第7.2.4节中规定的要求进行处理。
- 对于SuperSpeedPlus USB,Type 1/Type 2 Tx Header Buffers和Type 1/Type 2 Rx Buffers中的所有头数据包和数据包头应根据第7.2.4节中规定的要求进行处理。
7.5.10.3 Recovery.Active
Recovery.Active是通过传输TS1有序集来训练增强型SuperSpeed链路的子状态。
7.5.10.3.1 Recovery.Active Requirements
- 进入此子状态时应启动12毫秒计时器(tRecoveryActiveTimeout)。请注意,在x2操作中,计时器应继续运行,直到每个协商通道满足过渡到Recovery.Configuration的退出条件。
- 进入此子状态时,端口应在每个协商通道上传输相同的TS1有序集。请注意,在Gen 2操作中,TS1有序集的符号14和15可能因直流平衡而不同。还要注意,在x2操作中,一个通道可能比另一个通道更早完成TS1 OS退出握手。在这种情况下,成功完成TS1 OS退出握手的通道应继续传输TS1 OS,直到端口准备好过渡到下一个状态。
- 端口应在每个协商通道上使用TS1或TS2有序集训练其接收器。 注意:根据链路条件和不同的接收器实现,一个端口的接收器可能比另一个端口训练得更快。当这种情况发生时,较早训练的端口将进入Recovery.Configuration并开始传输TS2有序集,而接收器尚未训练的端口仍在Recovery.Active中使用TS2有序集训练其接收器。
- 端口应监控每个协商通道上的退出握手。
- 在Gen 2操作中,端口应每32个TS1有序集插入一个SYNC有序集。
- 在Gen 2操作中,端口应执行第6.3.2.3和第6.4.1.2.4节中定义的块对齐和扰码器同步。
7.5.10.3.2 Exit from Recovery.Active
- 在SuperSpeed操作中,端口在每个协商通道上接收到八个连续且相同的TS1或TS2有序集后应过渡到Recovery.Configuration。
- 在Gen 2操作中,端口在每个协商通道上接收到八个连续且相同的TS1或TS2有序集后应过渡到Recovery.Configuration,不包括TS1或TS2有序集的符号14和15。 注意:TS1和/或TS2有序集之间的SYNC OS和SKP OS不会使TS1 OS和TS2 OS的连续检测失效。符号14和15用于TS1或TS2有序集标识符或直流平衡调整。
- 当满足以下条件时,端口应过渡到eSS.Inactive:
- UxEXITTIMER或12毫秒计时器(tRecoveryActiveTimeout)超时。
- 对于下行端口,过渡到Recovery不是为了尝试热复位。
- 当满足以下条件时,下行端口应过渡到Rx.Detect:
- UxEXITTIMER或12毫秒计时器(tRecoveryActiveTimeout)超时。
- 过渡到Recovery是为了尝试热复位。
- 下行端口在指示时应过渡到eSS.Disabled。
- 下行端口在指示发出Warm Reset时应过渡到Rx.Detect。
- 上行端口在检测到Warm Reset时应过渡到Rx.Detect。
7.5.10.4 Recovery.Configuration
Recovery.Configuration是一个子状态,旨在通过交换TS2有序集使两个链路伙伴实现增强型SuperSpeed握手。
7.5.10.4.1 Recovery.Configuration Requirements
- 进入此子状态时,端口应在每个协商通道上传输相同的TS2有序集,并根据以下内容设置TS2有序集中的链路配置字段。请注意,在Gen 2操作中,TS2有序集的符号14和15可能因直流平衡而不同。
- 当被指示时,下行端口应在TS2有序集中设置复位位。 注意:上行端口只能在Hot Reset.Active状态下在TS2有序集中设置复位位。详情请参阅第7.5.12.3节。
- 当被指示时,端口应在TS2有序集中设置环回位。
- 当被指示时,端口应在TS2有序集中设置禁用扰码位。
- 在x2操作中,如果一个通道先满足过渡到Recovery.Idle的条件而另一个通道未满足,它应继续传输TS2 OS,直到端口准备好过渡到下一个状态。
- 进入此子状态时应启动6毫秒计时器(tRecoveryConfigurationTimeout)。请注意,在x2操作中,计时器应继续运行,直到每个通道满足过渡到Recovery.Idle的退出条件。
- 在Gen 2操作中,端口应每32个TS2有序集插入一个SYNC有序集。
- 在Gen 2操作中,端口应在每个协商通道上执行第6.3.2.3和第6.4.1.2.1节中定义的块对齐和扰码器同步。
7.5.10.4.2 Exit from Recovery.Configuration
- 在Gen 1操作中,当每个协商通道满足以下两个条件时,端口应过渡到Recovery.Idle:
- 接收到八个连续且相同的TS2有序集。
- 在接收到第一个八个连续且相同的TS2有序集后发送十六个TS2有序集。
- 在Gen 2操作中,当每个协商通道满足以下两个条件时,端口应过渡到Recovery.Idle:
- 接收到八个连续且相同的TS2有序集,不包括符号14和15。
- 在接收到第一个八个连续且相同的TS2有序集后发送十六个TS2有序集,不包括符号14和15。
- 当满足以下条件时,端口应过渡到eSS.Inactive:
- Ux_EXIT_TIMER或6毫秒计时器(tRecoveryConfigurationTimeout)超时。
- 对于下行端口,过渡到Recovery不是为了尝试热复位。
- 下行端口应在满足以下条件时转换到 Rx.Detect:
- Ux_EXIT_TIMER 或 6 毫秒计时器 (tRecoveryConfigurationTimeout) 超时。
- 过渡到恢复状态是为了尝试热重置。
- 下行端口应在指示时转换到 eSS.Disabled。
- 下行端口应在指示发出温重置时转换到 Rx.Detect。
- 上行端口应在检测到温重置时转换到 Rx.Detect。
7.5.10.5 恢复.空闲
恢复.空闲是一个子状态,其中端口解码在恢复.配置期间接收到的 TS2 有序集定义的链路配置字段,并确定下一个状态。
7.5.10.5.1 恢复.空闲要求
- 进入此子状态时应启动一个 2 毫秒计时器 (tRecoveryIdleTimeout)。注意,在 x2 操作中,计时器应继续运行,直到每条通道都满足到下一个指定链路状态的退出条件。
- 如果下一个状态是 U0,则在 Gen 1 操作中的端口应传输空闲符号。如果下一个状态是环回或热重置,则端口可以传输空闲符号。
- 端口应解码在恢复.配置期间接收到的 TS2 有序集定义的链路配置字段,并继续到下一个状态。
- 如果在恢复.配置期间接收到的 TS2 有序集中未断言禁用扰码位,则在 Gen 1 操作中的端口应默认启用扰码。
- 如果在恢复.配置期间接收到的 TS2 有序集中断言了禁用扰码位,则在 Gen 1 操作中的端口应禁用扰码,或在指示时禁用扰码。
- 在 Gen 2 操作中的端口应在每条协商通道上传输一个 SDS 有序集,然后在数据块开始前传输空闲符号,如果下一个状态是 U0。如果下一个状态是环回或热重置,则端口可以传输 SDS 有序集。
- 注意:在 SKP 有序集和 SDS 有序集同时计划传输的情况下,应首先传输 SKP 有序集。
- 在 x2 操作中,接收到每条协商通道上的 SDS 后,应完成通道间去斜。
- 在 Gen 2 操作中的端口应在完成 SDS 有序集传输后禁用扰码,如果在恢复.配置期间接收到的 TS2 有序集中断言了禁用扰码位,或在指示时禁用扰码。
- 在 Gen 2 操作中的端口可以忽略损坏的 SDS 有序集,并继续处理后续数据块。如果检测到错误,端口可以选择恢复 SDS 有序集。
- 端口应能够接收来自其链路伙伴的头序列号广告。
- 注意:两个端口之间的退出时间差异将导致一个端口首先进入 U0 并开始头序列号广告,而另一个端口仍处于恢复.空闲状态。
7.5.10.5.2 退出恢复.空闲
- 当被指示为环回主设备且端口能够作为环回主设备时,端口应转换到环回。
- 如果在 TS2 有序集中断言了环回位,端口应作为环回从设备转换到环回。
- 当每条协商通道满足以下两个条件时,端口应转换到 U0:
- 接收到八个连续的空闲符号。
- 在接收到一个空闲符号后发送十六个空闲符号。
- 当以下计时器之一超时时且不满足转换到 U0 的条件时,端口应转换到 eSS.非活动:
- Ux_EXIT_TIMER
- 2 毫秒计时器 (tRecoveryIdleTimeout)
- 下行端口应在指示时转换到热重置。
- 下行端口应在指示时转换到 eSS.Disabled。
- 下行端口应在指示发出温重置时转换到 Rx.Detect。
- 上行端口应在检测到温重置时转换到 Rx.Detect。
- 上行端口应在 TS2 有序集中断言复位位时转换到热重置。

7.5.11 环回
环回用于接收器测试和故障隔离。环回在 Gen 1 操作中包括一个可选的 BERT 状态机,描述见第 0 节。环回还用于 Gen 1x1 操作中的 BLR 发射器合规性测试。BLR 合规模式的测试配置见第 E.3.6 节。
环回主设备是请求环回的端口。环回从设备是重新传输从环回主设备接收到的符号的端口。
在 Loopback.Active 期间,环回从设备可以支持第 0 节中描述的 BERT 协议。环回从设备可以响应 BERT 错误计数器复位命令和 BERT 错误计数报告命令。环回从设备可以检查传入数据中的环回数据模式。
7.5.11.1 环回子状态机
环回包含一个子状态机,如图 7-26 所示,具有以下子状态:
- Loopback.Active
- Loopback.Exit
7.5.11.2 环回要求
- 应有一个环回主设备和一个环回从设备。环回主设备是在 TS2 有序集中断言环回位的端口。
- 端口应保持其在表 6-18 中定义的发射器规范。
- 端口应保持其在表 6-22 中定义的低阻抗接收器终端 (RRX-DC)。
- 在 x2 操作中,环回操作按每条通道进行。发射器通道间的偏斜不需要保持。
7.5.11.3 Loopback.Active
环回.活动是环回测试处于活动状态的子状态。环回主设备向其环回从设备发送数据/命令。环回从设备要么回传数据,要么检测/执行从环回主设备接收到的命令。
7.5.11.3.1 Loopback.Active 要求
- 环回主设备应根据需要发送有效符号和 SKP。
- 此外,在 BLR 合规模式下,如果要推进合规模式,环回主设备应传输四个连续的 SKP OS。详情见第 E.3.6.1 节。
- 环回从设备应重新传输接收到的符号。
- 在 Gen 1 操作中,环回从设备应通过以下方法之一重新传输接收到的数据:
- 在 10b 域中环回 – 环回从设备应准确地重新传输接收到的 10b 符号。它可以根据需要执行通道极性反转并添加或删除 SKP OS 以进行时钟偏移补偿。
- 注意:这意味着环回从设备应禁用或绕过其自身的 8b/10b 编码器/解码器和扰码器/解扰码器。
- 在 8b 域中环回 – 环回从设备应准确地重新传输接收到的解码后的 8b 符号。它应将任何无效的 10b 符号替换为 K28.4,并在其发射器中保持运行差异,如第 6.3.1 节所述。环回从设备应根据需要执行通道极性反转并添加或删除 SKP OS 以进行时钟偏移补偿。
- 注意:这意味着重新传输的符号可能与接收到的符号不具有相同的差异。此外,对于环回主设备,单个比特错误将显示为整个符号错误。
- 在 Gen 2 操作中,环回从设备应准确地重新传输接收到的所有数据块,而不进行任何错误校正。它可以根据需要执行通道极性反转并添加或删除 SKP OS 以进行时钟偏移补偿。
- 注意:这意味着环回从设备应禁用或绕过其自身的扰码器/解扰码器。
- 在 Gen 1x1 操作中,环回从设备可以处理第 0 节中定义的 BERT 命令。
- 应启用 LFPS 接收器。在 x2 操作中,应在配置通道上启用 LFPS 接收器。
7.5.11.3.2 退出Loopback.Active
- 下行端口应在指示时转换到 eSS.Disabled。
- 下行端口应在指示发出温重置时转换到 Rx.Detect。
- 上行端口应在检测到温重置时转换到 Rx.Detect。
- 当被指示时,环回主设备应转换到 Loopback.Exit。
- 环回从设备应在检测到符合第 6.9.2 节定义的环回 LFPS 退出握手信号时转换到 Loopback.Exit。
7.5.11.4 Loopback.Exit
环回.退出是环回主设备完成环回测试并开始退出环回的子状态。
7.5.11.4.1 Loopback.Exit 要求
- 进入此子状态时应启动一个 2 毫秒计时器 (tLoopbackExitTimeout)。
- 应启用 LFPS 发射器和 LFPS 接收器。在 x2 操作中,应仅在配置通道上启用 LFPS 发射器。
- 端口应传输和接收第 6.9.2 节定义的环回 LFPS 退出握手信号。
7.5.11.4.2 退出Loopback.Exit
- 端口应在成功完成第 6.9.2 节定义的环回 LFPS 退出握手后转换到 Rx.Detect。
- 端口应在 2 毫秒计时器 (tLoopbackExitTimeout) 超时且不满足转换到 Rx.Detect 的条件时转换到 eSS.非活动。
- 下行端口应在指示时转换到 eSS.Disabled。
- 下行端口应在指示发出温重置时转换到 Rx.Detect。
- 上行端口应在检测到温重置时转换到 Rx.Detect。

7.5.12 热重置
只有下行端口可以被指示启动热重置。 当下行端口启动重置时,它应在每条协商通道上传输断言复位位的 TS2 有序集。上行端口应在每条协商通道上通过发送断言复位位的 TS2 有序集进行响应。完成热重置处理后,上行端口应通过发送未断言复位位的 TS2 有序集向下行端口发出信号。下行端口应通过在 TS2 有序集中未断言复位位进行响应。一旦两个端口都接收到未断言复位位的 TS2 有序集,它们应退出 Hot Reset.Active 并过渡到 Hot Reset.Exit。一旦成功完成空闲符号握手,端口应返回到 U0。
7.5.12.1 热重置子状态机
热重置包含一个子状态机,如图 7-27 所示,具有以下子状态:
- Hot Reset.Active
- Hot Reset.Exit
7.5.12.2 热重置要求
- 下行端口应重置其链路错误计数,如第 7.4.2 节所定义。
- 下行端口应重置其 PM 计时器和相关的 U1 和 U2 超时值为零。
- 在 SuperSpeedPlus 操作中的端口应重置软错误计数(如果已实现)。
7.5.12.3 Hot Reset.Active
Hot Reset.Active 是一个子状态,其中端口将执行第 7.4.2 节中定义的重置。
7.5.12.3.1 Hot Reset.Active要求
- 进入此子状态时,端口应首先在每条协商通道上连续传输至少 16 个断言复位位的 TS2 有序集。
- 注意:根据两个端口进入热重置的时间延迟,当下行端口传输第一个 16 个断言复位位的 TS2 有序集时,它可能仍会接收到上行端口从 Polling.Configuration 或 Recovery.Configuration 退出时的一部分 TS2 有序集。下行端口应忽略这些 TS2 有序集。此外,进入此子状态时,两个端口应忽略 TS2 有序集链路配置字段中的禁用扰码位。此位仅在 Polling.Idle 或 Recovery.Idle 中解码。
- 进入此子状态时应启动一个 12 毫秒计时器 (tHotResetActiveTimeout)。
- 下行端口应继续在每条协商通道上传输断言复位位的 TS2 有序集,直到上行端口从发送断言复位位的 TS2 有序集转换为在每条协商通道上发送未断言复位位的 TS2 有序集。
- 上行端口应在每条协商通道上执行热重置时传输断言复位位的 TS2 有序集。
- 上行端口应在完成每条协商通道上的热重置后传输未断言复位位的 TS2 有序集。
- 端口应执行本节热重置要求中描述的热重置。
7.5.12.3.2 退出Hot Reset.Active
- 当每条协商通道满足以下三个条件时,端口应转换到 Hot Reset.Exit:
- 传输至少 16 个断言复位位的 TS2 有序集。
- 接收到两个连续的未断言复位位的 TS2 有序集。
- 在接收到一个未断言复位位的 TS2 有序集后,发送四个连续的未断言复位位的 TS2 有序集。
- 端口应在 12 毫秒计时器 (tHotResetActiveTimeout) 超时且不满足转换到 Hot Reset.Exit 的条件时转换到 eSS.非活动。
- 在 SuperSpeedPlus 操作中的端口可以忽略损坏的 SDS OS。
- 下行端口应在指示时转换到 eSS.Disabled。
- 下行端口应在指示发出温重置时转换到 Rx.Detect。
- 上行端口应在检测到温重置时转换到 Rx.Detect。



浙公网安备 33010602011771号