USB2.0物理层的电信号
+ -

USB2.0高速主机端检测设备断开

2026-10-21 本文链接为:http://www.usbzh.com/article/detail-1812.html ,欢迎转载,转载请附上本文链接。

USB2.0 高速的断开检测,是在 SOF 的 EOF 检测.
SOF 包的 EOP 是40bit SE0:前 32bit SE0 + 后 8bit SE0,断开采样只发生在最后这 8bit。

  • 普通数据包(ACK/DATA 等)EOP 只有 8bit,高速断开检测只在 SOF 的 EOP 执行;
  • 原因:HS 设备拔掉后,设备端 45Ω 终端电阻消失,总线开路,Host 发 SOF 的长 SE0 时,远端反射回来,差分包络幅度抬升;Hub/Host 只在 SOF EOP 末尾这 8bit 去采一次包络检波值,判断是否断开。

规范规定的采样窗口 vs PHY 硬件实现的包络检波器持续监测(TI SPRZ426 勘误核心)

  1. 规范理想行为:包络检测器电路一直跑,但只在 SOF EOP 最后 8bit 采样一次结果,其余时间就算有尖峰,不做判定。
  2. 很多 PHY 的 bug 默认行为:全程用包络检波结果直接上报断开,不限制采样窗口,SOF 整个包(SYNC/PID/CRC + 40bit EOP)任何位置反射尖峰超过阈值,立刻触发假断开。

基础定义:SE0

SE0:Single-Ended 0

DP=低,DM=低(两者都拉到GND)

  • SE1:DP=高,DM=高(两者都拉到VCC,USB2.0 HS里几乎不会出现)
  • Differential 1 (J):DP=高,DM=低
  • Differential 0 (K):DP=低,DM=高

SE0 就是 DP、DM 都为逻辑0(低电平)。
但这里最容易混淆的关键点:逻辑电平 ≠ 差分电压 Vdiff = Vdp − Vdm


1. SE0 状态下,理想差分电压是多少?

理想:DP和DM同时到0V,
差分电压为0。

那为什么SOF EOP(40bit SE0)会测出很大的差分峰值?
不是驱动在输出差分信号,是阻抗不连续产生的反射!

高速USB的物理层模型(HS)

HS 收发器是电流模驱动,不是电压推挽。

  • 发送J/K:从DP/DM灌/拉电流,在45Ω终端电阻上产生差分摆幅(典型400mV差分)
  • 发送SE0:驱动把DP、DM都关断,不再注入差分电流,DP/DM都被终端电阻拉到地电位。

发送端输出SE0:驱动不再维持差分信号,总线进入无源SE0状态。
但线缆、连接器、PCB分支是传输线,有波阻抗 Z0≈90Ω差分。

2. SOF EOP长SE0时反射怎么来的

SOF的EOP是连续40bit SE0:
前面SOF包体是J/K差分码流;当包结束,TX停止差分驱动,进入SE0。
在传输线上:

  1. 之前J/K信号的能量还在线缆上,还在来回反射;
  2. 远端(设备侧)有45Ω上拉终端(HS设备接入时);一旦设备拔掉,远端45Ω终端消失,变成开路;
  3. 当远端开路,SE0阶段,传输线上残留的波形会在两端来回反射;
  4. 反射波到达Hub发送端(Hub下行端口),DP和DM的反射幅度不一样 → 产生瞬时差分电压 Vdp-Vdm ≠ 0。

重点:SE0是发送端的逻辑状态,不代表传输线上任意时刻DP、DM电压一定完全相等。
传输线反射会让DP、DM各自出现不同的电压扰动,于是产生瞬时差分尖峰。
包络检波器检测的就是这个Vdiff的峰值。

3. 断开检测的原理(USB2.0 §7.1.7.3)

HS断开检测的物理原理:

  • 设备在位时:远端有45Ω差分终端,反射很小;SOF EOP SE0期间,反射回来的差分包络幅度 < 阈值(625mV)
  • 设备拔掉后:远端45Ω终端消失,变成开路;SOF长SE0的反射叠加,差分包络幅度变大;
  • Hub只在SOF EOP最后8bit采样包络检波输出,判断是否超过阈值,判定断开。

这里很多人踩坑:
“SE0是DP DM都0,差分应该是0,怎么会有几百mV差分?”
答:SE0是发送端驱动状态,不是传输线上的实时电压。反射会让DP、DM电位不对称,产生差分分量。

4. 补充:为什么SOF要用40bit长SE0而不是普通8bit EOP

普通数据包(DATA/ACK)EOP只有8bit SE0,太短,反射来不及累积,无法可靠检测拔设备。
只有SOF的EOP是40bit SE0,给传输线反射足够时间建立起足够大的差分包络,这就是为什么HS断开检测只能依托SOF的EOF。

一句话总结

SE0 定义就是 DP、DM 逻辑都为低;
但传输线反射会造成DP、DM电压不对称,产生瞬时差分电压。
SOF EOP的40bit SE0,就是给反射足够时间累积差分包络,供Hub在最后8bit窗口采样,以此判断设备是否被拔出。

本文链接为:http://www.usbzh.com/article/detail-1812.html ,欢迎转载,转载请附上本文链接。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936     USB技术交流3:1031974172

0 篇笔记 写笔记

USB 枚举/断开过程
USB设备枚举一般会经过插入、供电、初始化、分配地址,配置,获取设备描述符、获取配置描述符、获取字符串描述符和配置设备这么几个过程。各过程的状态如下表:USB设备的枚举过程USB主机检测到USB设备插入后,就要对设备进行枚举了。枚举的作用就是从设备是那个读取一些信息,知道设备是什么样的设备,然后......
USB设备低速,高速硬件检测机制及断开过程
没有设备连接到主机时:D+和D-数据线上的下拉电阻起作用,使得两者都在低电平;主机端看来就是个SE0状态,同样地,当数据线上的SE0状态持续一断时间后,就被主机认为是断开状态。设备连接到主机时:当主机检到某一个数据线电平拉高并保持了一段时间,就认为有设备连上来了。 主机必需在驱动SE0状态以复位设备......
USB2.0 SOF令牌包
SOF令牌包是最广泛的令牌包,由主机发送。在实机的抓包工具过程,由于和NAK包大量存在,都会在软件配置中不显示。但这并不代表这个SOF令牌包不重要。SOF令牌不需要像其它令牌一样,具有握手包。因此发送给设备的SOF包并不能保证一定会收到。SOF数据流管理由USB主机发送一个SOF令牌包。SOF数据......
USB2.0高速主机端检测设备断开
USB2.0 高速的断开检测,是在 SOF 的 EOF 检测.SOF 包的 EOP 是40bit SE0:前 32bit SE0 + 后 8bit SE0,断开采样只发生在最后这 8bit。普通数据包(ACK/DATA 等)EOP 只有 8bit,高速断开检测只在 SOF 的 EOP 执行;原因......
USB2.0 包位域成员字段-PID、SOP、包地址、包端点、帧号、CRC5、CRC16
包标识PIDUSB协议定义的包格式PID由8位组成,低4位是类型字段,高4位为低四位的补码。特殊用途包包括了一些用于特定场合的信牌包和握手包。PID含义说明0001令牌OUT主机发送数据到USB设备1001令牌IN主机接收从USB设备发出的数据0101......
USB2.0设备断开状态的检测
相对于USB设备的连接检测,USB设备断开的检测也很重要,也更加的隐晦。USB设备断开的检测不仅包含USB主机检测到其与设备的断开,也包含USB设备检测到其与主机的连接断开。对于USB主机来说,如果不能正确的识别设备的断开,从而无法回收已经断开的设备使用的资源,将会导致资源的浪费,这种资源的浪费......
USB事务跨帧SOF的问题
USB中文网技术交流群有同学发了一个USB抓包截图,并提出了一个问题:控制传输的一个事务内的包不在一帧内传输会有问题吗, 比如我发一个setup包,下面会有一个IN package和一个OUT package,结果IN和OUT package不和SETUP package在一个帧内发送或者接收到,这......
LINUX usb-skeleton断开函数skel_disconnect
skel_disconnect函数很有特点,之所以这么说是我们达到了共鸣。在之前skel_probe函数中,其使用如下代码:struct usb_skel *dev;/* allocate memory for our device state and initialize it */dev ......
USB 连接 · 复位 · 断开 完整时序速查表
硬件约定主机端口:D+、D− 各 15kΩ 下拉低速设备:D− 1.5k 上拉全速设备:D+ 1.5k 上拉SE0 = D+=0,D−=0LS/FS 空闲 = J 状态HS 空闲 = SE01. 设备插入连接(Attach)低速 LS 连接设备插入,D− 被 1.5k 上拉主机检测到:持续 ......
USB 2.0 高速断开检测机制详解
一、为什么高速断开检测是个难题1.1 全速/低速时代的简单做法在全速和低速模式下,设备端有上拉电阻(全速上拉 D+,低速上拉 D-)。主机通过检测 D+/D- 上的直流电平就能判断设备是否存在:有设备:上拉电阻存在,某条线被拉高。无设备:上拉消失,线路为低电平。拔掉设备,电平立刻变化,检测非常......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • USB资源
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!