一文读懂 USB 协议:大话通用串行总线,从历史、架构到端点通信(上)

1.USB 通用串行总线简介

USB(Universal Serial Bus)是一种广泛应用的通用串行总线标准,它为计算机设备和外围设备之间提供了一种标准的数据传输接口。它是一种即插即用的总线标准,允许用户在计算机上连接和使用各种外围设备,如鼠标、键盘、打印机、扫描仪等。

1280X1280 (3).PNG

f5fd498786ffa6955bccde35c75d1569.jpg

34bd7c59b15488eebbd2beb3b72a89a8.jpg

USB 连接采用 master-slave 的架构,主机(host)设备控制并管理整个 USB 系统。

截止目前,USB 协议总共有四个版本:

  • USB 1.0/1.1:支持最高 12Mbps 的数据传输速度
  • USB 2.0:支持最高 480Mbps 的数据传输速度
  • USB 3.x:包括 USB 3.0、3.1 和 3.2,支持最高 10Gbps 的数据传输速度
  • USB4:支持最高 40Gbps 的数据传输速度,并与 Thunderbolt 3 协议兼容

我们在生活中最常见到的应用 USB 协议的电气连接接口有以下三种:

  • USB Type-A:最常见的标准 USB 接口,用于主机设备
  • USB Type-B:用于外围设备,如打印机、扫描仪等
  • USB Type-C:采用对称设计,可双面插拔,提供更高的功率传输能力

1280X1280.PNG

2.USB 协议的发展历史

在早期的 PC 机上,有串口、并口,就连鼠标键盘、 游戏手柄都有特定的接口。而且这些接口都不支持热插拔,必须在 PC 机开机之前插入设备才可以正常使用。 此外,这些不同的接口还需要占用宝贵的 CPU 资源(比如硬件中断、DMA 通道等)。

1280X1280 (1).PNG

对于 90 年代初期的电脑来说,除去串行 COM 口、PS2 键鼠接口、RS232 接口(彼时,仅有高端电脑主板才会自带这三个接口)外,其余大部分模块都需要通过 PCI、AGP 和 ISA 并行接口进行连接,比如常见的显示卡、声卡、网卡、视频解码卡、LPT 打印机接口等,甚至许多低端计算机由于 CPU 浮点运算性能羸弱,若想要图形化界面,还需要外接“协处理器”(如 80386 搭配 80387 协处理器)

1280X1280 (2).PNG
在 USB 出来之前,资料的传输主要是使用并口传输

为了解决这些问题, Ajay Bhatt 提出了通用串行总线的概念即 USB,USB 的一个核心设计理念就是,为 PC 机上各种各样的接口提供一种统一的解决方案的同时,替换掉电脑主板上各式各样的众多接口和插槽。

6e69f146-4ffc-42a3-9d93-c29a1fc3d3b4.png

Ajay Bhatt 和他的团队在 Intel 与 IBM、微软、DEC、NEC、Compaq 和 Nortel 等六家公司共同进行研发,最终 1995 年,第一个支持 USB 的集成电路由 Intel 生产,并且于 1995 年 11 月发布了第一版可用于商业的 USB 1.0 RRC 标准,同时七家公司一起创办了非营利组织 USB-IF(USB 开发者论坛)。在此之前,USB 0.8、USB 0.9 和 USB 0.99 于当年作为“预发布版”发布,但尚未投入商业使用。

35ea66bb-86f8-4adc-97b4-934eaeba3bd9.png

USB 1.0 提供两个通信速率模式:

  • 低速版本(Low Speed)​:通信速率为 1.5 Mb/s
  • 全速版本(Full Speed)​:通信速率为 12 Mb/s

USB 1.0 可以进行自适应配置,无需用户更改设备设置就可以自动适应外围设备。该接口还支持热插拔,因此无需重新启动主机即可更换设备。尽管它是 USB 的第一个商业版本,但并未被市场广泛接受,可供消费者使用的设备也很少。

有趣的是,虽然是 Intel 公司是首个投资 USB 技术的公司,但世界上第一个采用 USB 技术的产品却并非是 Intel 公司开发的(但是世界上第一个支持 USB 的集成电路由 Intel 生产的,注意区分!)。世界上第一个采用 USB 技术的产品是苹果公司在 1998 年发布的 iMac G3,它采用了 1998 年制定的 USB 1.1 标准。

95e4ea4d-28e0-4279-9e30-cf3fc07dbe84.png

随着市场对 PC 及其各种外围设备的兼容度越来越高,同时应用程序愈加复杂,对于数据传输速率要求也逐渐增高。USB2.0 于 2000 年 4 月发布,除了兼容 USB 1.x 全速信号传输之外,还增加了支持更高的最大信号传输速率 480 Mbit/s 的运行模式,称为​高速模式(High Speed )​。USB 2.0 还为多媒体和存储设备提供即插即用功能,并支持使用高达 5 V 和 500 mA 的 USB 连接器的电源。

9827bc0c-2e00-4db7-8542-7017df54f024.png

为了满足对通信速率日益增长的需求,在 2008 年 USB-IF 推出了 USB3.0 的标准, 可以达到 5Gbit/s 的速率,称为 SuperSpeed超高速​​模式​。之后的还有 SuperSpeed+ 模式和​SuperSpeed++ 模式​,理论上可以达到 10Gbit/s 和 20Gbit/s 的速率。

USB 各个版本的通信速率与特性变更可看下表:

6e8f1682-9d61-44fb-9b48-581397181801.png

3.USB 系统概述

USB 系统是一种"阶梯式星型拓扑(Tiered star topology)"结构的主从通信系统。 它由一个主机(host)和最多 127 个外设(Devices 或者 Peripheral)构成。

2d93b41e-3dcf-41b8-9c07-20390b319a1c.png

外设有功能外设(Functions)和集线器(HUB)两种:

  • 功能外设(Functions)​:不能够挂载其他 USB 设备的设备,我们常见的鼠标键盘等都是功能外设
  • ​集线器​(​​HUB)​:提供了扩展 USB 接口能力的外设,即可以挂载功能外设,也可以挂载集线器

通过集线器级联(集线器上挂载集线器)可以扩展挂载更多的外设,最终形成左图所示的一个金字塔结构, 塔尖上是主机和根节点集线器,可以连接功能外设或者集线器,逐层向下,形成阶梯式星型连接拓扑,也就是所谓的"Tierd star topology"。 协议规定最多到 7 层网络,也就是 5 个集线器的级联。

USB 采用轮询的广播机制传输数据,所有的传输都是由主机发起的,同一时刻只允许一个数据包传输。 设备通过 7 位总线地址加以区分,其中地址 0 保留不可由用户使用,用于未分配地址的设备,因此一个主机最多支持 127 个设备。

一个外设挂在总线上之后,必须先通过枚举操作,才可以使用。枚举操作一方面是为了上面所说的分配地址, 另一方面是通过获取设备的描述符,确定设备类型、生产厂商等信息,供 host 选择相应的驱动。 在 USB 协议中把功能设备根据不同的功能,又作了细分比如 HID, CDC 等,我们将在后续介绍中予以详述。

我们已经提到USB上所有的通信都是由主机发起的。这就意味着任何两个设备之间是不能够直接通信的。 即使设备有数据需要发送给主机,也必须等待主机的指令但有一种情况例外,当一个设备被主机置于挂起"Suspend"的状态下, 设备可以向总线上发送一个远程唤醒"remote wakeup"信号

早期的 USB 系统,一般都是用作 PC 的外设扩展,所以主机通常都是 PC 机,任何连接到 PC 机上的设备都是外设。​ 随着智能设备或者说是手持设备的兴起,产生了一种需求,希望这类设备即能够以外设的身份连接 PC 机, 又能够以主机的身份通过 USB 系统进行扩展。因而产生了所谓的OTG设备(On The Go),它在物理连线以及通信协议上都作了一些调整, 使得设备能够在主机和从机之间切换。

总体上来说,USB 接口使用起来很方便,它为各种外设提供了一种统一的接口。但由于它的通用性,也就导致了协议相对来说比较复杂, 涉及了方方面面的内容。下面简要的对各个方面进行介绍。

4.USB 物理接口

由于 USB 是一种主从结构的系统,所以一定是主机与外设之间的连接。为了防止连线错误,USB 的线缆两端的接头一定是不同的。 接入主机端的接头一般被称为 A 型接头,外设端的接头则是 B 型接头。

bbea54dc-bcee-444e-baf6-1e62c4685fa1.png

下图列出了一些常见的 USB 接头。

107a9bb0-2477-47b5-b32c-793979cfe361.png

标准的 USB2.0 接口和线缆都是 4 线的,其中 VBUS 和 GND 分别是电源线和地线,用于给一些 USB 设备供电。 VBUS 通常提供的是 5V 的电压。D+ 和 D-则是一对差分双绞线,用于传送数据, 这点与我们在串口通信中提到的 485 串口有些相似, 只是线上的电压不一样。使用差分信号的好处是这些信号不易受到周围设备的电磁干扰。它们也不会发出任何可能影响周围电子设备的电磁辐射,这一点非常重要,因为 USB 协议旨在围绕微处理器和微控制器等敏感设备工作。

9ce9bdfb-ea46-4a3f-80c1-402033aa07a1.png

whiteboard_exported_image (2).png

后来针对 USB OTG 设备,人们又提出了 Mini 型接头和 Micro 型接头,线缆和接头也从原来的四线变成了五线。 多出来的线被标记为 ID 信号线,用于区分设备的身份:

  • ID 线接地时​:表示设备初始身份为 host 主机,为 A 类设备
  • ID 线悬空或者接高时​:表示设备初始身份为 device 设备,为 B 类设备

USB 主机可以通过线缆上的 VBUS 线,给设备供电,设备根据是否需要主机提供电流可以分为以下两种设备:

whiteboard_exported_image (3).png

  • "bus-powered"设备​:从 VBUS 上获取电流的这类设备称为"bus-powered"设备,该类别可进一步分为高功率设备和低功率设备:
    • 高功率设备(High-power devices): 需要 500ma 左右电流的设备
    • 低功率设备(Low-power devices):需要电流小于 500ms 的设备
  • "self-powered"设备​:选择自供电的设备称为"self-powered"设备

需要注意的是,设备是不可以给主机供电的,也就是设备的 VBUS 线是不能够向总线上灌电流的。

USB 是一种支持热插拔的通信总线,在 USB 协议中,主机(Host)能够通过检测 D+ 和 D-线电平变化来判断设备是否插入:USB 设备连接后,会将 D+ 和 D- 两根信号线拉高到特定的电平组合,主机会监测 D+ 和 D- 线的电平状态,根据不同的电平组合识别出连接的设备类型。

我们来看一下常见的主机端与设备连接的电路图:

ee2404c4-d2d4-4b4a-8e6f-29774f321432.png

可以看到,在主机或集线器的端口上,D+ 和 D-差分信号线都被一个 1.5K 的电阻下拉到地。

对于 USB 设备而言,分为两种情况:

  • 对于低速设备​:D-信号线会上拉一个 1.5K 的电阻
  • 对于高速/全速设备​:D+ 信号线会上拉一个 1.5K 的电阻

当设备插入端口上时,接有上拉电阻的信号线上的电平由上下拉电阻分压,在接线器看来就是一个高电平信号,集线器就检测到了设备插入,它将这一信号直接或者经过上级集线器报告给主机吗,然后主机根据 D+ 或者 D-上的电平来确定新插入设备的通信速率。

对于高速设备而言,主机会优先判定为全速设备,然后通过与设备的进一步数据交互切换到高速模式下。

posted @ 2026-09-01 18:51  FreakStudio  阅读(6)  评论(0)    收藏  举报