第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 电源管理核心流程
为了让你有个整体印象,我画了一张流程图。你看完就知道抓包时该盯哪些信号了。
流程上并不复杂,但每一步的电源时序都能出幺蛾子。比如设备刚插入时,VBUS 如果有一个超过 10% 的过冲,某些 OTG 控制器的电源检测逻辑会误判,直接切到错误角色。
1.4 抓包之前你要懂的电源状态
我习惯把 OTG 的电源管理分成四个状态,理解了它们,看抓包波形就跟看心电图一样简单。
- 空闲态 (Idle): VBUS 为 0,ID 线高阻。设备不供电,也不响应任何请求。
- 供电态 (Powered): VBUS 升到 5V,主机侧提供电流。这个阶段最怕浪涌电流超过 1A 把 USB 口烧坏。
- 会话态 (Session): 设备枚举完成,双方开始数据传输。电源管理会动态调节电流,比如从 100mA 协商到 500mA。
- 切换态 (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 四根线。
你想想看,掌握了电源管理的脉络,那些看似杂乱的波形在你眼里就是一串有序的状态机跳变。这比死记硬背协议字节靠谱多了。嗯,准备开始吧。