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

USB2.0设备断开状态的检测

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

相对于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. 断开检测原理

  1. 连接时:设备上拉把对应线拉高 → 主机看到 J 态空闲
  2. 断开时
    • 设备移除 → 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. 断开检测原理

  1. 设备断开设备端 45Ω 消失 → 总线末端开路、失配
  2. 主机发数据包(如微SOF → 信号到末端强反射
  3. 反射叠加 → 差分幅度≈800mV(明显超正常)
  4. 主机判定
    • 检测到 ≥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设备断开检测异常,重新连接后,设备工作异常,主机对其进行复位后,再次工作正常。
自供电USB设备断开检测异常

本文链接为:http://www.usbzh.com/article/detail-641.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状态以复位设备......
DisplayPort的热插拔检测
热插拔检测(HPD)机制向托管视频GPU的DFP_U提供显示(UFP_U)状态信息。 通过以下方式实现此机制:通过IRQ_HPD中断信号(从低到高切换),指示将显示器(UFP_U)连接到视频源(DFP_U)。在DisplayPort状态更新消息(DisplayPort Status Update)中......
Windows环境下USB设备的插入检测机制
USB主机是如何检测到设备的插入的呢?首先,在USB集线器的每个下游端口的D+和D-上,分别接了一个15K欧姆的下拉电阻到地。这样,在集线器的端口悬空时,就被这两个下拉电阻拉到了低电平。而在USB设备端,在D+或者D-上接了1.5K欧姆上拉电阻。对于全速和高速设备,上拉电阻是接在D+上;而低速设备则......
USB2.0设备连接状态的检测
USB设备支持即插即用,所以对于USB主机端,一个重要的特性就是USB设备的动态连接检测。USB主机端支持设备的连接状态的检测,是需要USB设备的配合的。USB主机端与USB设备端相互配合,实现了USB设备的连接状态检测。USB2.0设备接口电路图我们知道,2.0设备USB引脚接线定义分为四根线,......
USB2.0设备断开状态的检测
相对于USB设备的连接检测,USB设备断开检测也很重要,也更加的隐晦。USB设备断开检测不仅包含USB主机检测到其与设备的断开,也包含USB设备检测到其与主机的连接断开。对于USB主机来说,如果不能正确的识别设备的断开,从而无法回收已经断开的设备使用的资源,将会导致资源的浪费,这种资源的浪费......
USB-C/TYPE-C的角色识别及供电功率检测
TYPE-C的接口双方角色的识别其实是通过TYPE-C接口中的两根CC线进行检测设置的。如下图所示:这里的线缆器件是指有eMark芯片的线缆会用到 Vconn 供电,当一个 CC 确认方向后 Source 端的另一个 CC 会切换成 Vconn为Emark 供电,带有 Emark 芯片的线缆能......
TYPE-C的热插拔检测及正反连接检测机制
TYPE-C接口设备的连接是通过检测CC1和CC2上的电平状态实现的。如下图所示,TYPE-C的接口中1是供电方,接口2是耗电方。当TYPE-C设备的供电方和耗电方通过TYPE-C线缆相连时,对于供电方,接口1通过检测CC1或CC2有下拉电阻,就认为有设备插入。同样的接口2通过检测CC1或CC2有......
usb设备速度检测
检测USB设备速度的流程描述:1.对于低速设备,在DM引脚上拉1.5K。2.对于全速设备,在DP引脚上拉1.5K。3.对于高速设备速度检测,则需要握手协议:a、USB主机检测到全速设备,即:DP引脚上拉1.5K。b、USB主机复位总线,即向总线发送SE0,此SE0持续时间不得小于2.5us。......
使用WinUSB检测USB设备是什么设备速率?高速、低速、全速
WinUSB提供了检测USB设备的速率代码,详见:// Device Information types#define DEVICE_SPEED 0x01// Device Speeds#define LowSpeed 0x01#def......
HID设备空闲态的状态检测
在HIDCLASS.SYSS中使用一个一个周期为1秒间隔的定时器来周期性地检查设备空闲检测。#define HID_IDLE_SCAN_INTERVAL 1scanTime = RtlConvertLongToLargeInteger(-10*1000*1000 * HID_IDLE_SCAN_......
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集线器的工作模式
中继模式定义中继器模式就是集线器在纯粹地转发和增强信号,不做速度转换的工作模式。中继模式下功能USB工作在中断器模式下,需要检测并防止任何连接故障(尤其是可能导致死锁的故障)。集线器仅需在处于中继器模式时处理连接故障。集线器还必须能够检测并恢复发送给集线器控制器的丢失或损坏的数据包。1. 什么......
USB集线器错误检测的原理与时机
一、核心概念错误检测是指集线器正确识别出USB总线上的异常状况(如设备“喋喋不休”、包丢失、时序违规等),并采取相应措施(如禁用端口、触发恢复机制)的能力。与“误检测”不同,错误检测依赖正确的同步时钟作为判断基准。二、主要错误类型及检测原理错误类型检测原理检测主体典型时机喋......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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