一文读懂 USB 协议:大话通用串行总线,从历史、架构到端点通信(上)
1.USB 通用串行总线简介
USB(Universal Serial Bus)是一种广泛应用的通用串行总线标准,它为计算机设备和外围设备之间提供了一种标准的数据传输接口。它是一种即插即用的总线标准,允许用户在计算机上连接和使用各种外围设备,如鼠标、键盘、打印机、扫描仪等。



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:采用对称设计,可双面插拔,提供更高的功率传输能力

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

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

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

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 于当年作为“预发布版”发布,但尚未投入商业使用。

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 标准。

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

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

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

外设有功能外设(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 型接头。

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

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


后来针对 USB OTG 设备,人们又提出了 Mini 型接头和 Micro 型接头,线缆和接头也从原来的四线变成了五线。 多出来的线被标记为 ID 信号线,用于区分设备的身份:
- ID 线接地时:表示设备初始身份为 host 主机,为 A 类设备
- ID 线悬空或者接高时:表示设备初始身份为 device 设备,为 B 类设备
USB 主机可以通过线缆上的 VBUS 线,给设备供电,设备根据是否需要主机提供电流可以分为以下两种设备:

- "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- 线的电平状态,根据不同的电平组合识别出连接的设备类型。
我们来看一下常见的主机端与设备连接的电路图:

可以看到,在主机或集线器的端口上,D+ 和 D-差分信号线都被一个 1.5K 的电阻下拉到地。
对于 USB 设备而言,分为两种情况:
- 对于低速设备:D-信号线会上拉一个 1.5K 的电阻
- 对于高速/全速设备:D+ 信号线会上拉一个 1.5K 的电阻
当设备插入端口上时,接有上拉电阻的信号线上的电平由上下拉电阻分压,在接线器看来就是一个高电平信号,集线器就检测到了设备插入,它将这一信号直接或者经过上级集线器报告给主机吗,然后主机根据 D+ 或者 D-上的电平来确定新插入设备的通信速率。
对于高速设备而言,主机会优先判定为全速设备,然后通过与设备的进一步数据交互切换到高速模式下。

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