1. USB协议基础:USB总线拓扑结构、主机与设备角色、USB OTG与Gadget概念辨析

1.1 USB总线拓扑结构

USB(Universal Serial Bus)采用分层星型(Tiered Star)拓扑结构,由主机(Host)、集线器(Hub)和设备(Device)三级节点构成。整个拓扑以主机控制器(Host Controller)为根,通过根集线器(Root Hub)向下扩展,最多支持7层(Tier 7),包括主机在内。

关键约束:USB 2.0 规范规定最大层级深度为 7 层(Tier 1 ~ Tier 7),且任意两个设备之间的物理路径不能超过 5 米(使用标准线缆)。USB 3.x 放宽了部分限制,但拓扑层级仍受限于协议。
USB总线拓扑结构图 USB 总线拓扑结构(分层星型) 主机控制器 (Host) 根集线器 (Root Hub) 集线器 (Hub) Tier 2 集线器 (Hub) Tier 2 设备 (Device) 设备 (Device) 设备 (Device) 设备 (Device) 拓扑规则 最大7层(Tier 1~7) | 每个集线器最多连接7个下游端口 | 主机始终是唯一主控

1.2 主机与设备角色

在标准USB协议中,主机(Host)与设备(Device)的角色是固定且非对称的:

角色 职责 典型硬件 协议控制权
主机(Host) 调度总线事务、发起传输、管理枚举、提供电源 PC、笔记本电脑、嵌入式主机板 完全控制(主控)
设备(Device) 响应主机请求、报告描述符、执行端点功能 U盘、鼠标、键盘、摄像头 被动响应(从属)
面试高频点:主机是唯一能发起事务(Transaction)的节点。设备永远不能主动向主机发送数据,只能等待主机发送IN令牌后,才能将数据上传。这是USB协议设计的核心原则。

1.3 USB OTG 与 Gadget 概念辨析

随着移动设备和嵌入式系统的普及,固定角色模式无法满足双角色切换的需求。为此,USB Implementers Forum(USB-IF)先后推出了USB OTG(On-The-Go)和USB Gadget两种解决方案。

1.3.1 USB OTG(On-The-Go)

USB OTG 是硬件规范,允许设备通过ID引脚(Mini/Micro USB的第4脚)或角色协商协议(HNP/SRP)动态切换主机/设备角色。OTG设备必须支持双角色(Dual-Role),即同一端口既可以作为Host,也可以作为Device。

  • ID引脚机制:ID接地 → 设备默认为Host;ID悬空 → 设备默认为Device。
  • SRP(Session Request Protocol):设备请求主机启动Vbus供电。
  • HNP(Host Negotiation Protocol):Host与Device协商角色互换。

1.3.2 USB Gadget

USB Gadget 是软件框架,特指Linux内核中用于实现设备端(Device Side)功能的驱动子系统。Gadget框架允许嵌入式设备模拟成各种标准USB设备(如串口、网卡、存储设备、音频设备等),而无需改变硬件。

常见混淆点:OTG是硬件规范,Gadget是软件框架。一个支持OTG的硬件平台,必须配合Gadget驱动才能实现设备功能;反之,Gadget驱动也可以在纯设备模式的硬件上运行(如开发板的USB Device Only端口)。
USB OTG 与 Gadget 概念关系图 USB OTG 与 Gadget 概念辨析 USB OTG(硬件规范) • ID引脚检测(Host/Device) • SRP 会话请求协议 • HNP 角色协商协议 USB Gadget(软件框架) • Linux 内核设备端驱动 • 模拟串口/网卡/存储/音频 • 依赖 UDC(USB Device Controller) 硬件支撑 核心区别总结 • OTG 解决“硬件上如何切换角色” • Gadget 解决“软件上如何实现设备功能” • OTG 设备需要 Gadget 驱动才能作为 Device 工作 • Gadget 驱动可以在非 OTG 的纯 Device 硬件上运行

1.4 面试核心考点对照表

考点 常见问题 关键回答要点
拓扑结构 USB总线最多支持多少层? 7层(Tier 1~7),主机为第1层
角色固定性 设备能否主动发送数据? 不能,必须等待主机IN令牌
OTG vs Gadget OTG和Gadget是同一回事吗? OTG是硬件规范,Gadget是软件框架
HNP协议 OTG如何实现角色互换? 通过HNP协商,Host→Device或Device→Host
Gadget依赖 Gadget驱动需要什么硬件支持? 需要UDC(USB Device Controller)硬件单元
面试官提示:在嵌入式Linux面试中,面试官常会追问“如果硬件只有USB Device端口,没有OTG控制器,能否使用Gadget框架?”答案是肯定的——Gadget框架不依赖OTG硬件,只要SoC内部有UDC外设即可。OTG只是提供了角色切换的硬件能力。