浅谈USB2.0设备连接状态的检测
对于USB2.0设备或者是主机来说,如果不能检测到对方的连接,USB的功能也就无从谈起,所以USB设备检测是否连接到主机,以及USB主机检测是否有USB设备连接,是USB2.0协议能够进行后续工作的前提。USB设备和主机的整个连接过程可以分为两个阶段,即连接前的初始化过程和建立连接的过程。
一、连接前的初始化
对于USB2.0设备和主机,检测连接的必要条件就是某些状态发生了变化。所以连接前的初始状态就非常重要,如果初始状态不对,其状态在USB插入的过程中不会发生改变,就会导致无法检测到对方的连接。
1.设备端
USB2.0协议规范规定,任何时候USB设备都不能向VBUS供电,确保在USB设备连接到USB主机之前其VBUS小于400mV。当USB设备连接到USB主机时,USB设备就可以通过检测VBUS的变化来确定连接状态。对于不支持VBUS检测的USB设备,USB2.0规范并没有定义其连接的检测机制。在实际开发过程中可以使用USB主机发出的第一个复位信号来进行检测。在这种情况下,USB设备端上拉电阻必须要预先挂载。
2.主机端
在正常工作过程中,无论USB2.0设备是否连接,USB主机都需要维持VBUS有效,并保证USB设备接入前D+和D-保持SE0状态。这样设备就可以通过 VBUS来检测到连接事件,进而双方开始建立连接。
二、建立连接过程
当USB2.0设备和主机初始化并处于正确的初始状态后,USB设备连接到USB主机上的过程如下:①由于主机端始终维持VBUS有效,使得USB设备端的VBUS从0V变化到5V。②对于没有VBUS检测能力的USB2.0设备,由于其上拉电阻已经预先挂载,当VBUS达到有效值4.01V后,D+或者D-线上能够测量到2.0V以上的电压。对于有VBUS检测能力的USB设备,当设备检测到VBUS变化后,设备端就能够确定当前已经连接到主机,就会挂载上拉电阻,使得D+或者D-线上能够测量到2.0V以上的电压。设备就可以通过VBUS确定当前已经连接到主机。③由于设备端上拉电阻的作用使得 D+或者 D-线上电压从0V变化到3V,USB主机一旦检测到这样的变化就能确定有设备连接。④USB主机一旦检测到有设备连接,将会发出一个复位信号让设备进入初始状态,对于没有VBUS检测能力的USB2.0设备就可以使用这个复位信号作为设备连接的检测机制。