USB2.0设备断开状态的检测
相对于USB设备的连接检测,USB设备断开的检测也很重要,也更加的隐晦。USB设备断开的检测不仅包含USB主机检测到其与设备的断开,也包含USB设备检测到其与主机的连接断开。
- 对于USB主机来说,如果不能正确的识别设备的断开,从而无法回收已经断开的设备使用的资源,将会导致资源的浪费,这种资源的浪费不仅表现在系统上如USB设备的地址,系统内存等,也表现在USB总线带宽上。
- 对于USB设备端来说,如果USB设备无法检测到其与主机端已经断开,同样也会引发一些如再次与主机端连接设备不能正确工作的问题。
由于USB主机如USB控制器,USB根集线器和USB设备的驱动程序在主机端运行,并且USB主机端是经过千锤百炼的,所以对于USB设备断开引起的异常,大部分的问题都是由USB设备端引起的,并且大部分发生在自供电的USB设备。
一、主机侧:低速 / 全速设备断开(LS/FS)
1. 硬件基础
- 主机/Hub端口:D+、D− 各有 15kΩ 下拉电阻 → 无设备时为 SE0(D+=0, D−=0)
- 设备端:
- 低速(LS):D− 接 1.5kΩ 上拉
- 全速(FS):D+ 接 1.5kΩ 上拉
2. 断开检测原理
- 连接时:设备上拉把对应线拉高 → 主机看到 J 态空闲
- 断开时:
- 设备移除 → 1.5k 上拉消失
- 主机 15k 下拉生效 → D+、D− 都变低(SE0)
- 主机检测:SE0 持续 ≥ TDDIS(2~2.5μs) → 判定断开
一句话:
低速/全速断开 = D+、D− 回到 SE0 并保持 ≥2.5μs
二、主机侧:高速设备断开(HS)
高速不能靠1.5k上拉(已断开),靠阻抗匹配与信号反射。
1. 硬件基础
- 高速模式:设备端 D+、D− 各 45Ω 下拉(差分端接)
- 主机/Hub端:同样 45Ω 下拉
- 正常差分幅度:≈400mV
2. 断开检测原理
- 设备断开:设备端 45Ω 消失 → 总线末端开路、失配
- 主机发数据包(如微SOF) → 信号到末端强反射
- 反射叠加 → 差分幅度≈800mV(明显超正常)
- 主机判定:
- 检测到 ≥625mV 差分幅度 → 判定高速设备断开
- 通常在 EOP / 微帧结束 检查
一句话:
高速断开 = 数据包反射导致差分幅度 ≥625mV
三、设备端:自己检测“已从主机断开”
设备要知道自己被拔了,常用两种方法:
1. 检测 VBUS 电压(最常用)
- USB 规范:VBUS 有效 ≥4.5V,断开阈值 <4.0V(常见 4.01V)
- 设备端:
- 分压 + 比较器 / ADC 测 VBUS
- VBUS < 4.0V 持续一段时间 → 判定断开
- 适用:总线供电、自供电设备
2. 检测 D+/D− 上拉失效(配合VBUS)
- 设备内部:软控制 1.5k 上拉(由固件开关)
- 断开后:
- VBUS掉电 → 设备失电 / 上拉释放
- 或设备主动释放上拉 → 主机检测到SE0
- 设备侧:检测到自身上拉被释放、且无总线活动 → 判定断开
3. 无VBUS检测时(少见)
- 靠总线空闲超时:
- 3ms 无 SOF、无活动 → 先进入挂起
- 更长时间无唤醒 → 判定物理断开,释放上拉
四、总结对照(你要的干货表)
| 模式 | 断开检测依据 | 关键电平/条件 | 判定时间 |
|---|---|---|---|
| 低速 LS | SE0持续 | D+=0,D−=0 ≥2.5μs | 微秒级 |
| 全速 FS | SE0持续 | D+=0,D−=0 ≥2.5μs | 微秒级 |
| 高速 HS | 信号反射幅度 | 差分 ≥625mV | 帧/微帧周期 |
| 设备端 | VBUS电压 | VBUS < 4.0V | 毫秒级 |
USB设备端断开的检测
USB设备一般分为自供电和VBUS供电。
对于由VBUS供电的设备,当设备与主机断开后,设备将无电源供电,这种情况下设备端的固件程序无法运行,故对于此种设备,USB设备端断开的检测无任何意义。
USB规范对USB总线VBus上的电压的有规定,所以对于支持VBUS检测的USB设备,可以通过检测VBUS上的电压低于VBSVLD即4.01V时即可认为USB设备与主机已经断开。
对于不支持VBus上检测的USB设备,是通过D+/D-上的电压变化来检测的。
无论是否支持VBUS检测的USB设备,当检测到设备已经与主机断开后,都需要D+或D-上的上拉电阻,来确保下次连接检测的初始化状态是正确的。
在实际的硬件电路中,VBUS设备端会有一个旁路电容,过快的快速插拔导致设备端的VBUS电压因旁路电容的存在导致无法降低到4.01V以下,导致设备端的断开检测设备异常。
USB主机端的设备断开的检测
USB2.0规定,当主机端的D+或D-的电压小于0.8V时,并且持续TDDIS(最小值为2us)的时间长度时,USB主机端就可以认定设备已经断开。对于USB低速或全设备,可以通过此种方式进行设备断开的检测。
当设备与主机端后,由于主机端的D+或D-端的下拉电阻的存在,会使电压降为0V.
见规范7.1.1
对于工作在高速模式下的USB设备,其D+/D-上的电平和低全速的设备不一样,所以检测方式不一样。USB2.0协议规定,对于连接到高速设备的高速主机,D+和D-上的差分信号电平大于625mV时,就可认定USB设备已经断开。当D+和D-的差分电平差不大于625mV时,高速主机的断开检测模块不能认为USB设备已经断开。USB主机会检测到每个高速帧开始的包结速信号,当包结束电压大于检测电压,表示设备断开。在实际应用中,高速设备的断开电压可能在525mV到625mV之间,并且不同的主机的断开检测电路电压不同。
由于主机是通过检测帧开始的包结束来判断设备是否断开,而帧开始的间隔是125us,所以当设备断开后,最多在125us内主机就可以检测到设备已经断开。
自供电USB设备断开检测异常
自供电USB设备断开检测异常,重新连接后,设备工作异常,主机对其进行复位后,再次工作正常。
USB2.0物理层的电信号






