全面认识USB技术的精髓(一)

来源:互联网 发布:长江电力网络招聘 编辑:程序博客网 时间:2024/04/29 03:18
当Intel向业界宣布在USB 2.0协议中将USB的标准传输率提高到480Mbps的时候,你也许还在为USB是什么样的东西而困惑。本文力图从比较通俗的角度向你详细介绍USB接口和USB协议方面的知识。

  USB是Universal Serial Bus的简称。它是一种可以同时处理计算机与具有USB接口的多种外设之间通信的电缆总线。这些连接到计算机上的外设共同分享USB的带宽。USB的分时处理机制真正在硬件的意义上实现了计算机外设的即插即用。

  如果留心一下当前市场上的电脑外设,大家会发现采用USB设备的产品正在逐渐增加。键盘、鼠标、MODEM、游戏杆、音箱、扫描仪等,以前插在串行、并行等外部扩展接口上的部件,甚至一些以前要连接到电脑内部扩展槽上的设备,都开始以USB接口的界面出现,USB设备的发展势头正如日中天。

  本文将从技术的角度来探讨一下USB,有关它的实用部分请参阅本刊1999年第5、7和11期的相关文章。

  一个基于计算机的USB系统可以在系统层次上被分为三个部分:即USB主机(USB Host)、USB器件(USB Device)和USB的连接。

  所谓USB连接实际上是指一种USB器件和USB主机进行通信的方法。它包括:

●总线的拓扑(由一点分出多点的网络形式):即外设和主机连接的模式;

●各层之间的关系:即组成USB系统的各个部分在完成一个特定的USB任务时,各自之间的分工与合作;

●数据流动的模式:即USB总线的数据传输方式;

●USB的“分时复用”:因为USB提供的是一种共享连接方式,因而为了进行数据的同步传输,致使USB对数据的传输和处理必须采用分时处理的机制。

一、USB的总线拓扑

  USB的总线拓扑如图1所示,在USB的树形拓扑中,USB集线器(HUB)处于节点(Node)的中心位置。而每一个功能部件都和USB主机形成唯一的点对点连接,USB的HUB为USB的功能部件连接到主机提供了扩展的接口。利用这种树形拓扑,USB总线支持最多127个USB外设同时连接到主计算机系统。

图1 USB的总线拓扑示意图

  一个USB系统仅可以有一个主机,而为USB器件连接主机系统提供主机接口的部件被称为USB主机控制器。USB主机控制器是一个由硬件、软件和固件(Firmware)组成的复合体。一块具有USB接口的主板通常集成了一个称为ROOT HUB的部件,它为主机提供一到多个可以连接其它USB外设的USB扩展接口,我们通常在主板上见到的USB接口都是由ROOT HUB提供的。

  USB器件可以分为两种:即USB HUB和USB功能器件(Function Device)。

  作为USB总线的扩展部件,USB HUB(图2)必须满足以下特征:

●为自己和其它外设的连接提供可扩展的下行和上行(Downstream and Upstream)端口;

●支持USB总线的电源管理机制;

●支持总线传输失败的检测和恢复;

●可以自动检测下行端口外设的连接和摘除,并向主机报告;

●支持低速外设和高速外设的同时连接。

  从以上要求出发,USB HUB在硬件上由两部分组成:HUB应答器(HUB Repeater)和HUB控制器(HUB Controller)。HUB应答器回应主机对USB外设的设置,以及对连接到它下行端口的USB功能部件的连接和摘除(Attached and Detached)的检测、分类,并将其端口信息传送给主机,它也负责如“总线传输失败检测”这样的错误处理;而HUB控制器则提供主机到HUB之间数据传输的物理机制。如同我们所熟知的大多数计算机外设一样,USB HUB也有一个用来向主机表明自己身份的“BIOS”系统。这块位于USB HUB上的ROM,通过USB特征字使主机可以配置这个USB HUB,并监控它的每一个端口。

  USB功能器件即可以为主机系统提供某种功能的USB器件,如一个USB ISDN的调制解调器、或是一只USB接口的数字摄像机、USB的键盘或鼠标等。


图2 USB HUB的结构

图3 一个典型的USB功能器件结构框图

  USB的功能器件作为USB外设(USB Function),它必须保持和USB协议的完全兼容,并可以回应标准的USB操作。同样,用于表明自己身份的“BIOS”系统对于USB外设也是必不可少的,这在USB外设上被称为协议层。在物理机制上,一个USB外设可以由四部分构成(图3):

●用于实现和USB协议兼容的SIE部分;

●用于存储器件特征字、存储实现外设特殊功能程序及厂家信息的协议层(ROM);

●用于实现外设功能的传感器及对数据进行简单处理的DSP部分;

●将外设连接到主机或USB HUB的接口部分。

  根据传输率的不同,USB器件被分为高速和低速两种。低速外设的标准传输率为1.5Mbps,而高速外设的标准传输率为12Mbps。所有的USB HUB都为高速外设,而功能部件则可以根据外设的具体情况设计成不同的传输率,如用于视频、音频传输的外设大都采用12Mbps的传输率,而像键盘、鼠标这样的点输入设备则设计成低速外设。由于USB的数据传输采用数据包的形式,因而使得连接到主机的所有的USB外设可以同时工作而互不干扰。不幸的是,所有这些USB外设必须同时分享USB协议所规定的USB带宽(这个带宽在USB 1.0协议中为12Mbps),虽然USB的分时处理机制可以使有限的USB带宽在各设备之间动态地分配,但如果两台以上的高速外设同时使用这样的连接方法,就会使它们都无法享用到最高的USB带宽,从而降低了性能。这也正是Intel这样的巨头为什么要推出USB 2.0协议的原因(在USB 2.0协议中USB的总线带宽一下子被提高到了480Mbps)。

  用于实现外设到主机或USB HUB连接的是USB线缆(图4)。从严格意义上讲,USB线缆应属于USB器件的接口部分。USB线缆由四根线组成,其中一根是电源线VBus,一根是地线GND,其余两根是用于差动信号传输的数据线(D+,D-)。将数据流驱动成为差动信号来传输的方法可以有效提高信号的抗干扰能力(EMI)。在数据线末端设置结束电阻的思路是非常巧妙的,以至对于HUB来判别所连接的外设是高速外设或是低速外设,仅仅只需要检测在外设被初次连接时,D+或D-上的信号是高或是低即可。因为对于USB协议来讲,要求低速外设在其D-端并联一个7.5kΩ的接地电阻,而高速外设则在D+端接同样的电阻。在加电时,根据低速外设的D-线和高速外设的D+线所处的状态,HUB就很容易判别器件的种类,从而为器件配置不同的信息。图5表明了一个典型的高速外设的连接状况。为提高数据传输的可靠性、系统的兼容性及标准化程度,USB协议对用于USB的线缆提出了较为严格的要求。如用于高速传输的USB线缆,其最大长度不应超过5米,而用于低速传输的线缆则最大长度为两米,每根数据线的电阻应为标准的90Ω。

  USB系统可以通过USB线缆为其外设提供不高于+5V、500mA的总线电源。那些完全依靠USB线缆来提供电源的器件被称为总线驱动器件(Bus-powered device),而自带电源的器件则被称为自驱动外设(Self-powered device)。需要注意的是,当一个外设初次连接时,器件的配置和分类并不使用外设自带的电源,而是通过USB线缆提供的电源来使外设处于Powered状态。

  无论在软件还是硬件层次上,USB主机都处于USB系统的核心。主机系统(图6)不仅包含了用于和USB外设进行通信的USB主机控制器及用于连接的USB接口(SIE),更重要的是主机系统是USB系统软件和USB客户软件的载体。

总而言之,USB主机软件系统可以分为三个部分:

●客户软件部分(CSW),在逻辑上和外设的功能部件部分进行数据的交换;

●USB系统软件部分(即HCDI),在逻辑和实际中作为HCD和USBD之间的接口;

●USB主机控制器软件部分(即HCD和USBD),用于对外设和主机的所有USB有关部分的控制和管理,包括外设的SIE部分、USB数据发送接收器(Transreceiver)部分及外设的协议层等。


图4 USB线缆 图5 高速外设的USB线缆和电阻的连接图 图6 USB主机系统的结构及各部分之间的关系

二、USB的“分时复用”和电源管理

  当一个USB外设初次接入一个USB系统时,主机就会为该USB外设分配一个唯一的USB地址,并作为该USB外设的唯一标识(USB系统最多可以分配这样的地址127个),这称为USB的总线列举(Bus Enumeration)。USB使用总线列举方法在计算机系统运行期间动态检测外设的连接和摘除,并动态地分配USB地址,从而在硬件意义上真正实现“即插即用”和“热插拔”。

  在所有的USB信道之间动态地分配带宽是USB总线的特征之一。当一台USB外设在连接(Attached)并配置(Configuration)以后,主机即会为该USB外设的信道分配USB带宽;而当该USB外设从USB系统中摘除(Detached)或是处于挂起(Suspended)状态时,则它所占用的USB带宽即会被释放,并为其它的USB外设所分享。这种“分时复用”(Scheduling the USB)的带宽分配机制大大地提高了USB带宽利用率。

  作为一种先进的总线方式,USB提供了基于主机的电源管理系统。USB系统会在一台外设长时间(这个时间一般在3.0ms以上)处于非使用状态时自动将该设备挂起(Suspend),当一台USB外设处于挂起状态时,USB总线通过USB线缆为该设备仅仅提供500μA以下的电流,并把该外设所占用的USB带宽分配给其它的USB外设。USB的电源管理机制使它支持如远程唤醒这样的高级特性。当一台外设处于挂起状态(Suspended Mode)时,必须先通过主机使该设备“唤醒”(Resume),然后才可以执行USB操作。

  USB的这种智能电源管理机制,使得它特别适合如笔记本电脑之类的设备的应用。

三、USB的数据传输模式


图7 帧开始数据包在USB数据传输中的分布
图8 USB的通信流及信道
图9 同步字段
图10 PID字段

  我们知道,USB总线是一种串行总线,即它的数据是一个bit一个bit来传送的。虽然USB总线是把这些bit形式的数据打成数据包来传送,但数据的同步也是必不可少的。USB 1.0/1.1协议规定,USB的标准脉冲时钟为12MHz,而其总线时钟为1ms,即每隔1ms,USB器件应为USB线缆产生一个时钟脉冲序列。这个脉冲序列称为帧开始数据包(SOF,如图7所示),主机利用SOF来同步USB数据的发送和接收。由此可见,对于一个数据传输率为12Mbps的外设而言,它每一帧的长度为12000bit;而对于低速外设而言,它每一帧的长度仅有1500bit。USB总线并不关心外设的数据采集系统及其处理的速率,无论对于怎样的数据产生或是接收,它总是以外设所事先规定的USB标准传输率来传输数据。这就要求外设厂商必须在数据采集或接收系统和USB协议系统(SIE)之间,设置大小合适的先入先出模式(FIFO)来对数据进行缓存。

  在USB系统中,数据是通过USB线缆采用USB数据包从主机传送到外设或是从外设传送到主机的。在USB协议中,把基于外设的数据源和基于主机的数据接收软件(或者方向相反)之间的数据传输模式称为信道(Pipe)。信道分为流模式的信道(Stream Pipe)和消息模式的信道(Message Pipe)两种。信道和外设所定义的数据带宽、数据传输模式以及外设的功能部件的特性(如缓存大小、数据传输的方向等)相关。只要一个USB外设一经连接,就会在主机和外设之间建立信道。对于任何的USB外设,在它连接到一个USB系统中,并被USB主机经USB线缆加电使其处于Powered状态时,都会在USB主机和外设的协议层(ROM)之间首先建立一个称为Endpoint 0的消息信道,这个信道又称为控制信道,主要用于外设的配置(Configuration)、对外设所处状态的检测及控制命令的传送等。信道方式的结构使得USB系统支持一个外设拥有多个功能部件(用Endpoint 0、Endpoint 1...Endpoint n这样的方法进行标识),这些功能部件可以同时地、以不同的数据传输方向在同一条USB线缆上进行数据传输而互不影响(图8)。比如一个USB的ISDN MODEM,就可以同时拥有一个上传的信道和一个下载的信道,并能同时很好地工作。

  为实现多外设、多信道地同时工作,USB总线使用数据包的方式来传输数据和控制信息。

  USB数据传输中的每一个数据包都以一个同步字段开始(图9),它的最后两个bit作为PID字段开始的标志。紧跟在同步字段之后的一段8bit的脉冲序列称为PID(数据包标识字段,如图10所示),PID字段的前四位用来标记该数据包的类型,后四位则作为对前四位的校验。PID字段被分为标记PID(共有IN、OUT、SETUP或SOF四种)、数据PID(DATA0或DATA1)、握手PID(ACK、NAK或STALL)及特殊PID等。主机根据PID字段的类型来判断一个数据包中所包含的数据类型,并执行相应的操作。

  当一个USB外设初次连接时,USB系统会为这台外设分配唯一的USB地址,这个地址通过地址寄存器(ADDR)来标记,以保证数据包不会传送到别的USB外设。7bit的ADDR使得USB系统最大寻址为127台设备(ADDR字段,如图11所示)。由于一台USB外设可能具有多个信道,因而在ADDR字段后会有一个附加的端点字段(Endpoint Field,简标为ENDP)来标记不同的信道(图12)。所有的USB外设都必须支持Endpoint 0信道,用0000来标记。对于高速设备,可以最大支持16个信道,而低速设备在Endpoint 0之外仅能有一个信道。

  数据字段作为一次USB数据传输的中心目的,在一个USB数据包中可以包含0~1203Byte的数据(图13)。而帧数量字段则包含在帧开始数据包中,对有的应用场合,可以用帧数量字段作为数据的同步信号。

  为保证控制、块传送及中断传送中数据包的正确性,CRC校验字段被引用到如标记、数据、帧开始(SOF)这样的数据包中。CRC校验(数据冗余校验)可以给予数据以100%的正确性检验。

图11 数据包的ADDR字段
图12 端点(Endpoint)字段
图13 USB的数据字段

全面认识USB技术的精髓(二)