USB 是一种串行传输总线,使用差分信号传输数据,USB 设备支持热插拔。
USB 规格及接口
USB 传输速率
USB 标准的不同版本有不同的传输速率和电压电流特性。
标准版本 | 发布日期 | 速率代码 | 最大传输速率 | 电压/电流 |
---|---|---|---|---|
USB 1.0 | 1996 年 1 月 | Low Speed | 1.5 Mbps | 5 V / 500 mA |
USB 1.1 | 1998 年 9 月 | Full Speed | 12 Mbps | 5 V / 500 mA |
USB 2.0 | 2000 年 4 月 | High Speed | 480 Mbps | 5 V / 500 mA |
USB 3.2 Gen1 | 2008 年 11 月 | Super Speed | 5 Gbps | 5 V / 900 mA |
USB 3.2 Gen2 x1 | 2013 年 7 月 | Super Speed+ | 10 Gbps | 20 V / 5A |
USB 3.2 Gen2 x2 | 2017 年 9 月 | Super Speed+ | 20 Gbps | 20 V / 5A |
USB 4 | 2019 年 9 月 | - | 40 Gbps | 20 V / 5 A |
USB IF 组织对 USB 标准的命名几经改动,USB 标准的命名不是很清晰。
USB 物理接口

USB 信号接口
USB 有四根线:VBUS,GND,D+,D-。VBUS 和 GND 是电源和地,D+和D-是差分信号数据传输线。USB 设备有两种供电模式,外部供电和自供电,外部供电时就是通过 VBUS 获得电源。
USB 系统拓扑结构
USB 总线由三部分组成:USB 主机(USB host),USB 设备(USB devices),USB 互联(USB interconnect)。一个USB 系统中仅有一个 USB 主机;设备包括 USB 普通设备和 USB Hub 两种类型;USB 互联指 USB 设备和 USB 主机连接和通信的方式。主机(计算机)上的 USB 接口被称作主机控制器,主机控制器由硬件、固件或软件组合而成,主机(计算机)上除 USB 控制器外,还会集成根集线器(Root Hub)以向外提供一或多个 USB 连接口。
USB 总线拓扑
USB 设备连接到 USB 主机。USB 物理互连采用分层星形拓扑结构。每个星形结构的中心都是一个 HUB,HUB 的上游端口连接到上一层,HUB 的下游端口连接到下一层。如下图所示:

把上图称作一个 USB 系统,那么一个 USB 系统最多支持七层,一个 USB 系统中只有一个 USB 主机,根集线器(Root Hub)集成于 USB 主机内部,去掉第一层和第七层,一个 USB 系统中最多只允许 5 个 USB Hub 级联。一个 USB 主机最多支持 128 个设备地址,地址 0 特殊,只在设备枚举期间使用,地址 0 不能被分配给设备使用,所以一个 USB 系统中最多只能有 127 个设备,Root Hub 以及外接的 Hub 都会占用设备地址,所以实际能接入的普通 USB 设备会少于 127。
USB 物理总线拓扑
USB 系统中各设备与主机通过分层的星形拓扑结构建立物理连接,分层星形结构可以避免连接回环。USB HUB 提供设备连接点,这线连接点就是 USB 端口,HUB 有上游端口和下游端口。根集线器(Root Hub)集成在 USB 主机内。

在硬件上将多个 USB 设备与一个 HUB 组装到一台设备内部,这样的设备称为组合设备(Comound Device) ,如上图所示的组合设备实际包含一个 HUB 设备和两个普通设备,一共三个物理设备,占用三个设备地址,主机能看到三个 VID:PID。在软件上将多个 USB 功能(比如将摄像头视频输入功能、麦克风录音功能)集成在一起,这样的设备称为复合设备(Compsite Device)。复合设备只有一个物理设备,只有一个设备地址,主机上只能看到一个 VID:PID。
看一下主机系统上连接的 USB 设备的情况:
think@stone-suse:~> lsusb -t -v
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
ID 1d6b:0001 Linux Foundation 1.1 root hub
|__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
ID 0e0f:0003 VMware, Inc. Virtual Mouse
|__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/7p, 12M
ID 0e0f:0002 VMware, Inc. Virtual USB Hub
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
ID 1d6b:0002 Linux Foundation 2.0 root hub
|__ Port 1: Dev 2, If 0, Class=Video, Driver=uvcvideo, 480M
ID 046d:08e5 Logitech, Inc. C920 PRO HD Webcam
|__ Port 1: Dev 2, If 1, Class=Video, Driver=uvcvideo, 480M
ID 046d:08e5 Logitech, Inc. C920 PRO HD Webcam
|__ Port 1: Dev 2, If 2, Class=Audio, Driver=snd-usb-audio, 480M
ID 046d:08e5 Logitech, Inc. C920 PRO HD Webcam
|__ Port 1: Dev 2, If 3, Class=Audio, Driver=snd-usb-audio, 480M
ID 046d:08e5 Logitech, Inc. C920 PRO HD Webcam
USB 逻辑总线拓扑
USB 系统中,主机与设备通信时,就像设备是直接连接到主机一样,整个系统的逻辑视图如下:

USB 的四种传输模式
USB 传输的数据有功能数据和控制数据两种。在主机软件和 USB 设备的特点端点之间建议一条数据传输的通道,这条通道叫做管道,管道可能是单向的或双向的。通常,不同管道内的数据流是独立的,一条管道的数据流不受其他管道的影响。一个给定的 USB 设备可能有许多管道。例如,一个给定的 USB 设备可能具有一个输入端点,连接一个输入管道,接收来自主机的数据,还有一个输出端点,连接一个输出管道,将数据发送给主机。
有四种 USB 传输模式:
控制传输
用于在枚举阶段配置设备,也可用于其他设备特定用途,包括控制设备上的其他管道。当设备第一次连上主机时,主机上的软件发送控制数据来配置设备。控制传输是双向传输,是可靠传输。
控制传输中的最大包长:高速设备最大包长是 64 字节;低速设备是 8;全速设备可以是 8 或 16 或 32 或 64。最大包长表示一个端点单次接收/发送数据的能力,实际上就是该端点对应的缓冲区的大小。当一次传输的数据量超过该端点的最大包长时,需要将数据拆分成多个包传输,只有最后一个包可以小于最大包长,除最后一个包外的其他包都应等于最大包长。所以在一次控制传输中,如果一个端点收到/发送了一个长度小于最大包长的包,则表示此次数据传输结束。
批量传输
批量传输用于对延迟要求不高,数据量大的可靠传输,如 U 盘等。批量传输是单向传输,是可靠传输。
批量传输的延迟没有保证。它会尽量用完可用带宽,但跟其他传输模式比量传输具有最低优先级,它适合数据量比较大的非实时数据传输。
中断传输
中断传输用于对延迟要求较高、数据量小的可靠传输,如键盘、鼠标、游戏手柄等。中断传输是一种单向传输,是可靠传输。
中断传输采用轮询的传输方式(并非寻常的软件中断模式),主机以固定间隔对中断端点查询,有新数据则接收。中断并非实时传输,它可以使用较短的轮询间隔以保证较低的延迟。
等时传输
等时传输也称为流式实时传输,用于对可靠性要求不高的实时数据传输,如摄像头等。占用预先协商好的 USB 带宽,具有预先协商好的传输延迟。对于任何给定的设备配置,管道只支持上述传输类型中的一种。等时传输是一种实时传输、是不可靠传输,不支持错误重发机制。
USB 协议的逻辑层次:设备、配置、接口和端点
USB 设备有四个逻辑层次:设备、配置、接口、端点,如下图所示:

设备就是指 USB 物理设备,一个设备有一个 VID(Vender ID) 和 PID(Product ID),如上述打印清单中,罗技 C920 摄像头的 VID:PID 是 046d:08e5。
每个 USB 设备可包含一或多个配置,一个配置就是一组功能组合,不同的配置包含不同的功能组合,在设备枚举阶段,选中其中一个配置来配置设备。配置由多个接口组成。
一个接口代表一个基本功能,是 USB 设备驱动程序控制的对象。接口由多个端点组成。USB 的设备驱动是绑定在 USB 接口级别,而不是设备级别。在上述打印清单中,罗技 C920 摄像头有 4 个接口,2 个视频接口和 2 个音频接口。
端点是 USB 通信的基本对象,主机软件与设备端之间建立一条数据管道,USB 数据在此管道内传输,注意端点位于设备侧,而管道则是在主机软件视角的逻辑通道,USB 主机侧通过管道进行数据收发,USB 设备则通过端点进行数据收发。这里说的"端点"位于 USB 协议的逻辑层面,端点 0 特殊,端点 0 是控制端点,用于在枚举过程中配置设备,端点 0 是双向传输端点,所以逻辑层的端点 0 实际占用了物理硬件上的两个端点(一个输入端点和一个输出端点),除端点 0 外的其他端点都是单向的,每个 USB 设备必须存在端点 0。注意,端点的方向是从 USB 主机侧来看的,输入端点表示主机从端点接收数据,输出端点表示主机向端点发送数据。
以 Xilinx MPSoC 平台 DWC3 USB 控制器为例,规格书中描述此 USB 控制器" Supports 12 endpoints (six out and six in)",它有 12 个物理端点(6 个输入和 6 个输出),控制端点(端点 0)占用两个物理端点(一个输入和一个输出),能用于数据通信的最多只有剩下的 10 个端点(5 个输入和 5 个输出)。
参考资料
1\] Universal Serial Bus Specification Revision 2.0 \[2\] [USB硬件接口](https://www.51cto.com/article/661602.html) \[3\] [USB Compoite Device 与 Compound Device](https://www.usbzh.com/article/detail-1175.html) ## 修改记录 2025-06-14 V1.0 初稿