




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章USB总线接口的数据通信技术10.1通用串行总线(USB)技术概述10.2USB系统体系结构10.3USB软件通信技术
10.1通用串行总线(USB)技术概述
10.1.1USB的含义
当今的计算机外部设备都在追求高速度和高通用性。为了满足用户的需求,以Intel为首的七家公司(Intel、Compaq、Microsoft、IBM、DEC、NorthernTelecom以及NEC)于1994年11月推出了USB(UniversalSerialBus,通用串行总线)协议的第一个草案,专用于低、中速的计算机外设。近年来USB总线技术已经成为了计算机领域发展最快的技术之一,并为越来越多的个人计算机界人士所接受。
USB为简化PC与外设之间的互连提供了一种免费的标准化连接器,它支持各种PC与外设之间的连接,还可实现数字多媒体集成,是一种较快速的、双向的、同步传输的、廉价的并可以进行热插拔的串行接口。
在计算机工业中,USB被认为是一个具有中低速率的总线,它每秒可以处理12Mb的信息,而这一速度正是大多数商用计算机网络的速度,但是在与工作速度为300Mb/s的光通道串行总线和专门用于处理音频和视频信号的IEEE1394等总线技术相比,USB的速度就不能称为快了。所以,我们说USB是一种中低速的总线。
USB用来把串口、并口等不同的接口统一起来,使用一个4针插头作为标准插头。通过这个标准插头,采用菊花链形式(星型结构)可以把所有的外设连接起来,并且不会损失带宽。图10-1给出了一个典型的USB设备网络配置的示意图。图10-1典型的USB设备网络配置
USB可把多达127个外设同时连到用户的系统上,所有的外设通过协议来共享USB的带宽,其12Mb/s的带宽对于键盘、鼠标等低中速外设是完全足够的。USB允许外设在主机和其他外设工作时进行连接、配置、使用及移除,即支持所谓的即插即用(Plug&Play)。同时,USB总线的应用可以清除PC上过多的I/O端口,而以一个串行通道取代,使PC与外设之间的连接更容易。自从1996年2月USB规范版本1.0发布,短短几年间,USB不光成为了微机主板上的标准端口,而且还成为了所有微机外设(包括键盘、鼠标、显示器、打印机、数字相机、扫描仪和游戏柄等)与主机相连的标准协议之一。这种连接较以往普通并口(Parallelport)和串口(Serialport)的连接而言,主要的优点是速度高、功耗低、支持即插即用和使用维护方便。10.1.2USB的优势
USB可以自动检测和安装外设,实现真正的即插即用,支持热插拔,即不需要关机断电,也可以在正运行的电脑上插入或拔除一个USB设备。它将各种各样的外设I/O端口合成一个,具有自动配置能力,用户只要简单地将外设插入到PC以外的总线中,PC就能自动识别和配置USB设备。USB比传统的串口带宽更大,增加外设时无需在PC内添加接口卡,多个USB集线器可相互传送数据,使PC可以用全新的方式控制外设。USB总线结构简单,信号定义仅由2条电源线和2条信号线组成。随着时间的推移,基于USB的外设将逐渐增多,现在满足USB要求的外设有调制解调器、键盘、鼠标、光驱、游戏手柄、软驱、扫描仪等,而非独立性I/O连接的外设将逐渐减少。即主机控制式外设减少,智能控制式外设增多。USB总线标准由1.1版升级到2.0版后,传输率由12Mb/s增加到了240Mb/s,更换介质后连接距离由原来的5米增加到近百米。基于这点,USB也可应用于ISDN以及基于视频的产品中,如为数据手套的数字化仪提供数据接口。
USB的优势主要体现在以下几个方面:
(1)真正的即插即用。
①自动地检测与设置。当启动计算机后需要再连入一个硬件外围设备时,过去的办法只能是将计算机关闭,然后打开机箱,插入板卡,连接线缆,再启动计算机等一系列的操作步骤。然而现在有了USB接口,只需要将配有USB接口的外设插入相应的计算机机箱上的接口,剩下的事情便完全由USB外设和主机完成。当然,这需要得到一定的操作系统的支持,在普遍的Windows用户中,要注意的是必须在Windows98及其以上版本中才会支持USB接口。其中,WindowsNT是不支持的。②通用的接口。USB在诞生之初,便以尽可能方便用户使用为目的,因此,其接口的通用性必然是其特点之一。同时,由于越来越多的用户对USB的认可,许多计算机设备制造商都在其产品中加入了对USB接口的支持,因此,在市场上可以很方便地找到有USB接口的键盘、鼠标、光驱、硬盘、摄像头等一系列的外围设备。同时,这些设备接口的机械、电气特性都是一致的,因此,在计算机上可以方便地连入这些设备。③系统资源的节省。正是由于不同的外设可以使用同一个USB接口,因此,操作系统不需为每种设备都配置不同的中断和I/O口,从而最大限度地节省了计算机系统资源。同时,也是由于上述特点,用户不必再为不同硬件使用系统的中断和I/O口时产生的冲突而犯愁,也不必再手动地协调其分配了。
④简易的电缆。USB使用4根电缆线完成数据传输,它们分别是电源线(+5V)、地线、两条差分的数据线(D+、D-)。单独的一条USB数据线可支持5m的传输距离。利用集线器,可将传输距离扩展至30m。⑤不需要单独的电源。由于USB接口中携带了电源线和地线,因此,它可以直接从主机的接口或集线器上得到电源的供给。在中等电源供给的条件下,它完全可以满足设备的需求。
(2)速度的提升。 在USB体系中,总共有3种数据传输速率:低速(LowSpeed)1.5Mb/s、全速(FullSpeed)12Mb/s、高速(HighSpeed)480Mb/s。像许多接口一样,USB接口是向下兼容的,也就是说,最新的高速版本与USB1.1接口在机械、电气等方面是兼容的。
(3)低功耗。USB设备的供电方式有两种:自供电(Self-Powered)和总线供电(Bus-Powered)。所谓自供电,就是由设备自己提供电源,设备不需要从VBus上取得电流,这类设备的功率不受USB协议的限制,设计时只需要将VBus用电容连接到GND就可以了。总线供电设备完全从VBus上取得电流,它们的功率受USB协议的限制,一般不能超过500mA。总线供电设备有两种工作状态:一是正常工作(Normal)状态;一是挂起(Suspend)状态。USB协议规定,如果总线供电设备在3ms内没有进行总线操作,即总线处于空闲态,设备需要自动进入挂起状态。挂起的设备从总线上吸收的电流必须小于500mA,而实际上协议规定的500mA包括了主机端15kΩ的电缆终端匹配电阻,其电流通常为220mA。所以,对于使用总线电源的设备而言,进入挂起状态通常意味着设备的总电流功耗不能超过280mA。这个功耗值是非常低的。 总线供电设备在进入挂起状态以后可以通过唤醒(Resume)操作恢复到正常工作状态。唤醒操作既可以由主机发送唤醒或复位信号来触发,也可以由设备自行通过远程唤醒操作来完成。所谓远程唤醒,是指一个被挂起的USB设备发送信号给处于挂起状态的主机使得主机醒来处理设备端的突发事件。10.1.3USB的用途
由前面的介绍可知,USB就是设备插架的一种规范。USB技术设计的主要目的是向广大计算机用户提供纯粹的数字视频和音频信号,以实现通信服务,所以USB的总线速度要足够用来支持这些类型的设备。
USB把所有的输入和输出外设都置于机箱之外,而不使用任何扩展槽。
USB采用级联方式,即每个USB设备用一个USB插头连接到一个外设的USB插座上,而其本身又提供一个USB插座供下一个USB外设连接用。通过这种菊花链式的连接,一个USB控制器可以连接多达127个外设,而每个外设间距离(线缆长度)可达5m。USB能智能识别USB链上外围设备的插入或拆卸,为PC的外设扩充提供了一个很好的解决方案。有了USB技术,外设的设计者就可以很自由地实现其方案,而无需将整个外设的功能分为设备和接口卡两部分。现在出现的USB音箱,就可以认为是一个USB声卡和传统音箱的结合体。同时计算机内部总线也就不必处理在这些接口卡之间穿梭的信息流了。有了这种类型的配置,用户可以获得更好的整体系统性能。
可以说,USB技术的问世改变了传统的PC机世界,简化了不同外设与主机间的接口技术。
10.2USB系统体系结构
一个USB系统主要被定义为三个部分:USB的互连、USB的设备和USB的主机。USB的互连是指USB设备与主机之间进行连接和通信的操作,主要包括以下几个方面:
(1)总线的拓扑结构:USB设备与主机之间的各种连接方式。
(2)内部层次关系:根据性能设置,USB的任务被分配到系统的每一个层次。
(3)数据流模式:描述了数据在系统中通过USB从产生方到使用方的流动方式。
(4) USB的调度:USB提供了一个共享的连接,对可以使用的连接进行了调度,以支持同步数据传输,并且避免了优先级判别的开销。10.2.1总线布局技术
1.总线拓扑结构
总线拓扑结构包括四个重要的组成部分:
(1)主机和设备:USB系统的基础组成部分。
(2)物理拓扑结构:描述USB系统中的各组成部分是如何连接起来的。
(3)逻辑拓扑结构:描述USB系统中各种组成部分的地位和作用,以及从主机和设备的角度观察到的USB系统。
(4)客户软件层与应用层的关系:描述从客户软件层看到的应用层的情况,以及从应用层看到的客户软件层的情况。
1)总线的物理拓扑结构
USB连接了USB设备和USB主机,USB的物理连接是有层次性的星型结构。每个网络集线器是在星型的中心,每条线段是点点连接,如从主机到集线器或其功能部件,或从集线器到集线器或其功能部件。图10-2给出了USB总线的物理拓扑结构。图10-2USB总线的物理拓扑结构
USB系统的这个级联星型拓扑结构主要由三个基本部分组成:主机(Host)、集线器(Hub)和功能设备。
(1)主机也称为根、根结或根Hub。它位于主板上或作为适配卡安装在计算机上。主机包含有主控制器和根集线器(RootHub),控制着USB总线上的数据和信息的流动。在任何USB系统中,只有一个主机。USB和主机系统的接口称做主机控制器。主机控制器可由硬件、固件和软件综合实现。根集线器是由主机系统整合的,用以提供更多的连接点。即每个USB系统只能有一个根集线器,它连接在主控制器上。
(2)集线器是USB结构中的特定成分。它提供端口(Port)或连接点将设备连接到USB总线上,同时检测连接在总线上的设备,并为这些设备提供电源管理,负责总线的故障检测和恢复。集线器可为总线提供能源,亦可为自身提供能源(从外部得到电源)。自身提供能源的设备可插入到总线提供能源的集线器中,但总线提供能源的设备不能插入到自身提供能源的集线器或支持超过四个的下游端口中,如总线提供能源的设备的需要超过100mA电源时,不能同总线提供电源的集线器连接。
(3)功能设备通过端口与总线连接。USB同时可做Hub使用。
USB的设备有网络集线器和功能设备。网络集线器向USB提供了更多的连接点。功能设备为系统提供具体功能,如ISDN的连接、数字的游戏杆或扬声器。
2)总线的逻辑拓扑结构
在物理结构上,设备通过集线器连到主机上。但在逻辑上,主机直接与各个逻辑设备通信,就好像它们是直接被连到主机上一样。逻辑结构如图10-3所示,与之对应的物理结构如图10-2所示。在图10-3中,为了简化起见,未画出集线器。虽然USB系统中的工作都是从逻辑角度来看待的,但主机必须能够随时了解物理结构。例如,当一个集线器被移出时,通过它与主机相连的设备也相应一起移去,这是由其物理结构决定的。图10-3USB总线的逻辑拓扑结构在运行中,客户软件必须独立于USB上的其他设备。这样,设备和客户软件的设计者就可以只关心该设备与主机硬件、客户软件和主机软件的相互作用的细节问题。图10-4说明了在图10-3的逻辑结构下,一个设备设计者看到的客户软件与相关应用的关系的视图。图10-4客户软件和应用间的关系
2.物理接口
1)电气特性
USB传送信号和电源是通过一根四线的电缆进行的,图10-5中VBus和GND两根线用于提供设备工作所需的电源,D+和D-两条用于传输数据。信号线的特性阻抗为90Ω,而信号是利用差模方式送入信号线的。利用这种差模传输方式,接收端的灵敏度不低于200mV。图10-5USB的电缆
USB的信号传输支持两种数据传输率:12Mb/s的USB高速信号的比特率和1.5Mb/s的USB低速信号的比特率。低速模式需要更少的EMI保护。两种模式可在用同一USB总线传输的情况下自动地动态切换。因为过多的低速模式的使用将降低总线的利用率,所以1.5Mb/s低速率方式只支持数量有限的低带宽的设备(如鼠标)。
USB电缆中包括VBus、GND两条线向设备提供电源。VBus在源端的标称值为+5V。USB对电缆长度的要求很宽,最长可为几米。为了保证足够的输入电压和终端阻抗,重要的终端设备应位于电缆的尾部。在每个端口都可检测终端是否连接或分离,并区分是高速还是低速设备。
2)机械特性
对于所有的USB设备而言,都有一个“上行”连接。“上行”(Upstream)连接器和“下行”(Downstream)连接器是不能简单互换的,这样可避免集线器间的非法的环路连接。一条电缆拥有四根导线:一对具有标准规格的双绞信号线和一对在允许的规格范围内的电源线。每个连接器(无论A系列还是B系列)都具有四个接触点,并且具有屏蔽的外壳、规定的坚固性和易于插拔的特性。
3.总线协议
USB总线属于一种轮询方式的总线,主机控制端口初始化所有的数据传输。每一次总线执行动作最多传送三个数据包。按照传输前制定好的原则,在每次传送开始时,主机控制器发送一个描述传输动作的种类、方向、USB设备地址和端点(Endpoint)号的USB数据包,这个数据包通常称为标志包(TokenPacket)。USB设备从解码后的数据包的适当位置取出属于自己的数据。数据传输方向不是从主机到设备就是从设备到主机。在传输开始时,由标志包来标志数据的传输方向,然后发送端开始发送包含信息的数据包或表明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。
USB总线上的这种在主机和设备端点之间的数据传输模型称之为“管道”,它共有两种管道类型:流管道和消息管道。流管道中的数据不像消息管道中的数据,它没有USB所定义的帧结构,而且管道与数据带宽、传送服务类型和端口特性(如方向和缓冲区大小)有关。只要某一USB设备设置完成配置后即存在管道0。这是USB中一个特殊的管道——缺省控制管道,它属于消息管道,当设备一启动即存在,从而为设置设备、查询状况和输入控制信息提供一个入口。事务预处理允许对一些数据流的管道进行控制,从而在硬件级上防止了对缓冲区的高估或低估。通过发送不确认握手信号可阻塞数据的传输速度。当不确认信号发出后,若总线有空闲,数据传输将再做一次。这种流控制机制允许灵活地安排任务,可使不同性质的流管道同时正常工作,以传送不同大小的数据包。
4.系统设置
USB设备可以随时安装和拆卸,因此,系统软件在物理总线布局上必须支持这种动态变化。
1) USB设备的安装
所有的USB设备都是通过端口接在USB上,网络集线器知道这些指定的USB设备。集线器有一个状态指示器指明在其某个端口上,USB设备是否被安装或拆除了,主机将所有的集线器排成队列以取回其状态指示。在USB设备安装后,主机通过设备控制通道激活该端口并以预设的地址值给USB设备。主机对每个设备指定唯一的USB地址,并检测这种新装的USB设备是集线器还是功能部件。主机为USB设备建立了控制通道,可使用指定的USB地址和零号端口。
如果安装的USB设备是集线器,并且USB设备连在其端口上,则上述过程对每个USB设备都要重新进行一次安装。
如果安装的设备是功能部件,那么主机中关于该设备的软件将因设备的连接而被引发。
2) USB设备的拆卸
当USB设备从集线器的端口拆除后,集线器关闭该端口,并且向主机报告该设备已不存在。USB的系统软件将准确进行处理。如果去除USB设备上的集线器,USB的系统软件将对集线器反连在其上的所有设备进行处理。
3)总线标号
总线标号就是对连接在总线上的设备指定唯一的地址的一种动作,因为USB允许USB设备在任何时刻从USB上安装或拆卸,所以总线标号是USB系统软件始终要做的动作,而且总线标号还包括对拆除设备的检测和处理。10.2.2USB设备
USB设备分为集线器、分配器或文本设备等种类。集线器类指的是一种专门设计用来提供额外的USB连接点的设备。USB设备必须携带用于自我识别和与通常的配置操作的有关信息,而且在任何时候都要表现出与定义的USB设备状态相符的操作。
1.设备特性
当设备被连接、编号后,该设备就拥有一个唯一的USB地址。设备就是通过该USB地址被操作的,每一个USB设备还要支持一个或多个端点,用以实现和主机之间的通信。而且所有的USB设备都必须支持一个特殊的端点——端点0,该端点是USB控制管道在USB设备一侧的接入点。与端点0相对应的是用来完整描述该USB设备的信息。这些信息包括如下几类:
(1)标准信息。这类信息是对所有USB设备都通用的定义,包括一些如厂商识别、设备类型、电源管理等内容,还包括对设备、配置、接口及端点的描述等与该设备的配置有关的信息。
(2)类型信息。此类信息给出了不同USB的设备类的定义,该信息的定义将根据USB设备的类型而有所不同。
(3) USB设备供应商信息。USB设备的供应商可自由地提供各种有关信息,但是,本规范并未对其格式做出规定。
此外,每个USB设备均提供了USB的控制和状态信息。所有的USB设备都支持通过其USB控制管道的通用访问模式。
2.设备描述
设备主要分为集线器和功能设备两种。只有集线器可以提供更多的USB连接点,而功能设备为主机提供了具体的功能。
1)集线器
在即插即用的USB结构体系中,集线器是一种关键元件。图10-6所示是一种典型的集线器。从用户的观点出发,集线器极大地简化了USB的互连复杂性,而且以很低的费用和高易用性提供了设备的稳定性。图10-6典型集线器顾名思义,集线器就是电线集中器。它可让不同性质的设备连接在USB上,接入点在这里称做端口。每个集线器都可将一个接入点转化成多个接入点。这种体系结构支持多个集线器的连接。图10-7给出了在台式计算机环境下的典型USB集线器体系结构。
每个集线器的上行端口用以连接集线器和主机,另外的下行端口都可以用来连接集线器或功能设备。集线器可以发现下行端口上的设备插入和移出操作,并为下行设备分配电源。每一个下行端口都可以分别将其配置成高速或低速。集线器可以将低速端口与全速率信号隔离开来。一个集线器包括集线器控制器(Controller)和集线器中继器(Repeater)。中继器是一个位于上行和下行端口之间的、由协议控制的开关。它也具有复位和挂起/重新开始信令的硬件支持。控制器为和主机之间的通信提供了接口寄存器。专用的集线器状态和控制命令允许主机配置一个集线器,并监视和控制其端口。图10-7台式机环境下的典型USB集线器体系结构
2)功能设备
一个功能设备是指一个可以从USB总线上接收或发送数据或控制信息的USB设备。一个功能设备由一个独立的外围设备实现,它通过一根电缆接入到集线器上的某一端口。但是,一个物理组件也可以仅用一根USB电缆来连接多个功能设备和一个嵌入的集线器。这称为多功能设备。一个多功能设备对主机而言是一个永远都接着一个或多个USB设备的集线器。
每一个功能设备都包含了用来描述其能力和所需资源的配置信息。在使用一个功能设备之前,必须由主机来对其进行配置。这种配置操作包括分配USB带宽和为该功能设备选择特定的配置选项。
下面给出一些功能设备的例子:
(1)定位设备,如鼠标、图形输入板或光笔。
(2)人工输入设备(HID),如键盘。
(3)输出设备,如打印机。
(4)电话适配器,如ISDN。
(5)软盘驱动器,如USBZIP。
(6)视频输入设备,如USB数字相机。10.2.3USB主机
USB主机包括硬件和软件两部分。
USB主机通过主控制器与USB设备交互。主机主要负责以下操作:
(1)检测USB设备的插入和移出。
(2)在USB主机和USB设备之间管理数据流。
(3)搜集状态信息和活动统计信息。
(4)为接入的USB设备提供数额受限的功率。位于USB主机中的USB系统软件用来管理USB设备和基于主机的设备软件之间的交互。USB系统软件和设备软件之间的交互有五个方面,即设备枚举和配置、同步数据传输、异步数据传输、电源管理以及设备和总线管理信息。
只要条件允许,USB软件就会使用主机系统接口来管理上述的交互操作。例如,如果主机系统使用高级电源管理(APM)来进行电源管理,USB系统软件就会与APM消息广播设备相连,以便截获挂起和重新开始指示。
USB体系结构包含了在主控制器驱动程序和USB驱动程序之间的可扩充性,因此,实现由多个主控制器和相应的主控制器驱动程序组成的应用是可能的。10.2.4数据流类型
USB协议支持以单向或双向的方式,在USB主机和一个USB设备之间交换功能数据和控制信息。USB的数据传输是在主机软件和一个USB设备上的特定端点之间进行的。一个给定的USB设备支持多个数据传输端点。USB主机将分别地处理一个USB设备的任一端点和其他端点上的通信。这种USB主机软件和一个USB设备端点之间的联系称为管道。比如,一个给定的USB设备可以有一个端点用来支持一个接收数据的管道,同时由另外一个端点支持一个发送数据的管道。在USB技术的体系结构中有四种基本的数据传输类型:
(1)控制信息传输。这种数据传送类型用于在设备接入时对其进行配置,也可用于其他目的。
(2)批量数据传输。在数据相对比较多和突发数据量较大时可使用批量数据传输,它在传输限制方面具有很宽的动态自由度。
(3)中断数据传输。这种方式与人类的反应特点很相似。
(4)同步或流实时数据传输。这种方式占用预先商量好的带宽,并且有预先商量好的发送时延。
任一给定的管道都必须能够支持上述的一种传输方式。
1.控制信息传输
控制数据用于在USB接入总线时对其进行配置。其他的驱动软件可以根据具体的应用来选择使用控制传输。这种数据传输不会丢失数据。
2.批量数据传输
典型的批量数据包括像使用打印机或扫描仪时所出现的大数据量的数据。这种批量数据是连续的。通过在硬件中实现差错检测功能,并且有选择地进行一定的硬件重试操作,可以在硬件层次上保证数据的可靠交换。而且,批量数据可以占有总线上所有可用的和其他传输类型未使用的带宽。
3.中断数据传输
由设备自发产生的数据传输是中断数据传输。这类数据传输可以由USB设备在任意时刻发起,而且USB总线以不低于设备说明的速率进行传输。
典型的中断数据包括事件指示、特性等。它们由一个或数个字节组成,例如来自一个指定设备的同步信号。尽管USB协议并不需一个明确的时钟速率,但数据交互会有USB协议必须支持的反映时间的限制。
4.同步传输
同步数据在产生、传送和处理过程中是连续的和实时的。在稳定的同步数据发送和接收速率中包含了相应的时钟信息。为了保持定时关系,同步数据必须按照接收的速率进行传输。除了传输速率,同步数据对传送时延非常敏感。对同步管道而言,所需的带宽与相应功能设备的抽样特性有关。而时延要求则与每一端点的缓冲能力有关。
同步数据的典型例子是声音信号。如果这些数据流的传送速率不能保持一致,则由于缓冲区或帧结构溢出或欠载工作,数据流会出现假信号。即使数据以适当的速率进行传输,传送时延也会损害一些具有实时性的要求,例如电话会议。实时地传送同步数据肯定会发生潜在的瞬时数据流丢失现象。换句话说,在传输中任何电气方面出现的错误都不可能用像重试这样的硬件机制来加以纠正。在实际中,USB(在多数情况下)的误比特率很小,可以不予考虑。协议中允许在整个USB带宽中分出一部分专门用于USB同步的数据流,从而保证了这些数据可以按所需的速率进行传输。USB同样可以支持要求时延很小的同步数据传输。
USB协议规范中对每一种传输类型如何访问总线都作出了相应的规定。
10.3USB软件通信技术
10.3.1USB设备的标准描述符
USB设备利用描述符来报告其属性。一个描述符是具有一个确定格式的数据结构。每个描述符都以一个一字节宽并包含了该描述符中的所有字节数的域为开始,再跟上一个说明描述符类型的一字节宽的域。
使用描述符可以对单独的配置的属性进行简洁地存储,这是因为每个配置都可以重用来自于那些具有相同特征的其他配置的描述符或部分描述符。在这种方式下,描述符与一个关系数据库中的单独的数据记录相类似。每个描述符包括一个表明其描述符类型的值。表10-1列出了USB和HID规范定义的值。每个描述符有一个值来指定这个描述符包含的信息的类型。第7位总是0;第6位和第5位确定了描述符类型:00h=标准,01h=类,02h=销售商,03h=保留;第4位到第0位确定了这个描述符。表10-1USB和HID规范定义的值每个描述符由一系列字段组成。这些字段名字大部分使用前缀来指明该字段中的内容:b=B(8位),w=字(16位),bm=位图,bcd=二进制编码的十进制,i=指针,id=标识符。
在适当的地方,描述符包括了字符串描述符引用,它提供了可显示的信息,以一种人们可以读懂的形式来描述一个描述符。是否包括字符串描述符是可选的,但是,描述符的引用字段是必备的。如果一个设备不支持字符串描述符,则字符串引用字段必须复位为0,以指出没有字符串描述符可用。如果一个描述符长度字段内的返回值小于本规范定义的值,该描述符就是不正确的,并且应该由主机来丢弃。如果一个描述符长度字段内的返回值大于本规范定义的值,主机就会忽略多余的字节,但是下一个描述符却是利用返回的长度而不是所期望的长度来进行定位的。
类型和供应商专用描述符可以用两种方式之一返回。与标准描述符有关的类型和供应商专用描述符,是在一个与标准的描述符相同的数据缓冲区之内,紧跟着相应的标准描述符而返回的。例如,如果某一个类型或供应商描述符同一个接口描述有关,有关的类型或供应商专用描述符会放在缓冲区内的接口描述符和接口端点描述符之间,作为对一个Get_Con-figuration_Descriptor请求的响应而返回。一个标准描述符的长度不会增加用来容纳设备类型或某个供应商描述符的扩展。类型或供应商专用描述符遵循和标准描述符一样的格式,像某个描述符的前两个字节一样,其前两个字节也分别用作长度和类型字段。
与一个标准描述符无关的类型或供应商专用描述符,可以利用类型供应商特定的请求而返回。
1.设备描述符
设备描述符中包括有关于这个设备的基本信息。它是在设备连接时主机读取的第一个描述符,这个描述符包括主机为了从设备得到其他信息所需要的信息。
该描述符有14个字段共17B。表10-2按它们出现在这个描述符中的顺序列出了这些字段,这个描述符包括如下信息:描述符本身、它的配置和它的类。该描述符是根据其功能给信息分组的。表10-2设 备 描 述 符
2.配置描述符
在接收了设备描述符后,就能够逐级得到设备的配置、接口和终端描述符了。
每个设备至少有一个描述设备特征和能力的配置。通常一个配置就足够了,但一个多用途或模式的设备可以有多个配置,每个配置依次有一个配置描述符。配置描述符包含了关于设备的电能使用和支持的接口号的信息。主机用Set_Configuration请求选择一个配置,并用Get_Configuration请求来读入当前的配置。
配置描述符有8个字段。表10-3按它们出现在这个描述符中的顺序列出了这些字段。配置描述符包括如下信息:描述符本身、配置和在该配置下设备的电能使用情况。对很多配置,一些字段是用不到的。该描述符是根据其功能给信息分组的。表10-3配 置 描 述 符该描述符描述了配置所能支持的接口数。每一个接口都可以独立地工作。例如,一个ISDN设备可以配置成具有两个接口,且每个接口都提供64KB/s的双向信道,该信道在主机上拥有分离的数据源或接收器。另外一种配置可能是把这个ISDN设备配置为单个接口,将两个信道合为一个128KB/s的双向信道。
当主机请求配置描述符时,所有相关的接口和端点描述符都会被返回。
一个USB设备具有一个或多个配置描述符。每一个配置都有一个或多个接口,并且每个接口都有一个以上的端点。在单个配置中,一个端点不会在接口之间共享,除非该端点被同一个接口的可替换的设置所使用。端点可以在那些没有这一限制的具有不同配置的一部分的接口之间共享。
一旦完成了配置,设备还可以支持对配置所进行的有限的调整。如果某个接口有可替换的设置,在配置之后就会选择这个可替换的设置。在一个接口中,一个同步端点所允许的最大分组尺寸也可以被调整。
3.接口描述符
接口这个词可以从整体描述USB,但从设备和它的描述符方面来说,接口(Interface)表示一组被一个设备的特征或功能而使用的终端。一个配置的接口描述符包含了关于这个终端的信息。每个配置必须支持一个接口,并且对很多设备来说,一个就足够了。当使用一个设备有多种方法时,一个设备可以在一个配置中定义多个接口而不是使用多个配置。这些接口可以指定每个使用不同的终端或者可以指定每个轮流使用相同的终端。主机用一个Set_Interface请求来申请一个新的接口,并用一个Ger_Interface请求来读取当前的接口。改变接口比改变配置容易,改变配置要影响这个设备。
一个接口描述符有9个字段。表10-4按它们在描述符中出现的顺序列出了这些字段。该描述符是根据其功能给信息分组的。表10-4接 口 描 述 符一个接口可以包括可交接的设置,这样可以允许端点和/或其特性在设备被配置之后发生改变。对于一个接口来说,缺省设置总是可交替的设置0。Set_Interface用于选择一个可交替的设置或返回到缺省设置。Get_Interface请求返回所选择的可交替的设置。
交替的设置允许设备配置的一部分发生变化,而同时其他接口可以继续工作。如果一个配置具有交替的设置可用于一个或多个接口,那么每个设置都包括了一个分离的描述符和其相应的端点。如果一个设备配置用两个交替的设置来支持单个接口,那么配置描述符后会跟上一个bInterfaceNumber和bAlternateSetting域复位为0的接口描述符,然后是用于该设置的端点描述符,再跟上另外一个接口描述符及其相应的端点描述符。第二个接口描述符内的bInterfaceNumber域也应该置为0,但是第二个接口描述符内的bAlternateSetting域应该置为1。
如果一个接口只使用端点0,那么接口描述符后就不会跟有端点描述符,并且该接口将标识一个请求接口,它使用同端点0相连的缺省管道。在这种情况下,bNumEndPoint也会被置为0。一个接口描述符决不会在端点号内包含端点0。
4.终端描述符
除了端点0,每个在一个接口描述符中指定的终端都有一个终端描述符。终端0不需要一个描述符,因为设备描述符包含了它的最大包的大小和其他一切规范定义的消息。表10-5按它们在描述符中出现的顺序列出了终端描述符的6个字段。该描述符是根据其功能给信息分组的。表10-5终 端 描 述 符
5.字符串描述符
一个字符串描述符包含了描述文本。USB规范中用制造商、产品类型、序列号、配置和接口定义了字符串描述符。一个设备也可以支持其他的字符串描述符。字符串描述符是可选择的。表10-6显示了这些描述符的字段和用途。字符串描述符有3个或更多个字段。表10-6字符串描述符如果一个设备不支持字符串描述符,在设备、配置和接口描述符内的所有字符串描述符引用都必须复位0。
字符串描述符使用的是UnicodeStandard标准所定义的Unicode编码方式(统一的字符编码标准,采用双字节对字符进行编码)。一个USB设备内的字符串可以支持多种语言。当请求一个字符串描述符时,请求者使用由Microsoft为Windows所定义的一个16比特的语言ID(LANGID)来说明所需要的语言。对于所有的语言,字符串索引0都将返回该设备所支持的一列两字节的LANGID代码。一个USB设备可以省略所有的字符串描述符。
UNICODE字符串描述符不以NULL为终止。字符串长度是通过从该描述符内的第一个字节的数值中减去二得到的。10.3.2基于VisualBasic的USB设备显示程序设计
由于USB支持I/O设备的动态连接和分离,定位某一设备的地址会根据它和其他已经连接的设备的连接顺序而发生变化,因此,我们不能依靠一个静态地址来定位一个I/O设备,而是必须通过操作系统去访问它的系统表。我们必须首先找到即插即用I/O子系统的根,然后寻找USB主控制器。USB主控制器有一个预定的名字“HCDx”,其中“x”是一个对应于唯一的主控制器的数字。操作系统能支持多个USB主控制器,其中每一个主控制器都可以在它的12Mb/s的共享总线上支持达到26个设备。使用几个高带宽I/O设备的系统可以有多个主控制器,但这些也必须通过询问,在找到一个USB主控制器时,它的相应的根集线器也就被标定了。这时就要询问这个集线器的端口是否连接了一个设备或其他集线器。如果发现有其他集线器,就要查询这个集线器上的端口,所有的集线器都要查询到USB规范规定的最大深度的级别。
1.人机接口设计
任何VisualBasic程序的第一部分总是程序的用户视图设计或人机接口。本例选用两个窗体,第一个用来显示接入的USB设备的拓扑结构,第二个显示选定设备的描述符。图10-8显示打开的窗体,其中有4个按钮,标号为主控制器0到主控制器3,还有一个状态行和一个显示区域。图10-8USB设备主控制器显示界面图10-9是第二个窗体,它所有的设备都有一个设备描述符、至少一个配置和一个接口描述符。一个设备可以有一个或多个终端描述符,也可以有一个或多个类描述符(例如集线器、人机接口设备、通信设备)。这种人机接口的设计可以同时显示每个描述符类型中的一个描述符。如果在这个设备上发现有多个描述符,在每个描述符类型的上方有一个选择方框,则可以从中选择一个。选择方框还可以显示每个描述符参数的名称。最后一个选择方框会显示送到这个设备上的字符串描述符。图10-9描述符显示界面
2.程序初始化
在程序被加载时,VisualBasic发送一个“窗体装入”事件给程序。如果存在一个名为Form_Load的子程序,它就会被执行。本例就使用这个子程序寻找如图10-8所示的USB主控制器。本例最多可以寻找4个控制器,如果要求更多,则可以添加更多的“主控制器”按钮。这些按钮用一个数组[HCD(3)]表明,因此不需要为这些附加的按钮建立新的软件。如果找到了一个主控制器,程序就会使相应的按钮从背景色改变为绿色并且使这个按钮有效。有一个主控制器的系统标识符会存储在按钮的TAG字段中,以备以后使用。如果找不到一个主控制器,程序就会使相应的按钮的背景色改变为橙色,并且使按钮无效。因此这个Form_Load子程序可以用来显示有多少个主控制器,并且有一个提示,使用户可以选择其中之一来研究。
下面是Form_Load事件的代码。PrivateSubForm_Load()
ForControllerIndex&=0To3
HostControllerName$="\\.\HCD"&ControllerIndex&
HostControllerHandle&=CreateFile(HostControllerName$,&H40000000,2,0,3,0,0)
IfHostControllerHandle&>0Then
HCD(ControllerIndex&).Tag=HostControllerHandle&
HCD(ControllerIndex&).BackColor=RGB(0,256,0)'Green=Go
HCD(ControllerIndex&).Enabled=TrueElse
HCD(ControllerIndex&).BackColor=RGB(256,128,0)'Amber=Wait
HCD(ControllerIndex&).Enabled=False
EndIf
NextControllerIndex&
StatusBox.Text="SelectaHostController"
EndSub
3.主控制器的选择
单击一个主控制器按钮就会开始USB设备数据采集的过程。这就要做许多操作系统调用,而设计中把其中的每一个都纳入到一个独立的子程序。在每次调用以后,独立的子程序都要做错误检查,只有当没有错误时,子程序才作返回。
一个Windows系统由许多节点组成,这些节点可以是USB设备、SCSI设备、硬盘控制器、PCI总线接口或其他设备。操作系统要根据I/O设备节点的详细信息和节点的连接信息来了解所有的I/O设备。Windows为它支持的所有的I/O设备保留了符号化的名字。
(1)确定根集线器节点。有了一个主控制器的操作系统句柄(在Form_Load中获得,并且存储在按钮的TAG字段中),我们就能用DeviceIOControl系统调用来得到根集线器的名字。操作系统要想得到这个名字,首先系统调用返回名字LENGTH,然后再以UNICODE格式(字符编码格式)返回名字。接着GetNameOf$子程序再把UNICODE格式改变成VisualBasic字符串格式。
下面是关于GetNameOf$子程序的代码。FunctionGetNameOf$(DeviceName$,DeviceHandle&,API_ID&)
DimNameBufferAsUNameType
‘ 获取根集线器名字字符串的长度
Status&=DeviceIoControl(DeviceHandle&,API_ID&,0,0,NameBuffer.Length,260,BytesReturned&,0)
IfStatus&=0ThenErrorExit(“CouldnotgetLENGTHof”&DeviceName$&“Name”)
IfNameBuffer.Length>256ThenErrorExit(Name$&"Name>256Characters")‘ 以UNICODE格式(字符编码格式)返回名字
Status&=DeviceIoControl(DeviceHandle&,API_ID&,
NameBuffer.Length,NameBuffer.Length,NameBuffer.Length,
NameBuffer.Length,BytesReturned&,0)
IfStatus&=0ThenErrorExit(“CouldnotgetTEXTof”&DeviceName$&“Name”)
temp$=“”
i=0' 把UNICODE格式改变成VB字符串格式DoWhileNameBuffer.UnicodeName(i)<>0
temp$=temp$&Chr(NameBuffer.UnicodeName(i))
i=i+2
Loop
GetNameOf$=temp$'StrConv(NameBuffer.Length,vbFromUnicode)
EndFunction可以用一个CreateFile系统调用做一个根集线器的连接。这个操作系统调用返回一个句柄,使我们能用它来检索这个节点的信息。我们可以使用一个DeviceIOControl系统调用取得这个信息。RootHubNode.NodeDescriptor.PortCount对于遍历一个设备的树结构是很重要的,因为它给定了与其他节点的连接个数。下面是关于根集线器描述符各字段的类型成员定义的代码。PublicTypeHubDescriptor
LengthAsByte
HubTypeAsByte
PortCountAsByte
Characteristics(1)AsByte
PowerOn2GoodAsByte
MaxCurrentAsByte
PowerMask(63)AsByte
EndType
(2)探测根集线器连接。既然已经确定了一组根集线器的端口,就可以向操作系统请求NodeConnectionInformation来确定有什么设备连接到集线器的每个端口。一个DeviceIOControl系统调用被用来检索这个信息。遍历设备的树结构的相关信息是USBDeciveInfo.ConnectionStatus和USBDeciveInfo.DevicelsHub。可以用这些信息来确定是否还要在另一个集线器的一些端口上进行重复操作。下面是设备描述和端口连接信息中所需的类型成员定义的代码。PublicTypeDeviceDescriptor
LengthAsByte
DescriptorTypeAsByte
USBSpec(1)AsByte
ClassAsByte
SubClassAsByte
ProtocolAsByte
MaxEP0SizeAsByteVendorID(1)AsByte
ProductID(1)AsByte
DeviceRevision(1)AsByte
ManufacturerStringIndexAsByte
ProductStringIndexAsByte
SerialNumberStringIndexAsByte
ConfigurationCountAsByte
EndTypePublicTypeNodeConnectionInformation
ConnectionIndexAsLong
ThisDeviceAsDeviceDescriptor
CurrentConfigurationAsByte
LowSpeedAsByte
DeviceIsHubAsByte
DeviceAddress(1)AsByte
NumberOfOpenEndPoints(3)AsByte
ThisConnectionStatus(3)AsByte
MyEndPoints(29)AsEndPointDescriptor
EndType4.描述符的显示
(1)收集设备描述符信息。先要建立请求数据包,并且将其传送到USB设备。发送任何类型的请求都用同样的过程:对一个数据包作预先格式化,再作一个DeviceIOControl系统调用。为了取得一个配置描述符,要执行两个调用:首先取得只有18字节的配置描述符,然后使用TotalLength参数读取全部描述符。如果选定的设备有多个配置,就要取得每个配置的数据。下面是实现这个数据收集的子程序。PrivateSubCollectDescriptors(Selected&)
Fori&=1To18
DescriptorData(i&)=DeviceData(Selected&).
ConnectionData.ThisDevice.Contents(i&-1)
Nexti&
Nexti&=18
DimConfigurationAsByte
DimStringIndexAsByte
Handle&=DeviceData(Selected&).DeviceHandle
ConnectionIndex&=
DeviceData(Selected&).
ConnectionData.ConnectionIndex
ConfigurationCount=DeviceData(Selected).
ConnectionData.ThisDevice.Contents(17)
ForConfiguration=1ToConfigurationCount
TotalLength&=GetConfigurationDescriptor(Handle&,ConnectionIndex&,Configuration-1)
Fori&=1ToTotalLength&
DescriptorData(Nexti&+i&)=
PCHostRequest.
ConfigurationDescriptor(i&-1)
Nexti&
Nexti&=Nexti&+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级数学下册教案《确定位置(一)》北师大版
- 《百分数-百分数的认识》教学设计-2024-2025学年六年级上册数学北师大版
- 苏教版三年级上册期中考试数学试卷-(含解析)
- 2025年广西电力职业技术学院单招职业技能测试题库1套
- 2025年贵州电子信息职业技术学院单招职业适应性测试题库审定版
- Unit1 Making friends (教学设计)-2024-2025学年人教PEP版(2024)英语三年级上册
- 2024年全息投影项目资金筹措计划书代可行性研究报告
- 2025年广西机电职业技术学院单招职业倾向性测试题库附答案
- 2024年饲用天然有效成分制剂项目资金筹措计划书
- 第二章 有理数及其运算单元教学设计 -2024-2025学年鲁教版(五四制)数学六年级上册
- 习作《我的家人 》教案-2024-2025学年统编版语文四年级上册
- 眼镜学智慧树知到答案2024年温州医科大学
- 24年注安-其他安全-必背考点-王培山
- 《积极心理学(第3版)》 课件 第9章 积极的爱
- 中医淋巴排毒
- 第四届档案职业技能竞赛理论试题库资料-上(选择题)
- 文献研读课件
- 监理大纲工程监理方案技术标投标方案
- 住宅小区工程施工组织设计范本
- QBT 2460-1999 聚碳酸酯(PC)饮用水罐
- GA/T 1466.3-2023智能手机型移动警务终端第3部分:检测方法
评论
0/150
提交评论