USB 端口是一种串行端口。毕竟,它的全称是通用串行总线(Universal SERIAL Bus)。我之所以写了两遍,是因为我读过的所有关于 USB 的书籍似乎都对此概念含糊不清。虽然 USB 端口的使用方式存在一些细微和主要的差异,但其基本原理是大致相同的。这是我一段时间前做的,现在需要重新阅读一些资料。(我还计划要么创建一个关于 USB 的 Wiki 书籍,要么加入一个已经开始的项目——我需要对此进行更深入的研究)。

什么是 USB?
USB 是 “Universal Serial Bus”(通用串行总线)的缩写,是一种在 1990 年代中期开发的工业标准。它定义了用于连接、通信和供电的电缆、连接器及通信协议,主要在计算机与各种电子设备之间进行数据交换和供电。USB 的目标是标准化电脑外设(如键盘、鼠标、数码相机、打印机、移动播放器、硬盘、网络适配器等)与个人计算机之间的连接方式。如今,USB 也被广泛应用于智能手机、PDA、游戏机等设备上。它几乎取代了早期各种接口如串口和并口。


USB 闪存盘与读卡器

USB 闪存盘是一种插入 USB 接口即可供电的便携式存储设备,能保存需要快速访问的信息或数据。它体积小、使用方便,非常适合学生和商务人士使用。USB 闪存的容量范围从 1GB 到 64GB 甚至更高,足以存储相当于小型计算机的数据。


USB 的结构与工作机制

USB 通过一系列集线器(hubs)将多个设备连接到主控制器(host controller)。在 USB 术语中,设备被称为功能(functions),因为一个物理设备可能提供多个功能,比如带麦克风的摄像头。而集线器是一种特殊设备,不被归类为功能。所有 USB 总线都存在一个根集线器(root hub),它直接连接在主控制器上。

每个功能/集线器都包含若干管道(pipes),即逻辑通道,类似于 Unix 中的字节流。管道连接主控制器与设备上的一个端点(endpoint)。一个端点可以理解为一个特定的通信点,通常用来读或写数据。

  • 每个方向最多有 16 个端点(编号 0~15),共计最多 32 个单向管道。

  • 每个端点是单向通信的:要么数据进入设备,要么从设备发送出去。

  • 端点 0 是用于 USB 总线管理的,必须支持双向通信,因此默认占用两个端点编号。


数据传输类型

USB 中的数据通过不同类型的管道进行传输,每类管道适用于不同场景:

  1. 控制传输(control transfers):用于传输短命令及其响应,如设备初始化,通常使用管道 0。

  2. 等时传输(isochronous transfers):用于需要保证速率但允许部分数据丢失的实时数据,如音频或视频。

  3. 中断传输(interrupt transfers):用于需要快速响应的设备,如键盘和鼠标。

  4. 批量传输(bulk transfers):用于大量但不需要实时性的传输,如文件传输,利用剩余带宽。

设备连接到总线时,由主控制器为其分配一个唯一的 7 位地址。所有通信都由主控制器主动轮询进行(轮询方式类似轮流询问每个设备)。


设备配置与描述符层级

访问设备端点前,主机需要获取其描述符配置(Descriptors),结构如下:

  • 设备描述符(Device Descriptor):一个设备仅有一个,包含厂商、产品等基本信息。

  • 配置描述符(Configuration Descriptor):一个或多个,代表设备的不同工作模式(如低功耗与活动状态)。

  • 接口描述符(Interface Descriptor):一个配置下可包含多个接口(如摄像头的音频与视频接口)。

  • 端点描述符(Endpoint Descriptor):接口中用于数据传输的具体端点定义。

一个端点可能会被多个接口共享。


主控制器(Host Controllers)

Host Controller Device(HCD) 是面向程序员的接口,由主控制器硬件实现。实质上,它是计算机中的一组硬件寄存器。

USB 1.0/1.1 时期存在两个主控制器接口标准:

  • OHCI(Open Host Controller Interface):由 Compaq 提出,被 USB-IF 采纳为标准。

  • UHCI(Universal Host Controller Interface):由 Intel 提出,需支付授权费用,VIA 公司使用该标准。

两种实现方式导致开发者需要兼容双版本,增加了操作系统和硬件厂商的成本。

USB 2.0 推出后,USB-IF 强制使用统一的 HCD 实现:EHCI(Enhanced Host Controller Interface)

  • 只有 EHCI 支持高速传输(Hi-Speed)。

  • EHCI 控制器包含 4 个虚拟 HCD,以兼容低速和全速设备。Intel 和 VIA 使用虚拟 UHCI,其他厂商使用虚拟 OHCI。


USB 设备类别代码(Class Codes)

每个 USB 设备的描述符都带有一个设备类签名,由类代码(Class Code)子类代码(SubClass Code)、**协议字段(Protocol)**组成,用于指示系统应加载哪种驱动。

  • 同一个设备也可能有多个接口,每个接口有自己的类签名,允许多个驱动同时操作该设备(如音视频设备)。

  • 操作系统可通过这些类代码加载通用驱动,避免每个设备都需要定制驱动。

类代码分配方式:

  • 若类适用于整个设备,则写入 bDeviceClass

  • 若类适用于某个接口,则写入 bInterfaceClass

  • 若多个接口组成一个功能,可通过 接口关联描述符(IAD) 使用 bFunctionClass 统一分配

类代码是一个字节,最多可定义 254 种设备类(0x00 和 0xFF 为保留值)


常见 USB 类别代码汇总:

类别代码 类别说明
0x00 未指定类别,需通过接口类识别
0x01 音频类,例如声卡设备
0x02 通信设备类,例如调制解调器、网卡
0x03 人机接口类(HID),如键盘、鼠标
0x05 物理设备类(较少见)
0x06 静态图像类,符合图片传输协议
0x07 打印机类
0x08 大容量存储类,如U盘、硬盘、读卡器、相机
0x09 USB 集线器(Hub)
0x0A 通信数据类(CDC-Data)
0x0B 智能卡读卡器
0x0D 内容安全类(如DRM设备)
0x0E 视频类,如网络摄像头
0xDC 诊断类(用于 USB 2.0 合规测试)
0xE0 无线控制器类,如蓝牙适配器(仅蓝牙支持设为设备类)
0xEF 杂项类(不常用)
0xFE 应用专用类(如固件更新器)
0xFF 厂商自定义类(需要专用驱动)

以上就是 USB 接口结构、通信机制、设备分类与驱动加载的全面介绍。是否还需要我进一步讲解如何在 MATLAB 或系统层面与 USB 设备通信?

USB 信号传输(USB Signaling)

引脚分配(以插座为视角)

引脚 功能
1 VBUS(4.01–5.25 V)
2 D−
3 D+
4 GND(地)
外壳 屏蔽层(Shield)

助记符:Victor Dashes Across Ground-Zero(Vbus, D−, D+, GND, Shield)

USB 信号通过一对扭绞的数据线 D+ 和 D− 进行传输,采用半双工差分信号,以抵抗电磁干扰。
D+ 和 D− 必须配对使用,它们不是两个单独通道。
信号电平:

  • 低电平:0.0–0.3 V

  • 高电平:2.8–3.6 V


USB 传输模式

USB 支持四种传输模式:

  1. 控制传输(Control):用于发送简单命令和状态信息,通常由端点 0 使用。

  2. 中断传输(Interrupt):用于需要低延迟的设备(如键盘、鼠标)。

  3. 批量传输(Bulk):用于大批量、无实时要求的数据(如文件传输)。

  4. 等时传输(Isochronous):用于音视频等实时传输,带宽可保证但可能丢包。


USB 数据速率

USB 定义了三种数据速率:

速率 最大带宽 典型用途
低速(Low) 1.5 Mbit/s (~187.5 KB/s) 人机接口(HID):键盘、鼠标等
全速(Full) 12 Mbit/s (~1.5 MB/s) 默认速率,用于多数 USB 1.x 设备
高速(High) 480 Mbit/s (~60 MB/s) USB 2.0 高速设备
  • 高速设备常被称作“USB 2.0”,但并非所有 USB 2.0 设备都支持高速

  • 实际应用中,大多数高速设备传输速率为 3–20 MB/s,远低于理论上限。

  • Transaction Translator(事务转换器):用于高速 HUB 中分离高速与低速流量,防止低速设备拖慢整条链路。


数据编码

USB 使用 NRZI 编码(Non-Return to Zero Inverted)

  • 逻辑 1:电平不变;

  • 逻辑 0:电平翻转。

  • 位填充(Bit stuffing):连续 6 个 1 后自动插入一个 0。


Mini-USB 接口信号定义

引脚 功能
1 VBUS(4.4–5.25 V)
2 D−
3 D+
4 ID(用于 OTG 识别)
5 地(Ground)
  • Mini-A 的引脚 4(ID)接地 → 表示为主机;

  • Mini-B 的引脚 4 不接地 → 表示为从设备。


USB 接口类型

标准接口:

  • Standard-A Plug/Receptacle:主机端接口(如电脑)

  • Standard-B Plug/Receptacle:设备端接口(如打印机)

新增接口:

  • Mini-B Plug:较小型设备(手机、相机)

  • Micro-A / Micro-B / Micro-AB Plug:用于 OTG 和移动设备

    • Micro-A(白色塑料)

    • Micro-B(黑色)

    • Micro-AB(灰色)

转接器:

  • 允许的转接器:Standard-A 母 → Micro-A 公(最长 150 mm)

非标准的双 A 或双 B 插头不被 USB 规范支持。


USB 电缆类型

固定电缆(Captive)

  • 一端为 Standard-A / Micro-A 插头,另一端为设备专用接口或不可拆卸。

可拆电缆(Detachable)

  • Standard-A → Standard-B

  • Standard-A → Mini-B

  • Standard-A → Micro-B

  • Micro-A → Micro-B

  • Micro-A → Standard-A 母口(OTG)

低速设备只能使用固定电缆,高速/全速设备支持可拆电缆。


USB 连接器设计优势

  • 坚固耐用:金属外壳+塑料保护舌,防止损坏;

  • 防呆插入:不可反插,插入方向明显;

  • 成本低廉:便于批量制造;

  • 防 EMI 干扰:先接地、后接电源、最后接数据信号;

  • 热插拔安全:有分阶段接触顺序,避免静电和损伤;

  • 大小限制:避免大尺寸设备挡住邻接接口。


USB On-The-Go(OTG)

允许单一端口根据插头判断角色(主机或设备),支持动态切换。
典型用途:PDA 既可接电脑也可连接键盘等外设。


无线 USB(Wireless USB)

在保留 USB 协议兼容性的基础上进行无线扩展。


USB 电缆最大长度

  • 最长为 5 米,超过需使用 USB HUB;

  • 使用 CAT5 可扩展至 50 米;

  • 光纤 USB 延长器可达 10 公里(特制设备)。


USB 供电规范

  • 默认电压:5V

  • 电压范围:4.35–5.25V

  • 默认电流限制:100mA,可申请提升至 500mA

  • 若总电流超标,主机将断电保护

  • 挂起状态(Suspend):

    • 默认限制:500μA

    • 如果已申请唤醒权限并超出100mA配置,可达 2.5mA


多端口与电流限制

  • 总线供电 HUB 最多只能为设备提供 4×100mA = 400mA

  • 需要超过 500mA 电流或超过 4 端口的 HUB,必须外接电源;

  • 操作系统可监控电力负载并提示用户。


进一步阅读推荐


Last modified: Wednesday, 16 April 2025, 11:30 AM