Rx.Detect 子状态机
一、基本概念
1.1 什么是 Rx.Detect?
Rx.Detect 是 LTSSM(链路训练与状态机) 的上电初始状态,用于检测对端设备是否存在。无论是下行端口(Downstream Port,简称 DS,即主机端或 Hub 的下行口)还是上行端口(Upstream Port,简称 UP,即设备端或 Hub 的上行口),在以下情况下都会进入 Rx.Detect 状态:
- 端口上电启动时;
- 下行端口主动发出 Warm Reset 信号后;
- 上行端口检测到 Warm Reset 信号时(除非当前处于
eSS.Disabled状态)。
1.2 Rx.Detect 的核心目的
Rx.Detect 的唯一任务是:检测远端接收端是否存在低阻抗终端(即对端设备的物理连接是否到位)。这个低阻抗终端在规范中被称为 RRX-DC,可以简单理解为“对端存在的标志”。
1.3 端口角色说明
| 缩写 | 全称 | 通俗理解 |
|---|---|---|
| DS | Downstream Port(下行端口) | 主机端或 Hub 向下的口,扮演“管理者”角色 |
| UP | Upstream Port(上行端口) | 设备端或 Hub 向上的口,扮演“从属方”角色 |
在整个 Rx.Detect 过程中,DS 和 UP 的行为规则有所不同,主要体现在超时时间和是否可被软件控制上。
二、Rx.Detect 的三个子状态
Rx.Detect 内部包含 3 个子状态,依次为:
- Rx.Detect.Reset —— 复位同步
- Rx.Detect.Active —— 执行检测
- Rx.Detect.Quiet —— 省电休眠
2.1 Rx.Detect.Reset(复位同步)
这是 Warm Reset 后的默认复位状态,用于让 DS 和 UP 同步操作:
- 下行端口(DS):在此状态下发送 Warm Reset 信号,持续一段固定时间后退出。
- 上行端口(UP):在此状态下等待 DS 发来的 Warm Reset 信号结束,然后退出。
- 如果进入 Rx.Detect 不是因为 Warm Reset(例如直接上电),则该子状态会立即退出,跳到 Active 开始检测。
2.2 Rx.Detect.Active(执行检测)
这是真正执行远端终端检测的子状态:
- 发送端会执行一次对端终端阻抗检测,判断是否存在
RRX-DC(即对端是否连接)。 - 上行端口(UP) 需要计数检测次数(最多 8 次),用于后续判断是否需要进入禁用状态。
2.3 Rx.Detect.Quiet(省电休眠)
这是省电子状态,检测功能被暂时关闭:
- 端口在此状态下停止检测以节省功耗。
- 同时启动一个休眠定时器:
- 下行端口(DS):定时器超时时间为 12ms ~ 120ms(可配置)。
- 上行端口(UP):定时器超时时间为 12ms(固定)。
- 定时器超时后,端口会自动唤醒,回到
Active状态重新执行检测。
三、子状态之间的转换规则
3.1 Reset → Active(进入检测)
满足以下任一条件即可从 Reset 进入 Active:
| 场景 | 说明 |
|---|---|
| ① 非 Warm Reset 进入 | 如直接上电,不涉及复位,立即跳过 Reset |
| ② DS 发送完 Warm Reset | 下行端口发送完持续固定时间的复位信号 |
| ③ UP 检测到复位结束 | 上行端口发现来自 DS 的 Warm Reset 信号已消失 |
3.2 Reset → eSS.Disabled(禁用)
仅限下行端口(DS)在收到软件/上层指令(Directed)时,可直接从 Reset 跳转到 eSS.Disabled(禁用状态,回退 USB 2.0)。
上行端口 没有 这个能力,因为设备端无权主动切断链路。
3.3 Active → Polling(检测成功)
当在 Active 状态成功检测到对端终端电阻(RRX-DC) 时,端口进入下一个 LTSSM 状态 —— Polling(链路训练状态)。
这是整个 Rx.Detect 流程的唯一成功出口,标志着一个有效的链路伙伴已被确认存在。
3.4 Active → Quiet(未检测到)
当在 Active 状态未检测到对端终端电阻时:
| 端口类型 | 行为 |
|---|---|
| DS | 直接进入 Quiet,等待定时器超时后重测 |
| UP(Hub 上行口) | 同样直接进入 Quiet,等待定时器超时后重测 |
| UP(外设,如 U 盘) | 如果检测次数 < 8 次,进入 Quiet 等待重测;如果已达 8 次,则直接进入 eSS.Disabled(回退 USB 2.0) |
3.5 Active → eSS.Disabled(异常退出)
满足以下任一条件可从 Active 进入 eSS.Disabled:
| 条件 | 适用端口 |
|---|---|
| 软件/上层指令(Directed)要求禁用 | 仅 DS |
| 外设已连续检测 8 次仍未发现对端 | 仅 UP(外设) |
3.6 Quiet → Active(周期性唤醒)
当 Quiet 状态下的休眠定时器超时时:
| 端口类型 | 超时时间 | 行为 |
|---|---|---|
| DS | 12ms ~ 120ms | 唤醒并回到 Active,重新执行检测 |
| UP | 12ms(固定) | 唤醒并回到 Active,重新执行检测 |
这就构成了“检测 → 休眠 → 唤醒 → 再检测”的周期性循环,直到检测成功或超时退出。
3.7 Quiet → eSS.Disabled(异常退出)
仅限下行端口(DS)在收到软件/上层指令(Directed)时,可从 Quiet 直接跳转到 eSS.Disabled。
四、完整状态转换图

五、关键规则速查表
| 当前状态 | 触发条件 | 下一状态 | 适用端口 |
|---|---|---|---|
| Reset | 非 Warm Reset 进入(如直接上电) | Active | DS / UP |
| Reset | DS 发完 Warm Reset 信号 | Active | 仅 DS |
| Reset | UP 检测到 Warm Reset 结束 | Active | 仅 UP |
| Reset | 软件指令要求禁用 | eSS.Disabled | 仅 DS |
| Active | 检测到对端终端电阻 | Polling(成功) | DS / UP |
| Active | 未检测到对端终端电阻 | Quiet | DS / UP(Hub) |
| Active | 未检测到且外设计数 < 8 次 | Quiet | 仅 UP(外设) |
| Active | 未检测到且外设计数 = 8 次 | eSS.Disabled | 仅 UP(外设) |
| Active | 软件指令要求禁用 | eSS.Disabled | 仅 DS |
| Quiet | 休眠定时器超时(DS:12~120ms) | Active | 仅 DS |
| Quiet | 休眠定时器超时(UP:12ms) | Active | 仅 UP |
| Quiet | 软件指令要求禁用 | eSS.Disabled | 仅 DS |
六、重要行为差异总结
6.1 下行端口(DS)vs 上行端口(UP)
| 行为项 | DS(下行端口) | UP(上行端口) |
|---|---|---|
| 是否可被软件指令强制禁用 | 可以 | 不可以 |
| 休眠定时器超时时间 | 12ms ~ 120ms(可配置) | 12ms(固定) |
| 是否需计数检测次数 | 不需要 | 需要(最多 8 次) |
| 主动发出 Warm Reset | 可以 | 不可以 |
| 被动接收 Warm Reset | 不接收 | 接收并响应 |
6.2 外设(Peripheral Device)的特殊规则
普通 UP(如 Hub 上行口)和外设 UP(如 U 盘)在未检测到对端时的行为不同:
- 普通 UP(Hub):未检测到 → 直接进入 Quiet 等待重测(无限循环,直到检测成功或被 DS 复位)
- 外设 UP(U 盘等):未检测到时计数 +1,如果计数 < 8 则进入 Quiet;如果计数 = 8 则直接进入
eSS.Disabled
为什么外设要限次? 这是为了兼容传统平台:如果外设在 80ms 内(8 次 × 10ms)检测不到对端,就主动回退到 USB 2.0 模式,避免用户感知到过长的枚举等待时间。
6.3 唯一成功出口
在所有路径中,唯一能让 Rx.Detect 成功进入下一状态(Polling)的条件是:
在 Active 状态成功检测到对端的低阻抗终端(RRX-DC)。
其他所有路径最终都通向 eSS.Disabled(禁用/回退 USB 2.0)。
总结
Rx.Detect 是一个“检测-休眠-重测”的周期性状态机,只有检测到对端连接才能进入后续的链路训练,否则最终会因超时或次数限制而禁用 Enhanced SuperSpeed 链路。
本文链接为:http://www.usbzh.com/article/detail-1765.html ,欢迎转载,转载请附上本文链接。
USB3.2超高速协议规范





