1. USB OTG 概述:定义、起源与发展
1.1 到底什么是 USB OTG?
各位工程师朋友,咱们先直接说定义。USB OTG,全称是 USB On-The-Go。说白了,它就是 USB 2.0 规范的一个补充协议。
传统的 USB 世界里,角色是固定的。PC 永远是主机(Host),U盘、鼠标、键盘永远是外设(Peripheral)。主机说了算,外设只能听话。但 OTG 打破了这种“阶级固化”。它让两个原本都是“外设”的设备,比如手机和相机、平板和打印机,能直接连起来通信,其中一方临时充当主机角色。
我个人的理解,OTG 的核心就一个字——“变”。它赋予了设备角色切换的能力。这个能力,对于嵌入式系统、移动设备来说,实在太重要了。
核心考点:
- USB OTG 是 USB 2.0 规范的补充协议,不是全新的标准。
- 核心能力是 双角色切换(Dual Role)。
- 目标应用场景是便携式移动设备之间的互联。
1.2 为什么需要 OTG?—— 谈谈它的“前世”
回想一下 USB 1.0 和 2.0 时代。那时候,你要是想用手机读 U 盘里的文件,怎么办?答案是无解。你必须把 U 盘插到电脑上,然后把文件拷贝到手机里。中间还得靠数据线、读卡器来回倒腾,麻烦得很。
这就是硬件的“阶级鸿沟”。
移动设备(手机、平板、相机)本身是功能丰富的“小电脑”,但它们被设计成了纯外设。它们能连 PC,但不能连别的外设。这浪费了它们本身的处理能力。
我记得有一次做项目,客户要求在车载导航仪上直接读取行车记录仪的存储卡。按传统思路,得加个 USB Host 芯片,成本高,电路也复杂。我心里就想:要是导航仪自己就能当主机,那该多好?
这就是 OTG 诞生的原动力:让移动设备具备有限的主机能力,实现“点对点”的直接通信,摆脱对 PC 的依赖。
| 特性 | 非 OTG 设备(传统外设) | OTG 设备(双角色设备) |
|---|---|---|
| 角色 | 固定为 Peripheral | 可在 Host 与 Peripheral 间切换 |
| 连接对象 | 只能连接 PC Host | 可连接 PC Host 或其他 OTG 设备 |
| ID 引脚 | 无(或接地/浮空) | 有,用于识别初始角色 |
| 供电方式 | 总线供电 | 可总线供电,也可提供 5V/8mA 最小电流 |
| 会话管理 | 由 Host 全权管理 | 支持 SRP(会话请求协议)和 HNP(主机协商协议) |
1.3 USB OTG 的发展历程
从最早的想法,到现在的普及,OTG 也经历了几次关键迭代。这里有个时间线,大家看看。
- 2001 年,草案阶段:USB-IF 组织意识到移动设备互联的需求,发布了 USB OTG 的初版草案。
- 2001 年底,OTG 1.0 发布:定义了基础的双角色模型、ID 引脚、以及有限的供电能力。这也是我最早接触的 OTG 版本。当时为了调试手头的 PDA,专门做了一个带 ID 引脚的 Mini-AB 接头,折腾了好久。
- 2003 年,OTG 1.3 发布:修订了一些模糊点,比如 HNP 的时序要求更明确了。很多经典的设计都基于此版本。
- 2006 年,OTG 2.0(即 Supplement ECN):这是一个重要的升级。它引入了 不同级别的双角色设备,并且明确了 HNP 的硬件实现细节,不再是可选特性。现在的移动设备大部分都支持这个级别。
- 后续演进:虽然 OTG 规范本身没再大改,但它的核心思想——双角色切换,被继承到了后来的 USB Type-C 和 USB Power Delivery 规范中。Type-C 的 DRP 端口(双角色端口),其实就是 OTG 概念在高性能时代的延续。
我个人认为,OTG 2.0 是最重要的一个版本。因为从那以后,芯片厂商开始把 OTG 控制器集成到主控里,门槛大幅降低。你想想看,要是还得单独加个芯片,这功能推广起来得多难?
工程师避坑提示:
我见过不少同学,因为手上设备是 USB 2.0,就以为它肯定支持 OTG。其实不然。OTG 需要硬件上支持 ID 引脚检测,以及内部的角色管理逻辑。很多早期的 USB 2.0 芯片(比如一些纯设备控制器),根本就没实现这套逻辑。所以,选型时一定要看芯片手册里有没有明确写着“Supports OTG 2.0”或“Dual-Role”。
1.4 USB OTG 的核心逻辑框架
好了,理论说了这么多,我用一张图把整个知识体系串起来。这张图是我画给团队新同事做培训用的,自己用着顺手,今天也分享给你们。
这张图把 OTG 的知识串联了起来。从定义(是什么)出发,引出起源(为什么要有),再看到发展(怎么演变的)。核心落在那四个关键特性:ID 引脚、双协议栈、HNP和SRP。这些都是后面章节要深挖的考点。
重要提醒:
很多初学者会混淆“OTG 设备”和“双角色设备”。严格来说,OTG 设备是双角色设备的一种。但自 OTG 2.0 以后,“双角色设备”的概念更流行,尤其是在 Type-C 时代。大家在做嵌入式开发、看芯片手册时,多留意这两种表述的一致性。如果遇到了只说“支持 Host”,但没提 OTG 的芯片,往往意味着它不支持 HNP 和 SRP,功能是不完整的。
1.5 再谈一谈“到底什么是 OTG 本质”
说了这么多,我不是在背概念。我从工程师的角度,重新总结一下 OTG 的本质:
它是一套让嵌入式设备之间实现灵活互联的“外交协议”。它不改变 USB 的物理层和协议层(还是那 4 根线),它只是在软件和逻辑层面,通过一个 ID 引脚的识别,以及两套协议栈的动态加载,实现了“谁是老大”的协商。
我在调试一个 OTG 设备时,有一次死活连不上,查了三天电路,发现是 ID 引脚的上拉电阻焊错了。一个 10kΩ 的电阻,导致角色识别失败。你说,这个东西是不是又简单又容易踩坑?
好了,言归正传。第一章作为开篇,就是把 OTG 这个概念放在大家面前。它不是什么黑魔法,它就是解决了一个很实际的问题:如何让两个智能设备直接对话,而不需要 PC 当中间人。后面的章节,我们会深入到它的每个技术细节里去。记住今天这张图,它能帮你构建起整个 OTG 的知识框架。