1. USB基础概念
USB(Universal Serial Bus,通用串行总线)自1996年问世以来,已成为嵌入式系统和PC领域最成功的外设总线标准。本章从总线历史、版本演进、物理拓扑、电气特性与信号协议四个维度,为后续USB设备驱动开发奠定坚实的硬件基础。
1.1 USB总线历史
USB标准的诞生源于1990年代PC外设接口混乱的局面:串口、并口、PS/2、SCSI等接口互不兼容,热插拔支持差,带宽低。1994年,Intel、Microsoft、IBM等七家公司联合成立USB Implementers Forum(USB-IF),目标是用单一通用接口替代所有传统外设接口。
| 时间 | 里程碑 | 意义 |
|---|---|---|
| 1994年 | USB-IF成立 | 七家公司联合制定标准 |
| 1996年 | USB 1.0发布 | 首个正式规范,1.5 Mbps低速 |
| 1998年 | USB 1.1发布 | 增加12 Mbps全速模式 |
| 2000年 | USB 2.0发布 | 480 Mbps高速,大规模普及 |
| 2008年 | USB 3.0发布 | 5 Gbps超高速,增加双总线架构 |
| 2013年 | USB 3.1发布 | 10 Gbps,引入USB Type-C |
| 2017年 | USB 3.2发布 | 20 Gbps,双通道技术 |
| 2019年 | USB4发布 | 40 Gbps,基于Thunderbolt 3协议 |
驱动开发视角:USB 2.0是目前嵌入式Linux设备中最广泛支持的版本,而USB 3.x/4.0的驱动开发主要涉及更复杂的DMA管理和电源管理。理解版本差异是选择驱动框架的第一步。
1.2 USB版本演进(1.0/2.0/3.0/3.1/3.2/4.0)
USB版本演进的核心驱动力是带宽需求增长和物理接口统一。下表对比各版本的关键技术参数:
| 版本 | 发布年份 | 理论带宽 | 信号速率 | 编码方式 | 接口类型 | 供电能力 |
|---|---|---|---|---|---|---|
| USB 1.0/1.1 | 1996/1998 | 1.5 / 12 Mbps | 1.5 / 12 Mbps | NRZI | Type-A/B | 2.5V / 500 mA |
| USB 2.0 | 2000 | 480 Mbps | 480 Mbps | NRZI + 位填充 | Type-A/B/Mini/Micro | 5V / 500 mA |
| USB 3.0 | 2008 | 5 Gbps | 5 Gbps | 8b/10b | Type-A/B(蓝色) | 5V / 900 mA |
| USB 3.1 Gen 2 | 2013 | 10 Gbps | 10 Gbps | 128b/132b | Type-C | 5V / 3A(PD可达100W) |
| USB 3.2 Gen 2x2 | 2017 | 20 Gbps | 10 Gbps × 2通道 | 128b/132b | Type-C | 5V / 3A |
| USB4 | 2019 | 40 Gbps | 20 Gbps × 2通道 | 128b/132b | Type-C | 5V / 3A(PD可达240W) |
关键演进特征:
- USB 1.x → 2.0:带宽提升40倍,引入高速(High-Speed)模式,保留全速/低速向后兼容。
- USB 2.0 → 3.0:增加独立的超高速(SuperSpeed)差分对,实现全双工通信,与USB 2.0信号线物理共存。
- USB 3.0 → 3.1/3.2:Type-C接口统一,引入双通道(2-lane)技术,带宽翻倍。
- USB 3.2 → USB4:基于Thunderbolt 3协议,支持隧道协议(PCIe、DisplayPort),带宽达40 Gbps。
1.3 USB物理拓扑结构(Host-Device-Hub)
USB采用星形-菊花链混合拓扑,由Host Controller(主机控制器)作为唯一根节点,通过Hub(集线器)扩展端口,最多支持127个设备(含Hub)。
驱动开发注意:USB拓扑中,Host Controller是唯一的总线仲裁者。所有数据传输必须由Host发起,Device不能主动发送数据。这意味着USB设备驱动中,所有读操作本质上都是Host先发送IN令牌包,Device再响应数据。
1.4 USB电气特性与信号协议
1.4.1 电气特性
USB使用差分信号传输,通过D+和D-两条数据线实现抗干扰通信。不同版本电气参数差异显著:
| 参数 | USB 1.x / 2.0 | USB 3.x / USB4 |
|---|---|---|
| 信号线数量 | 2(D+, D-) | 2(D+, D-)+ 4(SSTX+, SSTX-, SSRX+, SSRX-) |
| 传输方式 | 半双工 | 全双工(超高速通道) |
| 差分电压 | 0~3.3V(低速/全速)/ 400mV(高速) | 800~1200mV(超高速) |
| 终端电阻 | 15kΩ(D+上拉)/ 1.5kΩ(设备端) | 差分阻抗90Ω ± 15% |
| 供电电压 | 4.75V ~ 5.25V | 4.75V ~ 5.25V(VBUS) |
| 最大电流 | 500 mA(USB 2.0)/ 100 mA(未配置) | 900 mA(USB 3.0)/ 3A(Type-C) |
设备检测原理:USB设备通过D+或D-线上的上拉电阻向Host报告速度等级。全速/高速设备在D+线上接1.5kΩ上拉电阻,低速设备在D-线上接1.5kΩ上拉电阻。Host检测到上拉信号后,启动枚举流程。
1.4.2 信号协议层次
USB协议采用分层架构,从物理层到应用层共4层:
1.4.3 包传输与事务
USB总线上的所有数据传输都以包(Packet)为单位。一个完整的事务(Transaction)由以下阶段组成:
- 令牌阶段(Token Phase):Host发送令牌包(IN/OUT/SETUP/SOF),指定目标设备和端点。
- 数据阶段(Data Phase):数据发送方发送数据包(DATA0/DATA1/DATA2/MDATA)。
- 握手阶段(Handshake Phase):接收方返回握手包(ACK/NAK/STALL/NYET)。
驱动开发关键:USB设备驱动中,URB(USB Request Block)是内核抽象的事务描述结构。每个URB对应一次Host与Device之间的数据传输,驱动通过提交URB到Host Controller来发起事务。理解包结构是正确构造URB的前提。
1.4.4 传输类型
USB定义了4种传输类型,满足不同设备的需求:
| 传输类型 | 带宽保证 | 错误重试 | 延迟要求 | 典型设备 | 端点类型 |
|---|---|---|---|---|---|
| 控制传输(Control) | 有(10%) | 是 | 中等 | 所有设备(枚举用) | 控制端点(Endpoint 0) |
| 批量传输(Bulk) | 无 | 是(CRC重试) | 低 | U盘、打印机 | 批量端点 |
| 中断传输(Interrupt) | 有(保证轮询间隔) | 是 | 高 | 键盘、鼠标、游戏手柄 | 中断端点 |
| 等时传输(Isochronous) | 有(预留带宽) | 否(无重试) | 极高 | 音频、视频、摄像头 | 等时端点 |
驱动选择指南:
- 控制传输:设备枚举、配置查询,所有驱动必须支持。
- 批量传输:大数据量、可靠性优先的场景(存储、网络)。
- 中断传输:小数据量、周期性轮询的场景(HID设备)。
- 等时传输:实时性优先、允许少量丢包的场景(音视频流)。
1.5 本章小结
USB总线从1.0到4.0的演进,本质是带宽、供电能力和接口统一性的持续提升。物理拓扑中Host-Device-Hub的星形结构决定了驱动开发的主从模式思维。电气特性中的差分信号和上拉电阻检测机制,是设备枚举和速度协商的硬件基础。信号协议的分层架构和四种传输类型,直接对应Linux内核中URB、端点、管道的软件抽象。