第一章 USB协议概述:从历史到物理层

大家好,我是你们这趟USB协议栈之旅的向导。做嵌入式这些年,我调试过无数USB设备,从鼠标键盘到高速摄像头,从U盘到复合设备。说实话,USB协议看着复杂,但只要你把它的骨架摸清楚了,剩下的就是往上面填肉。

这一章,我们先搭好地基。我会从USB的发展史讲起,然后对比2.0和3.x的核心差异,最后深入到物理层和电气特性。嗯,这些内容可能有点干,但相信我,后面做状态机实现和枚举调试时,你会感谢今天认真看完了这一章。

1.1 USB的发展历史:为什么会有USB?

90年代初,电脑外设的接口简直是灾难。串口、并口、PS/2、游戏口……每个接口长得不一样,速度参差不齐,还不能热插拔。我记得那时候装个打印机,得先关机,插上线,再开机,装驱动,搞不好还得调IRQ中断号——现在年轻人可能都没听过这个词。

1994年,Intel、Microsoft、IBM等七家公司坐在一起,决定搞一个统一的通用串行总线。目标很明确:

  • 热插拔:插上就能用,不用重启
  • 即插即用:系统自动识别设备
  • 统一接口:一个口子通吃所有外设
  • 低成本:比SCSI、FireWire便宜得多

1996年,USB 1.0正式发布,速度只有1.5 Mbps(低速)和12 Mbps(全速)。说实话,初期推广并不顺利,直到1998年iMac率先取消串口和并口,全部改用USB,这才引爆了市场。

2000年,USB 2.0来了,速度飙到480 Mbps(高速)。这一版统治了市场十几年,直到今天,很多嵌入式设备还在用USB 2.0。

2008年,USB 3.0发布,速度跳到5 Gbps(超高速)。后来3.1(10 Gbps)、3.2(20 Gbps)一路升级。2019年,USB4基于Thunderbolt 3协议,速度达到40 Gbps。

核心观点: USB的成功,说白了就是解决了「插拔麻烦、接口混乱」这个痛点。你想想看,现在谁还愿意关机插外设?

1.2 USB 2.0与USB 3.x的核心区别

很多初学者会问:USB 3.0的接口不是也能插USB 2.0的设备吗?它们到底差在哪?

我直接说结论:USB 3.x不是USB 2.0的升级版,而是并行增加了一套全新的物理层和协议层。 两者共用物理接口,但内部走的是两套完全不同的总线。

对比项 USB 2.0 USB 3.x
信号速率 480 Mbps(高速) 5 Gbps(3.0)/ 10 Gbps(3.1)/ 20 Gbps(3.2)
编码方式 NRZI + 位填充 8b/10b(3.0)/ 128b/132b(3.1+)
传输模式 半双工(主机轮询) 全双工(异步传输)
物理层 D+/D- 差分对 增加 SSTX+/SSTX-、SSRX+/SSRX- 两对差分线
电源管理 挂起/唤醒(简单) U0-U3多级电源状态
协议架构 基于事务(Token-Data-Handshake) 基于包(Header + Payload,支持多流)
向后兼容 兼容USB 1.1 兼容USB 2.0(共用物理接口)

个人经验: 我在做USB 3.0摄像头驱动时,踩过一个坑——以为USB 3.0只是速度更快,结果发现它的枚举流程和USB 2.0完全不同。USB 3.0设备必须先以USB 2.0模式完成基本枚举,然后通过「链路训练」切换到超高速模式。这个细节,后面枚举章节我会重点讲。

1.3 USB的物理层与电气特性

做嵌入式开发,物理层是你必须面对的第一道关。信号好不好,直接决定枚举能不能过、传输稳不稳。

1.3.1 线缆与连接器

USB 2.0使用4线制:VBUS(电源)、D+、D-(数据)、GND(地)。USB 3.x在此基础上增加了两对差分线:SSTX+/-(发送)和SSRX+/-(接收),所以Type-A的USB 3.0接口内部有9个触点。

连接器类型很多:Type-A(主机端)、Type-B(设备端)、Mini/Micro(移动设备)、Type-C(正反插,支持USB 3.1+)。我个人最喜欢Type-C,不用看方向,插就完了。

1.3.2 电气特性关键参数

参数 低速 (1.5 Mbps) 全速 (12 Mbps) 高速 (480 Mbps)
驱动电压 3.0V ~ 3.6V 3.0V ~ 3.6V 400mV(差分摆幅)
终端电阻 D+上拉1.5kΩ D-上拉1.5kΩ D+/D-各接45Ω到地
信号边沿 75ns ~ 300ns 4ns ~ 20ns 500ps ~ 1ns
电缆最大长度 3m 5m 5m(建议3m以内)

避坑指南: 我曾经在一个项目中,USB全速设备总是枚举失败。查了两天,最后发现是D+的上拉电阻焊成了10kΩ。USB协议对上拉电阻的精度要求是±5%,别用5%精度的普通电阻,老老实实用1%的。还有,PCB走线时D+/D-要等长,差分阻抗控制在90Ω±15%。

1.3.3 设备速度检测机制

USB主机是怎么知道插上来的是低速、全速还是高速设备?这个机制很有意思:

  1. 设备插入:主机检测到D+或D-上的电平变化(从0到高电平)
  2. 上拉电阻识别:
    • D+上拉1.5kΩ → 全速设备
    • D-上拉1.5kΩ → 低速设备
  3. 高速握手(Chirp):如果是全速设备,主机先复位总线,然后发送Chirp K信号。设备如果能响应Chirp K/J序列,就切换到高速模式;否则保持全速

说白了,速度检测就是靠上拉电阻的位置和一套握手协议。这个流程在枚举调试中非常关键,很多故障就出在这一步。

1.4 USB系统拓扑结构

USB采用星型-菊花链混合拓扑。一个主机(Host)下面可以挂最多127个设备,通过集线器(Hub)扩展。

我画了一张图,帮你理清这个结构:

USB系统拓扑结构图 USB 系统拓扑结构 USB 主机 (Host) 根集线器 (Root Hub) 设备1 (全速) 集线器 (Hub) 设备3 (高速) 设备2.1 (低速) 设备2.2 (全速) 说明: • 主机最多可挂 127 个设备(含集线器) • 集线器负责转发事务和检测设备插拔 • 每个设备有唯一的 7 位地址(1~127)

这个拓扑结构决定了USB协议栈的设计思路:所有通信都由主机发起,设备只能被动响应。你想想看,这就好比老师点名,学生才能回答问题——设备不能主动给主机发数据。

1.5 本章小结

这一章我们覆盖了三个核心内容:

  • USB发展史:从1.0到USB4,核心驱动力是速度和易用性
  • 2.0 vs 3.x:不是升级关系,是两套并行总线,物理层和协议层完全不同
  • 物理层与电气特性:上拉电阻决定速度,差分信号保证抗干扰,拓扑结构决定通信模式