1. USB子系统概述:USB总线历史、版本演进与核心地位

通用串行总线(Universal Serial Bus,USB)自1996年正式发布以来,已成为计算与嵌入式领域最成功的设备互连标准之一。本章从总线起源、版本演进和产业地位三个维度,为后续深入URB(USB Request Block)与端点通信机制奠定基础。

1.1 USB总线历史:从混乱到统一

在USB诞生之前,PC外设接口种类繁多:串口(RS-232)、并口(LPT)、PS/2、SCSI、游戏口(MIDI/Game Port)等。每种接口的物理规格、电气特性、驱动模型各不相同,导致设备互连成本高、用户体验差。1994年,Intel、Microsoft、IBM、Compaq、NEC等七家公司联合发起USB标准制定,目标明确:

  • 单一接口:用一个通用接口替代多种专用接口。
  • 即插即用:设备接入时自动枚举、加载驱动,无需用户手动配置。
  • 热插拔:系统运行时允许安全插拔设备,不损坏硬件或系统。
  • 供电与数据合一:通过同一根线缆同时提供电源和数据传输。
里程碑事件:1996年USB 1.0正式发布;1998年iMac率先取消串并口、全面采用USB,成为USB普及的关键转折点。

1.2 USB版本演进:1.0 → 2.0 → 3.x → 4.0

USB标准经历了四个主要代际,每一代都在速率、供电能力和协议架构上实现了跨越式升级。下表汇总了各版本的核心参数:

版本 发布年份 信号速率 编码方式 供电能力 线缆最大长度
USB 1.0 / 1.1 1996 / 1998 1.5 Mbps (Low-Speed)
12 Mbps (Full-Speed)
NRZI + 位填充 5V / 500 mA 5 m (FS)
USB 2.0 2000 480 Mbps (Hi-Speed) NRZI + 位填充 5V / 500 mA 5 m
USB 3.2 Gen 1×1 2013 5 Gbps (SuperSpeed) 8b/10b 5V / 900 mA 3 m
USB 3.2 Gen 2×1 2017 10 Gbps (SuperSpeed+) 128b/132b 5V / 1.5 A 3 m
USB 3.2 Gen 2×2 2019 20 Gbps 128b/132b 5V / 1.5 A 3 m
USB4 Gen 3×2 2019 40 Gbps 基于Thunderbolt 3协议 最高240W (USB PD 3.1) 0.8 m (被动线缆)
内核开发者视角:USB 2.0与USB 3.x在主机控制器硬件上完全不同——前者使用EHCI/xHCI,后者使用xHCI。Linux内核通过 struct usb_hcd 抽象主机控制器驱动,URB提交路径在xHCI中需要处理更多的TRB(Transfer Request Block)映射。

1.3 USB版本演进结构图

下图展示了USB各代际的速率跃迁与关键协议特征:

USB版本演进与速率对比 USB版本演进与速率跃迁 USB 1.0/1.1 1.5 / 12 Mbps 1996 USB 2.0 480 Mbps 2000 USB 3.2 Gen1 5 Gbps 2013 USB 3.2 Gen2 10/20 Gbps 2017 USB4 40 Gbps 2019 关键架构变化 USB 3.0引入独立双总线架构(SS+非SS),USB4融合Thunderbolt 3协议,支持隧道传输 Linux内核需同时支持EHCI/xHCI,USB4驱动基于xHCI扩展

1.4 USB在嵌入式与PC领域的核心地位

USB已从最初的外设连接总线,演变为覆盖消费电子、工业控制、汽车电子、数据中心的全场景互连标准。其核心地位体现在以下三个层面:

1.4.1 PC领域:不可替代的通用外设总线

  • 人机交互设备:键盘、鼠标、触摸板、游戏手柄等几乎全部采用USB HID协议。
  • 存储与传输:U盘、移动硬盘、读卡器、光驱等大容量存储设备基于USB Mass Storage或UAS协议。
  • 音视频扩展:USB摄像头、USB声卡、USB显示器(DisplayLink)等依赖实时等时传输。
  • 调试与烧录:JTAG/SWD调试器、串口转USB模块(如FT232、CP2102)是嵌入式开发的标准工具。

1.4.2 嵌入式领域:从传感器到工业控制

  • 物联网网关:通过USB连接4G/5G模块、Wi-Fi/蓝牙适配器、ZigBee协调器。
  • 工业数据采集:USB连接PLC、数据记录仪、条码扫描器、RFID读卡器。
  • 医疗与仪器:超声探头、心电图机、光谱仪等通过USB实时传输数据。
  • 汽车电子:车载信息娱乐系统通过USB连接手机(Android Auto / Apple CarPlay)、U盘媒体播放。

1.4.3 Linux内核中的USB子系统架构

Linux USB子系统采用分层设计,从硬件到用户空间共分为四层:

Linux USB子系统分层架构 Linux USB子系统分层架构 用户空间:应用程序 / libusb / sysfs / devfs USB核心层:usbcore / usb_device / usb_interface 主机控制器驱动层:xHCI / EHCI / OHCI / UHCI 硬件层:USB主机控制器(PCIe/MMIO) URB是USB核心层与HCD层之间的核心数据载体,驱动通过URB提交传输请求
内核开发关键点:USB子系统中最核心的数据结构是 struct urb。每个URB对应一次或一组端点上的数据传输。理解URB的生命周期(创建→填充→提交→完成→回收)是USB驱动开发的基础。后续章节将深入解析URB的每个字段和操作流程。

1.5 USB在嵌入式与PC领域的核心地位总结

USB之所以能在PC和嵌入式领域占据核心地位,根本原因在于:

  1. 标准化程度高:从物理层到协议层均有严格规范,不同厂商设备可互操作。
  2. 生态成熟:Linux内核已内置几乎所有主流USB设备类的驱动框架(HID、Mass Storage、CDC ACM、Video、Audio等)。
  3. 扩展性强:通过USB集线器可级联127个设备,通过USB-PD可提供最高240W供电。
  4. 实时性保障:等时传输模式为音视频、工业数据采集提供确定性延迟。
学习路线提示:在进入URB编程之前,建议先通过 lsusb -v 和 /sys/kernel/debug/usb/devices 观察真实USB设备的描述符和端点信息,建立对USB设备模型的直观认识。