USB 2.0 与 USB 3.2
通用串行总线
在 USB 诞生之前,电脑的接口十分混乱,常用的有给键盘、鼠标等使用的 PS/2 接口,有给调制解调器(猫)、控制器(摇杆)、路由器等使用的 COM 接口(也就是串口),有给打印机、摄像头等用的 LPT 接口(也就是并口),除此之外,还有各种各样的接口类型,比如 DNI 接口,TRS 端口(其中 3.5mm 的 TRRS 接口 也就是熟知的 3.5mm 耳机接口)等:
各种各样繁杂的接口类型使得给电脑添加外设变得十分困难,设计一种能够通用于各种外设的接口是一件很有必要的事情。在这种环境下,USB 就如其名字一般,作为通用串行总线(Universal Serial Bus)诞生了。
USB 规范
标准命名
USB-IF 官方所定义的标准 USB 规范一共有三个,USB 2.0,USB 3.2 和 USB4(值得注意的是,官方规范中 USB 与 4 之间是没有空格的,而 2.0 和 3.2 则有)。
除去还没有在市场中流行的 USB4 外,USB 规范只有少得可怜的两种,这显然有点违背直觉。事实上,这是 USB-IF 频繁对 USB 标准进行改名的后果,例如,在 USB 2.0 推出后将 USB 1.0 和 USB 1.1 也更名为 USB 2.0; 在 USB 3.1 / USB 3.2 推出后将所有 USB 3.x 规范重命名为 USB 3.1 / USB 3.2 等。这种行为也间接导致了市场上的命名混乱,很多产品仍然在使用旧的命名。
下表展示了 USB-IF 指定的标准命名和市场上仍在使用的旧命名之间的关系:
规范版本 | 标准命名 | 市场旧命名 | 最高传输速度 | 市场代号 |
---|---|---|---|---|
USB 2.0 | USB 2.0 LowSpeed | USB 1.0 | 1.5Mbps | LowSpeed |
USB 2.0 FullSpeed | USB 1.1 | 12Mbps | FullSpeed | |
USB 2.0 HiSpeed | USB 2.0 | 480Mbps | Hi-Speed | |
USB 3.2 | USB 3.2 Gen 1 USB 3.2 Gen 1x1 |
USB 3.0 USB 3.1 Gen 1 |
5Gbps | SuperSpeed |
USB 3.2 Gen 2 USB 3.2 Gen 2x1 |
USB 3.1 USB 3.1 Gen 2 |
10Gbps | SuperSpeed+ | |
USB 3.2 Gen 1x2 | ||||
USB 3.2 Gen 2x2 | 20Gbps |
需要注意的是,USB 3.2 Gen 2x1 和 USB 3.2 Gen 1x2 虽然传输速率相同,但并不是同一个规范。USB 3.2 Gen axb 并不是随便起的,其中 a 指的是规范的版本,b 指的是通道数,2x1 指的是规范版本 2(10 Gbps)的单通道模式,1x2 指的是规范版本 1(5Gbps)的双通道模式,这同时会影响到接口类型的选择(双通道模式只能选择 Type-C 接口)。
值得高兴的是,USB4 抛弃了这种愚蠢的小数点和 Gen 的表示方式,而是使用实际速率来表示其版本,例如 USB4 20 表示 20Gbps 的 USB4 版本,USB4 40 表示 40Gbps 的 USB4 版本。不管怎么说,直接写明速度总比一眼看过去一头雾水的小数点和 Gen 要好得多。
遗憾的是,随着 2022 年 9 月发布的 USB4 version 2.0 标准,USB4 又双叒叕用回了 USB4 Gen2, USB4 Gen3, USB4 Gen4 这种愚蠢的命名法。让我们说一声:Fxxk You USB-IF。
向下兼容性
USB 能过盛行的另一个原因就是它极强的向下兼容性(Backward Compatibility),你无需关心设备和主机接口所支持的 USB 版本,只要它们连接在一起,就可以以二者中版本更低的那一方为标准进行数据传输。
接口
屠龙者自成恶龙,USB 为解决接口混乱而诞生,但是其本身却有许多的接口类型。不过所幸大家都是 USB,通过转接头,一种 USB 接口就能轻松连上另一种 USB 接口。近些年来随着 Type-C 的推行和普及,Type-C 也有望统一 USB 接口。
每一种接口都分为公头和母头,其关系用通俗一点的语言来讲,就是插和被插(就连公头和母头对应的英语都是 male 和 female)。公头和母头的针脚完全相同,仅仅是接口的形状一个凸一个凹。
USB 的向下兼容性也体现在 USB 的接口设计中,通过后面的接口示意图,你可以发现所有 USB 3.2 接口在设计上都包含了 USB 2.0 的部分,因此将 USB 2.0 的公头插入 USB 3.2 的母头中,设备也可以正常以 USB 2.0 工作(但是反过来有时候不行,因为 USB 3.2 的公头可能会比 USB 2.0 的母头大)。
标准接口
Type-A 是电脑提供的母头中最为常见的一种,如今常用的鼠标、键盘、外置硬盘等大部分外设都使用该接口的公头。
判断一个 Type-A 接口是 USB 2.0 还是 USB 3.2 最好的办法就是数针脚:
- USB 2.0 接口只有底部的四根针脚
- 在 USB 3.2 公头上,USB 3.2 除了有 USB 2.0 的那四根针脚外,在更内部还有五根比较高的 USB 3.2 专用针脚
- 在 USB 3.2 母头上则相反,外侧是 USB 3.2 的五根针脚,内侧是 USB 2.0 的四根针脚。
也正是由于 Type-A 的两组针脚前后有位置差,当连接两个 USB 3.2 Type-A 接口时,USB 2.0 的针脚会率先接触。如果插入的速度很慢,直到 USB 2.0 识别完成,USB 3.2 的针脚都还没接触,之后即使插到底,本次连接也只会使用 USB 2.0 传输数据了。
Type-B 相对没有那么常用,打印机和专业的仪器用的比较多,它的 USB 3.2 接口是在 USB 2.0 接口的基础上,顶端增加了五根 USB 3.2 的针脚。
Type-C 是相对比较新的接口,它支持正反插,因此也比一般的 USB 接口多了许多针脚(针脚功能几乎是上下左右全对称的)。
最后,需要注意的是 USB 3.2 Gen 1x2 和 USB 3.2 Gen 2x2 使用了双通道传输的设计,仅有 Type-C 接口可以支持 USB 3.2 Gen 1x2 和 USB 3.2 Gen 2x2,不存在也不可能存在支持 USB 3.2 Gen 1x2 和 USB 3.2 Gen 2x2 的其他类型的接口。另外,USB4 标准强制只能使用 Type-C 接口。
Mini 接口
Mini 接口多见于旧式的按键手机、MP3、读卡器上,由于 Micro 接口比 Mini 接口更加小巧,所以后期 Mini 接口几乎全面被 Micro 接口所取代,而 Mini 接口本身也没有推出 USB 3.2 的版本,可以说已经被时代所抛弃了。
值得注意的是,Mini-AB 接口没有公头,Mini-AB 母头的作用是既可以插入 Mini-A 公头又可以插入 Mini-B 公头。
Mini 接口一共有五根针脚,比标准接口多出来的那跟针脚叫做 ID 针脚,这根针脚的作用是区分 OTG 中的主设备。通常,USB 必须要一端连接主机,另一端连接设备才能工作,而所谓 OTG(On-The-Go)技术,就是在没有主机的情况下,使两个相连设备的其中一方成为主机。通常,一根 USB OTG 线的其中一端 ID 针脚接地,另一端则悬空,当两头插入 OTG 设备时,识别到 ID 针脚接地的 OTG 设备就会将自己转换为主设备。
Micro 接口
Micro-A 几乎连昙花一现都称不上,还没有在市场中流行起来就被抛弃了。Micro-A 没有母头,公头只能连接 Micro-AB 的母头。
Micro-B 也就是我们俗称的 Micro-USB,因为其接口十分的小巧,因此被早期的智能手机广泛采用,几乎完全取代了 Mini 接口的市场。
然而,也正是因为其太过于小巧,以至于几乎不可能在不改变它的外形的前提下,增加对 USB 3.2 的支持,所以可以看到 Micro-B 3.2 接口是多么的臃肿和丑陋,完全失去了 Micro-B 的优势。
但是 USB 2.0 的传输速率实在堪忧,支持 USB 3.2 乃是大势所趋,仅仅只比 Micro-B 2.0 接口大一点点的 Type-C 接口显然就是最好的替代品。
Micro-AB 与 Mini-AB 类似,没有公头,母头既可以插入 Micro-A 公头也可以插入 Micro-B 公头。
针脚
从 USB Type-A 2.0 的 4 根针脚到 USB Type-C 的 24 根针脚,究竟发生了什么导致了针脚数量的暴增?
让我们来看看每一根针脚是用来做什么的。
USB 2.0: 4 根针脚
使用 4 根针脚的 USB 2.0 接口有 Type-A 和 Type-B,以 Type-A 为例:
针脚 | 定义 | 作用 |
1 | VBUS | 供电针脚 |
2 | D- | 数据针脚负极 |
3 | D+ | 数据针脚正极 |
4 | GND | 接地针脚 |
供电和接地没啥好说的,我们来说说数据针脚。连接在数据针脚的两根数据传输线设计为双绞线,它们各自使用半双工的差分信号并协同工作,以抵消长导线的电磁干扰。半双工是指主机与设备可以双向传输数据,但是同时只能进行一个方向的传输。差分信号是指在两根数据线上都传输信号,这两个信号振幅相同,但是相位相反。
USB 2.0: 5 根针脚
使用 5 根针脚的 USB 2.0 接口包含所有 Mini 接口和所有 Micro 接口,以 Micro-B 为例:
针脚 | 定义 | 作用 |
1 | VBUS | 供电针脚 |
2 | D- | 数据针脚负极 |
3 | D+ | 数据针脚正极 |
4 | ID | OTG 识别针脚 |
5 | GND | 接地针脚 |
这类接口比 4 根针脚的接口多了一根 ID 针脚,正如之前所介绍,通常一根 USB OTG 线的其中一端 ID 针脚接地,另一端则悬空,当两头插入 OTG 设备时,识别到 ID 针脚接地的 OTG 设备就会将自己转换为主设备。
USB 3.2: 9/10 根针脚
这类接口就是在 USB 2.0 接口的基础上增加了 5 根 USB 3.2 专用针脚,因此不专门介绍 10 根针脚的情况了。这里以 9 根针脚的 USB Type-A 3.2 接口为例:
针脚 | 定义 | 作用 |
1 | VBUS | 供电针脚 |
2 | D- | 数据针脚负极 |
3 | D+ | 数据针脚正极 |
4 | GND | 接地针脚 |
5 | StdA_SSRX−/StdB_SSTX- | SuperSpeed 差分信号接收针脚负极 |
6 | StdA_SSRX+/StdB_SSTX+ | SuperSpeed 差分信号接收针脚正极 |
7 | GND_DRAIN | 地漏针脚 |
8 | StdA_SSTX-/StdB_SSRX− | SuperSpeed 差分信号发送针脚负极 |
9 | StdA_SSTX+/StdB_SSRX+ | SuperSpeed 差分信号发送针脚正极 |
可以看到,USB 3.2 使用了四根针脚用于数据传输,同样是使用双绞线,但是与 USB 2.0 不同的是,USB 3.2 将发送信号和接收信号的针脚分开,以此支持全双工模式,也就是信号可以互不干扰地同时在两个方向上传输数据。注意 A 型接口和 B 型接口对差分信号针脚的命名不同。地漏针脚也是一个接地针脚,它作为排扰线(Drain Wire)的末端,控制 EMI(Electromagnetic Interference)并保持信号完整。
USB Type-C: 24 根针脚
母头针脚定义:
针脚 | 定义 | 作用 |
A1/B1 | GND | 接地针脚 |
A2/B2 | TX1+/TX2+ | SuperSpeed 差分信号发送针脚正极 |
A3/B3 | TX1-/TX2- | SuperSpeed 差分信号发送针脚负极 |
A4/B4 | VBUS | 供电针脚 |
A5/B5 | CC1/CC2 | 配置通道信号针脚 |
A6/B6 | D+ | 数据针脚正极 |
A7/B7 | D- | 数据针脚负极 |
A8/B8 | SBU1/SBU2 | 边带使用针脚 |
A9/B9 | VBUS | 供电针脚 |
A10/B10 | RX2-/RX1- | SuperSpeed 差分信号接收针脚负极 |
A11/B11 | RX2+/RX1+ | SuperSpeed 差分信号接收针脚正极 |
A12/B12 | GND | 接地针脚 |
USB Type-C 最大的特色就是支持正反插,所以我们可以看到它的针脚定义十分的对称,接地针脚 GND 和供电针脚 VBUS 均由 1 根变成了 4 根。USB 2.0 和 USB 3.2 的差分信号针脚也变成了原本的两倍。
注意到公头上并没有 B6 和 B7,这是因为当以 USB 2.0 传输时,正插公头 A6/A7 连接母头 A6/A7,反插公头 A6/A7 连接母头 B6/B7,不需要公头上的 B6/B7 就已经足够完成数据传输。而 USB 3.2 本应同理,可以去掉公头上的一半,但是为什么没有去掉呢?这是因为 Type-C 在设计上支持双通道模式,即同时使用 8 根针脚让带宽提高一倍,这也是为什么只有 Type-C 支持 USB 3.2 Gen 1x2 和 USB 3.2 Gen 2x2 的原因,其他接口没有足够数量的针脚来支持双通道模式。
Type-C 相比于一般的 USB 3.2 接口还额外增加了一组 CC 针脚和 SBU 针脚。
CC 针脚的作用是区分正反插,可以看到公头上只有 CC1,对应 CC2 的针脚是 VCONN 针脚,该 VCONN 针脚的作用是给线缆上的可选设备供电,而公头上的 CC1 则用来承载真正的配置通道(Configuration Channel)信号,当母头上的 CC1 针脚收到该信号时,识别为正插,当母头上的 CC2 针脚收到该信号时,识别为反插。当然,CC 提供的功能远不止于此,如果对 CC 的工作模式感兴趣的话,可以参考我另一篇专门讲解 CC 的文章:Type-C 接口 CC 针脚的工作模式。
SBU 针脚即边带使用(Sideband Use)针脚,用于支持备选模式(Alternate Mode),允许 Type-C 传输其他高速协议(如 DisplayPort),或支持音频适配器配件模式(Audio Adapter Accessory Mode),可以转接到我们常用的 TRRS 接口(3.5mm 耳机接口)。
USB 2.1
能听说过 USB 2.1 的,想必也是行内相关人士了,这个没有列在规范版本中但是却又符合规范的定义的版本究竟是怎么一回事呢?
bcdUSB
我们首先要了解一个概念叫做 BCD(Binary-Coded Decimal),这是一种使用二进制数来表示十进制数的编码方式。举个例子,0x42
,它的字面值是十六进制的 42
,十进制的 66
,但是它实际表示的却是十进制的 42
。这种格式的优点是方便在计算机储存格式和人可读格式之间快速转换。
USB 规范中定义了许多描述符,用来报告 USB 各种功能的配置,位于最顶层的是设备描述符(Device Descriptor),其他描述符都是它的子成员。USB 设备需要在设备描述符中向主机报告自己所使用的 USB 规范版本,该数值就用一个叫做 bcdUSB
的成员变量来表示,它的格式是 0xJJMN
,表示自己使用的 USB 规范版本是 JJ.M.N
。例如,如果使用 USB 3.2 gen 2x1 (前 USB 3.1),那么应该报告 0x0310
。
BOS 描述符与 LPM
在 USB 2.0 规范中,有一个后来追加的 BOS 描述符(Binary device Object Store Descriptor),其在 USB 2.0 中的作用有且只有一个,报告设备是否支持 LPM(Link Power Manager)。
在 LPM 提出之前,USB 设备主要有三种电源状态:
- 全速运行
- 挂起(Suspend)
- 无连接
挂起状态是一种节能状态,但是有一定的局限性,只在设备闲置很长时间时才实用,并且对设备的功耗有严格的限制。
为了实现更细粒度的电源管理并克服选择性挂起的限制,USB 2.0 规范提出了新的电源状态 L1,而将上述的三种状态命名为 L0, L2, L3。L1 状态是一种链路级状态(Link Level Status),进入和退出时间从几十微秒到几毫秒不等,即使设备闲置时间很短,也能进入 L1 从而实现节能。而实现 L1 功能的机制就是 LPM。
USB 2.1 还是 USB 2.0.1
但是 LPM 并不是我们重点需要了解的东西,我们需要关注的是 USB 2.0 规范中的这么一句话:
Devices that support the BOS descriptor must have a
bcdUSB
value of 0201H or larger.
支持 BOS 描述符的设备必须将自己的 bcdUSB
设置为 0x0201
或者更大。按照规范的理解,该 USB 规范的版本是 0x0201
也就是 USB 2.0.1。
但是,不知道是谁带了这个头,很多厂商都错误的把它当成了 0x0210
,更巧的是,USB 2.0 规范只是说大于 0x0201
就可以,也就是说,任何一个不是 0x0200
的 0x02mn
的 bcdUSB
都是等效的。这么将错就错下来,0x0210
反而成为了主流,也就导致了 USB 2.1 这个奇怪的版本的诞生。
或许是 USB-IF 也感觉无法挽回这个误解,在 USB 3.2 的规范中,正式认可了 0x0210
为标准:
Devices with a value of at least 0210H in the
bcdUSB
field of their device descriptor shall support GetDescriptor (BOS Descriptor) requests.
为了方便沟通,我们可以称呼一个支持 LPM 的设备是 USB 2.1 设备,但是一定要牢记,从未出现过 USB 2.1 这个版本的规范,免得闹了笑话。
非规范:Powered USB
Powered USB 也称 USB +Power,允许更高功率的设备通过其 USB 主机获得电源,而不需要独立的电源或外部交流适配器,或是支持主机 USB 接口的关机充电功能。该变体未能得到 USB-IF 的承认,目前专利在 IBM 手上。
Powered-B 型 3.2 接口还比常规 B 型 3.2 接口多了两根针脚,用来额外提供电源。
判断接口的 USB 版本
大部分 USB 接口在 USB 2.0 和 USB 3.2 外观上就有很大的区别,基本上不太可能认错。因此,基本上需要注意的只有 Type-A 接口。
数针脚
这是最直接也是最可靠的方法,如果一个 Type-A 接口不支持 USB 3.2,那它必然不会有 USB 3.2 那五根针脚,否则就是在平白无故增加制造成本。
首先来看 Type-A 母头,无论是 2.0 母头还是 3.2 母头,内侧一定有四根 USB 2.0 的针脚,并且呈现凸起状;在 3.2 母头中,外侧多了五根专用针脚,并且紧紧地贴合在侧壁上:
Type-A 公头和母头完全相反,在外侧紧贴在侧壁上的是 USB 2.0 的四根针脚,而在内侧呈现凸起状的是 USB 3.2 的五根针脚:
看标志
通常,PC 正面板上的每一个 USB 母头上都会带有一个标志,这个标志一般厂商不会骗你,也可以通过这个标志来判断接口所支持的 USB 版本。
USB 2.0 的标志形状像一个三叉戟:
而 USB 3.2 的标志将头顶的小圆圈替换成了字母 SS
,表示 SuperSpeed,右上角的数字 5
表示其支持的最高传输速度为 5Gbps,换而言之,它是一个 USB 3.2 Gen 1x1 接口:
作为拓展,我们再来看一下 USB4 的标志,数字 40 表示它支持 40 Gbps 的传输速度:
看颜色
看颜色是最不推荐的方法,接口颜色并非是 USB 规范的一部分,只是厂家做出来以区分不同 USB 版本以作为买点来宣传用的。以下列出的多为近些年来比较常见的颜色方案:
USB 版本 | 接口颜色 |
---|---|
USB 2.0 | 黑色/白色 |
USB 3.2 5Gbps | 蓝色 |
USB 3.2 10Gbps | 红色/青色 |
USB 3.2 20Gbps | 只能是 Type-C 接口 |
当然,很多厂家也喜欢把自己的接口设计成各种颜色来增加颜值,比如雷蛇的鼠标 USB 接口设计为绿色,实际是 USB 2.0 接口,有些键盘、耳机的 USB 接口设计为红色,实际上也是 USB 2.0 接口。有些机箱为了整体的颜色设计,会把所有 USB 接口都统一成白色或黑色。
Powered USB 则有一套自己的颜色编码,在电脑主机上通常只会见到黄色版本:
Powered USB 供电电压 | 接口颜色 |
---|---|
5V | 灰色/黄色 |
12V | 蓝绿色/黑色 |
19V | 紫色/黑色 |
24V/25V | 红色/黑色 |
参考
Are Micro A USB plugs actually ever used? - StackExchange
Universal Serial Bus Specification Revision 2.0 - USB-IF
USB 2.0 Link Power Management Addendum - USB-IF
Universal Serial Bus 3.2 Specification - USB-IF
Link Power Management (LPM) in USB 2.0 - Microsoft Tech Community