1. USB 基础概念:诞生背景、版本演进与物理拓扑
大家好,欢迎来到这门课。我是你们的老朋友,一个在嵌入式系统和 USB 协议栈里摸爬滚打了十几年的工程师。
咱们今天聊点最基础的,但也是最核心的——USB 到底是怎么来的?它经历了哪些版本?物理上又是怎么连起来的?
说实话,我刚入行那会儿,觉得 USB 就是个插拔接口,没什么了不起。直到有一次,我在一个工业相机项目里被枚举失败折腾了整整两周……嗯,从那以后,我再也不敢小看这个“小接口”了。
1.1 USB 的诞生背景:为什么要有 USB?
90 年代初,电脑外设的接口那叫一个乱。串口、并口、PS/2、SCSI、游戏口……每个接口都有自己的物理规格、协议和驱动。你想接个键盘、鼠标、打印机、扫描仪,得先搞清楚你的电脑有没有对应的口。
更头疼的是,这些接口不支持热插拔。你插个鼠标,得先关机,插好,再开机。万一插错了,烧设备也是常有的事。
1994 年,Intel、Microsoft、IBM 等七家公司坐到了一起。他们想做一个通用的、支持热插拔的、能同时接多个设备的接口。这就是 USB——Universal Serial Bus,通用串行总线。
USB 的核心设计目标:
- 统一接口:一个口接所有外设
- 热插拔:插上就能用,不用重启
- 即插即用:系统自动识别设备,自动加载驱动
- 可扩展:一个主机最多接 127 个设备
- 供电:通过总线给设备供电,省去额外电源线
你想想看,在 90 年代中期,这些目标有多超前。我个人觉得,USB 能活到现在,靠的就是这五个设计原则,一个都没变过。
1.2 USB 版本演进:从 1.0 到 4.0
USB 从 1996 年第一个正式版本发布到现在,快 30 年了。版本号看着多,但核心变化其实就几件事:速度越来越快,供电能力越来越强,协议越来越复杂。
| 版本 | 发布时间 | 理论速率 | 编码方式 | 关键变化 |
|---|---|---|---|---|
| USB 1.0 | 1996 | 1.5 Mbps (低速) 12 Mbps (全速) |
NRZI | 第一个正式版本,定义了基础协议 |
| USB 1.1 | 1998 | 同上 | NRZI | 修复了 1.0 的 bug,真正开始普及 |
| USB 2.0 | 2000 | 480 Mbps (高速) | NRZI | 速度提升 40 倍,引入微帧 |
| USB 3.0 | 2008 | 5 Gbps (超高速) | 8b/10b | 新增差分信号对,全双工通信 |
| USB 3.1 | 2013 | 10 Gbps (超高速+) | 128b/132b | 引入 Type-C 接口 |
| USB 3.2 | 2017 | 20 Gbps | 128b/132b | 双通道传输 |
| USB 4.0 | 2019 | 40 Gbps | 128b/132b | 基于 Thunderbolt 3 协议 |
我的经验之谈: 做嵌入式开发,USB 2.0 高速和 USB 3.0 超高速是最常见的。很多 MCU 只支持 USB 2.0,但别小看它——480 Mbps 对于大部分传感器、HID 设备、音频设备来说,完全够用。我曾经在一个数据采集项目里用 USB 2.0 跑 24 位音频,8 通道,采样率 192 kHz,一点问题没有。
这里有个坑,我得提醒你。USB 3.0 虽然叫“超高速”,但它的物理层和 2.0 完全不兼容。3.0 新增了 5 根线(一对发送、一对接收、一根地线),和 2.0 的 4 根线是并存的。所以 USB 3.0 的线缆比 2.0 粗得多,插头也多了一排触点。
避坑指南: 我曾经在一个产品里用了 USB 3.0 的 Type-A 插座,但只接了 2.0 的线。结果插 3.0 设备能识别,插 2.0 设备反而偶尔掉线。后来查了半天才发现,3.0 插座的 2.0 触点位置和 2.0 插座不一样,导致接触不良。所以,硬件设计时,USB 3.0 插座必须严格按照 3.0 的 layout 走线,不能偷懒。
1.3 USB 的物理拓扑结构:Host、Hub、Device
USB 的拓扑结构,说白了就是一棵树。树根是 Host,树枝是 Hub,树叶是 Device。
为什么用这种结构?因为 USB 是主从架构。所有通信都由 Host 发起,Device 只能被动响应。Hub 的作用就是扩展端口,让一个 Host 能接多个 Device。
来,我画个图给你看。
这张图里,Host 是唯一的通信发起者。根 Hub 集成在 Host 内部,负责管理所有端口。Hub 可以级联,但最多 7 层。每个 Hub 下面可以再接 Hub 或者 Device。
这里有个关键点:所有 Device 都挂在 Hub 的端口上。每个端口对应一个地址,Host 通过地址来寻址。地址是 7 位的,所以最多 127 个设备(地址 0 保留给未配置的设备)。
三个角色的职责:
- Host(主机):发起所有传输,管理总线带宽,分配地址,检测设备插拔。典型代表:PC、手机、开发板。
- Hub(集线器):转发信号,检测端口状态,管理电源。它自己不参与数据传输,只是“传话”的。
- Device(设备):响应 Host 的请求,实现具体功能。比如键盘、U 盘、摄像头。
你可能会问:为什么不用星型拓扑或者总线型拓扑?
嗯,这个问题我当年也想过。USB 用树型拓扑,核心原因是供电管理和信号完整性。每个 Hub 可以独立控制端口的电源,如果某个设备短路了,Hub 可以断开那个端口,不影响其他设备。如果是总线型拓扑,一个设备短路,整条总线都挂了。
我的建议: 做嵌入式 USB 设备时,尽量把设备设计成“自供电”模式(Self-Powered),而不是“总线供电”(Bus-Powered)。总线供电虽然省事,但电流限制很严格(USB 2.0 最大 500 mA,USB 3.0 最大 900 mA)。我曾经有个项目,设备需要 600 mA 电流,用总线供电死活起不来,后来改成自供电,问题秒解。
1.4 小结:这一章你该记住什么?
好了,咱们把这一章的核心点捋一捋:
- USB 是为了解决接口混乱、不支持热插拔的问题而生的
- 版本从 1.0 到 4.0,速度从 1.5 Mbps 飙到了 40 Gbps
- 物理拓扑是树型结构:Host → Hub → Device,最多 127 个设备
- Host 是老大,所有通信都由它发起
这些概念看着简单,但它们是后面所有内容的基础。下一章,咱们要深入 USB 的电气特性——D+、D- 上的电平变化,到底是怎么表示 0 和 1 的?
到时候见。