体系结构概述
本章旨在概述 通用串行总线(USB)的体系结构和关键概念。
USB 是一种通过电缆连接的总线,支持主机计算机与一系列同时可访问的外设之间的数据交换。
连接的外设通过主机调度的基于令牌的协议共享 USB 带宽。
该总线允许在主机和其他外设正常运行的情况下,外设可以被连接、配置、使用和移除。
在后续章节中将更详细地描述 USB 的各个组成部分。
4.1 USB 系统描述
USB 系统由以下三个定义区域组成:
-
USB 互连 (USB interconnect)
USB 设备通过何种方式连接到主机并与之通信。这包括以下方面:- 总线拓扑 (Bus Topology):描述 USB 设备与主机之间的连接模型。
- 层间关系 (Inter-layer Relationships):按功能分层描述 USB 系统中每一层执行的任务。
- 数据流模型 (Data Flow Models):数据在 USB 系统中如何在数据生产者和消费者之间移动。
- USB 调度 (USB Schedule):USB 提供了一个共享的互连结构,访问这个互连是通过调度来实现的,以支持同步(isochronous)数据传输并消除仲裁开销。
-
USB 设备 (USB Devices)
USB 设备是指通过 USB 接口连接到主机(Host)的外设,例如鼠标、键盘、摄像头或存储设备。 -
USB 主机 (USB Host)
USB 主机是整个系统的核心,负责管理和调度数据流,同时为外设提供配置和通信支持。
后续章节将更详细地描述这些定义区域。
总结和说明
USB 体系结构概览:
-
USB 是什么?
USB 是一种基于电缆的总线技术,允许主机与多个外设进行数据传输。它采用共享带宽的方式,支持外设的即插即用(plug-and-play)功能。 -
USB 的主要特性:
- 令牌协议 (Token-based Protocol):USB 使用令牌协议调度设备的通信。这种机制由主机控制,用来确定哪个设备有权限在当前时间段内发送或接收数据。
- 动态连接与移除:USB 支持设备在主机运行时随时连接或移除,而不会影响其他设备的运行。
-
USB 系统的三大组成:
- USB 互连 (USB Interconnect):描述 USB 的通信模型,包括设备连接方式、协议分层、数据流模型及调度策略。
- USB 设备 (USB Devices):即通过 USB 连接的外设,可以是输入设备(如鼠标、键盘)、输出设备(如打印机)或存储设备等。
- USB 主机 (USB Host):整个 USB 系统的核心,负责所有 USB 设备的管理、数据调度和资源分配。
-
关键概念解析:
- 总线拓扑 (Bus Topology):USB 的物理连接方式,设备通过集线器(Hub)与主机连接,形成一个分层星形,或者看成树形拓扑结构。
- 层间关系 (Inter-layer Relationships):USB 的功能分层模型,类似网络协议栈,每层负责不同的功能。例如,物理层传输信号,协议层管理数据包等。
- 数据流模型 (Data Flow Models):描述了 USB 如何在主机与外设之间传输数据,分为控制传输、批量传输、同步传输和中断传输四种类型。
- USB 调度 (USB Schedule):为保证带宽使用效率,USB 主机根据设备类型和数据传输需求,动态分配时间片和带宽,特别是在需要低延迟的同步传输(如音频和视频)中尤为重要。
4.1.1 USB总线拓扑结构 (Bus Topology)
USB通过分层星形拓扑结构将USB设备连接到USB主机。每个星形结构的中心是一个集线器(hub)。
每条电缆是点对点的连接,连接的对象可以是主机与集线器、集线器与设备,或者集线器与另一个集线器或设备。如下图展示了USB的拓扑结构。
- 层级限制:由于集线器和电缆的传播时间限制,USB允许的最大层级数为七层(包括根层/root tier)。
- 在七层拓扑中,从主机到任意设备的通信路径中最多允许通过五个非根集线器。
- 复合设备(compound device):一个复合设备占用两个层级。如果它连接在第七层,则不能被启用。因此,在第七层只能连接单一功能设备。
4.1.1.1 USB主机(USB Host)
- 单一主机:在任何USB系统中都只有一个主机。
- 主机控制器(Host Controller):主机与USB设备的接口被称为主机控制器,它可以通过硬件、固件或软件实现。
- 根集线器(Root Hub):主机系统中集成了一个根集线器,提供一个或多个设备的连接点。
- 更多关于主机的信息见4.9节和第10章。
4.1.1.2 USB设备(USB Devices)
USB设备分为以下两类:
- 集线器(Hubs):提供更多的USB连接点。
- 功能设备(Functions):为系统提供功能,例如ISDN连接、数字操纵杆或扬声器等。
USB设备需要满足以下标准USB接口要求:
- 理解USB协议:能够正确理解和使用USB协议。
- 响应标准USB操作:能够响应配置和复位等标准USB操作。
- 描述信息:提供标准化的能力描述信息。
更多关于USB设备的详细信息可以参考4.8节和第9章。
总结和说明
1. 分层星形拓扑(Tiered Star Topology)
USB的拓扑结构采用分层星形设计,这种设计提供了灵活的设备连接方式:
- 中心是集线器(Hub):每个集线器可以扩展出多个连接点,类似于树状结构。
- 点对点连接:USB的每个连接段都是一个点对点连接,确保设备通信的稳定性和效率。
- 七层限制:由于信号传播时间和数据同步的限制,从根集线器到最远端设备的最大层级是七层,其中包括:
- 根层(Root Tier):主机所在的第一层。
- 设备路径中的中间集线器:最多五个非根集线器。
- 最远端设备:第七层只能连接单一功能设备(如鼠标或键盘)。复合设备(如带多个功能的设备,该设备还可以接入USB设备)因占用两层而无法在第七层启用。
2. USB主机(USB Host)
- 在一个USB系统中,主机是唯一的。它是整个系统的核心,负责:
- 管理所有连接的设备。
- 提供电力给设备。
- 控制数据通信。
- 主机控制器(Host Controller):是主机与设备之间的桥梁,它可以通过硬件芯片、固件或软件来实现。
- 根集线器(Root Hub):主机自带的硬件组件,提供基本的USB连接能力,是最顶层的连接点。
3. USB设备(USB Devices)
- 集线器(Hubs):
- 用于扩展更多的USB连接点。
- 在整个拓扑中,集线器起着桥梁作用,将主机的连接能力扩展到更多设备。
- 功能设备(Functions):
- 是提供具体功能的设备,比如存储设备、输入设备(鼠标/键盘)、音频设备等。
- 设备标准接口要求:
- 理解USB协议:设备需要正确解析USB总线上的数据包格式和协议指令。
- 响应标准操作:设备应能处理主机的配置、复位等命令,确保即插即用。
- 能力描述信息:设备通过标准的描述符(Descriptors)向主机报告其功能和属性(如设备类型、支持的传输速度等)。
4.2 物理接口
USB的物理接口通过电气规格(第7章)和机械规格(第6章)进行了描述。
4.2.1 电气特性
-
信号与电源传输:
USB通过一根四线电缆传输信号和电源,其中包括两根信号线(差分信号)和两根电源线(VBUS和GND)。 -
数据传输速率:
USB支持三种数据速率:- 高速 (High-speed):480 Mb/s。
- 全速 (Full-speed):12 Mb/s。
- 低速 (Low-speed):1.5 Mb/s(能力有限,主要用于低带宽设备,如鼠标)。
-
主机与集线器的传输能力:
- USB 2.0主机控制器和集线器支持一种模式,使得全速和低速数据在主机与集线器之间以高速传输,而在集线器与设备之间以全速或低速传输。
- 这种设计最小化了全速和低速设备对高速设备带宽的影响。
-
低速模式:
- 低速模式被定义为支持一些带宽需求较低的设备(如鼠标)。
- 一般用途中不建议使用低速模式,因为它会降低总线利用率。
-
信号编码与时钟同步:
- 数据与时钟信号使用NRZI(非归零反相编码)编码,并通过位填充来确保信号的电气过渡足够多。
- 每个数据包的开头都有一个SYNC字段(同步字段),用以让接收器同步其位恢复时钟。
-
电源传输:
- 电缆中还包含VBUS和GND线,用于为设备供电。
- VBUS的标称电压为+5V(由源提供)。
- 电缆长度可以变化(最长几米),电缆的导线规格根据设备的功率需求、电缆柔韧性以及IR压降(电压下降)进行选择。
-
终端电阻和设备检测:
- 电缆两端使用偏置终端电阻来提供保证的输入电压水平和正确的终端阻抗。
- 这些终端电阻还允许检测设备的连接和断开,并可区分高速/全速设备和低速设备。
4.2.2 机械特性
-
电缆与连接器规格:
- USB电缆和连接器的机械规格在第6章中提供。
- 所有USB设备都有一个上游连接(upstream connection)。
-
防止非法回路:
- 上游和下游连接器在机械设计上不可互换,从而消除了在集线器中非法回路连接的可能性。
-
电缆结构:
- USB电缆包括四根导线:
- 信号线:一对扭绞信号对。
- 电源线:一个VBUS和一个GND。
- 信号线和电源线的规格符合USB允许的范围。
- USB电缆包括四根导线:
-
连接器特性:
- USB连接器为四针位设计,采用屏蔽外壳。
- 设计时兼顾了坚固性和易于插拔的特性。
总结与说明
-
USB电缆结构与信号传输:
- USB电缆采用差分信号传输,即通过两根信号线进行数据通信(通常标记为D+和D-)。差分信号的好处在于对噪声有较好的抗干扰能力,因为外部干扰会同等影响两条信号线,接收端通过差分信号抵消噪声。
- 数据传输使用NRZI编码,它的优点是能减少信号转换次数,从而降低功耗,但同时引入了位填充技术以保证信号的转换率足够高,避免时钟不同步。
-
多速率支持:
- USB 2.0引入了高速(480 Mb/s),这使得可以支持更高带宽的设备,例如视频摄像头、存储设备等。
- 低速模式的主要作用是支持低带宽设备,如鼠标、键盘等。这种设备的响应时间要求不高,因此低速模式是一种经济的选择。
-
电源供电:
- VBUS(+5V)用于为设备供电,使得设备可以从USB总线直接获取电能,无需额外的电源适配器。这一特性使得USB接口在移动设备和小型外设中非常实用。
- USB电缆的电源线直径根据供电需求和长度设计,确保电压降不会影响设备性能。
-
设备连接检测:
- USB使用终端电阻来检测设备的连接和断开。例如,当设备连接时,主机可以通过检测信号线上拉的电平变化来判断设备的存在。这种机制还可以区分高速/全速和低速设备。
-
机械设计与兼容性:
- USB连接器的设计重点在于防止误插和便于用户使用。例如,上游和下游连接器的设计不可互换,这样用户就不会错误地将两个下游设备直接连接在一起,避免系统出错。
- 屏蔽外壳和牢固的机械设计保证了耐用性,同时易插拔的特性提升了用户体验。
-
传输效率:
- 主机和集线器的特殊处理(高低速转换)减少了低速设备对高速设备的带宽影响。例如,在传输低速设备数据时,主机与集线器间以高速通信,集线器只在与设备之间使用低速传输。这种优化提高了USB总线的整体利用效率。
4.3 电源(Power)
规范涵盖了电源的两个方面:
- 电源分配(Power Distribution): 处理USB设备如何利用主机通过USB提供的电源的问题。
- 电源管理(Power Management): 处理USB系统软件和设备如何融入基于主机的电源管理系统。
4.3.1 电源分配
每段USB连接通过电缆提供有限的电源。主机为直接连接的USB设备提供电源。此外,任何USB设备也可以拥有自己的电源供应。
- 仅依赖电缆供电的USB设备被称为总线供电设备(bus-powered devices)。
- 而拥有备用电源的设备被称为自供电设备(self-powered devices)。
USB集线器(hub)也为其连接的USB设备供电。在某些拓扑约束下(将在第11章讨论),架构允许总线供电的集线器存在。
4.3.2 电源管理
USB主机可能有一个独立于USB的电源管理系统。USB系统软件通过与主机的电源管理系统交互来处理诸如**挂起(suspend)或恢复(resume)**之类的系统电源事件。
此外,USB设备通常实现了额外的电源管理功能,使得它们可以通过系统软件进行电源管理。
USB的电源分配和电源管理特性使其可以被设计到对电源敏感的系统中,比如基于电池供电的笔记本电脑。
总结与说明
1. 电源分配(Power Distribution)
-
USB设备通过主机提供的电缆供电。
- 总线供电设备(Bus-Powered Devices):
- 仅依赖USB电缆提供的电力。
- 这些设备必须遵循USB标准中关于功耗的限制。
- 例如,USB 2.0规定低功耗设备的最大消耗电流为100 mA,高功耗设备为500 mA。
- 自供电设备(Self-Powered Devices):
- 拥有自己的电源(如电池或外接电源适配器)。
- 仅在必要时从USB获取额外电力。
- 总线供电设备(Bus-Powered Devices):
-
USB集线器(Hub)的作用:
- 集线器可以为连接的设备提供电力。
- 如果是总线供电的集线器(bus-powered hub),其自身的功耗和下游设备的总功耗必须受到限制,以满足USB总线的供电能力。
2. 电源管理(Power Management)
-
USB主机的电源管理:
- USB主机通常有一个独立的电源管理系统。
- USB系统软件通过与主机的电源管理系统交互,响应主机的电源状态改变。例如:
- 当主机进入低功耗模式(如挂起或休眠)时,USB设备也可以被切换到低功耗模式。
- 当主机从挂起模式恢复时,USB设备也会被唤醒并重新连接。
-
USB设备的电源管理功能:
- 大多数USB设备实现了特定的低功耗功能,比如:
- 挂起模式(Suspend Mode): 当设备不活动时,它们可以进入挂起状态,以降低功耗。
- 恢复功能(Resume Functionality): 设备可以通过主机命令或用户交互(如按键)从挂起状态恢复。
- 这些功能通常是由系统软件自动管理的,无需用户干预。
- 大多数USB设备实现了特定的低功耗功能,比如:
3. USB对电源敏感系统的适配:
- USB的设计允许其被用于对电源敏感的系统,例如:
- 电池供电的笔记本电脑。
- 便携式设备。
- 通过良好的电源分配和电源管理机制,USB设备和主机可以有效降低能耗,同时保持功能性。
4.4 总线协议
USB是一个轮询总线,由主机控制器(Host Controller)启动所有数据传输。
大多数总线事务涉及最多三个数据包的传输。每个事务开始时,主机控制器根据预定的计划发送一个USB数据包,该数据包描述了事务的类型、传输方向、USB设备地址和端点编号。
这个数据包被称为“令牌包”(token packet)。
被寻址的USB设备通过解码这些地址字段根据自身地址来选择是否是被寻址设备。
在一个给定的事务中,数据的传输方向可以是从主机到设备,也可以是从设备到主机。
数据传输方向在令牌包中指定。事务的来源会发送一个数据包,或者指示没有数据可以传输。
而目标通常会以一个握手包(handshake packet)进行响应,指示传输是否成功。
某些主机控制器与集线器之间的事务涉及四个数据包。这些事务用于管理主机与全速或低速设备之间的数据传输。
主机和设备端点之间的数据传输模型被称为“管道”(pipe)。
管道有两种类型:流管道(stream pipe)和消息管道(message pipe)。
流数据没有USB定义的结构,而消息数据有。此外,管道还与数据带宽、传输服务类型和端点特性(如方向性和缓冲区大小)相关联。
大多数管道是在USB设备被配置时创建的。而“默认控制管道”(Default Control Pipe)在设备供电后总是存在,以便访问设备的配置、状态和控制信息。
事务调度允许对某些流管道进行流量控制。在硬件层面,这通过使用NAK握手(negative acknowledgment)来防止缓冲区出现数据不足(underrun)或数据溢出(overrun)的情况。
当发生NAK时,事务会在总线有空闲时间时重新尝试。流量控制机制允许构建灵活的调度方案,能够同时为各种类型的流管道服务。因此,多个流管道可以以不同的间隔和不同大小的数据包进行服务。
总结和说明
-
USB总线是轮询模式(Polled Bus)
- 主机完全掌控总线通信。设备不能主动发起数据传输,而是被动等待主机发送的请求。
- 每个事务是由主机按照预定的时间表发送“令牌包”开始的,指示事务的目标设备、端点号和数据传输方向。
-
事务类型和流程
- USB事务通常包含三个部分:
- 令牌包:主机发出,用于通知目标设备准备进行传输。
- 数据包:数据从主机到设备,或者从设备到主机。如果没有数据,设备会表明“无数据可传”。
- 握手包:目标设备回复,用于确认数据是否接收成功(如ACK)或失败(如NAK或STALL)。
- 对于主机与集线器之间的特殊事务(涉及全速或低速设备),可能需要额外的第四个数据包。
- USB事务通常包含三个部分:
-
管道模型
- 流管道(Stream Pipe):
- 没有固定的数据结构,适合大数据量的连续传输,如音视频数据。
- 例如:流式视频传输可以使用“等时传输”(Isochronous Transfer)模式来确保低延迟。
- 消息管道(Message Pipe):
- 有固定结构,适合小数据量的控制和配置事务,如设备初始化、状态查询等。
- 例如:主机通过控制传输配置USB设备的工作模式。
- 流管道(Stream Pipe):
-
NAK握手和流量控制
- NAK是设备告诉主机“我目前无法接收/发送数据”,避免数据丢失或缓冲区溢出。
- 主机会在稍后重试该事务,这种机制保证了多设备间传输的公平性。
- USB调度可以灵活安排多个设备的事务,支持不同数据包大小和时间间隔。
-
默认控制管道的重要性
- 每个USB设备在接入时都需要被配置,默认控制管道就是设备与主机通信的基础通道。
- 主机通过它来查询设备信息(如设备描述符)、分配地址、设置工作模式等。
4.5 鲁棒性(Robustness,稳健性)
USB的稳健性得益于以下特性:
- 使用差分驱动器、接收器和屏蔽来保证信号完整性;
- 在控制和数据字段上使用CRC保护;
- 能检测设备连接和断开,系统可根据资源进行配置;
- 通过协议中的超时机制,实现丢失或损坏数据包的自动恢复;
- 为流式数据提供流量控制,确保时间同步性并管理硬件缓冲;
- 使用数据和控制管道的设计,避免设备功能之间的相互干扰。
4.5.1 错误检测
USB介质的核心位错误率接近于背板(高可靠性),大部分信号干扰为瞬态问题。为了防止这些问题,每个数据包都包含错误保护字段。
当数据完整性至关重要(如无损数据设备),硬件或软件可能会调用错误恢复程序。
USB协议为每个数据包的控制和数据字段分别设置了CRC(循环冗余校验)。CRC的失败表示数据包已损坏。CRC能够完全覆盖单比特和双比特错误的检测。
4.5.2 错误处理
协议允许通过硬件或软件进行错误处理。硬件错误处理包括失败传输的报告和重试。
USB主控制器会在传输遇到错误时尝试重传最多三次,然后再将失败信息通知客户端软件。客户端软件则可以通过特定的实现方法进行恢复。
总结和说明
-
鲁棒性设计的核心思想:
- USB的设计目标是高度可靠性,通过多种手段增强系统的鲁棒性(抗干扰能力)。比如,差分信号能有效抵抗外部噪声干扰,而CRC校验机制可确保数据传输的正确性。
- 此外,USB提供了自我恢复能力(比如通过超时机制解决数据丢失),并通过专用的流量控制机制管理数据流,确保硬件资源不会过载。
-
错误检测机制(CRC的作用):
- CRC校验是一种用于检测数据传输错误的重要技术。每个数据包都会附加一个校验字段,接收方计算数据的CRC值并与发送方提供的CRC值进行比对。如果结果不同,则认为数据包被损坏。
- 单比特和双比特错误的“100%覆盖”意味着此类错误不会漏检,保证了高可靠性。
-
错误处理策略:
- 硬件层面:USB主控制器在检测到传输错误时,会自动尝试重传最多三次。这种设计提高了传输的可靠性,减少了需要软件干预的频率。
- 软件层面:当硬件重试失败时,错误信息会反馈给客户端软件,软件通过特定的恢复机制解决问题。比如,重新发送请求或提醒用户检查设备连接状态。
-
系统对瞬态干扰的应对:
- USB环境中的错误通常是短暂的(例如,瞬时电磁干扰)。设计中通过差分信号和屏蔽来降低干扰影响,再结合协议层的错误恢复策略,进一步增强了系统的可靠性。
-
流量控制和管道设计:
- USB通过设计独立的数据和控制管道,避免了不同功能模块之间的相互干扰。这种机制不仅提高了系统的稳定性,还优化了传输效率。
4.6 系统配置
USB 支持设备随时连接和断开。因此,系统软件需要能够适应物理总线拓扑的动态变化。
4.6.1 USB设备的连接
- 所有USB设备通过称为“集线器(Hub)”的特殊设备连接到USB接口。
- 集线器具有状态位,用于报告其端口上的设备连接或移除。
- 主机通过查询集线器获取这些状态信息。
- 当设备连接时:
- 主机启用相关端口并通过设备的控制管道(Control Pipe)以默认地址访问该设备。
- 主机为设备分配唯一的USB地址。
- 主机确定新连接设备是一个“集线器”还是“功能设备(Function)”。
- 对于功能设备,主机建立一个基于分配地址和端点0的控制管道。
- 如果设备是一个集线器,并且其端口上连接了其他设备,则主机对这些设备重复上述过程。
4.6.2 USB设备的移除
- 当设备从集线器的端口移除:
- 集线器禁用相关端口并向主机提供移除指示。
- 主机软件负责处理移除通知。
- 如果移除的设备是一个集线器,主机需要处理集线器及其下级设备的移除。
4.6.3 总线枚举(Bus Enumeration)
- 总线枚举是识别和为连接到总线的设备分配唯一地址的过程。
- USB允许设备随时连接或断开,因此总线枚举是系统软件的一个持续活动。
- 总线枚举还包括检测并处理设备移除。
总结和说明
-
USB设备的动态连接和断开
- USB设计的关键特点是“即插即用(Plug and Play)”。用户无需关机或重启计算机即可连接或移除设备,系统可以实时检测这些变化。
- 这一特性依赖于集线器提供的状态报告能力和主机的响应机制。
-
设备连接时的处理过程
- 当新设备连接时,系统通过查询集线器获得连接通知。
- 主机的首要任务是为新设备分配一个唯一地址。这是因为USB总线上的每个设备都需要一个独立地址(最大支持127个设备)。
- 接着,主机识别设备的类型(功能设备或集线器),并分别采取相应的初始化流程:
- 对功能设备,主机通常会进一步加载合适的驱动程序。
- 对于集线器,主机需要枚举其下级设备。
-
设备移除时的处理过程
- 集线器的状态位同样会在设备移除时进行更新,主机通过查询获知设备移除事件。
- 如果被移除的设备是集线器,系统需要级联处理其下挂设备的移除。这种递归处理确保了系统能够准确反映当前的USB设备拓扑。
4.7 数据流类型
USB 支持在 USB 主机与 USB 设备之间通过单向或双向管道(pipes)进行功能性数据和控制信息的交换。
USB 数据传输发生在主机软件和 USB 设备的特定端点
之间。主机软件和 USB 设备端点之间的这种关联称为管道(pipes)。
通常,单个管道内的数据传输是独立的,与其他管道无关。一个 USB 设备可能拥有多个管道。
例如,某个 USB 设备可以包含一个用于向设备传输数据的端点和另一个用于从设备接收数据的端点。
USB 架构定义了四种基本的数据传输类型:
- 控制传输(Control Transfers)
USB系统软件在首次连接设备时使用控制数据来配置设备。其他驱动程序软件可以选择以特定于实现的方式使用控制传输。数据传输是无损的。 - 批量传输(Bulk Data Transfers)
批量数据通常由大量数据组成,例如用于打印机或扫描仪的数据。批量数据是连续的。通过在硬件中使用错误检测并在硬件中调用有限的重试次数,可以在硬件级别确保数据的可靠交换。
此外,根据其他总线活动,批量数据占用的带宽可能会变化。 - 中断传输(Interrupt Data Transfers)
与设备之间的有限延迟传输被称为中断数据。这样的数据可以在任何时候由设备呈现以供传输,并且由USB以不低于设备指定的速率传送。
中断数据通常由事件通知、字符或坐标组成,这些信息被组织为一个或多个字节。中断数据的一个例子是来自定点设备的坐标。
尽管不需要显式定时速率,但交互式数据可能具有USB必须支持的响应时间界限。 - 等时传输 (Isochronous Transfers)
等时数据是连续且实时的,在创建、传输和消费过程中保持时间相关性。等时数据的时间信息由数据接收和传输的稳定速率隐含体现。为了维持时间性,等时数据必须以接收到的速率传输。此外,等时数据可能对传输延迟敏感。等时管道所需的带宽通常基于相关功能的采样特性,而延迟则与每个端点可用的缓冲相关。
典型的等时数据例子是语音。如果数据流的传输速率不能维持,可能由于缓冲区或帧的下溢/上溢导致数据流中断。即使USB硬件能以适当的速率传输数据,软件引入的传输延迟可能会对需要实时交互的应用(如基于电话的音频会议)造成性能下降。
USB通过为等时数据流分配专用的USB带宽,确保数据以期望速率传输,同时最小化传输延迟。然而,为了保证传输的及时性,USB对等时数据流可能出现的瞬时数据丢失不进行硬件层面的纠正(如重试)。尽管如此,USB的核心位误码率被设计得足够低,不会成为问题。
4.7.5 分配USB带宽 (Allocating USB Bandwidth)
USB带宽是分配给不同管道的。当建立管道时,为部分管道分配带宽。USB设备需要提供一定的缓冲来存储数据。假设需要更多带宽的USB设备通常能够提供更大的缓冲区。USB架构的目标是确保由缓冲导致的硬件延迟限制在几毫秒以内。
USB的带宽容量可以在多种数据流之间分配,这使得多种设备可以连接到USB上。同时,支持不同的设备数据速率,范围非常广,能够并行支持动态范围较大的数据传输。
USB规范定义了每种传输类型如何访问总线的规则。
4.8 USB 设备
USB设备被分为多个设备类别,如集线器(hub)、人机界面设备(human interface)、打印机(printer)、图像设备(imaging)或大容量存储设备(mass storage device)。
集线器设备类别指的是一种特殊的USB设备,提供额外的USB连接点(请参阅第11章)。
USB设备需要携带自我标识和通用配置的信息。此外,USB设备必须始终表现出与定义的USB设备状态一致的行为。
4.8.1 设备特性(Device Characterizations)
所有USB设备通过一个在设备连接和枚举时分配的USB地址进行访问。
此外,每个USB设备支持一个或多个管道(pipes),通过这些管道,主机可以与设备进行通信。
所有USB设备必须支持位于端点零(endpoint zero)的特殊管道,USB设备的控制管道(control pipe)将连接到该端点。
所有USB设备都支持通过该控制管道访问信息的通用机制。
与端点零上的控制管道相关联的信息包括以下几类:
- 标准信息(Standard):该信息对所有USB设备是通用的,包括供应商标识(vendor identification)、设备类别(device class)和电源管理能力(power management capability)。设备描述符、配置描述符、接口描述符和端点描述符包含关于设备配置的相关信息。有关这些描述符的详细信息,请参阅第9章。
- 类别信息(Class):根据USB设备所属的类别,定义此类信息。
- 供应商信息(USB Vendor):USB设备供应商可以在此存储任意信息,但格式未由本规范定义。
此外,每个USB设备还携带USB控制和状态信息。
总结和说明
-
设备分类:
- USB设备根据功能划分为不同的类别,例如键盘、鼠标属于“人机界面设备”,U盘和移动硬盘属于“大容量存储设备”。
- 集线器是一种特殊设备,用于扩展USB接口数量。
-
设备访问:
- 每个USB设备在连接到主机时,都会通过**枚举(enumeration)**被分配一个唯一的USB地址,用于主机识别和访问。
- 主机通过**管道(pipes)**与设备通信,其中控制管道(位于端点零)是必须支持的。
-
控制管道及其信息:
- 控制管道是一个双向通道,承载设备描述符信息,包括:
- 标准信息:所有USB设备的基础信息,例如设备类别和供应商ID。
- 类别信息:特定类别的设备定义的特有信息,例如大容量存储设备会包含磁盘容量等。
- 供应商信息:供应商自定义的信息,没有固定格式。
- 控制管道是一个双向通道,承载设备描述符信息,包括:
-
一致性要求:
- USB设备必须始终遵循规范定义的设备状态行为,这确保了设备与主机可以按照预期工作。
通过上述机制,USB设备可以被主机正确识别、配置并管理,同时支持跨设备和供应商的兼容性。
控制管道(endpoint 0)的存在是整个USB设备结构的核心,因为它是设备描述信息的主要入口点。
4.8.2 设备描述 (Device Descriptions)
USB 设备主要分为两类:集线器(Hubs)和功能设备(Functions)。
- 集线器(Hubs):提供额外的 USB 接口,用于连接其他设备。
- 功能设备(Functions):向主机提供额外的功能,例如存储、打印等。
4.8.2.1 集线器(Hubs)
集线器是 USB 的关键组件,支持即插即用(Plug-and-Play)架构。以下是集线器的功能和作用:
-
作用:
- 集线器类似于“电缆集中器”,将一个 USB 接口扩展成多个接口。
- 集线器可以检测每个下游端口的连接(attach)和断开(detach)。
- 负责向下游设备分配电力,并支持高、中、低速设备。
-
结构:
USB 2.0 集线器由以下三个部分组成:- **集线器控制器(Hub Controller):**用于与主机通信,接受主机的控制命令。
- **集线器重复器(Hub Repeater):**在上游端口和下游端口之间起到协议控制的交换机作用,支持复位(reset)、挂起(suspend)和恢复(resume)信号。
- **事务翻译器(Transaction Translator, TT):**支持下游的全速/低速设备,与主机进行高速数据传输。
-
连接:
- **上游端口(Upstream Port):**连接到主机。
- **下游端口(Downstream Ports):**可以连接其他集线器或功能设备。
-
功能支持:
- 集线器支持多个设备的级联(concatenation)。
- 每个下游端口可以独立启用并支持不同速度的设备(高、中、低速)。
4.9 USB主机硬件与软件
- USB主机通过主机控制器(Host Controller)与USB设备交互。主机需要负责以下任务:
- 检测USB设备的连接和移除。
- 管理主机与设备之间的控制流。
- 管理主机与设备之间的数据流。
- 收集状态和活动统计信息。
- 为连接的USB设备提供电源。
- 主机上的USB系统软件负责协调USB设备与主机端设备软件的交互,涵盖以下五个方面:
- 设备的枚举和配置。
- 实时数据传输(Isochronous data transfers)。
- 异步数据传输(Asynchronous data transfers)。
- 电源管理。
- 设备与总线管理信息。
总结和说明
-
主机的核心职责:
- 主机硬件通过主机控制器与USB设备通信,类似一个“总指挥”,管理设备的状态和数据传输。
- 主机能动态检测设备的插入或移除,从而方便热插拔操作。
- 除了数据和状态管理外,主机还负责供电,尤其是在总线供电的情况下。
-
系统软件与设备软件的交互:
- USB系统软件充当“中间层”,将硬件控制器和高层设备软件连接起来。
- 数据传输分为两种:实时传输用于需要稳定低延迟的场景(如音视频),而异步传输允许一定的延迟(如文件传输)。
- 电源管理保证设备在需要时正常供电,同时在设备空闲时节省电力。
4.10 架构扩展
- USB架构允许在主机控制器驱动程序和USB驱动程序之间进行扩展。
- 支持多个主机控制器及其对应的驱动程序。
-
模块化设计:
- USB架构通过接口分层设计,使得扩展和兼容性更容易。例如,多个主机控制器的协同工作可以通过专用的驱动程序进行管理。
-
实际意义:
- 多主机控制器的支持使得系统能同时处理多个设备并优化性能,特别是在高负载的情况下。
FQA
什么是“由主机调度的基于令牌的协议”?
主机调度的基于令牌的协议是USB体系结构中一种核心的通信机制,用于在主机(Host)和外设(Device)之间分配通信权限和控制数据传输。
它通过主机发送**令牌(Token)**的方式,决定哪些设备可以在当前时刻进行数据的发送或接收。
这种机制由主机完全控制,是USB总线管理和通信高效运行的关键。
1. 协议的核心要素
-
主机调度(Host Scheduling):
在USB系统中,主机是唯一的调度者。它负责管理所有设备的带宽分配和通信时序。
主机根据设备的类型、优先级和传输需求,按照一个固定的时间表(帧或微帧)调度总线上的数据传输。关键点:
- USB 是主机驱动的(Host-driven),设备不能主动请求传输。
- 主机通过调度,确保所有设备都能在分配的时间内完成通信,避免冲突。
-
基于令牌(Token-based):
主机使用令牌来管理通信过程。令牌是USB协议中一种特殊的数据包,用于定义接下来传输的方向、目的设备、以及传输的具体类型。令牌的作用包括:
- 标识数据传输的接收方或发送方。
- 定义数据流的类型(如控制、批量、同步、或中断传输)。
- 确定具体的通信目标,例如指定设备的某个端点。
2. 基于令牌的通信流程
在USB通信中,主机通过发送不同类型的令牌,来控制数据流动的方向和目标。以下是典型的基于令牌的数据传输流程:
-
主机发送令牌 (Token Packet):
- 主机首先发送一个令牌包,指定目标设备地址和端点号,并定义传输方向(IN/OUT)及类型。
- 令牌类型包括:
- IN 令牌: 请求设备向主机发送数据。
- OUT 令牌: 主机向设备发送数据。
- SETUP 令牌: 初始化控制传输(通常用于配置设备)。
-
设备响应:
- 收到令牌的设备根据令牌内容和自身状态,决定是否响应。如果设备响应,它会发送数据包(DATA)或状态包(如ACK)。
- 如果目标设备没有准备好,可能会返回NAK(Negative Acknowledgment,表示暂时无法传输)。
-
主机确认 (Handshake Packet):
- 在完成数据传输后,主机会发送一个握手包(如ACK),表示数据已正确接收。如果传输失败,主机会重新发送令牌并重试。
3. 令牌数据包的结构
令牌包由以下字段组成:
- 同步字段 (SYNC): 用于同步数据流。
- PID (Packet Identifier): 标识令牌类型(如IN、OUT、SETUP)。
- 地址字段 (Address): 指定目标设备的USB地址。
- 端点号 (Endpoint Number): 指定目标设备上的端点(Endpoint)。
- CRC5 校验 (Cyclic Redundancy Check): 确保令牌包数据的完整性。