10 集线器、主机下游端口和设备上游端口规范
Hub, Host Downstream Port, and Device Upstream port Specification 。
本章介绍同时支持增强型 SuperSpeed 和 USB 2.0(称为“USB 集线器”)的集线器的体系结构要求。本章还介绍了主机下行端口和集线器下行端口的功能要求之间的差异,以及外设上行端口和集线器上行端口之间的差异。本章包含对增强型 SuperSpeed 集线器的说明。增强型 SuperSpeed 集线器支持所有 Gen X x Y 速度。
本章包括对 SuperSpeed 子模块(SuperSpeed 中继器/转发器和 SuperSpeed Hub 控制器)以及 SuperSpeedPlus 子模块(SuperSpeedPlus 上行控制器、SuperSpeedPlus 下行控制器和 SuperSpeedPlus Hub 控制器)的描述。本章还介绍了 Hub 的错误恢复、重置、挂起/恢复、Hub 请求行为和 Hub 描述符的操作。USB 2.0 集线器子块在通用串行总线规范 2.0 修订版中进行了描述。
10.1 Hub 功能摘要(Hub Feature Summary)
集线器提供 USB 设备和主机之间的电气接口。集线器直接负责支持许多属性,这些属性使 USB 对用户友好并向用户隐藏其复杂性。下面列出了集线器支持的 USB 功能的主要方面:
- 连接行为
- 电源管理
- 设备连接/断开检测
- 总线故障检测和恢复
- 增强的 SuperSpeed 和 USB 2.0(高速、全速和低速)设备支持
当 USB 集线器以 Gen 1x1 速度连接到其上游端口时,它应作为 SuperSpeed 集线器运行。
当 USB 集线器以高于 Gen 1x1 的速度在其面向上游的 port 上连接时,它应作为 SuperSpeedPlus 集线器运行。
当集线器上游端口连接到仅在高速或全速下运行的电气环境时,连接到下游端口的设备将无法使用增强型 SuperSpeed 连接。
图 10-1 显示了四端口 USB 集线器的高级框图及其上游和下游面向端口的位置。USB 集线器是两个集线器的逻辑组合:USB 2.0 集线器和增强型 SuperSpeed 集线器。每个集线器都在单独的数据总线上独立运行。通常,它们之间唯一的信号共享逻辑是控制 VBUS 。如果 USB 2.0 集线器或增强型 SuperSpeed 集线器控制器需要为下游端口供电,则该端口的电源将打开。只要有可能,USB 集线器就会在上游的两个接口上连接。USB 集线器上所有裸露的下游端口都应支持增强型 SuperSpeed 和 USB 2.0 连接。主机控制器端口可能有不同的要求。
图 10-2 显示了 USB 集线器的 SuperSpeed 部分,该部分由集线器中继器/转发器部分和集线器控制器部分组成。
SuperSpeed Hub 中继器/转发器负责连接设置和拆卸。它还支持异常处理,例如总线故障检测和恢复以及连接/断开检测。SuperSpeed 集线器控制器提供主机到集线器通信的机制。特定于集线器的状态和控制命令允许主机配置集线器,并监视和控制其各个面向下游的端口。
如图10-3 所示,SuperSpeedPlus Hub 由三个功能部件组成:SuperSpeedPlus 上游控制器、SuperSpeedPlus 下游控制器和 SuperSpeedPlus 集线器控制器。 除非另有说明,否则本规范中的所有后续参考均指 Enhanced SuperSpeed hub 的组件。
SuperSpeedPlus 上行 (SSP US) 控制器负责上行端口的行为、缓冲从上行链路接收的数据包、缓冲和仲裁等待在上行链路上传输的数据包,以及将数据包路由到相应的下行端口的下行控制器(或集线器控制器)。
SuperSpeedPlus 下行 (SSP DS) 控制器负责下行端口的行为、缓冲从下行链路接收的数据包、缓冲和仲裁等待在下行链路上传输的数据包,以及将数据包路由到上行控制器。
自供电集线器从以下设备之一获取电力:
- 通过非 USB 连接器(例如桶形插孔)的外部电源
- USB PD(来自集线器的上游端口或下游端口)
- USB Type-C 电流(来自上游端口)。
10.1.1 连接到支持增强型 SuperSpeed 的主机
Connecting to an Enhanced SuperSpeed Capable Host 。
当主机断电时,集线器不会为其下游端口供电,除非集线器支持电源应用(请参阅第 10.3.1.1 节)。
当集线器连接到通电端口并检测到增强型 SuperSpeed 连接时,默认情况下,以下是典型的事件序列:
- 面向上游的端口将以链路章节中定义的链路伙伴支持的最快速度进行训练。
- 同时,该 hub 为其下游端口供电,并以链路合作伙伴支持的最快速度训练每条链路。
- 如果下游端口的训练速度高于上游端口,则下游端口的重新训练速度不应快于上游端口。
- 集线器既可作为增强型 SuperSpeed 集线器设备连接,也可作为高速集线器设备连接。
- 主机系统以高速和 Gen X 速度开始集线器枚举。
- 主机系统以 Gen X 速度开始设备枚举。
10.1.2 连接到 USB 2.0 主机(Connecting to a USB 2.0 Host)
当主机通电且没有 Gen X 速度支持时,以下是典型的事件序列:
- 集线器检测到 VBUS 并作为高速(high-speed)集线器设备连接。
- 主机系统开始以高速枚举集线器。
- 在软件 (USB 2.0) 的指导下,禁用 Gen X 连接,集线器为下游端口供电。
- 设备以高速进行连接。
- 主机系统开始以高速进行设备枚举。
10.1.3 集线器连接(Hub Connectivity)
集线器表现出不同的连接行为,具体取决于它们是否传播数据包标头/数据包有效负载流量、其他数据包流量、恢复信令或处于空闲状态。
10.1.3.1 路由信息(Routing Information)
在集线器上游端口接收的数据包根据数据包标头中的 20 位字段(路由字符串)中包含的信息进行路由。集线器将路由字符串与集线器深度值结合使用,以标识下游定向数据包的目标端口。Hub depth 由软件使用 “Set Hub Depth” 请求分配。集线器应忽略路由字符串,并假设所有数据包都直接路由到集线器,直到集线器进入配置状态并设置集线器的深度。集线器的上游端口应由端口号 0 表示,而下游端口应从端口号 1 开始并按顺序计数。
集线器应将上行数据包的路由字符串设置为:
零,当向上流动的数据包由集线器控制器发起时。这些可以是响应路由到集线器控制器的数据包的数据包;例如,响应 IN/ACK TP 的数据包或如响应 ERDY (集线器控制器先前发送了 NRDY 响应包)的数据包。
当向下传输的数据包已被此集线器控制器标记为延迟时,此时上行数据包路由字符串值设置为此下行包的路由字符串值。
第 10.8.7 节中所述的 SuperSpeedPlus 集线器的集线器的总仲裁权重。
图 10-5 演示了在具有五级四端口 USB 集线器的示例拓扑中使用路由字符串。图中显示了每层 hub 的 hub depth 值。拓扑中的每个 hub 和每个设备都包含用于将数据包路由到该设备/ hub 的路由字符串。对于每个 hub depth ,路由字符串中确定该 hub depth 的路由目标的八位字节以粗体显示,字体大小大于路由字符串的其余部分。主机根端口不包含在 20 位路由字符串中。
10.1.3.2 超高速集线器分组信令连接
SuperSpeed Hub Packet Signaling Connectivity 。
SuperSpeed 集线器中继器/转发器包含对标头和数据包的缓冲。SuperSpeed 集线器中继器/转发器不使用 USB2.0 的仅中继器模型(以高速模式进行连接)。此更改允许多个下游设备同时发送异步消息而不会丢失数据,并且当链路不在 U0 中时,当流量被定向到下游端口时,可以存储和传输一些流量。
图 10-6 显示了 SuperSpeed 集线器在上行和下行方向的数据包信令连接行为。后面的部分将更详细地介绍 SuperSpeed 集线器内部缓冲和连接。SuperSpeed 集线器还具有空闲状态,在此期间 SuperSpeed 集线器不进行任何连接。当处于空闲状态时,SuperSpeed 集线器的所有端口(上游和下游)都是 U1、U2 或 U0 接收和传输逻辑空闲,等待下一个数据包的开始。
U0 – 正常运作状态;U1 – 待机与快速恢复;U2 – 待机与缓慢恢复;U3 – 休眠模式(Suspend)。
除常时等量时间戳数据包 (ITP) 外的所有数据包都在下游方向单播;SuperSpeed 集线器使用直接连接模型运行。这意味着,当主机或 SuperSpeed 集线器向下游传输数据包时, 只有主机和接收设备之间直接线路中的那些 SuperSpeed 集线器才能看到数据包。
10.1.3.3 SuperSpeedPlus 集线器数据包路由
SuperSpeedPlus Hub Packet Routing 。
类似于 SuperSpeed Hub 。
10.1.4 恢复连接(Resume Connectivity)
集线器在上游和下游定向的恢复信令方面表现出不同的连接行为。集线器不会将恢复信号从其面向上游的端口传播到任何面向下游的端口,除非面向下游的端口已暂停并且自暂停以来一直收到恢复信号。图 10-7 展示了集线器上游和下游恢复连通性。
如果集线器上游端口挂起,并且集线器检测到来自挂起的下游面向端口的恢复信令,则集线器会向上游传播该信令,并且不会将该信令反射到任何面向下游的端口(包括发起恢复信令的下游端口)。如果集线器上游端口未挂起,并且集线器检测到来自挂起的面向下游端口的恢复信令,则集线器会将恢复信令反射到下游端口。请注意,软件不得在集线器的上游端口上启动到 U3 的转换,除非它已经在所有启用的下游端口上启动到 U3 的转换。有关恢复连接的详细讨论,请参见第 10.10 节。
10.1.5 集线器故障恢复机制(Hub Fault Recovery Mechanisms)
10.1.6 Hub 缓冲区架构(Hub Buffer Architecture)
在 SuperSpeed 模式或 SuperSpeedPlus 模式下运行的增强型 SuperSpeed 集线器的缓冲行为不同。
10.1.6.1 SuperSpeed Hub 缓冲区架构(SuperSpeed Hub Buffer Architecture)
SuperSpeed 集线器具有与其上行和下行端口关联的标头数据(header packet)包缓冲区。它还具有用于上游和下游数据流的数据包有效载荷 (DPP) 缓冲区。有关详细信息,请参见 Section 10.7 或 Section 10.7.4 。
10.1.6.1.1 SuperSpeed Hub 报头数据包缓冲区架构
SuperSpeed Hub Header Packet Buffer Architecture 。
图 10-8 显示了 SuperSpeed 集线器的典型标头数据包缓冲区实现的逻辑表示。从逻辑上讲,SuperSpeed 集线器具有与每个端口关联的独立标头数据包缓冲区,用于上游和下游流量。当 SuperSpeed 集线器在其上游端口上收到报头数据包时,它会将报头数据包路由到适当的下游报头数据包缓冲区进行传输(除非报头数据包用于集线器)。当 SuperSpeed 集线器在下行端口上接收到非 LMP 报头数据包时,它会将报头数据包路由到上游端口报头数据包缓冲区进行传输。传输后,标头数据包将保留在 SuperSpeed 集线器标头数据包缓冲区中,直到收到标头数据包的链路级别确认 (LGOOD_n)。这允许 SuperSpeed 中心在必要时重试标头数据包,以确保在链路级别正确接收标头数据包。标头数据包缓冲区还允许 SuperSpeed 集线器存储标头数据包,直到当标头数据包被定向到处于低功耗链路状态的下游链路时,它们可以被转发。SuperSpeed 集线器存储标头数据包,并在链路激活时进行传输。
10.1.6.1.2 集线器数据缓冲区架构(Hub Data Buffer Architecture)
图 10-9 显示了典型 SuperSpeed 集线器中数据缓冲区架构的逻辑表示。SuperSpeed 集线器在上行和下行方向为数据包有效载荷 (DPP) 提供独立缓冲。增强型 SuperSpeed 架构允许在上游和下游方向同时发生事务。在图中,两个数据包正在下游方向进行中。SuperSpeed 集线器可以同时存储多个数据包有效负载。在极少数情况下,数据包有效负载因缓冲不可用而被丢弃,端到端协议将通过重试事务来恢复。常时等量协议不包括重试。但是,与物理总线上的位错误相比,丢弃错误的频率预计会降低。
注意:数据包标头的存储和处理方式与使用标头数据包缓冲区的其他标头数据包相同。DPP 使用单独的数据缓冲区进行处理。
10.1.6.2 SuperSpeedPlus Hub 缓冲区架构(SuperSpeedPlus Hub Buffer Architecture)
与 SuperSpeed 集线器相比,SuperSpeedPlus 集线器具有更多的数据包标头 (DPH) 和数据包有效载荷 (DPP) 缓冲。下游端口的运行速度可能与上游端口不同,并且可能有多个 DP 同时在不同的下游端口上传输。因此,可能需要对 DP 进行缓冲,直到它们可以从集线器传输出去。由于集线器中可以有多个 DP 缓冲等待端口上的传输,因此 SuperSpeedPlus 集线器还具有本地仲裁规则,用于选择要在端口上接下来传输的数据包。上行和下行流量有特定的缓冲要求。有关详细信息,请参 见Section 10.8 。
10.2 集线器电源管理(Hub Power Management)
10.2.1 链路状态(Link States)
集线器需要在所有端口(上游和下游)上支持 U0、U1、U2 和 U3。
10.2.2 Hub 下行端口 U1/U2 计时器(Hub Downstream Port U1/U2 Timers)
集线器需要在每个下行端口上都有 U1 和 U2 的非活动计时器。超时值是可编程的,可以由主机软件设置。超时值为零表示计时器已禁用。U1/U2 超时的默认值为零。所有下游端口的 U1 和 U2 超时值在 PowerOn Reset 或重置集线器上游端口时重置为默认值。当端口收到端口重置的 SetPortFeature 请求时,下游端口的 U1 和 U2 超时值将重置为默认值。本章中介绍的下游端口状态机描述了启用 U1 和/或 U2 超时时的特定操作规则。
集线器下游端口应接受链接伙伴发起的 U1 或 U2 条目,除非相应的 U1/U2 超时设置为零或有待处理流量定向到下游端口。
如果集线器在其上行端口上接收到路由到下行端口的有效数据包,则它应拒绝下行端口上的 U1 或 U2 链路输入尝试,直到数据包成功传输。如果集线器正在接收数据包,但尚未确定数据包的目的地,则集线器也可能拒绝下游端口上的 U1 或 U2 链路输入尝试。集线器实现应确保不存在争用条件,其中未延迟的标头数据包在下游端口上排队等待传输,其链接位于 U1、U2 中,或者正在进入 U1、U2 中。
如果相应的超时设置为零,则集线器下游端口应拒绝所有 U1 和 U2 输入请求。
U1 和 U2 的集线器不活动计时器不应由同步时间戳数据包 (ITP) 重置。
10.2.3 下游/上游端口链路状态转换
Downstream/Upstream Port Link State Transitions 。
集线器应评估其下游端口的链路电源状态,以便在没有待处理的上游流量时,将其任何下游端口的最高链路状态传播到其上游端口。U0 是最高的链路状态,其次是 U1,然后是 U2,然后是 U3,然后是 Rx.Detect,最后是 eSS.Disabled。其他链接状态的顺序是 undefined 且取决于实现。如果上游端口链路状态转换会导致上游端口链路状态被软件禁用,则集线器应将上游端口链路转换为启用的下一个最高 U-state 。集线器永远不会自动尝试将集线器上游端口转换为 U3 或更低状态。
每当 Hub 收到路由到不在 U0 中的下游端口的数据包时,Hub 还应在相应的下游端口上启动链路状态转换。