U1 和 U2 转换

本主题首先介绍软件为启用 U1 和 U2 转换而完成的初始设置,然后介绍这些转换在硬件中是如何发生的。

按软件的初始设置

本主题介绍软件如何枚举设备。

若要进行 U1 或 U2 转换,软件在枚举设备期间执行以下步骤。

  1. 软件在枚举过程中与设备交换 U1 或 U2 退出延迟信息。 作为此交换的第一部分,设备特定的延迟由 usb 3.0 规范 () 第 9.6.2.2 节中定义的 SuperSpeed USB 设备功能的 bU1DevExitLat 和 wU2DevExitLat 字段填充。 作为交换的第二部分,根据 USB 3.0 规范的第 9.4.12 节,主机通过发送SET_SEL控制传输来通知设备有关设备的总体退出延迟。 延迟信息包括与上游链接和控制器关联的延迟。

  2. 对于设备连接到的 DS 端口,软件配置两个值:PORT_U1_TIMEOUT 和 PORT_U2_TIMEOUT。 在确定这些值时,软件会考虑设备 (的特征,例如) 终结点的类型以及与将设备从 U1 或 U2 恢复到 U0 相关的延迟。 下表描述了超时值。

    表 1. PORT_U1_TIMEOUT和PORT_U2_TIMEOUT值

    说明
    01H-FEH DS 端口必须在处于非活动状态一段时间后启动转换。 确切的时间段派生自超时值。 除非存在挂起的流量,否则端口必须接受由链接伙伴启动的转换。
    FFH DS 端口不得启动转换,但必须接受由链接伙伴启动的转换,除非存在挂起的流量。
    0 DS 端口不得启动转换,也不得接受由链接伙伴启动的转换。
  3. 如果PORT_U2_TIMEOUT值介于 01H-FEH 之间,则步骤 2 会导致硬件中出现其他步骤。 DS 端口通知其链接伙伴该值。 “从 U1 直接转换到 U2”中介绍了此步骤的重要性。

  4. 对于每个设备或中心,软件配置两个值:U1_ENABLE和U2_ENABLE,方法是发送SET_FEATURE (U1_ENABLE/U2_ENABLE) 控制传输。 下表描述了这些值。

    表 2. U1_ENABLE和U2_ENABLE值

    说明
    已启用 如果设备策略允许,美国端口可以启动转换并接受链接合作伙伴启动的转换。
    已禁用 美国端口不得启动转换,但可以接受由链接合作伙伴启动的转换。

硬件转换

本主题介绍硬件到 U1 和 U2 的转换。

在软件进行初始设置后,硬件自动转换为 U1 和 u2,而无需软件进一步干预。

只要链接正在主动传输数据包,就 (U0) 处于工作状态。 未传输数据包时,链接被视为空闲。 在空闲状态下,任何链接伙伴都可以启动到 U1 或 U2 的转换。 其他链接合作伙伴可以选择接受或拒绝转换。 如果链接伙伴接受转换,则链接将移动到该 U 状态。 如果它拒绝转换,链接将保留在 U0 中。

DS 端口发起的转换

DS 端口实现一种计时器机制,用于跟踪端口上的不活动状态。 每当该端口发送或接收数据包时,计时器就会重置。 当软件程序设置新的超时值时,计时器也会重置。 如果软件已将 DS 端口编程为仅启动 U1 或 U2 转换,则 DS 端口在链路首次进入 U0 时启动计时器。 计时器值基于软件编程的 U1 (或 U2) 超时值。 如果在计时器过期时链接位于 U0 中,DS 端口将启动 U1 (或 U2) 转换。

如果设备知道转换会影响设备满足性能或延迟要求的能力,美国端口链接合作伙伴可以选择拒绝转换。 例如,如果设备已发送 ERDY 通知,并且需要来自主机的传输请求,则设备可能会同时拒绝 U1 或 U2 状态转换。

如果软件已将 DS 端口编程为启动 U1 和 U2 转换,DS 端口会首先根据本节前面所述的计时器 (启动 U1 转换) 。 本主题在从 U1 到 U2 的 直接转换中介绍了从 U1 到 U2 的转换

如果链接位于 U1 或 U2 中,则 DS 端口可以在收到连接到该端口的设备流量时将端口重新引入 U0。

设备 (美国端口) 发起的转换

只要软件启用了该功能,设备可以选择启动从 U0 到 U1 或 U0 到 U2 的转换。 如果设备将链接转换到 U1,则可以根据 DS 端口的 U2 计时器直接转换到 U2, (“从 U1 直接转换到 U2”中所述。 但是,如果未设置 U2 计时器,则设备无法自行启动从 U1 到 U2 的直接转换。 在这种情况下,设备必须在启动到 U2 的转换之前将链接带回 U0。

在决定何时启动这些转换时,设备应考虑其退出延迟和性能要求。 为了帮助设备就启动转换的主动性做出明智的决策,软件还提供了各种退出延迟值,如本文档前面“按软件的初始设置”中所述。

如果链接位于 U1 或 U2 中,美国端口可以随时将端口重新引入 U0。 通常,当美国端口知道要向主机发送任何数据包,或者如果它预计来自主机的数据包时,它会启动到 U0 的转换。

设备启动的 LPM 的优点

软件为 DS 端口设置的计时器值基于常规启发法。 在选择这些计时器值时,软件可确保设备性能不会受到损害。 为了保持设备的性能,软件不能选择太小的值。 由于 DS 端口启动的转换基于计时器,并且不考虑设备的确切状态,因此此机制无法利用将设备发送到 U1 或 U2 状态的所有可能机会。

另一方面,设备对其特征和当前状态有准确的了解。 因此,它可以智能地猜测下一次传输何时进行。 根据这些信息,设备可以 (,并且应该) 选择主动启动这些转换,而不会显著影响性能。

例如,设备在其某个终结点上发送了 NRDY 通知,并知道一段时间内不会有流量。 在这种情况下,设备可以立即启动到 U1 或 U2 的转换。 在发送 ERDY 通知之前,设备可以将链接带回 U0,为发送该数据做准备。 有关此过程的详细信息,请参阅 USB 3.0 规范的 C.3.1 部分。

从 U1 直接转换到 U2

如果链接位于 U1 中,则链接可以直接转换为 U2,而无需在两者之间输入 U0。 无论哪个链接合作伙伴启动了到 U1 的转换,都可能发生此情况。 但是,仅当链路 DS 端口上的 U2 超时设置为介于 01H-FEH 之间的值时,才能发生 U1 到 U2 的转换。

“按软件进行初始设置”部分介绍了允许 DS 端口向其链接伙伴传达超时值的其他步骤。 链接进入 U1 后,两个链接伙伴使用根据 DS 端口的 U2 超时值设置的超时值启动计时器。 如果计时器由于流量和过期而未重置,则两个链接伙伴都以无提示方式转换到 U2,两者之间没有任何显式通信。

从 U1 或 U2 转换到 U3

到 U1 或 U2 的转换在硬件中自主启动,但到 U3 的转换由软件启动。 由于 U3 转换仅在处于非活动状态一段时间后启动,因此很可能在转换前链接处于 U1 或 U2 (而不是 U0) 。

USB 3.0 规范未定义从 U1 或 U2 到 U3 的直接转换。 父中心或控制器负责自动将链接转换为 U0,然后将其转换为 U3。

中心的 U1 或 U2 转换

USB 3.0 规范为集线器提供了有关何时在其美国端口上启动 U 状态转换的具体指南。 如果所有 DS 端口都处于链接状态 U1 或更低,则中心应在其美国端口上启动 U1 转换,前提是软件使中心能够启动 U1 转换。

同样,如果所有 DS 端口都处于链接状态 U2 或更低,则中心应在其美国端口上启动 U2 转换,前提是软件使中心能够启动 U2 转换。

注意

如果没有设备连接到 DS 端口,则端口的状态为 Rx.Detect,低于 U2。 因此,如果没有附加设备,中心应将其美国端口发送到 U2。 此外,如果所有 DS 端口最初都处于 U1 或更低状态,并且它们转换为 U2 或更低版本,则中心应将美国端口从 U1 转换为 U2。 由于该转换不基于 U2 活动计时器,因此中心必须将其美国端口引入 U0,然后将其发送到 U2。

数据包延迟

USB 3.0 规范描述了一种称为数据包延迟 (请参阅 C.1.2.2) 部分。 该机制用于最大程度地减少 LPM 对总线利用率的影响。

如果主机向设备发送传输请求(其上游链路位于 U1 或 U2 中),则主机最终可能会等待链接返回到 U0,然后让设备响应,从而浪费总线带宽。 为了避免这种等待,父中心通过向主机发送延迟的数据包标头来代表设备做出响应。 主机以类似于 NRDY 的方式处理延迟的数据包标头,然后可以自由地启动与其他终结点的传输。 同时,中心在链接上启动 U0 转换,然后通知设备延迟的数据包。 然后,设备将 ERDY 发送到主机,以指示设备现在已准备好进行传输。 然后,主机可以重新计划到设备的传输。

设备的一个重要责任是发送 ERDY 后,设备负责将链接保留在 U0 中,直到主机向 ERDY 发送响应,或直到 tERDYTimeout (500 毫秒) 时间已过。 在此期间,设备不得启动 U1 或 U2 转换,还应拒绝其链接伙伴发起的任何转换。