第4节:VBUS 电压与电流规范详解
聊完引脚与ID检测,咱们得直面一个更实在的问题:电从哪来?给多少?
做过硬件调试的都知道,VBUS这根线上要是出了岔子,轻则设备不识别,重则烧接口甚至烧主板。我个人习惯是,拿到一块新板子,第一件事就是量VBUS电压。别笑,真有人在5V线上直接怼了12V进去……
4.1 VBUS的三种角色
在OTG场景里,VBUS不是单纯的供电线。它有三种角色,听我慢慢说。
| 角色 | 电压范围 | 典型场景 |
|---|---|---|
| 主机(Host)输出 | 4.75V – 5.25V | 手机当Host给U盘供电 |
| 设备(Device)输入 | 4.4V – 5.25V | 键盘/鼠标从主机取电 |
| OTG双角色切换 | 4.4V – 5.25V(可调) | 平板A给手机B充电,同时交换数据 |
你看,Host端电压可以稍微低一点,比如4.75V。但Device端容忍度更宽松,4.4V都能工作。为什么?因为线缆有压降。
4.2 电流阈值——容易被忽视的坑
电压只是表面,电流才是真正的硬约束。USB规范里定义了三级电流能力,但很多人只记住了“500mA”。
- 100mA:枚举前的默认电流。设备没被配置前,最多只能抽100mA。我见过不少设计,一上来就拉500mA,结果直接被Hub关断。
- 500mA:USB 2.0全速/高速的标配。枚举后通过配置描述符申请。
- 1.5A / 3.0A:USB BC 1.2或USB PD协商后的结果。OTG场景里很常见,比如手机给手机供电。
4.3 抓包案例:VBUS电压跌落
好,咱们看一个真实抓包数据。下面是一份USB OTG连接期间的VBUS波形日志:
时间戳 VBUS电压(V) 电流(mA) 事件
0.000 0.00 0 连接建立
0.012 4.82 0 A设备使能VBUS
0.035 4.80 45 B设备开始枚举
0.120 4.75 98 获取描述符
0.250 4.68 245 配置设备(申请500mA)
0.380 4.42 482 B设备进入全速模式
1.200 4.38 503 稳定运行
5.600 4.10 510 突发读操作开始
5.650 3.98 520 电压跌落至临界点
5.700 3.85 530 B设备复位(电压过低)
5.800 4.80 0 A设备重启VBUS
看到了吗?在5.6秒处,B设备发起大块读操作,VBUS电压从4.38V直接跌到3.85V。这已经低于USB规范规定的4.4V最低输入电压了。结果就是B设备自动复位,连接断开。
为什么会这样?说白了就是A设备电源路径不扎实。可能是USB开关的导通电阻太大,也可能是PCB走线太细。我建议你们做硬件设计时,VBUS走线至少按1A载流能力来画,别卡着500mA算。
4.4 核心逻辑:VBUS电压状态机
让咱们用一张图把VBUS的生命周期理清楚。这东西在OTG控制器里就是个状态机。
这张图揭示了一个关键点:VBUS不是直接跳到5V的。它会先进入预充状态(约4.0V),然后等B设备识别后,才升到标准5V。说白了就是给B设备一个缓冲,避免热插拔时的冲击。
4.5 避坑指南:硬件与协议协同
举个例子。抓包时发现VBUS纹波过大,比如峰峰值超过200mV。这时就算电压均值在4.75V以上,B设备的USB PHY也可能误判信号。我曾经在一个物联网项目里,就因为VBUS纹波导致摄像头每5分钟丢一帧图像。查了三天,最后一量电容——输出电容用了个劣质品,ESR超标。
4.6 电压电流关系速查表
| 连接阶段 | VBUS目标电压 | 可用电流 | 超时/异常处理 |
|---|---|---|---|
| 连接建立 | 0V → 4.0V | 100mA | 100ms内未稳定则断开 |
| 枚举进行中 | 4.75V – 5.25V | 100mA (最大) | 电压低于4.4V持续10ms则复位 |
| 配置完成(低速/全速) | 4.75V – 5.25V | 500mA | 电流超过600mA触发过流保护 |
| OTG供电交换 | 4.4V – 5.25V | 根据BC 1.2协商 | 供电角色切换时电压不能低于4.0V |
| 挂起/睡眠 | 4.75V – 5.25V | 2.5mA | 超过2.5mA会唤醒失败 |
嗯,说到挂起电流,我得多扯一句。很多低功耗设计只关注正常工作电流,忘了挂起状态。有一次产品做功耗认证,挂起时VBUS上还带着10mA负载,根本进不了低功耗模式。最后发现是一个上拉电阻没关断。
好了,这节的内容差不多就这些。电压和电流的规范看着简单,但实际落地时坑不少。你只要记住:电压看底线,电流看协商,纹波看电容。抓包时盯着这三样,基本上能覆盖九成的问题。