USB2.0设备断开状态的检测
相对于USB设备的连接检测,USB设备断开的检测也很重要,也更加的隐晦。USB设备断开的检测不仅包含USB主机检测到其与设备的断开,也包含USB设备检测到其与主机的连接断开。
- 对于USB主机来说,如果不能正确的识别设备的断开,从而无法回收已经断开的设备使用的资源,将会导致资源的浪费,这种资源的浪费不仅表现在系统上如USB设备的地址,系统内存等,也表现在USB总线带宽上。
- 对于USB设备端来说,如果USB设备无法检测到其与主机端已经断开,同样也会引发一些如再次与主机端连接设备不能正确工作的问题。
由于USB主机如USB控制器,USB根集线器和USB设备的驱动程序在主机端运行,并且USB主机端是经过千锤百炼的,所以对于USB设备断开引起的异常,大部分的问题都是由USB设备端引起的,并且大部分发生在自供电的USB设备。
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设备断开检测异常,重新连接后,设备工作异常,主机对其进行复位后,再次工作正常。