嵌入式Linux USB Gadget驱动开发与平台适配 - 第1节

1.1 USB总线拓扑结构

USB(Universal Serial Bus)采用星形-级联拓扑结构,由一个主机(Host)和最多127个设备(Device)组成。物理上通过集线器(Hub)扩展端口,逻辑上呈现分层的树形结构。

核心要点:USB拓扑中主机是唯一的总线主控者,所有通信都由主机发起,设备不能主动向主机发送数据。
USB 总线拓扑结构(星形-级联) USB 主机 (Host) 根集线器 (Root Hub) 集线器 (Hub) 1 集线器 (Hub) 2 集线器 (Hub) 3 设备 A 设备 B 设备 C 设备 D 拓扑规则: • 主机位于拓扑顶层,根集线器内置于主机控制器中 • 最多支持 7 层(Tier),包括主机层;最多 127 个设备(含集线器)

1.1.1 主机与设备角色

嵌入式视角:在嵌入式 Linux 系统中,USB Gadget 驱动让设备可以扮演 USB 设备 角色(如模拟串口、网卡、U盘),而 USB Host 驱动则让设备可以连接外部 USB 外设。一个硬件平台可以同时具备 Host 和 Device 两种能力(OTG)。

1.2 USB物理层与电气特性

USB 物理层定义了电缆、连接器、信号电平、编码方式等底层规范。理解物理层是进行硬件调试和驱动开发的基础。

1.2.1 电缆与连接器

USB 电缆包含 4 根导线(USB 2.0 及以下):

  • VBUS(红色):+5V 电源线,提供总线供电
  • GND(黑色):地线
  • D+(绿色):差分数据正信号
  • D-(白色):差分数据负信号
注意:USB 3.0/3.1/3.2 增加了额外的超高速差分对(SSTX+/-、SSRX+/-),共 9 根导线。在 Gadget 驱动开发中,通常以 USB 2.0 为基础,再扩展支持超高速模式。
USB 2.0 电缆内部结构 电缆外皮(屏蔽层) VBUS (红色) — +5V 电源 D+ (绿色) — 差分数据正 D- (白色) — 差分数据负 GND (黑色) — 地线 差分信号:D+ 和 D- 互为反相,抗干扰能力强

1.2.2 信号电平与编码

角色 功能描述 典型组件
USB 主机 (Host) 总线主控者,负责调度所有传输、管理带宽、检测设备插拔 主机控制器 (HC)、根集线器 (Root Hub)
USB 设备 (Device) 响应主机请求,不能主动发起通信;分为功能设备和集线器 U盘、鼠标、键盘、摄像头、串口转换器
集线器 (Hub) 端口扩展器,负责转发信号、检测设备连接/断开、电源管理 根集线器、外部集线器
NRZI 编码:Non-Return-to-Zero Inverted。数据位为 0 时信号翻转,数据位为 1 时信号保持不变。配合位填充(Bit Stuffing)机制,在连续 6 个 1 后插入一个 0,保证接收端时钟同步。

1.2.3 设备速度检测机制

USB 主机通过检测 D+ 和 D- 线上的上拉电阻 来判断设备速度:

  • 低速设备(1.5 Mbps):D- 线上拉到 3.3V
  • 全速设备(12 Mbps):D+ 线上拉到 3.3V
  • 高速设备(480 Mbps):先以全速握手,再切换到高速模式(D+ 上拉 45Ω 到地)
USB 设备速度检测流程 USB 主机 USB 设备 步骤1:设备插入,D+/D- 上拉 步骤2:主机检测总线状态变化 步骤3:主机发送复位信号 (SE0) 步骤4:设备以默认地址 0 响应 高速设备在复位后发送 Chirp K/J 序列,主机检测后切换到高速模式(D+/D- 各接 45Ω 到地)

1.3 USB 主机与设备角色详解

在 USB 协议中,主机(Host) 和 设备(Device) 的角色是严格不对等的。这种设计简化了设备侧的硬件和软件复杂度,但将调度负担全部放在主机侧。

1.3.1 主机职责

  • 检测设备插拔:通过根集线器端口状态变化检测
  • 枚举设备:分配地址、读取描述符、加载驱动
  • 调度传输:管理帧/微帧时间片,分配总线带宽
  • 电源管理:控制总线供电、挂起/唤醒
  • 错误处理:重试、复位、断开设备

1.3.2 设备职责

  • 响应主机请求:被动接收并处理主机发起的控制传输
  • 报告状态:通过端点(Endpoint)返回数据或状态
  • 电源管理:支持挂起/唤醒(远程唤醒需主机允许)
Gadget 驱动核心:在嵌入式 Linux 中,USB Gadget 驱动让设备侧模拟出标准 USB 设备的行为。开发者需要实现描述符(设备描述符、配置描述符、接口描述符、端点描述符)和端点处理函数,让主机能够正确识别和通信。

1.4 本章小结

参数 USB 1.0/1.1 (Low/Full Speed) USB 2.0 (High Speed)
信号电平 0 ~ 3.3V(差分) 0 ~ 400mV(差分)
数据速率 1.5 Mbps / 12 Mbps 480 Mbps
编码方式 NRZI + 位填充 NRZI + 位填充
终端电阻 D+ 上拉 1.5kΩ(全速)
D- 上拉 1.5kΩ(低速)
D+ 和 D- 各接 45Ω 到地
知识点 关键内容
USB 拓扑 星形-级联结构,1 个主机 + 最多 127 个设备,最多 7 层
主机角色 总线主控者,负责调度、枚举、电源管理
设备角色 被动响应,通过端点与主机通信
物理层 4 线(VBUS/GND/D+/D-),NRZI 编码,差分信号
速度检测 通过 D+/D- 上拉电阻判断速度,高速需额外握手
下章预告:第 2 章将深入 USB 协议栈的数据传输模型,包括端点类型、传输事务、帧/微帧结构,以及 Linux 内核中 USB 核心层的实现框架。