文章目录
- 连接检测
- 连接状态的检测
- 带 Vbus 检测功能的 USB 设备
- 不带 Vbus 检测功能的 USB 设备
- 连接前的初始化
- 设备端
- 主机端
- 建立连接过程
- 手册规定检测时间及电平标准
连接检测
USB 协议支持热插拔的特性决定了 USB 主机必须能够动态地检测 USB 设备的连接和断开,这是 USB 设备和 USB 主机协同工作的前提。
连接状态的检测
对于 USB 设备或者 USB 主机,如果不能检测到对方的连接,USB 的功能也就无从谈起,所以 USB 设备检测是否连接到主机以及 USB 主机检测是否有 USB 设备是 USB 协议能够进行后续工作的前提。
USB 设备和 USB 主机的整个连接过程分为两个阶段:
- 连接前的初始化过程
- 建立连接的过程
带 Vbus 检测功能的 USB 设备
不带 Vbus 检测功能的 USB 设备
连接前的初始化
设备端
USB2.0 协议规范规定,任何时候 USB 设备都不能向 Vbus 供电,确保在 USB 设备连接到 USB 主机之前其 Vbus 小于 400mV。当 USB 设备连接到 USB 主机时,USB 设备就可以通过检测 Vbus 的变化来确定连接状态。对于不支持 Vbus 检测的 USB 设备,USB2.0 规范并没有定义其连接的检测机制。在实际开发过程中可以使用 USB 主机发出的第一个复位信号(RESET)来进行检测。在这种情况下,USB 设备端上拉电阻必须要预先挂载,同时需要保证:
- 当 Vbus 被移除或者低于有效值 Vbsvld(4.01V)时,全速设备(上拉电阻在 D+) D- 要保持 SE0 状态,低速设备(上拉电阻在 D-)D+ 要保持 SE0 状态。
- 当 Vbus 达到有效值 Vbsvld(4.01V)时,D+(全速) 或者 D-(低速) 上的电压要达到主机检测到设备连接的最小电压2.0V。
主机端
在正常工作时,无论 USB 设备是否连接,USB 主机都需要维持 Vbus 有效,并保证 USB 设备接入前 DP 和 DM 保持 SE0 状态(一般而言,主机端的 15K 下拉电阻能够保证这一点)。这样设备端就可以通过 Vbus 来检测到连接事件,进而双方开始建立连接。
建立连接过程
当 USB 设备和 USB 主机初始化并处于正确的初始状态后,USB 设备连接到 USB 主机上的过程如下:
- 由于主机端始终维持 Vbus 有效,使得 USB 设备端的 Vbus 从 0V 变化到 5V。
- 对于没有 Vbus 检测功能的 USB 设备,由于其上拉电阻已经预先挂载,当 Vbus 达到有效值 4.01V 后,D+ 或者 D- 线上能够测量到 2.0V 以上的电压。对于有 Vbus 检测功能的 USB 设备,当设备检测到 Vbus 变化后,设备端就能够确定当前已经连接到主机,就会挂载上拉电阻,使得 D+ 或者 D- 线上能够测量到 2.0V 以上的电压。设备就可以通过 Vbus 确定当前已经连接到主机。
- 由于设备端上拉电阻的作用使得 DP 或者 DM 线上电压从 0V 变化到 3V,USB 主机一旦检测到这样的变化就能确定有设备连接。
- USB 主机一旦检测到有设备连接,将会发出一个复位(RESET)信号(主机将DP 和 DM 都拉低,持续时间 >10ms)让设备进入初始状态,对于没有 Vbus 检测能力的 USB 设备就可以使用这个复位信号作为设备连接的检测机制。
- 复位结束之后,主机会将 DP 拉高,DM 保持低,之后开始 J/K 序列进行通信。
高速设备在连接到主机时,初始阶段将会工作在全速模式并和主机建立连接,所以其连接过程和全速设备完全相同。当建立连接后,USB 主机和设备通过高速握手协议切换到高速模式。
手册规定检测时间及电平标准
低速设备的插入检测
全速/高速设备的插入检测