USB工程应用基础概念简介
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硬件接口
[3] USB Compoite Device 与 Compound Device
修改记录
2025-06-14 V1.0 初稿
USB工程应用基础概念简介的更多相关文章
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- TCP/IP基础概念及通信过程举例
TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...
- XML 参考:XML基础 XML 简介
XML 参考:XML基础 -- XML简介和用途 转:http://www.cnblogs.com/Dlonghow/archive/2009/01/22/1379799.html XML 参考:XM ...
- RabbitMQ基础概念详细介绍
http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...
- UML基础概念(转)
UML基础概念 UML概述 uml简介 uml(unified Modeling Language )为面向对象软件设计提供统一的.标准的.可视化的建模语言.适用于描述以用例为驱动,以体系结构为中心的 ...
- JavaWeb开发技术基础概念回顾篇
JavaWeb开发技术基础概念回顾篇 第一章 动态网页开发技术概述 1.JSP技术:JSP是Java Server Page的缩写,指的是基于Java服务器端动态网页. 2.JSP的运行原理:当用户第 ...
- Java多线程概念简介 多线程中篇(一)
Java的线程与操作系统的线程 在线程的相关介绍中,有讲到“线程的实现”分为三种:内核支持,用户级以及两者混合.(这只是一种简要的分类) Java线程在JDK1.2之前,是用户线程实现的 而在JD ...
- DNA拷贝数变异CNV检测——基础概念篇
DNA拷贝数变异CNV检测——基础概念篇 一.CNV 简介 拷贝数异常(copy number variations, CNVs)是属于基因组结构变异(structural variation), ...
- 第214天:Angular 基础概念
一.Angular 简介 1. 什么是 AngularJS - 一款非常优秀的前端高级 JS 框架 - 最早由 Misko Hevery 等人创建 - 2009 年被 Google 公式收购,用于其多 ...
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析
关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 —— IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Ci ...
随机推荐
- element-ui和ant-design-vue 数字输入框只能输入大于等于1的整数
限制输入的是大于等于1的整数 <template> <div> <h1>ant-design-vue 1.xx</h1> <a-input-num ...
- Redis 通用命令
KEYS 语法: KEYS pattern 功能: 返回所有匹配 pattern 的键 可以使用该命令的Redis版本: 1.0.0 时间复杂度: O(N) N指的是在数据库中的键的数量 不建议在生成 ...
- Docker 实用镜像
实用镜像 nginx-proxy nginx-proxy sets up a container running nginx and docker-gen. ...
- SSL测试证书
1. tomcat 1.1 生成 keytool -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore -validity 365 过 ...
- 使用傅里叶级数和Python表示方波
引言 在信号处理和数字通信中,方波是非常常见的一种波形.方波是一种周期性波形,信号在两个固定的幅度之间跳跃,通常是"高"与"低"的状态.你可能会问,如何通过数学 ...
- oracle的order by 中文排序原理
近期发现oracle的order by中文排序并不是完全按照拼音排序的 经过测试发现oracle的order by中文排序是按照中文的ASCII码排序的 查询字符ASCII码 select ascii ...
- 请详细描述 MySQL 的 B+ 树中查询数据的全过程
MySQL 的 B+ 树中查询数据的全过程 在 MySQL 中,B+ 树被广泛用于实现索引,特别是 InnoDB 存储引擎中的聚簇索引.B+ 树是一种平衡树,具有良好的查询性能.本文将详细描述在 B+ ...
- STM32真的是很落后吗?
STM32真的是很落后吗? 作为一名嵌入式开发老兵,我不止一次听到有人说"STM32已经过时了",尤其是那些刚入门或者看了几篇文章的新手.每当听到这样的言论,我都忍不住想笑,但又有 ...
- 一文搞懂Docker Compose
什么是Docker Compose Docker Compose 是 Docker 的一个编排管理工具,它允许你使用一个 YAML 文件来配置应用程序的服务.通过这个文件,你可以定义多个容器如何通过网 ...
- 最火向量数据库Milvus安装使用一条龙!
向量数据库是大模型应用开发必备组件之一,因为它在知识库.语义搜索.检索增强生成(RAG)等人工智能应用中发挥着举足轻重的作用.但向量数据有很多,为什么要使用 Milvus 呢? 常见向量数据 常见的向 ...