第1节:USB OTG 概述与电源管理背景

说实话,做了这么多年嵌入式,每次调试 USB 功耗问题都够头疼的。记得 2018 年接一个行车记录仪项目,死活在 OTG 模式下丢数据,查了两周发现是电源切换时序差了 0.1ms。从那时起我就养成个习惯:不管多急的单,先把电源管理流程画清楚。

这一节我们先把底子打好。USB OTG 不是什么新技术,但很多人对它的电源管理一知半解。我把几个关键概念拆开讲,你看完就能明白抓包时那些电平跳变到底在干啥。

1.1 什么是 USB OTG?

USB OTG(On-The-Go)允许设备在主机(Host)和从机(Device)之间动态切换。说白了,你的手机可以插 U 盘当主机,也可以连电脑当从机。这要靠一根五线制的 Mini/Micro USB 或者 Type-C 线来实现。

我常跟团队强调:OTG 不是 USB 2.0 的升级版,它是在标准 USB 上加了角色协商和电源管理两套协议。核心就三个:

  • HNP (Host Negotiation Protocol): 谁当主机?通过数据线 D+ 和 D- 的切换信号决定。
  • SRP (Session Request Protocol): 设备可以主动唤醒主机,请求供电。
  • 电源方向切换: VBUS 电压从 5V 降到 0V 再升起来,谁提供电源可以换。

看到这里你可能觉得“哦,就是协议嘛”,但实际抓包你会发现,电源管理才是坑最多的环节。

关键认知: OTG 的电源管理不仅管供电,还管“什么时候供电、供多久、谁供”。抓包时那些瞬间的电压跌落、电流尖峰,大部分都跟这三件事有关。

1.2 为什么需要专门的电源管理?

标准 USB 2.0 里只有主机供电、从机用电,简单粗暴。但 OTG 场景下,你的设备可能在几毫秒内从主变从,或者电池供电的设备突然要对外输出 5V。电源管不好,轻则丢包,重则烧口。

我遇到过最典型的问题:

  • 设备插入后 VBUS 纹波太大,芯片复位导致枚举失败
  • HNP 切换时 VBUS 掉落到 4.4V 以下,外设直接断开
  • SRP 唤醒电流不够,主机认为没设备而继续休眠

这里我把 OTG 电源管理的几个关键参数列出来,你对照自己的设备看一下:

参数 标准值 抓包时常见异常
VBUS 工作电压 4.75V ~ 5.25V 掉到 4.4V 以下 → 设备断开
VBUS 上升/下降时间 ≤ 100ms 过慢 → 枚举超时
SRP 脉冲电流 ≥ 8mA(持续 2ms) 电流不足 → 主机不响应
HNP 切换时间 ≤ 100ms 过长 → 总线进入复位态
VBUS 掉电谷值 ≤ 0.8V(关闭时) 未掉完 → 新设备误判为旧设备

实战习惯: 我个人会在原理图阶段就把 VBUS 的浪涌电流、纹波要求写进设计规范,而不是等样机出来再改。你想想,一个 10uF 电容的 ESR 不对,就能让 SRP 脉冲失败。

1.3 OTG 电源管理核心流程

为了让你有个整体印象,我画了一张流程图。你看完就知道抓包时该盯哪些信号了。

USB OTG 电源管理核心流程 USB OTG 电源管理核心流程 设备插入 / 连接检测 ID 线电平检测 角色判定 (A/B 设备) ID = GND A 设备 (主机) 对外提供 VBUS 5V 枚举 + 配置供电电流 (通常 100mA → 500mA) ID = 悬空/高阻 B 设备 (从机) 等待 VBUS 供电 静待枚举 (不主动供电) 正常数据传输 (电源管理持续监控) 抓包关注点:VBUS 电压、ID 线电平、SRP 脉冲、HNP 切换时的电源跌落

流程上并不复杂,但每一步的电源时序都能出幺蛾子。比如设备刚插入时,VBUS 如果有一个超过 10% 的过冲,某些 OTG 控制器的电源检测逻辑会误判,直接切到错误角色。

1.4 抓包之前你要懂的电源状态

我习惯把 OTG 的电源管理分成四个状态,理解了它们,看抓包波形就跟看心电图一样简单。

  1. 空闲态 (Idle): VBUS 为 0,ID 线高阻。设备不供电,也不响应任何请求。
  2. 供电态 (Powered): VBUS 升到 5V,主机侧提供电流。这个阶段最怕浪涌电流超过 1A 把 USB 口烧坏。
  3. 会话态 (Session): 设备枚举完成,双方开始数据传输。电源管理会动态调节电流,比如从 100mA 协商到 500mA。
  4. 切换态 (Switch): 角色互换过程中,VBUS 先降到 0,再重新升起来。这里容易出现 “电压跌到谷底还弹不回来” 的问题。我曾经遇到一个案子,因为 VBUS 放电回路预留不够,掉电时间超过 300ms,导致对面芯片进入 latch-up,直接锁死。

重要提醒: 千万别小看空闲态到供电态的跳变。很多低成本方案用分压电阻检测 VBUS 上升沿,如果 RC 常数太大,检测电路会误判“已经上电完成”而提前进入角色协商,此时 VBUS 实际只有 3.8V,枚举必失败。

1.5 课程安排与抓包环境

最后简单说一下这 30 章的路线。前 5 章都是基础概念和工具准备,第 6 章开始上真实抓包波形。我会带着你从最简单的“设备插入-枚举”开始,逐步深入到 SRP 唤醒、HNP 切换、过流保护、电池供电场景等复杂案例。

工具方面,我用的是某国产逻辑分析仪(名字就不提了)配合 USB 协议抓包分析器,但不管你用 Saleae、PicoScope 还是其他品牌,核心思路完全一样——盯住 VBUS、D+、D-、ID 四根线。

你想想看,掌握了电源管理的脉络,那些看似杂乱的波形在你眼里就是一串有序的状态机跳变。这比死记硬背协议字节靠谱多了。嗯,准备开始吧。