USB3.2 摘录(10)

简介: USB3.2 摘录(10)

10 集线器、主机下游端口和设备上游端口规范

10.9 端口状态机(Port State Machines)

   在以下端口状态机的描述中,引用了标头数据包的第一个或最后一个符号。标头数据包的第一个符号是第一个 DPHP 或 SHP(第 7.2.1.1.1 节)。SuperSpeedPlus DPH 标头数据包的最后一个符号是复制长度的最后一个字节(如果存在)或 LCW 的最后一个字节(如果复制的长度字段不存在)。SuperSpeedPlus 非 DPH 标头数据包和所有 SuperSpeed 标头数据包的最后一个符号是 LCW 的最后一个字节。

10.9.1 端口传输状态机(Port Transmit State Machine)

    本节介绍面向上游和下游的端口 Transmit (Tx) 状态机的功能要求。上行和下行端口应遵守链路层的所有要求(参见第 7 章)。

10.9.2 端口传输状态描述(Port Transmit State Descriptions)

10.9.2.1 Tx 空闲(Tx IDLE)

   在 Tx IDLE 状态下,端口发射器正在主动发送空闲符号。在以下任一情况下,端口发送器应转换为 Tx IDLE 状态:


当处在 Tx Data、Tx Data Abort 或 Tx Header 状态下,数据包传输完成后

当处在 Tx Link 命令状态下,在链路命令传输完后,并且没有其他链路命令等待传输时。

作为链接进入 U0 时的默认状态。

10.9.2.2 Tx 标头(Tx Header)

    在 Tx Header 状态下,端口发射器正在主动传输标头数据包。

    在以下任何情况下,端口发射器应转换为 Tx Header 状态:

  • 当处在 Tx IDLE 状态 , 当有一个或多个标头数据包排队等待传输,并且没有链路命令排队等待传输时。
10.9.2.3 Tx 数据(Tx Data)

    在 Tx Data 状态下,端口发射器正在主动传输 DPP。传输 DPP 后,端口发射器可以从集线器存储中删除 DPP。在任何情况下,集线器都不得转播 DPP

    当存在与传输的 DPH 关联的 DPP 时,端口发送器应从 Tx Header 状态转换为 Tx Data 状态。DPP 传输应在传输 DPH 的最后一个符号后立即开始。

10.9.2.4 Tx 数据中止(Tx Data Abort)

    在 Tx Data abort 状态下,端口发射器通过执行特定于速度的中止处理来中止 DPP 的正常传输(请参阅第 7.2.1.2.2 节)。然后,端口发射器从集线器存储中删除 DPP


  如果集线器同时将 DPP 接收到集线器中,并将相同的 DPP 从集线器中传输出去:

  • 当接收 DPP 的下游端口检测到特定于速度的中止指示时,上行端口发射器应从 Tx Data 状态转换为 Tx Data Abort 状态。
  • 当接收 DPP 的上游端口检测到特定于速度的中止指示时,下游端口发射器应从 Tx Data 状态转换为 Tx Data Abort 状态。
10.9.2.5 Tx Link 命令(Tx Link Command)

    在 Tx Link Command 状态下,端口发射器正在主动传输 link 命令。

    在以下任何情况下,端口发射器应转换为 Tx Link 命令状态:

  • Tx IDLE 状态下,当有一个或多个链路命令排队等待传输时。
  • Tx Link Command 状态下,当有其他链路命令排队等待传输时。

10.9.3 端口接收状态机(Port Receive State Machine)

  本节介绍面向上游和下游的端口接收器 (Rx) 状态机的功能要求。

10.9.4 端口接收状态描述(Port Receive State Descriptions)

10.9.4.1 Rx 默认值(Rx Default)

    在 Rx Default 状态下,端口接收器正在主动接收符号并查找有效数据包或 link command 的特定速度开头。

    在以下任何情况下,端口接收器应转换为 Rx Default 状态:

  • Rx Data 状态下,当检测到特定于速度的数据包结束或中止指示时。
  • Rx Header 状态下,当收到标头数据包的最后一个符号时。
  • 收到 link command 后。
  • 作为链接进入 U0 时的默认状态。
10.9.4.2 Rx 数据(Rx Data)

    在 Rx Data 状态下,端口接收器正在主动处理符号,并查找数据包结束或中止条件发生的特定于速度的指示。

    当端口收到特定于速度的数据包开始时指示时,端口应转换为 Rx Data 状态。

  当端口在第 7.2.4.1.6 节中定义的 DPP 结束之前检测到错误时,它会执行特定于速度的中止处理(请参阅第 7.2.1.2.2 节)。


   如果集线器同时将 DPP 接收到集线器中,同时将相同的 DPP 从集线器中传输出去,则应向相应的端口发射器提供中止条件的指示,以便它可以执行特定于速度的中止处理。


   如果 DPP 未主动从集线器传出,


对于上游端口接收器,集线器应为相应的下游端口缓冲特定于速度的中止 DP。

对于下游端口接收器,集线器应在上游端口上缓冲特定于速度的中止 DP。

10.9.4.3 Rx 标头(Rx Header)

    在 Rx Header 状态下,端口接收器正在主动处理收到的符号,直到收到最后一个标头数据包符号。


    当端口检测到标头数据包的特定速度开头时,端口应转换为 Rx Header 状态。

    端口应在收到标头数据包的最后一个符号后四个符号时间内验证 CRC-16、链路控制字 CRC-5、检查路由字符串(仅当这是上游端口时)和标头数据包类型。

    实现者可能必须在收到标头时开始 CRC 计算,并在验证标头数据包之前检查路由字符串以满足此要求。

10.9.4.4 进程标头数据包(Process Header Packet)

    当收到标头数据包(header packet)的最后一个符号时,端口应执行标头数据包所需的所有处理。任何此类处理都不应阻止端口立即返回到 Rx Default 状态。

    如链路章节所述,当在 Rx header 数据包状态中接收到标头数据包的最后一个符号,并且确定标头数据包 CRC-16 或链路控制字 CRC-5 无效时,链路层不会将标头数据包传递给集线器。

    表 10-3 总结了当集线器在其上行端口上收到以有效下行端口为目标的数据包时,集线器的操作。

    接下来 4 节中描述的步骤取决于:

  • 该集线器是作为 SuperSpeed 集线器还是 SuperSpeedPlus 集线器运行,以及
  • 端口处理是针对面向上游的端口还是面向下游的端口完成的。
10.9.4.4.1 SuperSpeed Hub 面向上游的端口(SuperSpeed Hub Upstream Facing Port)

标头数据包不是 ITP 也不是 PING,而是路由到 U1U2 中的下游端口:

  1. 集线器在相应的下游端口链路上启动 U0 条目。U0 条目应在集线器收到标头数据包的第一个符号后不迟于 tDownLinkStateChange 启动。

2.如果标头数据包尚未标记为延迟:

  • 标头数据包被标记为延迟,并且链路控制字 CRC-5 将针对延迟标头数据包重新计算。如果延迟标头数据包是 DPH,则相应的 DPP 将被静默丢弃。
  • 修改标头数据包的副本以包含集线器的集线器深度,标记为延迟,并重新计算链路控制字 CRC-5 排队等待在上游端口上传输。请注意,此延迟标头数据包中的路由字符串将被保留,而不是设置为零。

3.延迟标头数据包(请参阅第 7.2.4.1.4 节)将排队等待在适当的下游端口上传输。

如果标头数据包是 PING 并路由到位于 U0 或 U1 或 U2 或 Recovery 中的下游端口:


1,如果相应的下游端口链接位于 U1 或 U2 中,则集线器会在相应的下游端口链接上启动 U0 条目。U0 条目应在集线器收到标头数据包的第一个符号后不迟于 tDownLinkStateChange 启动。

2. 标头数据包将排队,以便在相应的下游端口上传输。

如果标头数据包不是 ITP 也不是 PING,并且路由到位于 U0 或 Recovery 中的下游端口:


1.如果下游端口 Tx header 数据包缓冲区队列不为空(队列中至少有一个标头数据包尚未完全传输)或下游端口上没有可用于传输的链路信用,则标头数据包将标记为延迟,并且将重新计算修改后的标头数据包的链路控制字 CRC-5。

标头数据包将排队,以便在相应的下游端口上传输。

2.注意:如果相应下游端口的队列已满,则一旦相应下游端口有可用空间,标头数据包就会排队。如果后续标头数据包被定向到不同的下游端口,则集线器应在下游端口缓冲区已满时处理这些数据包。

如果标头数据包是 ITP,则对于每个下游端口:

  1. 对于链接不在 U0 中且不在 Recovery 中的任何下游端口,ITP 将被静默丢弃。
  2. ITP中的 DeltaCorrection 字段应更新,以考虑通过 Hub 传播 ITP 的测量延迟。
  • 如果集线器引入的延迟超过 tPropagationDelayJitterLimit,则标头数据包应标记为延迟 (DL),并为修改后的标头数据包重新计算正确的链路控制字 CRC-5
  • 如果 Delta 子字段溢出,则不应将 ITP 排队,否则,标头数据包将排队等待在已完成端口配置且处于 U0 或恢复状态的每个下游端口上传输。

注意:如果相应下游端口的队列已满,则只要相应下游端口队列中有可用空间,标头数据包就会排队。如果下游端口队列已满,如果后续标头数据包被定向到不同的下游端口,则集线器应在下游端口队列已满时处理这些数据包。

如果标头数据包路由到已禁用或不存在的下游端口,或者路由到不在 U0 中、不在 U1 中、不在 U2 中、不在恢复中的下游端口:

  1. 标头数据包(header packet)将从 RX header 数据包队列中删除。
  2. 标头数据包被静默丢弃。
  3. 如果标头数据包是 DPH,则相应的 DPP 将被静默丢弃。
  • 如果标头数据包路由到集线器控制器:
  1. 标头数据包由集线器控制器处理。
  2. 标头数据包将从 RX 标头数据包队列中删除。
  3. 如果需要,对标头数据包的响应将排队等待在上游端口上传输。
10.9.4.4.2 SuperSpeedPlus 集线器上行端口

    SuperSpeedPlus Hub Upstream Facing Port

  • 标头数据包不是 ITP 也不是 PING,而是路由到 U1U2 中的下游端口:
  1. 集线器在相应的下游端口链路上启动 U0 条目。U0 条目应在集线器收到标头数据包的第一个符号后不迟于 tDownLinkStateChange 启动。
  2. 如果标头数据包尚未标记为延迟:
  • 标头数据包被标记为延迟,并且链路控制字 CRC-5 将针对延迟标头数据包重新计算。如果延迟标头数据包是 DPH,则相应的 DPP 将被静默丢弃。
  • 修改标头数据包的副本以包含集线器的集线器深度,标记为延迟,并重新计算链路控制字 CRC-5 排队等待在上游端口上传输。请注意,此延迟标头数据包中的路由字符串将被保留,而不是设置为零。
  1. 延迟报头数据包(请参阅第 7.2.4.1.4 节)被缓冲等待仲裁(请参阅第 10.8.6.4 节),以便在相应的下游端口上传输。

如果标头数据包是 PING 并路由到位于 U0 或 U1 或 U2 或 Recovery 中的下游端口:


1.如果相应的下游端口链接位于 U1 或 U2 中,则集线器会在相应的下游端口链接上启动 U0 条目。U0 条目应在集线器收到标头数据包的第一个符号后不迟于 tDownLinkStateChange 启动。

2.报头数据包被缓冲,等待仲裁,以便在相应的下游端口上传输。

如果标头数据包不是 ITP 也不是 PING,并且路由到位于 U0Recovery 中的下游端口:

  1. 如果下游端口当前正在传输数据包,或者至少有一个数据包缓冲,将在此数据包之前选择,或者下游端口上没有链路信用可用于传输,

则报头数据包将标记为延迟,并且会为修改后的报头数据包重新计算链路控制字 CRC-5。

  1. 报头数据包被缓冲,等待仲裁,以便在相应的下游端口上传输。
  • 如果标头数据包是 ITP,则对于每个下游端口:


  1. 对于链接不在 U0 中且不在 Recovery 中的任何下游端口,ITP 将被静默丢弃。
  2. ITP 中的 DeltaCorrection 字段应更新,以考虑通过 Hub 传播 ITP 的测量延迟。
  • 如果集线器引入的延迟超tPropagationDelayJitterLimit,则标头数据包应标记为延迟 (DL),并为修改后的标头数据包重新计算正确的链路控制字 CRC-5
  • 如果 Delta 子字段溢出,则不应将 ITP 排队,否则,标头数据包将排队等待在已完成端口配置且处于 U0 或恢复状态的每个下游端口上传输。

注意:如果相应下游端口的队列已满,则只要相应下游端口队列中有可用空间,标头数据包就会排队。如果下游端口队列已满,如果后续标头数据包被定向到不同的下游端口,则集线器应在下游端口队列已满时处理这些数据包。

如果标头数据包路由到已禁用或不存在的下游端口,或者路由到不在 U0 中、不在 U1 中、不在 U2 中、不在恢复中的下游端口:

  1. 报头数据包将从 Upstream Receive 缓冲区中删除。。
  2. 标头数据包被静默丢弃。
  3. 如果标头数据包是 DPH,则相应的 DPP 将被静默丢弃。

如果数据包路由到的下游端口在 SuperSpeed 模式下运行,并且标头数据包是有效的 IN/ACK,请保存 IN/ACK 的传输类型 (DFP.SAVE_TT)。DFP.SAVE_TT 将保留,直到收到路由到同一下游端口的下一个 IN/ACK。参见 Section 10.9.4.4.4。

  • 如果标头数据包路由到集线器控制器:
  1. 标头数据包由集线器控制器处理。
  2. 报头数据包将从 Upstream Receive 缓冲区中删除。
  3. 如果需要,将缓冲对报头数据包的响应,等待仲裁以在上游端口上传输。

10.9.4.4.3 面向 SuperSpeed Hub 下游的端口

    SuperSpeed Hub Downstream Facing Port

  • 报头数据包在上游端口排队等待传输。

如果上游端口的队列已满,则只要上游端口队列中有可用空间,报头数据包就会排队。当上行端口队列已满时, Hub 会处理后续的报头。如果标头数据包已在多个下游端口上收到,或者在上游端口标头数据包队列中有可用空间时排队等待由 Hub 控制器发送,则 Hub 应优先考虑非数据包标头,而不是数据包标头数据包(如果一个数据包标头正在下游队列的前面等待或从 Hub 控制器等待)。否则,不会指定 Hub 使用的仲裁算法。

   

注意:这些仲裁要求仅适用于多个下游端口和集线器控制器。对于单个源(下游端口或集线器控制器),数据包必须按接收或生成的顺序传输。

10.9.4.4.4 面向 SuperSpeedPlus Hub 下游的端口

    SuperSpeedPlus Hub Downstream Facing Port

  • 如果收到有效的 DP,则:

1.如果端口在 SuperSpeed 模式下运行,则将 DP.SAVE_TT 的传输类型设置为 DFP 的值,请参阅第 10.9.4.4.2 节。

2.如果传输类型为异步且 AW 字段值为零,请将 DPH.AW 字段设置为 DFP.AW,以修改接收的 DPH 的 AW 字段,请参阅第 10.8.6 节。

  • 报头数据包被缓冲,等待仲裁以在上游端口上传输(参见第 10.8.6 节)。
10.9.4.5 Rx Link 命令(Rx Link Command)

    在 Rx Link Command 状态下,端口接收器正在主动处理接收到的符号,并查找 link command 结束的特定于速度的指示。

  当端口收到 link command 开头的有效速度特定指示时,端口应转换为 Rx Link Command 状态。

10.9.4.6 处理链路命令(Process Link Command)

    收到 link command 后,端口应执行 link command 所需的所有额外处理。任何此类处理都不应阻止端口立即返回到 Rx Default 状态。

10.10 暂停和恢复(Suspend and Resume)

   集线器必须支持作为 USB 设备以及传播、暂停和恢复信号的挂起和恢复。全局暂停/恢复是指暂停或恢复整个总线,而不会影响任何集线器面向下游的端口状态;选择性暂停/恢复是指在不影响集线器状态的情况下暂停或恢复集线器的面向下游的端口。增强型 SuperSpeed 集线器仅支持选择性挂起和恢复。它们不支持全局 suspend 和 resume。选择性暂停/恢复是通过对 Hub 的请求来实现的。设备发起的恢复称为远程唤醒。


   集线器在其面向上游的端口上遵循与 Enhanced SuperSpeed 设备相同的挂起要求。


   当 Hub 下游端口链接处于 U3 状态时,如果 Hub 在该下游端口上收到来自其链接伙伴的唤醒信号,则以下要求适用于该 Hub :


如果 Hub 上游端口的链接不在 U3 中,则 Hub 应在 tHubDriveRemoteWakeDownstream 中收到唤醒信号的下游链接上驱动远程唤醒信号。

如果 Hub 上游端口的链接位于 U3 中,则 Hub 应在 tHubPropRemoteWakeUpstream 的上游端口上驱动唤醒信号。

如果 Hub 上游端口正在进入 U3,则 Hub 应等待 U3 条目完成,然后再在 tHubPropRemoteWakeUpstream 中的其上游端口上驱动唤醒信号。

   tHubPropRemoteWakeUpstream (Time from start of remote wakeup signaling on the downstream port a hub to when the hub must propagate the remote wakeup signaling on its upstream port if the upstream port link is in U3.) 如果上游端口链路位于 U3 中,则从集线器上开始在下游端口上发出远程唤醒信号到集线器必须在其上游端口上传播远程唤醒信号的时间。


   当 Hub 上游端口的链接进入 U3 状态,并且其下游链接之一处于 U0/U1/U2/Recovery 状态并收到远程唤醒时, Hub 应在 tHubPropRemoteWakeUpstream 中的上游端口上自动驱动远程唤醒。


   当集线器上游端口的链路处于 U3 状态,并且它从集线器上游端口链路上的链路伙伴接收到唤醒信号时,集线器应自动驱动远程唤醒握手或恢复到 U3 中且在进入 U3 后收到远程唤醒信号的任何下游端口。


   如果集线器上行端口的链路位于 U3 中,则集线器应由于连接(当下游端口进入 DSPORTT.Enabled 时)、断开连接或过流事件(如果集线器启用了远程唤醒)而在其上游端口上驱动唤醒信号。


   当集线器收到 U3 中具有链接的下游端口的 SetPortFeature(PORT_LINK_STATE) U0 时,集线器应在 tHubDriveResume 中的链接上驱动恢复信号。

10.11 集线器上行端口重置行为

    Hub Upstream Port Reset Behavior

   重置到集线器的信令仅在下游方向定义,即集线器的上游端口。集线器所需的 reset 信号机制在第 6 章中介绍。


   暂停的集线器应将重置的开始解释为唤醒事件;它应处于 Awake 状态,并在 reset signaling 结束时完成其 reset sequence。


   热重置完成后,整个 Hub 将返回到默认状态。


   热重置完成后,集线器将返回到默认状态,但会保留上游端口的端口配置信息。


   无论 hub 是如何重置的,hub 都需要按照 Section 10.3.1.6 中的描述传播 reset,而不仅仅是将这些下游端口转换为默认状态。

10.12 集线器端口电源控制(Hub Port Power Control)

   自供电集线器可能具有电源开关,用于控制向下游面向 USB 标准 A 端口的供电,但这不是必需的。带有电源开关的集线器可以将电源作为一个组/一伙切换到所有 USB 标准 A 端口,单独切换到每个 USB 标准 A 端口,或者具有任意数量的一个或多个 USB 标准 A 端口的组。集线器应具有用于所有 USB Type-C 端口的单独电源开关。


   集线器通过 wHubCharacteristics 中 Logical Power Switching Mode (逻辑电源切换模式) 字段的设置来指示它是否支持电源切换。如果集线器支持每端口电源切换,则端口的电源将按照第 10.3.1.1 节中的指定打开或关闭。如果集线器支持联合电源交换,则当 Gang 中的任何端口需要打开电源时,Gang(一伙) 中所有端口的电源都会打开。除非 gang 中的所有端口都处于允许断开电源的状态,否则不会关闭 gang 的电源,如 表 10-2 所示。如果在执行请求时C_HUB_LOCAL_POWER,端口(USB 标准 A 端口或处于附加状态的 USB Type-C 端口)不会由 SetPortFeature(PORT_POWER) 打开。支持电源应用程序的集线器可能会在其他时间保持电源打开。有关支持 Power Applications 的集线器允许的行为的更多详细信息,请参阅 Section 10.3.1.1 。


   虽然自供电集线器不需要实现电源切换(所有下游 USB Type-C 端口除外),但该集线器应支持所有端口的 Powered-off 状态。


   对于没有电源开关的集线器,bPwrOn2PwrGood 应设置为零。

10.12.1 多个组合(仅支持下游 USB 标准 A 端口)

    Multiple Gangs (Only supported for downstream USB Standard-A ports)

   集线器可以实现任意数量的电源和/或过流组合。实施多个过流和/或电源切换组合的集线器应同时设置逻辑电源切换模式和过流报告模式,以指示电源切换和过流报告基于每个端口(这些字段位于 wHubCharacteristics 中)。


   当过流保护器件上发生过流情况时,受该器件保护的所有端口上都会发出过流信号。当发出过流信号时,组中的所有端口都处于 DSPORT.Powered-off 或 DSPORT.Powered-off-reset 状态,并且所有端口上的 C_PORT_OVER_CURRENT 字段都设置为 1。当从组中的任何端口读取端口状态时,只要存在过流情况,PORT_OVER_CURRENT 字段就会设置为 1。C_PORT_OVER_CURRENT 字段应在每个端口中单独清除。


   当多个端口共享一个电源开关时,在组中的任何端口上设置 PORT_POWER 将导致组中所有端口的电源打开。但是,它不会导致该组中的其他端口离开 DSPORT.Powered-off 或 DSPORT.Powered-off-reset 状态。当组中的所有端口都处于 DSPORT.Powered-off 状态或未配置集线器时,端口的电源将关闭。


   如果集线器同时实现电源切换和过流,则过流组不必与电源切换组相同。


   如果发生过流情况并且存在电源开关,则应关闭与过流保护电路相关的所有电源开关。如果多个过流保护装置与一个电源开关相关联,则当任何过流保护电路指示过流情况时,该开关将关闭。


目录
相关文章
|
4月前
|
Linux API SoC
设备树知识小全(十一):OF是什么?
设备树知识小全(十一):OF是什么?
76 0
|
21天前
|
存储 缓存 算法
USB3.2 摘录(一)(下)
USB3.2 摘录(一)
40 12
|
21天前
USB3.2 摘录(八)
USB3.2 摘录(八)
29 2
|
21天前
|
安全 索引
USB3.2 摘录(11)
USB3.2 摘录(11)
30 1
|
21天前
|
存储 运维
USB3.2 摘录(七)
USB3.2 摘录(七)
25 1
|
21天前
|
存储 算法
USB3.2 摘录(九)
USB3.2 摘录(九)
27 1
|
21天前
USB3.2 摘录(六)
USB3.2 摘录(六)
22 1
|
21天前
|
机器学习/深度学习 流计算
USB3.2 摘录(五)(上)
USB3.2 摘录(五)
41 1
|
21天前
USB3.2 摘录(五)(下)
USB3.2 摘录(五)
27 1
|
21天前
|
缓存
USB3.2 摘录(一)(上)
USB3.2 摘录(一)
29 0
USB3.2 摘录(一)(上)