1. USB 基础概念:从起源到物理世界
大家好,欢迎来到《USB接口开发:从协议栈到固件实战》的第一章。
USB,全称 Universal Serial Bus,通用串行总线。这东西我们天天用,但真把它吃透的工程师不多。我刚开始做嵌入式时,觉得 USB 就是插个鼠标键盘,后来被一个枚举失败的问题折磨了三天,才老老实实把协议栈啃了一遍。
这一章,我们先打好地基。聊聊 USB 是怎么来的,版本怎么变的,物理层长什么样,以及整个系统是怎么连起来的。
1.1 USB 的起源:为什么会有它?
90 年代初,PC 外设接口乱成一锅粥。串口、并口、PS/2、游戏口……每个接口速度不同、供电不同、插拔还得关机。Intel、Microsoft、IBM 等几家巨头坐不住了,1994 年开始联合制定一个通用接口标准。
1996 年,USB 1.0 正式发布。目标很明确:
- 即插即用:插上就能用,不用重启
- 热插拔:带电插拔不烧设备
- 统一接口:一个口搞定键盘、鼠标、打印机、调制解调器
- 供电能力:总线供电,小设备不用额外电源
1.2 版本演进:从 1.0 到 4.0
USB 版本演进,说白了就是速度越来越快,功能越来越多。我整理了一张表,方便你对比。
| 版本 | 发布年份 | 理论速率 | 编码方式 | 关键变化 |
|---|---|---|---|---|
| USB 1.0 | 1996 | 1.5 Mbps (Low-Speed) 12 Mbps (Full-Speed) |
NRZI | 基础规范,定义了 A/B 型接口 |
| USB 1.1 | 1998 | 同上 | NRZI | 修正了 1.0 的 bug,真正商用 |
| USB 2.0 | 2000 | 480 Mbps (High-Speed) | NRZI | 引入微帧、事务拆分、高速模式 |
| USB 3.0 | 2008 | 5 Gbps (SuperSpeed) | 8b/10b | 新增差分对 SSTX/SSRX,全双工 |
| USB 3.1 | 2013 | 10 Gbps (SuperSpeed+) | 128b/132b | 编码效率更高,Type-C 接口出现 |
| USB 3.2 | 2017 | 20 Gbps (双通道) | 128b/132b | 双通道复用,必须用 Type-C |
| USB4 | 2019 | 40 Gbps | 128b/132b | 基于 Thunderbolt 3 协议,隧道传输 |
为什么会从半双工变成全双工?USB 2.0 及以前,D+/D- 是半双工的,同一时间只能一个方向传数据。到了 USB 3.0,加了独立的发送和接收差分对,这才实现了真正的全双工。我调试 USB 3.0 设备时,最直观的感受就是:不再需要等总线空闲再发数据了。
1.3 物理层特性:D+/D- 线缆与供电
物理层是 USB 最接地气的部分。你写固件时,很多问题根源就在这。
1.3.1 D+/D- 差分信号
USB 2.0 及以下使用一对差分信号线:D+ 和 D-。差分传输的好处是抗干扰能力强,共模噪声会被抵消。
- 空闲状态:D+ 和 D- 都被下拉到 GND(设备端有 15kΩ 下拉电阻)
- J 状态 / K 状态:通过 D+ 和 D- 的电压差来表示逻辑 0 和 1
- 速度识别:设备在 D+ 或 D- 上接 1.5kΩ 上拉电阻,Host 检测到后就知道设备速度
1.3.2 供电:VBUS 与 GND
USB 通过 VBUS 给设备供电。标准如下:
| USB 版本 | VBUS 电压 | 默认电流 | 最大电流(协商后) |
|---|---|---|---|
| USB 2.0 | 5V ±5% | 100 mA | 500 mA |
| USB 3.0 | 5V ±5% | 150 mA | 900 mA |
| USB BC 1.2 | 5V | 1.5 A | 1.5 A |
| USB PD | 5V / 9V / 15V / 20V | 协商决定 | 最高 5A |
做低功耗设备时,我习惯先按 100mA 设计,再通过配置描述符申请更多电流。如果一上来就申请 500mA,Host 可能会拒绝枚举。
1.4 拓扑结构:Host、Hub、Device
USB 是主从架构,不是对等的。整个拓扑是一个树形结构,根节点是 Host,叶子节点是 Device,中间可以有 Hub 扩展。
1.4.1 Host:唯一的主控
Host 是整个 USB 总线的核心。它负责:
- 检测设备的插入和拔出
- 管理总线上的枚举过程
- 分配地址和带宽
- 发起所有数据传输
你想想看,USB 设备永远不能主动说话。设备想发数据,必须先等 Host 来问。这个设计简化了设备端的复杂度,但也意味着 Host 的调度算法很关键。
1.4.2 Hub:扩展与中继
Hub 的作用不只是分叉。它还要做:
- 信号中继:恢复信号质量,延长传输距离
- 速度转换:比如 Host 是 High-Speed,设备是 Full-Speed,Hub 要做事务翻译(TT)
- 电源管理:每个端口可以单独控制供电
- 设备检测:检测端口状态变化并报告给 Host
1.4.3 Device:功能实现者
Device 就是各种外设:鼠标、键盘、U 盘、摄像头、打印机……每个设备都有一个或多个 端点(Endpoint),端点是通信的基本单元。
设备在枚举时,会向 Host 报告自己的 描述符:设备描述符、配置描述符、接口描述符、端点描述符。Host 根据这些信息加载合适的驱动。
1.5 本章小结
这一章我们聊了 USB 的起源、版本演进、物理层特性和拓扑结构。这些都是后面章节的基础。
- USB 从 1.0 到 4.0,速度从 1.5 Mbps 飙到了 40 Gbps
- 物理层靠 D+/D- 差分信号传输,VBUS 供电
- 拓扑是树形结构,Host 是唯一主控,Hub 负责扩展,Device 实现功能