USB OTG 是什么?VBUS 又有什么用?

做嵌入式这些年,我调试过的 USB 问题少说也有几十种。其中 OTG 相关的 VBUS 检测异常,是最容易踩坑的之一。很多朋友一上来就怀疑 D+/D- 信号质量,其实十有八九是 VBUS 电平没到位。说白了,VBUS 就是 USB 端口的生命线——它负责供电,也是设备识别角色(Host/Device)的关键信号。

USB OTG 的由来:从主从死板到角色灵活

早期 USB 只有两套固定角色:Host(如电脑)和 Device(如 U 盘)。你要是想把手机直接插 U 盘,不行——除非手机支持 OTG。

USB OTG(On-The-Go)协议在 2001 年由 USB-IF 发布,核心目的就一个:让设备能根据现场插拔动态切换角色。你接一个 U 盘它就是 Host,你把它插到电脑上它就变成 Device。嗯,这就是 OTG 的双角色能力。

操作小贴士: 判断设备是否支持 OTG 最简单的方法——看它的 USB 接口 ID 引脚(通常 ID 引脚接地为 Host,悬空为 Device)。市面上绝大多数 Android 手机都支持,但需要一根 OTG 转接线。

VBUS 在 OTG 中的作用:三个层次

VBUS 在 USB 2.0 规范中定义电压为 4.75V ~ 5.25V,最大电流 500mA。但在 OTG 场景下,它多了一层角色识别的功能。我把它拆成三个层次:

  1. 供电层:为远端设备提供 5V 工作电源。我的经验里,很多 OTG 异常就是线缆压降太大,到设备端 VBUS 降到 4.3V 以下,设备直接掉电不工作。
  2. 连接检测层:设备通过 VBUS 电平变化感知插入/拔出。比如 USB 协议要求 A 设备(初始 Host)在 VBUS 上升到 4.4V 以上时才认为连接有效。
  3. 角色协商层:OTG 新增了一套 SRP(会话请求协议)和 HNP(主机协商协议)。设备通过 VBUS 脉冲或拉低来发起会话、切换角色。VBUS 上的时序和幅值必须严格满足协议,否则协商失败。
VBUS 层次 功能描述 典型异常现象
供电层 提供 5V / 500mA 电源 设备不充电、反复枚举
连接检测层 上升沿/下降沿触发中断 无法识别插入、拔出误判
角色协商层 SRP/HNP 脉冲时序验证 OTG 反转失败、死锁

核心结论: 超过 60% 的 OTG 异常,根因出在 VBUS 的电压幅值或时序上而非数据线。排查时永远先量 VBUS。

OTG 的设备类型与状态机

OTG 设备分三种:A-Device(初始供电方,一般为 Host),B-Device(初始受电方,一般为 Device),和 Dual-Role Device(双角色设备)。我最早调试时弄混过:以为 A 固定是 Host,实际上 A/B 只是物理角色,逻辑角色可以在 HNP 握手后互换。

状态机大概是这样:A-Device 上电后先维持 VBUS 为 5V,若检测到 B-Device 拉低 D+(B 表示希望当 Host),A 可以释放 VBUS 控制权,B 接管供电。反过来的过程由 SRP 发起。我建议你画个状态机图贴在实验台旁边,排查时一眼就能定位卡在哪个状态。

实战避坑: 我曾经在一个量产项目中遇到过 B-Device 在 SRP 期间拉低 VBUS 时间过长(超过协议规定的 100ms),导致 A-Device 认为连接超时,直接关闭 VBUS。后来加了一个硬件滤波电容才解决问题。VBUS 的上升/下降斜率、脉冲宽度一定要用示波器抓,不能只看 DC 电平。

第一章节知识体系框架

下面这张图帮你理清本章的知识脉络。你可以保存下来,之后每个章节排查遇到 VBUS 问题时回头对照。

USB OTG 与 VBUS 知识体系 USB OTG 双角色协议 1. 供电层:5V / 500mA VBUS 2. 连接检测层:插入/拔出 3. 角色协商层:SRP / HNP A-Device / B-Device 物理角色 Dual-Role Device 双角色设备 VBUS 电压/时序/脉冲 常见异常:供电不足 / 压降 常见异常:枚举失败 / 角色卡死 常见异常:HNP 超时 / 死锁 排查口诀:先测 VBUS,再量 D+/-,最后抓时序

为什么 VBUS 检测总是出问题?

我遇到过最典型的案例:某款平板用的 Type-C 接口,OTG 模式下插 U 盘,有时认有时不认。换不同 U 盘又正常,怎么复现都不稳定。示波器一抓发现 VBUS 在插入瞬间有一个 50mV 的负冲,持续时间约 200μs,恰好触发了 B 设备的欠压保护。后来在 VBUS 路径上加了一个 10μF 的电容,问题消失。

你想想看,这种负冲在 DC 表上根本看不到,只有动态示波器才能捕获。所以我在《指南》后面章节会专门讲怎么用示波器抓 VBUS 的上升沿、SRP 脉冲、负极瞬变,这些才是异常排查的显微镜。

最后有个小原则想分享:OTG 调试时,别急着怀疑软件。硬件上 VBUS 是不是好好的?电压是不是在范围内?上升斜率是不是够陡?先排除供电和物理层,再去看驱动和固件。这个次序能帮你省一半时间。