本主题首先介绍软件为启用 U1 和 U2 转换而完成的初始设置,然后描述这些转换在硬件中的发生方式。
由软件进行初始设置
本主题介绍软件如何枚举设备。
若要进行 U1 或 U2 转换,软件会在设备枚举过程中执行以下步骤。
软件在枚举过程中与设备交换 U1 或 U2 退出延迟信息。 作为此交换的第一部分,设备会将设备特定的延迟填写到 SuperSpeed USB 设备功能中的 bU1DevExitLat 和 wU2DevExitLat 字段(定义在 USB 3.0 规范的第 9.6.2.2 节)。 作为交换的第二部分,主机根据 USB 3.0 规范的第 9.4.12 节通过发送SET_SEL控制传输来向设备通知整体退出延迟时间。 延迟信息包括与上游链接和控制器关联的延迟。
对于设备附加到的 DS 端口,软件配置两个值:PORT_U1_TIMEOUT和PORT_U2_TIMEOUT。 在决定这些值时,软件会考虑设备的特征(例如终结点类型),以及将设备从 U1 或 U2 带回 U0 时所关联的延迟。 下表说明了超时值。
表 1. PORT_U1_TIMEOUT和PORT_U2_TIMEOUT值
价值 DESCRIPTION 01H-FEH DS 端口必须在处于非活动状态的时间段后启动转换。 具体的时间段根据超时值确定。 除非存在挂起的流量,否则端口必须接受链接伙伴启动的转换。 FFH DS 端口不得主动发起转换,但必须接受由链接伙伴发起的转换,除非存在待处理的流量。 0 DS 端口不得启动转换,并且不得接受链接合作伙伴发起的转换。 如果PORT_U2_TIMEOUT值介于 01H-FEH 之间,则由于步骤 2,硬件中又发生了一个步骤。 DS 端口告知其链路伙伴该值。 此步骤的重要性在“从 U1 直接转换到 U2”中介绍。
对于每个设备或集线器,软件通过发送 SET_FEATURE(U1_ENABLE/U2_ENABLE)控制传输来配置两个值:U1_ENABLE 和 U2_ENABLE。 下表描述了这些值。
表 2. U1_ENABLE和U2_ENABLE值
价值 DESCRIPTION 已启用 如果设备策略允许,美国端口可以启动转换并接受链接合作伙伴发起的转换。 禁用 美国端口不得启动转换,但可以接受链接合作伙伴发起的转换。
硬件转换
本主题介绍硬件转换到 U1 和 U2。
软件初始设置后,硬件会自主转换为 U1 和 u2,而无需软件进一步干预。
只要链接正在主动传输数据包,链接就会处于工作状态(U0)。 当未传输数据包时,该链接被视为空闲。 处于空闲状态,任何链接伙伴都可以启动到 U1 或 U2 的转换。 其他链接合作伙伴可以选择接受或拒绝转换。 如果链接伙伴接受转换,则链接将移动到该 U 状态。 如果拒绝转换,链接将保留在 U0 中。
DS 端口发起的过渡
DS 端口实现跟踪端口上不活动状态的计时器机制。 每当该端口发送或接收数据包时,计时器都会重置。 当软件设定新的超时值时,计时器也会重置。 如果软件已将 DS 端口编程为仅启动 U1 或 U2 转换,则当链接首次进入 U0 时,DS 端口将启动计时器。 计时器值基于软件编程的 U1(或 U2)超时值。 如果计时器过期时链接位于 U0 中,DS 端口将启动 U1(或 U2)转换。
如果设备知道转换可能会影响设备满足性能或延迟要求的能力,则美国端口链接合作伙伴可以选择拒绝转换。 例如,如果设备发送了 ERDY 通知,并且正在等待来自主机的传输请求,则在此期间设备可能会拒绝 U1 或 U2 状态转换。
如果软件已将 DS 端口编程为启动 U1 和 U2 转换,DS 端口首先基于计时器启动 U1 转换(本节前面所述)。 在本主题中,从 U1 到 U2 的直接转变进行了描述。
如果链接位于 U1 或 U2 中,DS 端口可以在接收附加到端口的设备流量时将端口带回 U0。
设备(美国端口)发起的转换
只要软件启用该功能,设备可以选择启动从 U0 到 U1 或 U0 到 U2 的转换。 如果设备转换到 U1 的链接,则此链接可以直接根据 DS 端口的 U2 计时器(如“从 U1 直接转换到 U2”中所述)转换为 U2。 但是,如果未设置 U2 计时器,设备无法自行启动从 U1 到 U2 的直接转换。 在这种情况下,设备必须先将链接带回 U0,然后才能启动到 U2 的转换。
在决定何时启动这些转换时,设备应考虑其退出延迟和性能要求。 为了帮助设备做出有关如何主动启动转换的明智决策,软件还提供了本文档前面在“按软件进行初始设置”中所述的各种退出延迟值。
如果链接位于 U1 或 U2 中,则美国端口可以随时将端口重新引入 U0。 通常,当 USB 端口知道它即将发送任何数据包到主机时,或者预计会收到来自主机的数据包,USB 端口将进入 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 转换,还应拒绝其链接合作伙伴发起的任何转换。