第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场景里很常见,比如手机给手机供电。
注意:OTG设备在A设备角色下,必须至少能输出100mA。如果连这个都做不到,那B设备根本没法完成枚举。我在一个项目里吃过这个亏——B设备是功耗较高的USB摄像头,结果A设备只给了50mA,摄像头初始化到一半就掉电了。

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 电压状态机 VBUS 电压状态机核心逻辑 状态1: 0V VBUS=0V 状态2: 预充 VBUS~4.0V 状态3: 标准 VBUS=5.0V 状态4: 过流 VBUS<4.0V 条件判断点 电流超过500mA? 电压跌超5%? 限流 降额运行 注意:过流状态需要A设备在100ms内响应,否则触发硬件保护

这张图揭示了一个关键点:VBUS不是直接跳到5V的。它会先进入预充状态(约4.0V),然后等B设备识别后,才升到标准5V。说白了就是给B设备一个缓冲,避免热插拔时的冲击。

4.5 避坑指南:硬件与协议协同

核心经验:VBUS的设计不能用分别的眼光去看。我见过太多硬件工程师把电源设计搞定了,但协议层不认识;又或者协议写好了,板子却带不动100mA负载。你得联合起来看。

举个例子。抓包时发现VBUS纹波过大,比如峰峰值超过200mV。这时就算电压均值在4.75V以上,B设备的USB PHY也可能误判信号。我曾经在一个物联网项目里,就因为VBUS纹波导致摄像头每5分钟丢一帧图像。查了三天,最后一量电容——输出电容用了个劣质品,ESR超标。

调试小技巧:抓包时用双通道示波器,一路看VBUS电压,一路看D+信号。如果D+信号抖动刚好和VBUS纹波同步,那基本就是电源问题了。

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负载,根本进不了低功耗模式。最后发现是一个上拉电阻没关断。

好了,这节的内容差不多就这些。电压和电流的规范看着简单,但实际落地时坑不少。你只要记住:电压看底线,电流看协商,纹波看电容。抓包时盯着这三样,基本上能覆盖九成的问题。