本章概述了通用串行总线(USB)体系结构和关键概念。USB是一种电缆总线,支持主机和多种可同时访问的外设之间的数据交换。连接的外设通过主机调度的基于令牌的协议共享USB带宽。该总线允许在主机和其他外设运行时连接、配置、使用和拆卸外设。
后面的章节更详细地描述了USB的各种组件。
USB系统由三个定义区域描述:
USB互连是USB设备连接到主机并与主机通信的方式。这包括以下内容:
后续章节将详细介绍USB设备和USB主机。
USB总线连接USB设备和USB主机。USB物理互连是一种分层星形拓扑。hub位于每个星型结构的中心。每个线段都是host和hub或function之间的点对点连接,或者是hub连接到另一个hub或function。图4-1说明了USB的拓扑结构。
由于集线器和电缆传播时间的时间限制,拓扑层级允许的最大层数为七层(包括root层)。请注意,在七层中,主机和任何设备之间的通信路径最多可以支持五个非根hub。其中复合设备(见图4-1)占据两层,因此,复合设备不能位于第七层。第七层只能为function。
任何USB系统中只有一台主机。主机系统的USB接口称为主机控制器。主机控制器可以用硬件、固件或软件的组合来实现。根集线器集成在主机系统内,以提供一个或多个连接点。
有关主机的其他信息可在第4.9节和第10章中找到。
USB设备可以是以下设备之一:
USB设备在以下方面提供了标准的USB接口
有关USB设备的更多信息,请参见第4.8节和第9章。
USB的物理层在总线的电气(第7章)和机械(第6章)规范中进行了描述。
USB通过四线电缆传输信号和电源,如图4-2所示。信号两条差分信号线路发出。
有三种数据速率:
USB 2.0主机控制器和集线器提供了一些功能:全速和低速数据可以在主机控制器和集线器之间高速传输,但在集线器和设备之间以全速或低速传输。这种能力将全速和低速设备对高速设备可用带宽的影响降至最低。
低速模式被定义为支持有限数量的低带宽设备,如鼠标,因为更广泛的使用会降低总线利用率。
时钟与差分数据一起传输、编码。时钟编码方案是NRZI编码,用比特填充来确保足够的电平转换。每个数据包前都有一个SYNC字段,接收器可以同步其位恢复时钟。
该电缆还在每一段上带VBUS和GND线,以向设备供电。VBUS的一般源电压为+5伏。通过选择合适的导体规格来匹配指定的IR压降和其他属性(如设备功率预算和电缆灵活性),USB允许长度可变的电缆段,最长可达几米。为了提供有保证的输入电压电平和适当的终端阻抗,在电缆的每一端都使用偏置终端(偏置电压,如上拉或者下拉)。终端还能检测每个端口的连接和分离,并区分高速/全速和低速设备。
第6章提供了电缆和连接器的机械规格。所有设备都有上行连接。上行和下行连接器(公头和母头)在机械上不可互换,因此消除了集线器上的非法环回连接(保证公对母连接)。该电缆有四根导线:一根标准规格的双绞线和一根允许规格范围内的电源对。连接器是四位式(四个金属触点)的,具有屏蔽外壳、坚固和易于插拔的特点。
该规范涵盖了电源的两个方面:
每个USB段通过电缆提供有限的电力。主机为直接连接的USB设备供电。此外,任何USB设备都可能有自己的电源。完全依靠电缆供电的USB设备称为总线供电设备。相比之下,那些有备用电源的设备被称为自供电设备。集线器还为其连接的USB设备供电。该体系结构允许总线供电的集线器在拓扑的某些约束下运行,这些约束将在第11章中讨论。
一个USB主机可能有一个独立于USB总线的电源管理系统。USB系统软件与主机的电源管理系统交互,以处理系统电源事件,如暂停或恢复。此外,USB设备通常实现额外的电源管理功能,允许它们由系统软件进行电源管理。
USB的电源分配和电源管理功能允许它被设计到功耗敏感系统中,例如使用电池的笔记本电脑。
USB是一种轮询总线。由主机控制器负责启动所有数据传输。
大多数总线事务涉及最多三个数据包的传输。当主机控制器按计划发送描述事务类型和方向、USB设备地址和端点号的USB数据包时,传输开始。这个包被称为“令牌包”。被寻址的USB设备通过解码令牌包的地址字段来选择自己(当地址域中的地址值与自身地址一致时)。在给定的传输中,数据或从主机传输到设备,或从设备传输到主机,数据传输的方向在令牌包中指定。然后,传输源发送一个数据包,或者表明它没有要传输的数据。一般来说,destination(数据或者命令等接收方)会以握手数据包作为响应,指示传输是否成功。
主机控制器和集线器之间的一些总线事务涉及四个数据包的传输。这些类型的事务用于管理主机和全速/低速设备之间的数据传输。
主机上的源或目标与设备上的端点之间的USB数据传输模型称为管道。有两种类型的管道:流和消息。流数据没有USB定义的结构,而消息数据有。此外,管道还关联了数据带宽、传输服务类型和端点特性,如方向性和缓冲区大小。当配置了一个USB设备时,大多数管道就出现了。一旦设备通电,就会出现一个消息管道,即默认控制管道,以提供对设备配置、状态和控制信息的访问。
事务调度允许对一些流管道进行流量控制。在硬件层面,通过使用NAK握手来抑制数据速率,从而防止缓冲区不足或溢出的情况。当收到NAK握手包时,事务在总线有效时间内重试发送数据。流量控制机制保证了灵活调度的构建,从而适应多种流管道混合的并发服务。因此,多个流管道可以以不同的间隔和不同大小的包来传输或服务。
USB总线有几个属性有助于它的稳健性:
USB介质的核心误码率期望是接近于0,任何故障都很可能是短暂的。为了提供针对这种瞬变错误的保护,每个包结构都包括错误保护字段。当需要保证数据完整性时,例如对于无损数据设备,可以在硬件或软件中调用错误恢复过程。
协议对控制字段和数据字段进行独立的CRC校验。CRC校验失败则表明这是一个损坏的数据包。CRC校验100%覆盖单比特和双比特错误。
协议允许在硬件或软件中进行错误处理。硬件错误处理包括失败传输的报告和重试。在将故障通知客户端软件之前,USB主机控制器将尝试传输遇到最多三次的错误。客户端软件可以使用特定的对应方法进行恢复。
USB总线支持USB设备随时从USB总线上连接(attach)或者断开(detach)。因此,系统软件必须适应物理总线拓扑的动态变化。
所有的USB设备都通过被称为hub的专用USB设备上的端口连接到USB总线。hub具有状态位,用于报告某个端口上的USB设备的连接或移除。主机查询hub以检索这些状态位。在这种连接情况下,主机使能端口,并通过设备的控制管道USB设备进行寻址(使用默认地址)。
主机为设备分配一个唯一的USB设备地址,然后确定新连接的USB设备是hub还是function。主机使用分配的USB地址和0号端点建立USB设备的控制管道终端。
如果连接的USB设备是hub,并且USB设备连接到其端口,同样对每个连接的USB设备都遵循上述步骤。
如果连接的USB设备是function,则连接信号将由适合该function的主机软件处理。
当从hub的一个端口移除了一个USB设备时,hub将禁用该端口,并提示主机设备已经移除。移除事件将由适当的USB系统软件处理。如果卸下的USB设备是hub,USB系统软件必须处理hub和之前通过hub连接到系统的所有USB设备的移除事件。
总线枚举作用为:识别和分配唯一地址给连接到总线的设备。因为USB允许USB设备在任何时候连接到USB总线或从USB总线移除,所以总线枚举是USB系统软件的持续活动。此外,用于USB的总线枚举还包括移除的检测和处理。
USB作为单向或双向管道,支持USB主机和USB设备之间的功能数据和控制数据的交换。USB数据传输发生在主机软件和USB设备上的特定端点之间。主机软件和USB设备端点之间的这种关联称为管道。通常,在一个管道中传输的数据独立于任何其他管道中传输数据流。USB设备可能有许多管道。举个例子,USB设备可以同时具有向其他USB设备写数据的管道端点,以及从其他USB设备读数据的另一个管道端点。
USB体系结构包含四种基本类型的数据传输:
对于任何给定的设备配置,管道仅支持上述传输类型之一。USB数据流模型在第5章中有更详细的描述。
当设备首次连接时,USB系统软件使用控制数据来配置设备。其他驱动程序软件可以根据自身特定的实现方式使用控制传输。数据传输是无丢失的。
批量数据通常由大量数据组成,例如用于打印机或扫描仪的数据。批量数据是连续的。通过在硬件中使用错误检测并在硬件中调用有限的重试次数,在硬件级别确保了可靠的数据交换。此外,大容量数据占用的带宽可能会有所不同,具体取决于其他总线活动。
主机对设备读或者写操作时的有限延迟传输称为中断数据。这种数据在设备任何需要的时候进行传输,并且由USB总线以不低于设备指定的速率传送。
中断数据通常由事件通知、字符组成,或者将它们组织成一个或多个字节。中断数据的一个例子是点击类设备。虽然不需要明确的及时速率,但交互式数据可能有响应时间限制,这是USB必须支持的。
等时数据在创建、交付和消费方面是连续和实时的。等时数据接收和传输的稳定速率意味着时间相关。等时数据必须以接收的速率传送,以保持其时序。除了传输速率,等时数据也可能对传输延迟敏感。对于同步管道,所需带宽通常基于相关function的采样特性决定。所需的延迟与每个端点可用的缓冲有关。
等时数据的一个经典例子是语音。如果不保持这些数据流的传输速率,如果出现缓冲区或帧 欠载或溢出,将会出现数据流的丢包。即使数据由USB硬件以适当的速率传送,由软件引入的传送延迟也可能降低需要实时周转的应用程序的性能,例如基于电话的音频会议。
以数据流中潜在的瞬时丢失为代价来确保同步数据的及时传送。换句话说,电气传输中的任何错误都不通过硬件机制(如重试)来纠正。实际上,USB的核心误码率应该足够小,不会成为问题。系统为USB同步数据流分配了专用部分的USB带宽,以确保数据能够以期望的速率传输。USB还为同步数据传输的最小延迟而设计。
USB带宽在管道层上分配。当管道建立时,USB为一些管道分配带宽。需要USB设备来提供一些数据缓冲。我们假定需要更多带宽的USB设备能够提供更大的缓冲区。USB架构的目标是确保缓冲引起的硬件延迟限制在几毫秒之内。
USB的带宽容量可以分配给许多不同的数据流。这使得多种设备可以连接到USB。此外,可以同时支持具有宽动态范围的不同设备比特率。
USB规范定义了每种传输类型访问总线的规则。
USB设备可以分为不同的设备类别,如hub、人机交互设备、打印机、相机或大容量存储设备。hub设备类别表示一个专门的提供附加USB连接点的USB设备(参见第11章)。规范要求USB设备带有设备识别信息和通用配置。还要求它们始终符合已定义的USB设备状态。
所有的USB设备都是分别通过不同的USB地址来访问的,该地址是在设备被连接和枚举时分配的。每个USB设备还支持一个或多个管道,主机可以通过这些管道与设备通信。所有的USB设备必须在零端点支持一个专门指定的管道,该管道将连接USB设备的USB控制管道。所有的USB设备都支持通过这个控制管道访问信息的通用访问机制。
与零端点的控制管道相关联的,是完整描述USB设备所需的信息。这些信息分为以下几类:
此外,每个USB设备都携带USB控制和状态信息。
设备类别有两个主要部分:hub和function。只有hub能够提供额外的USB连接点。function为主机提供了额外的功能。
hubs是USB即插即用架构中的一个关键元素。图4-3显示了一个典型的集线器。从用户的角度来看,hub可以简化USB连接,并以相对较低的成本和复杂性提供稳健性。
hub是布线集中器,支持USB的多种连接特性。连接点被称为端口。每个集线器将一个连接点转换为多个连接点。USB架构支持多个hub的连接。
hub的上行端口将hub连接到主机。hub的每个下行端口都允许连接到另一个hub或function。hub可以检测每个下行端口的连接和移除,并向下层设备分配电力。每个下行端口可以单独启用,并连接到高速、全速或低速设备。
USB 2.0 hub由三部分组成:hub控制器、hub中继器和事务转换器。hub中继器是上行端口和下行端口之间的协议控制交换机。它还支持硬件复位和暂停/恢复信号。主机控制器提供与主机的通信。hub特定的状态和控制命令允许主机配置hub并监视和控制其端口。事务转换器提供支持连接到hub的全速/低速设备的机制,同时在主机和hub之间高速传输所有设备数据。
function是能够通过总线发送或接收数据或控制信息的USB设备。function通常被实现为带有电缆的独立外设,该电缆插入hub的端口。然而,一个物理包可以实现多种功能,并且一个嵌入式hub具有一根单独的USB电缆,这就是所谓的复合设备。复合设备在主机看来是一个集线器,带有一个或多个不可移除的USB设备。
每个function都包含描述其功能和资源需求的配置信息。在使用function之前,必须由主机进行配置。该配置包括分配USB带宽和选择特定function的配置选项。
function例子包括:
USB主机通过主机控制器与USB设备交互。主机负责以下事项:
主机上的USB系统软件管理USB设备和基于主机的设备软件之间的交互。USB系统软件和设备软件之间有五个交互领域:
USB体系结构包含主机控制器驱动程序和USB驱动程序之间接口的可扩展性。使用多个主机控制器和相关的主机控制器驱动程序的实现是可能的。