USB 设备状态切换
前面介绍了USB 设备的状态如下:
设备插入后,先进入【attached】 状态,然后hub 端口配置进入【powered】 状态;主机发起复位信号,设备进入【Default】状态,然后分配设置地址,设备配置。
USB 设备识别
USB 内部连接
1):高速数据传输。产生高速K/J 信号。D+/D- 上电流为17.78ma。
(2):用于低速获取全速传输。产生SE0
(3):差分数据接收。用于接收高速数据。
(4):传输数据包检测。当接受差分信号低于数据阈值VHSSQ,数据无效
(5):低速差分数据接收。用于接收低速数据
(6):高速端口检测。当连接器电压大于625mv 必须指示设备断开。当电压小于525mv 设备连接
(7):单端接收。用于LS/FS
(8):下拉电阻(15k)。上游端口使用。一般 Host端
(9):上拉电阻(1.5k)。下游端口使用。Device
USB 硬件连接
低速设备
全速/高速设备
- 整个usb 系统对于上游端口(一般是hub 或者host),D+ D- 连接着RPD(15k)
- 对于下游端口,一般是usb device。根据速度模式不同匹配不同的终端电阻。LS 设备 D- 连接着RPU(1.5k)。FS/HS D+ 连接着RPU(1.5k)
- 从硬件分布可以看到。一个usb设备 可以同时支持LS/FS,HS/FS,但是不能同时支持LS 和 HS
- 对于HS 与 FS 的区分,依赖于高速握手信号(handshake)和 终端电阻RS(45)的挂载及切换。
设备断开与连接
设备断开:
设备连接:
对于高速设备,它先作为全速设备被识别出来,然后再被识别为高速设备。工作于高速模式时,D+的上拉电阻是断开的,所以对于工作于高速模式的USB设备,无法通过D+的引脚电平变化监测到它已经断开。
工作于高速模式的设备,D+、D-两边有RS 45欧姆的下拉电阻,用来消除反射信号:
当断开高速设备后,Hub发出信号,得到的反射信号无法衰减,Hub监测到这些信号后就知道高速设备已经断开。
速度枚举
- 首先进入FS 检测。USB device 进入IDLE 状态
- Device responds Chirp K 信号。
- Host 回应Chirp K 和 Chirp J 对至少保持3对
- 移除D+ 上RPU 并挂载高速设备终端电阻RS (45Ω),产生高速 J/K 信号
整个过程D+ D- 上电平变化。
- 全速ChirpJ:17.78ma * (15k || 45Ω) ≈ 800mv
- 高速J:17.78ma * (45Ω || 45 Ω) ≈ 400mv
高速握手信号Handshake
高速握手信号是用来进行速度协商,区分FS/HS。当检测到以下行为时将进入高速握手:
- 如果一个设备从suspend 状态恢复时,则在设备检测到SE0 支持不少于2.5us 立即进入高速握手。---- 挂起
- 如果设备正在从全速设备进行复位,则设备在检测到SE0 不少于2.5us 不超过3ms 内,立即进入高速握手 ---- 上电
- 如果设备从高速状态进行复位,那么设备在恢复到全速状态之前等待不少于3ms。设备对总线状态进行采样,并检查se0,不少于100us,立即进入高速握手。---- 复位
总结
整个USB 高速设备枚举流程大致如下:
- 设备上电,Attached 检测,在100ms 内Vbus > 4.01 V
- Hub poweron, 100ms 内D+/D- 电平稳定
- 主机发出复位信号SE0, 持续10ms(10ms 完成速度枚举)
- 移除上拉电阻,并挂载高速45Ω等效对地电阻,产生高速J/K 信号