USB 接口通过 D+ 和 D- 两根数据线传输信号。当设备插入时,主机通过 VBUS 供电线感知连接,并开始检测设备类型:
- 主机默认在 D+ 和 D- 线路上各接一个 15K 的下拉电阻
- 设备接入时:
- 高速设备:D+ 线通过 1.5K 电阻接 3.3V 电压
- 低速设备:D- 线通过 1.5K 电阻接 3.3V 电压
- 全速设备:既接 D+ 又接 D-
- 主机在 2.5 微秒内检测到 D+/D- 电压变化(从 0V 升到 3V 左右),就会判定有设备接入
- 高速设备需要特殊设计:
- 内部使用 17.78mA 的电流源驱动信号
- 数据线需保持 90Ω 阻抗匹配
- 低速/全速设备无需阻抗匹配,直接用电压信号即可正常通信
简单来说:主机通过检测数据线上的电阻分压变化识别设备,不同速度的设备用电阻连接方式区分,高速设备需要更精密的电气设计。
高速或者全速设备

低速设备

低速设备比较容易区别,但是全速和高速设备进行识别需要 USB 进行协商。
全速和高速设备进行识别过程:

场景 1:主机和设备都支持高速模式
复位阶段:主机检测到设备插入后,会先让数据线 D+ 和 D- 都保持低电平(称为 SE0 状态),至少持续 10 毫秒。设备识别到这个复位信号后,会通过 D- 线拉取约 17.78 毫安的电流,同时保持 D+ 线的上拉电阻(1.5 千欧)。此时主机端的电阻为 45 欧姆,因此主机能测到 D- 线电压约为 800 毫伏(17.78mA × 45Ω),并识别到设备发出的 K 信号(称为 Chirp K)。
确认阶段:设备发出 Chirp K 信号后,主机需要在 100 微秒内连续发送多组 KJ 信号(K 和 J 交替的脉冲,每个脉冲约 50 微秒)。设备至少需要收到 3 对 KJ 信号后,会在 100~500 微秒内关闭自己的上拉电阻,并改用 45 欧姆的下拉电阻。此时总线电阻变为 22.5 欧姆(主机和设备各 45 欧姆并联),KJ 信号的电压变为约 400 毫伏(17.78mA × 22.5Ω),最终进入高速模式。
场景 2:主机支持高速,但设备仅支持全速
- 主机同样通过 SE0 复位信号唤醒设备,但设备不会发送 Chirp K。主机检测到没有 Chirp K 后,直接结束复位,转为全速模式(设备原本就用全速模式响应)。
场景 3:主机仅支持全速,但设备是高速设备
- 主机发送 SE0 复位信号后,设备会尝试发送 Chirp K 信号。但主机因不支持高速模式,无法识别 Chirp K,也不会回发 KJ 信号。最终复位结束后,双方默认进入全速模式。
总结
- 高速匹配成功:双方通过 Chirp K 和 KJ 信号的交互,调整电阻和电压,最终进入高速模式。
- 不匹配情况:若主机或设备不支持高速,则直接降级为全速模式。
- 关键信号:
- SE0:复位信号(D+ 和 D- 同时低电平)。
- Chirp K:设备用特定电流和电阻向主机表明支持高速。
- KJ 信号:主机通过交替脉冲确认高速模式,并调整总线电阻完成切换。