1. USB体系结构概述:USB主机、设备、集线器、物理拓扑与逻辑拓扑

USB(Universal Serial Bus,通用串行总线)体系结构采用主从式通信模型,由USB主机(Host)、USB设备(Device)和USB集线器(Hub)三类角色构成。理解其物理拓扑与逻辑拓扑是开发USB Host驱动、处理热插拔检测与中断传输的基础。

核心要点:USB物理拓扑是严格的树形结构,根节点为USB主机控制器;逻辑拓扑则是星形结构,主机与每个设备之间建立点对点逻辑连接。集线器在物理上扩展端口,在逻辑上透明转发数据。

1.1 USB体系结构的三类角色

角色 功能描述 典型实例 驱动职责
USB主机(Host) 总线主控者,发起所有数据传输,管理总线枚举、电源、带宽分配 PC、嵌入式开发板、智能手机OTG 主机控制器驱动(HCD)、USB核心层
USB设备(Device) 响应主机请求,实现特定功能(存储、HID、音频等) U盘、鼠标、键盘、摄像头 设备功能驱动(如usb-storage、usbhid)
USB集线器(Hub) 端口扩展器,检测设备连接/断开,管理端口电源与复位 USB Hub芯片(如GL850G、FE1.1s) Hub驱动(usbcore内置)
驱动开发视角:在Linux内核中,USB子系统分为三层:主机控制器驱动层(HCD) → USB核心层(Core) → 设备驱动层(Driver)。热插拔检测由Hub驱动在核心层完成,中断传输处理则涉及设备驱动与HCD的配合。

1.2 物理拓扑:树形结构

USB物理拓扑是分层的树形结构,根节点是根集线器(Root Hub),集成在主机控制器内部。每个集线器提供若干下行端口(Downstream Port),可连接设备或下级集线器。物理拓扑的深度最多为7层(含根集线器),最多支持127个设备(含集线器)。

热插拔关键:集线器每个下行端口都有独立的端口状态寄存器,当设备插入或拔出时,端口状态变化(如连接状态改变位置位),集线器通过中断传输向主机报告变化。这是热插拔检测的硬件基础。
USB物理拓扑:树形结构 USB主机(Host) 根集线器(Root Hub) 集线器 Hub 1 集线器 Hub 2 设备 A(U盘) 设备 B(鼠标) 设备 C(键盘) 设备 D(摄像头) 集线器 Hub 3 设备 E(打印机) 设备 F(扫描仪) 物理拓扑规则 树形结构 最多7层 最多127设备

1.3 逻辑拓扑:星形结构

从逻辑通信角度看,USB采用星形拓扑。主机作为唯一的主控制器(Master),所有设备作为从设备(Slave),任何通信都必须由主机发起。集线器在逻辑上表现为透明转发器,不参与数据内容解析,仅负责信号中继和端口管理。

  • 主机→设备:主机通过默认管道(Default Pipe)发送控制传输,完成设备枚举和配置。
  • 设备→主机:设备不能主动发送数据,只能通过中断传输(Interrupt Transfer)或批量传输(Bulk Transfer)等待主机轮询(Polling)。
  • 集线器角色:集线器在逻辑上是一个特殊的USB设备,拥有自己的端点(Endpoint 0用于控制,Endpoint 1用于中断状态报告)。
中断传输与热插拔:集线器的中断端点(Interrupt Endpoint)以固定间隔(如每32ms)向主机报告端口状态变化。当设备插入时,集线器中断传输的数据中包含端口状态变化位图,主机据此启动枚举流程。这是USB热插拔检测的核心机制。
USB逻辑拓扑:星形结构 USB主机(Host) 主控制器(Master) 设备 1(U盘) 设备 2(鼠标) 设备 3(键盘) 设备 4(摄像头) 集线器(逻辑透明) 逻辑拓扑特征:所有通信由主机发起,设备被动响应;集线器在逻辑上透明,不解析数据 中断传输用于集线器状态报告和设备数据轮询

1.4 物理拓扑与逻辑拓扑的对比

对比维度 物理拓扑 逻辑拓扑
结构形态 树形(分层级联) 星形(主机为中心)
节点关系 父子关系(Host→Hub→Device) 主从关系(Master→Slave)
集线器角色 物理扩展端口,信号中继 透明转发,不参与数据解析
通信方向 下行广播,上行汇聚 点对点,主机与设备直接逻辑连接
热插拔检测 集线器端口状态寄存器变化 集线器中断传输上报状态变化
驱动模型 设备树(Device Tree)层级枚举 USB核心层统一管理设备地址与管道

1.5 Linux内核USB子系统软件架构

在Linux内核中,USB子系统的软件架构清晰地映射了物理与逻辑拓扑。理解这一架构是编写USB Host驱动的基础。

Linux USB子系统软件架构 用户空间(User Space) usb-storage (存储设备驱动) usbhid (HID设备驱动) usbnet (网络设备驱动) USB核心层(USB Core) 设备枚举 · 管道管理 · 带宽分配 · Hub驱动 主机控制器驱动(HCD) ehci-hcd · ohci-hcd · xhci-hcd USB主机控制器硬件(EHCI / OHCI / xHCI) 热插拔检测 在Core层实现
驱动开发提示:在Linux内核中,USB热插拔检测的入口是hub_irq()函数(位于drivers/usb/core/hub.c),它处理集线器中断传输返回的端口状态变化位图。中断传输的初始化在hub_configure()中完成,通过usb_fill_int_urb()设置URB(USB Request Block)。

1.6 本章小结

  • USB体系结构由主机、设备、集线器三类角色组成,物理拓扑为树形,逻辑拓扑为星形。
  • 集线器是热插拔检测的关键硬件,其端口状态寄存器和中断端点是驱动层检测设备插入/拔出的基础。
  • Linux USB子系统软件架构分为设备驱动层 → USB核心层 → HCD层 → 硬件,热插拔检测在核心层由Hub驱动完成。
  • 中断传输是集线器上报端口状态变化的唯一机制,也是后续章节深入讲解的重点。