跳转至内容

串行编程/USB

来自维基教科书,开放的书籍,开放的世界

什么是 USB?

[编辑 | 编辑源代码]

USB 代表“通用串行总线”。它是在 1990 年代中期发展起来的一项行业标准,定义了总线中计算机和电子设备之间连接、通信和电源供应所使用的电缆、连接器和通信协议。USB 的目的是标准化计算机外设(包括键盘、指示设备、数码相机、打印机、便携式媒体播放器、磁盘驱动器和网络适配器)与个人计算机的连接,以进行通信和供电。它也已成为其他设备的常见标准,例如智能手机、PDA 和视频游戏机。USB 实际上取代了各种早期的接口,例如串行端口和并行端口。

USB 闪存驱动器是插入 USB 端口并由 USB 端口供电的存储设备。它们存储需要轻松访问的信息和数据。这些设备便携且方便外出的人使用。USB 端口是学生以及企业员工或人员的常用必需品。除了方便之外,它们的存储容量从 1GB 到 64GB 不等,因此最终用户能够存储与小型计算机一样多的信息。

USB 闪存驱动器和读卡器

USB 通过一系列集线器将多个设备连接到主机控制器。在 USB 术语中,设备被称为“功能”,因为每个单独的物理设备实际上可能包含多个功能,例如带有内置麦克风的网络摄像头。集线器是特殊用途的设备,在官方上不被视为功能。始终存在一个被称为根集线器的集线器,它直接连接到主机控制器。

这些设备/功能(和集线器)具有关联的“管道”(逻辑通道)。管道与 Unix 中管道中的字节流同义。管道是从主机控制器到设备上的一个名为“端点”的逻辑实体的连接。术语“端点”有时也用于指代整个管道。

这些端点(及其各自的管道)在每个方向上编号为 0-15,因此一个设备/功能可以拥有多达 32 个活动管道,16 个进入主机控制器,16 个离开控制器。

每个端点只能在一个方向上传输数据,要么进入设备/功能,要么离开设备/功能,因此每个管道都是单向的。但是,端点 0 保留用于双向总线管理,因此它占用了 32 个端点中的两个——所有 USB 设备都需要实现端点 0,因此在任何给定设备上始终存在一个编号为 0 的内向管道和外向管道。

在这些管道中,数据以不同长度的数据包传输。每个管道都有一个最大数据包长度,通常为 字节,因此 USB 数据包通常包含大约 8、16、32、64、128、256 到 512 字节的数据。

管道也通过其“传输类型”分为四类

  • 控制传输 - 通常用于向设备发送简短的简单命令,以及状态响应,例如由总线控制管道编号 0 使用
  • 等时传输 - 以某种保证的速度(通常但不一定是尽可能快)进行,但可能会丢失数据,例如实时音频或视频
  • 中断传输 - 需要保证快速响应(有限延迟)的设备,例如指示设备和键盘
  • 批量传输 - 使用所有剩余可用带宽的大型零星传输(但不能保证吞吐量或延迟),例如文件传输

当设备(功能)或集线器通过总线上的任何集线器连接到主机控制器时,主机控制器会在总线上为其分配一个唯一的 7 位地址。

然后,主机控制器以轮询方式轮询总线上的流量,因此没有设备可以在没有主机控制器的明确请求的情况下在总线上传输任何数据。相应端点上的中断传输实际上不会中断总线上的任何流量:它们只是被安排得更频繁地查询,并且在任何其他大型传输之间查询,因此 USB 总线上的“中断流量”实际上只是高优先级流量。

要访问端点,必须获取层次结构配置。连接到总线的设备有一个(且只有一个)设备描述符,该描述符又有一个或多个配置描述符。这些配置通常对应于状态,例如活动模式与低功耗模式。每个配置描述符又有一个或多个接口描述符,它们描述了设备的某些方面,以便它可以用于不同的目的:例如,相机可能同时具有音频和视频接口。这些接口描述符又有一个默认接口设置,以及可能还有更多备用接口设置,这些设置又具有端点描述符,如上所述。但是,一个端点可以在多个接口和备用接口设置之间重复使用。

主机控制器

[编辑 | 编辑源代码]
USB “A” 型插头

包含主机控制器和根集线器的硬件具有面向程序员的接口,称为主机控制器设备 (HCD),并由硬件实施者定义。实际上,这些是计算机中的硬件寄存器(端口)。

在 1.0 版和 1.1 版中,存在两种竞争的 HCD 实施。康柏的开放主机控制器接口 (OHCI) 被 USB-IF 采用为标准。然而,英特尔随后创建了一个名为通用主机控制器接口 (UHCI) 的规范,并坚持要求其他实施者付费获得 UHCI 的许可和实施权。威盛科技从英特尔获得了 UHCI 标准的许可;所有其他芯片组实施者都使用 OHCI。OHCI 和 UHCI 之间的主要区别在于,UHCI 比 OHCI 更依赖软件驱动,这使得 UHCI 在处理方面略微更密集,但实施成本更低。双重实施迫使操作系统供应商和硬件供应商在两种实施方式上进行开发和测试,这增加了成本。在 USB 2.0 的设计阶段,USB-IF 坚持只使用一种实施方式。USB 2.0 HCD 实施称为扩展主机控制器接口 (EHCI)。只有 EHCI 可以支持高速传输。每个 EHCI 控制器包含四个虚拟 HCD 实施方式,以支持全速和低速设备。英特尔和威盛 EHCI 控制器上的虚拟 HCD 为 UHCI。所有其他供应商都使用虚拟 OHCI 控制器。

类别代码

[编辑 | 编辑源代码]

USB 设备的设备描述符包含一个签名,该签名指示连接到总线的设备类型。该签名由类别代码、子类别代码和协议字段组成。这些字段共同确定应使用哪个操作系统驱动程序与设备进行通信。此外,每个 USB 设备接口描述符都包含相同的签名字段。接口签名允许多个操作系统驱动程序同时与单个 USB 设备进行通信(例如带有音频和视频接口的 USB 设备),并且它们还允许同一驱动程序的多个实例与同一 USB 设备的不同接口进行通信(例如具有多个以太网端口的 USB 以太网适配器)。

连接到总线的设备可以是需要完整自定义设备驱动程序的完全自定义设备,或者可以属于设备类别。这些类别定义了设备和接口描述符方面的预期行为,以便可以使用相同的设备驱动程序用于声称自己是特定类别成员的任何设备。操作系统应该实现所有设备类别,以便为任何 USB 设备提供通用驱动程序。

USB 实现者论坛的设备工作组决定设备类别代码。如果类别适用于整个设备,则类别代码将分配给设备描述符的bDeviceClass字段,如果要为设备上的单个接口设置类别代码,则将其分配给接口描述符的bInterfaceClass字段。还可以使用接口关联描述符对设备的多个接口进行分组,在这种情况下,类别代码将分配给描述符的bFunctionClass字段。类别代码是一个字节,因此最多可以有 254 个不同的设备类别(值 0x00 和 0xFF 保留)。如果bDeviceClass设置为 0x00,操作系统将查看接口关联描述符的bFunctionClass和每个接口的bInterfaceClass以确定设备类别。每个类别还可选地支持子类别协议子定义。随着主要设备类别的不断修订,可以使用这些子定义。

最常用的类别代码(按分配的类别 ID 分组)如下:[1]

0x00 - 未指定类别(设备描述符)
USB 设备没有分配的类别代码。应使用设备接口描述符的类别代码来识别设备支持哪些驱动程序。
0x01 - 音频类别(接口描述符)
接口遵循 USB 音频设备类别规范。此类别代码由声卡类设备使用。
0x02 - CDC / 通信设备类别(设备或接口描述符)
USB 通信设备类别 (“CDC”),用于调制解调器、网卡、ISDN 连接、传真。
0x03 - HID 类别 / 人机接口设备类别(接口描述符)
USB 人机接口设备类别 (“HID”),键盘、鼠标等。
0x05 - 物理设备类别(接口描述符)
?
0x06 - 静态图像类别(接口描述符)
静态图像捕获设备类别,与 USB 上使用的图片传输协议相同
0x07 - 打印机类别(接口描述符)
USB 打印机设备类别,类似打印机的设备。
0x08 - 大容量存储类别(接口描述符)
USB 大容量存储设备类别,用于闪存驱动器、便携式硬盘驱动器、存储卡读卡器、数码相机、数字音频播放器等。此设备类别将设备呈现为块设备(几乎始终用于存储文件系统)。
0x09 - 集线器(设备描述符)
USB 集线器。
0x0A - CDC 数据 / 通信设备类别数据(接口描述符)
CDC-Data(通信类别设备)。
0x0B - 智能卡类别(接口描述符)
智能卡读卡器。
0x0D - 内容安全类别(接口描述符)
内容安全。
0x0E - 视频类别(接口描述符)
USB 视频设备类别,类似网络摄像头的设备,运动图像捕获设备。
0xDC - 诊断设备类别(设备或接口描述符)
诊断设备类别。此类别有一个子类别,用于 USB 2.0 兼容性测试设备。
0xE0 - 无线控制器类别(设备或接口描述符)
无线控制器,例如蓝牙适配器。此类别代码通常仅在接口描述符中使用,只有蓝牙子类别允许在设备描述符中使用。
0xEF - 杂项类别(设备或接口描述符)
?
0xFE - 应用程序特定类别(接口描述符)
?
0xFF - 供应商特定类别(设备或接口描述符)
自定义设备类别 - 用于确定设备或接口不支持任何标准设备类别,并且需要自定义驱动程序。

USB 信号

[edit | edit source]
引脚编号(面向插座)
引脚分配[2]
引脚 功能
  1 VBUS (4.01–5.25 volts)
  2 D−
  3 D+
  4 GND
  外壳 屏蔽

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

USB 信号通过一对扭绞数据线传输,标记为 D+ 和 D−。这些信号共同使用半双工差分信号传输,以对抗更长线路上的电磁噪声影响。D+ 和 D− 通常一起工作;它们不是独立的单工连接。传输信号电平为 0.0–0.3 伏(低电平)和 2.8–3.6 伏(高电平)。

传输模式
[edit | edit source]

USB 支持四种传输模式

  • 控制
  • 中断
  • 批量
  • 同步
传输速度
[edit | edit source]

USB 支持三种数据速率

  • 低速速率,最高可达 1.5 Mbit/s (187.5 kB/s),主要用于人机接口设备 (HID),如键盘、鼠标和操纵杆。
  • 全速速率,最高可达 12 Mbit/s (1.5 [MB/s)。全速是 USB 2.0 规范之前最快的速率,许多设备回退到全速。全速设备在先到先得的基础上划分 USB 带宽,使用多个同步设备时经常会出现带宽不足的情况。所有 USB 集线器都支持全速。
  • 高速速率,最高可达 480 Mbit/s (60 MB/s)。

即使是高速集线器,为多个非高速设备提供服务时,也可能将这些设备的总带宽划分为 12 Mbit/s,除非集线器为每个端口配备事务转换器,否则这会降低它们的运行速度。[3]

虽然高速设备通常被称为 “USB 2.0” 并宣传为 “最高可达 480 Mbit/s”,但并非所有 USB 2.0 设备都是高速设备。高速设备通常只能以一半的理论最大数据吞吐量速率 (60 MB/s) 运行。目前 (2006) 实际设备达到的最大速率约为一半,即 30 MB/s。[4] 大多数高速 USB 设备通常以更慢的速度运行,通常约为 3 MB/s,有时高达 10-20 MB/s。USB-IF 对设备进行认证,并颁发使用特殊营销标志的许可,以便在通过合规性测试并支付许可费后获得 “基本速度”(低速和全速)或高速认证。所有设备都根据最新规范进行测试,因此最近的低速设备也是 2.0 设备。

高速设备旨在插入全速集线器时回退到全速的较慢数据速率。高速集线器具有一个名为 事务转换器 的特殊功能,可以将全速和低速总线流量与高速流量隔离开来。高速集线器中的事务转换器(或根据电气设计可能是在每个端口上)将充当连接到它的全速和低速设备的全速总线。这种隔离仅针对带宽;有关电源和集线器深度的总线规则仍然适用。

集线器将有一个或多个事务转换器,并且没有标准方法来确定集线器可能具有的事务转换器数量。连接到一个事务转换器的所有低速和全速设备将共享低速/全速带宽。这意味着集线器的性能会因事务转换器数量和连接到其端口的设备而异。例如,一个只有 1 个事务转换器且有 7 个低速/全速设备连接到它的 7 口高速集线器,其行为与 USB 1.1 集线器没有任何区别,所有设备都竞争相同的低速/全速带宽。如果集线器为七个端口中的每一个配备一个事务转换器,那么每个设备将拥有可用的所有全速/低速带宽,并且只会竞争高速带宽,而高速带宽要大得多。[5]

数据编码

[edit | edit source]

USB 标准使用 NRZI 系统对数据进行编码,并使用比特填充来传输逻辑 1(在 个逻辑 1 后插入逻辑 0;接收器忽略 个逻辑 1 后的 0)。此外,接收连续七个逻辑 1 的块将被接收器识别为比特填充错误。NRZI(非归零反转)编码方法不会改变逻辑 1 的传输信号,但会反转每个逻辑 0 的传输信号电平。

Mini-USB 信号

[edit | edit source]
显示引脚编号的 Mini-USB A 型和 B 型插头(未按比例绘制)
Mini-A 型插头(左),Mini-B 型插头(右)
Mini-USB 连接器引脚分配
引脚 功能
1 VBUS (4.4–5.25 V)
2 D−
3 D+
4 ID
5 接地

大多数 Mini-USB 连接器的引脚与标准 USB 连接器的引脚相同,但引脚 4 除外。引脚 4 称为 “ID”,在 Mini-A 型插头中连接到接地,但在 Mini-B 型插头中没有连接。这会导致支持 USB On-The-Go(带有 Mini-AB 型插座)的设备在连接到 USB Mini-A 型插头(Mini-A 型 - Mini-B 型电缆的 “A” 端)时最初充当主机。Mini-A 型连接器还具有额外的塑料部件,以防止插入仅从设备(仅 B 型)插入。

USB 连接器

[edit | edit source]

连接器类型

[edit | edit source]

USB 连接器有几种类型,随着规范的不断发展,又添加了一些类型。从最初的 USB 规范开始

  • 标准 A 型插头
  • 标准 A 型插座
  • 标准 B 型插头
  • 标准 B 型插座

在 USB 2.0 规范的第一个工程变更通知中添加

  • Mini-B 插头
  • Mini-B 插座

在 *通用串行总线 Micro-USB 电缆和连接器规范* 中添加

  • Micro-A 插头(白色)
  • Micro-AB 插座(灰色)
  • Micro-B 插头(黑色)
  • Micro-B 插座(黑色)

适配器,也来自 *通用串行总线 Micro-USB 电缆和连接器规范*(注意,不允许使用其他适配器。)

  • 标准-A 插座到 Micro-A 插头
Micro-USB 插头
Micro-USB 插头
  • "Micro 系列 USB 技术将取代 OTG 产品中的 Mini 系列 USB" [1] "美国俄勒冈州比弗顿,2007 年 1 月 4 日 - USB 组织 (USB-IF) 今天宣布完成 Micro-USB 规范,这是一种新的连接器技术,将取代当前在便携式产品中使用的许多 Mini 系列插头和插座。" Micro-USB 插头额定连接和断开循环次数为 10,000 次。它大约是目前广泛使用的 mini-USB 连接器高度的一半,但宽度相似。

电缆和连接器

[编辑 | 编辑源代码]
"A" 系列插头和插座。

电缆只有插头,主机和设备只有插座。主机具有 A 型插座;设备,如果它们有插座,则具有 B 型。A 型插头只能与 A 型插座匹配,B 型插头只能与 B 型插座匹配。

On-the-Go 补充允许产品作为主机或设备,带有 Micro-AB 插座,可以接受 Micro-A 插头或 Micro-B 插头。Micro-A、Micro-B 和 Micro-AB 连接器可以通过颜色轻松识别。Micro-A 插头和插座内部的塑料始终为白色,Micro-B 连接器内部的塑料为黑色,Micro-AB 插座内部的塑料为灰色。

USB 规范允许使用有限的电缆集。电缆分为两类 - “可拆卸”和“固定”。所有允许的 USB 电缆都带有一个 A 型插头,无论是标准-A 还是 Micro-A。 “固定”电缆的另一端要么不可拆卸,要么在设备端具有定制连接器。如果电缆是“可拆卸”的,则电缆的另一端必须具有 B 型插头。还存在一条特殊的适配器电缆,带有 Micro-A 插头和标准-A 插座。

固定式 USB 电缆类型

  • 标准-A 插头到设备。
    此电缆在设备端可能具有定制连接器。
  • Micro-A 插头到设备。
    此电缆不打算由设备的最终用户拆卸。

可拆卸式 USB 电缆类型

  • 标准-A 插头到标准-B 插头。
    这是将 USB 设备连接到主机的最流行电缆。
  • 标准-A 插头到 Mini-B 插头。
    用于将旧的移动设备连接到主机。
  • 标准-A 插头到 Micro-B 插头。
    用于将较新的移动设备连接到主机。
  • Micro-A 插头到 Micro-B 插头。
    用于将移动设备相互连接。
  • Micro-A 插头到标准-A 插座。
    这是一条特殊的适配器电缆,允许其长度最长为 150 毫米。需要它才能允许移动设备充当 USB 主机,用于未使用 Micro-USB 连接器的设备。

任何带有插座(上述特殊情况除外)或带有两个“A”或两个“B”连接器的电缆,根据定义,不是 USB。[6] 然而,许多电缆制造商生产和销售与 USB 兼容(但不完全符合)的延长线,一端带有标准-A 插头,另一端带有标准-A 插座。请注意,这些不符合标准的延长线不应与包含小型总线供电集线器的符合标准的电缆混合使用。带有两个 A 型插头甚至两个 B 型插头的电缆可从更专业的供应商处获得。

请注意,只有“全速”和“高速”设备使用可拆卸电缆。符合标准的“低速”设备仅使用固定电缆,因为低速规范不允许使用标准可拆卸 USB 电缆的电气特性。

Mini-B、Micro-A、Micro-B 和 Micro-AB 连接器用于 PDA、手机或数码相机等较小的设备。标准-A 插头大约为 4 x 12 毫米,标准-B 约为 7 x 8 毫米,Micro-A 和 Micro-B 插头约为 2 x 7 毫米。

USB 委员会指定的连接器旨在支持 USB 的一些基本目标,并反映出从当时各种各样的连接器中吸取的经验教训。特别是

  • 连接器设计为坚固耐用。许多以前的连接器设计都很脆弱,销钉或其他精致的组件容易弯曲或断裂,即使施加了很小的力。USB 连接器中的电触点受到相邻塑料舌片的保护,整个连接组件进一步受到金属护套的保护。因此,USB 连接器可以安全地处理、插入和拔出,即使是小孩也可以。包裹的护套和坚固的模制插头体意味着连接器可以掉落、踩踏,甚至压碎或撞击,而不会损坏;需要相当大的力才能严重损坏 USB 连接器。
  • 很难错误地连接 USB 连接器。连接器不能倒置插入,并且当插头和插座正确匹配时,从外观和连接的感觉可以清楚地看出。但是,对于没有经验的用户(或对安装情况一无所知的用户)来说,乍一看并不清楚连接器应该朝哪个方向,因此通常需要尝试两种方式。
  • 连接器特别便宜,易于制造。
  • 连接器强制执行 USB 网络的定向拓扑。USB 不支持循环网络,因此来自不兼容 USB 设备的连接器本身也不兼容。与其他通信系统(例如 RJ-45 缆线)不同,性别转换器几乎从未使用过,因此难以创建循环 USB 网络。
  • 指定了适度的插入/拔出力。USB 电缆和小型 USB 设备通过插座的夹持力固定到位(无需其他连接器所需的螺钉、夹子或旋钮)。建立或断开连接所需的力很小,允许在尴尬的情况下或由有运动障碍的人进行连接。
  • 连接器结构始终确保插头上的外部护套在内部四个连接器连接之前与插座中的对应护套接触。该护套通常连接到系统接地,允许以这种方式安全地释放否则会造成损坏的静电荷(而不是通过精密的电子元件)。这种外壳方式还意味着 USB 信号在通过匹配的连接器对(这是除扭转数据对必须平行行驶一段距离之外的唯一位置)时,能够获得(适度)的抗电磁干扰保护。此外,电源和公共连接在系统接地之后,但在数据连接之前建立。这种分阶段的建立和断开时间允许安全热插拔,并且长期以来一直是航空航天工业连接器设计中的常见做法。
  • USB 标准为符合标准的 USB 连接器指定了相对较低的公差,旨在最大限度地减少不同供应商生产的连接器之间的兼容性问题(这是一个已经非常成功实现的目标)。与大多数其他连接器标准不同,USB 规范还定义了连接设备在其插头周围区域的大小限制。这样做是为了避免设备符合连接器规范但其尺寸过大而阻挡相邻端口的情况。符合标准的设备必须符合尺寸限制,或者支持符合标准的延长线。

但是,物理层在某些示例中发生了变化。例如,IBM UltraPort 是一种专有的 USB 连接器,位于 IBM 笔记本电脑 LCD 的顶部。它使用不同的机械连接器,同时保留 USB 信号和协议。其他小型物品制造商也开发了自己的小型连接器,并且出现了各种各样的连接器。出于规范目的,这些设备被视为具有固定电缆。

USB 的扩展名为 USB On-The-Go,它允许单个端口充当主机或设备 - 通过电缆的哪一端插入设备上的插座来选择。即使电缆连接并且设备正在通信,这两个设备也可能在程序控制下“交换”端。此功能针对 PDA 等设备,在这些设备中,USB 链接在一种情况下可能连接到 PC 的主机端口作为设备,而在另一种情况下则连接到键盘和鼠标设备作为主机。因此,USB On-The-Go 定义了两个小型连接器,Mini-A 和 Mini-B,以及一个通用插座 (Mini-AB),这应该阻止专有设计的激增。

无线 USB 是一种正在开发中的标准,旨在扩展 USB 标准,同时在协议级别上保持与 USB 1.1 和 USB 2.0 的向后兼容性。

USB 电缆的最大长度为 5 米;更长的长度需要集线器 [2]。USB 连接可以通过使用各种制造商开发的专用 USB 延长器产品,在 CAT5 上扩展到 50 米,或在光纤上扩展到 10 公里。

USB 规范在一个单独的导线上提供 5 V(伏特)电源,连接的 USB 设备可以从该导线上汲取电源。该规范规定在 +ve 和 -ve 总线电源线之间,电压不超过 5.25 V,不低于 4.35 V。

最初,设备只允许汲取 100 mA 电流。它可以从上游设备请求更多电流,以 100 mA 为单位,最高可达 500 mA。实际上,大多数端口在关闭电源之前会提供 500 mA 或更高的电流,即使设备没有请求或识别自己。如果(符合规范的)设备需要的电源超过可用电源,那么在用户更改网络(通过重新排列 USB 连接或添加外部电源来提供所需电源)之前,设备无法运行。

如果 USB 设备发现 USB 总线的数据线在 3 毫秒内处于空闲状态,则设备必须进入挂起状态。挂起状态的设备允许汲取 500 μA 电流。如果设备在挂起之前被配置为使用超过 100 mA 的电流,并且设备被配置为远程唤醒源,则设备在挂起状态下允许汲取 2.5 mA 电流。挂起状态下的电流限制为一秒钟的平均值。

请注意,**On-The-Go** 和 **电池充电规范** 都为 USB 规范增加了新的供电模式。

如果使用总线供电集线器,则下游设备总共只能使用四单位 - 400 mA - 电流。这限制了符合规范的总线供电集线器的端口数量,以及其他方面。需要超过 500 mA 的设备,端口超过 4 个的集线器,以及下游设备总共使用超过四单位 100 mA 电流的集线器,必须提供自己的电源。主机操作系统通常会跟踪 USB 网络的电源要求,并在给定段需要超过可用电源时向计算机操作员发出警告。


了解更多信息

[编辑 | 编辑源代码]

参考资料

[编辑 | 编辑源代码]
华夏公益教科书