第2章:USB协议基础与OTG规范解读
说到USB OTG的电源管理,你得先搞懂底层的USB协议长什么样。我刚开始接触这块时,以为不就是插个U盘嘛,结果第一次拿逻辑分析仪抓包,波形看得我头皮发麻。后来才明白,OTG不只是物理上的A/B口切换,它背后有一套完整的协商机制。
2.1 USB协议版本与速度分级
咱们先看看USB的“身份证”。从1.0到4.0,速度翻了上万倍,但OTG真正关心的其实是2.0和3.x这两代。
| 版本 | 速率 | 编码方式 | OTG支持 |
|---|---|---|---|
| USB 1.1 | 12 Mbps(全速) | NRZI | 否(规范太老) |
| USB 2.0 | 480 Mbps(高速) | NRZI + 位填充 | 是(OTG 1.0/2.0) |
| USB 3.2 | 5/10/20 Gbps | 8b/10b + 128b/132b | 是(OTG 3.0) |
| USB4 | 40 Gbps | 128b/132b | 兼容(需额外协商) |
说白了,大多数嵌入式设备还在用USB 2.0 OTG。为什么呢?成本低、功耗可控。我个人习惯在项目初期先确认对方用的是哪个版本,因为3.0的VBUS电流、CC引脚逻辑跟2.0完全不一样,踩坑成本挺高的。
2.2 USB物理层与电气特性
USB的物理层就两根差分线(D+、D-),外加VBUS和GND。你知道吗?OTG还引入了一个ID引脚——这是区分主从的关键。
- VBUS:默认5V,但实际在OTG场景下,Host侧才会供电,Device侧是耗电的。
- D+/D-:差分信号,传输数据和设备枚举。上拉电阻的位置决定了角色。
- ID:OTG A设备(默认Host)的ID接地,B设备(默认Device)的ID悬空。当然,软件也可以强行反转。
2.3 USB传输类型与包结构
USB通信不是“想发就发”的,它分四种传输类型,每种对应不同的实时性要求。
- 控制传输:用于获取描述符、配置设备。典型场景:你的平板插上U盘后,主机先发一个Get Descriptor请求。
- 批量传输:大块数据,无实时性。比如U盘读写。
- 中断传输:固定间隔查询,比如鼠标键盘。OTG中的HNP切换就用到了中断端点。
- 同步传输:实时音频/视频,不重传。
你想想看,一个USB包从SYNC开始,到EOP结束。包类型有令牌包、数据包、握手包。这些在抓包软件里都能看到。
// 典型的USB控制传输事务(抓包日志简化)
Split: OUT (ADDR=1, EP=0)
Data0: 80 06 00 01 00 00 40 00 // Get Descriptor: Device
Handshake: ACK
嗯,这里要注意:OTG中的角色协商包(比如SRP、HNP)其实也是通过控制传输和中断传输完成的。我当初调试时,总以为有单独的特殊包,后来发现就是标准协议上的“借壳”,涨了不少记性。
2.4 OTG规范核心:A设备与B设备
OTG把设备分成A和B两种。
- A设备:提供VBUS,初始默认为Host。ID引脚接地。
- B设备:消耗VBUS,初始默认为Device。ID引脚悬空。
但这只是初始角色。OTG最妙的地方就是可以“互换”——通过Session Request Protocol (SRP) 和 Host Negotiation Protocol (HNP)。
2.5 SRP(会话请求协议)
B设备想“借电”或“要当主机”时,它不能直接拉高VBUS,因为只有A设备才有供电能力。B设备会做两件事之一:
- 数据线脉冲(Data Line Pulse):在D+上产生短暂脉冲。
- VBUS脉冲(VBus Pulse):充电泵把B设备内部的VBUS拉到2.0V以上持续一段时间。
为什么有的设备两个都做?我遇到过一款蓝牙键盘,它的SRP只做了VBUS脉冲,结果某些旧的A设备(比如老款路由器)根本不认。后来我改了固件,同时发送两种脉冲,兼容性就好了很多。
2.6 HNP(主机协商协议)
角色互换的正式环节。A设备和B设备通过一个专用的中断端点协商。
- A设备:发送“你来做主机”的请求。
- B设备:回复ACK,然后通过拉低D+表示自己转为主机。
- 双方交换角色后,源VBUS控制权随之转移。
这个过程中VBUS的瞬态电流变化非常大。我测过一个项目,HNP切换时VBUS从5V掉到3.8V,导致系统复位。后来加了超级电容才稳住。
2.7 本章知识体系总览
下面这张图帮你理清USB OTG电源管理涉及的核心脉络。
2.8 常见协议误解
有些同事会问:“OTG是不是必须支持HNP才算合规?”
其实不是。OTG规范里有一种“单一角色”设备,比如只做Host的外设(USB鼠标转接器),它不需要HNP。只有当你需要动态互换时,才必须实现这套协议。我个人建议在看源码前先确认设备的能力描述符(bcdUSB、bDeviceProtocol字段),避免白费功夫。
2.9 小结
这一章我们把USB协议基础和OTG规范的关键骨架过了一遍。记住几个核心:
- USB电气特性影响电源设计(VBUS、ID、上拉电阻)
- OTG通过A/B设备初始角色、SRP唤醒、HNP互换来实现灵活供电与角色切换
- 这些都是后续抓包分析的科学基础。你掌握了这些,再去读总线波形就不会一头雾水了。