为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

10 usb主机硬件软件

2011-04-20 16页 doc 649KB 15阅读

用户头像

is_325481

暂无简介

举报
10 usb主机硬件软件第十章 USB主机:硬件与软件 第十章 USB主机:硬件与软件 USB的互连支持数据在USB主机与USB设备之间的流动。这一章主要讲述为了简化主机上的 客户软件(Software client)与设备的功能部件(function)之间的通信而必须的主机接口(host interface)。在本章中所涉及的具体实现部份并不是必要的,这些实现部份是作为例子来阐述在响应USB设备请求时的主机系统的行为。只要USB设备并不感觉到主机行为的改变,USB主机完全可以提供一个不同的软件系统实现方法。 10.1 USB主机概况 10.1.1...
10 usb主机硬件软件
第十章 USB主机:硬件与软件 第十章 USB主机:硬件与软件 USB的互连支持数据在USB主机与USB设备之间的流动。这一章主要讲述为了简化主机上的 客户软件(Software client)与设备的功能部件(function)之间的通信而必须的主机接口(host interface)。在本章中所涉及的具体实现部份并不是必要的,这些实现部份是作为例子来阐述在响应USB设备请求时的主机系统的行为。只要USB设备并不感觉到主机行为的改变,USB主机完全可以提供一个不同的软件系统实现。 10.1 USB主机概况 10.1.1 概论 图10-1展示了USB通信模型之间基本的信息流与互连关系: 逻辑的信息流 实际的信息流 图 10-1通信模型层次关系图 由图10-1可见,主机与设备都被划分成不同的层次。主机上垂直的箭头是实际的信息流。设备上对应的接口是基于不同实现的。在主机与设备之间的所有通信最终都是通过USB的电缆进行,然而,在上层的水平层之间存在逻辑的主机—设备信息流。主机上的客户软件和设备功能部件之间的通信是基于实际的应用需求及设备所能提供的能力。 客户软件与功能部件之间的透明通信的要求,决定主机和设备下层部件的功能以及它们的界面(interface) 这一章从主机的角度来描述上述的通信模型,图10-2描述了从主机角度看到的它与设备的连接。 主机在整个USB系统中是唯一的,它包括如下几个层次。 ·USB总线接口 ·USB系统(USB System) ·USB客户(Client) 其中,USB总线接口处理电气及协议层的互连(详见第7章及第8章)。从互连的角度看,USB设备和USB主机都提供类似的USB总线接口,如串行接口引擎(Serial Interface Engine SIE)。由于主机在USB系统中的特殊性,USB主机上的总线接口还必须具备主机控制器的功能(Host Controller),主机控制器具有一个内集成的集线器(根集线器)提供与USB电缆的连接。 USB系统(USB System)使用主机控制器来管理主机与USB设备的数据传输。USB系统与主机控制器之间的界面基于主机控制器的硬件特性。USB系统层相对于主机控制器而言,处理的是以客户观点见到的数据传输及客户与设备的交互。这包括附加的USB信息,比如协议头(Protocol Wrappers)。USB系统还必须管理USB的系统资源,以使得客户的访问成为可能。 通道组(到某一接口) IRPS 配置信息 标准通道(到缺省端口地址) 硬件定义 USB 电缆 通道,代表相应层之间连接的抽象 图10-2 主机通信图 USB系统有三个主要组成部份: ·主机控制器驱动(Host Controller Driver) ·USB驱动 (USB Driver) ·主机软件 (host software) 主机控制器驱动的存在,方便地将各种不同的主机控制器实现映射到USB系统,客户可以不必知道设备到底接在哪个主机控制器上就能同设备进行通信。USB驱动提供了基本的面向客户的主机界面。在HCD与USB之间的接口称为主机控制器驱动接口(Host Controller Driver Interface HCDI)。这层接口不能被客户直接访问,所以也不是由USB具体来完成的。一个典型的HCDI是由支撑各种不同主机控制器的操作系统来定义的。 USBD提供I/O请求包(I/O Request Packets)形式的数据传输,以某一特定通道来传输数据。另外,USBD为它的客户提供一个容易被支配及配置的抽象的设备。作为这种抽象的一部份,USBD拥有标准通道(参见第5章及第9章)对设备进行一些标准的控制。这标准通道实现了USBD与抽象设备之间的逻辑通信。(见图10-2) 在有些操作系统中,提供了额外的非USB系统软件以支持设备的配置及设备驱动程序的加载。在这样的操作系统中,设备驱动程序应使用提供的主机软件接口而不是直接访问USBDI。 客户层描述的是直接与USB设备进行交互所需要的软件包。当所有的设备都已连上系统时,这些客户就可以直接通设备进行通信。一个客户不能直接访问设备的硬件。 该言之,主机可提供如下的功能 ·检测USB设备的连接与断开。 ·管理主机与设备之间的标准控制流。 ·管理主机与设备之间的数据流。 ·收集状态及一些活动的统计数字。 ·控制主机控制器与USB设备的电气接口,包括提供有限的能源。 在下面的章节中,我们将较细的阐述USBDI所能提供的功能。对于特定的主机平台与操作系统下的实现接口请参照相关的操作系统手册。 所有的集线器都通过状态改变通道它的状态的改变,其中包括设备的连上与断开等。 USBD的一类特殊客户即:集线器驱动器拥有这些状态改变通道,接收这些状态的改变。对于像设备连结这种状态改变,集线器驱动器将加载设备的驱动程序。在有些系统中,这种集线器驱动程序是操作系统提供的主机软件的一部份,它用来管理设备。 10.1.2控制机构 控制信号可通过带内信号(in-band-singling)及带外信号(out-of-bard-signaling)两种方式在主机与设备之间传输。带内信号将控制信息及数据信息混在一起用同一通道传输,以至于主机根本就没有觉察到。而外带信号是通过单独的通道进行传输。 任何一个已连接的设备都有一个标准的信息通道,即标准通道。这个主机与设备之间的逻辑的连接用于传输USB的标准控制信息,比如对设备的配置信息等。这些标准通道为USB的设备提供了标准的接口,它也可以用来进行基于特定设备而不同的通信,这些通信由拥有所有这些通道的USBD作媒介。 一些特定的设备可能允许使用额外的信息通道来传输特定设备的控制信息。这些额外的信息通道与标准通道使用同样的协议,但是传递的信息是基于特定的设备的,也不是由USB具体标准化的。 USBD支持和它的客户共享使用标准通道,它还提供给客户与设备相连的其它控制通道的访问。 10.1.3 数据流 主机控制器在主机与USB设备之间传递数据。这些数据被看作连续的字节流。USB支持4种形式的数据传输 ·控制传输。 ·同步传输。 ·中断传输。 ·块传输。 有关于传输方式的额外信息请参见第5章 每个设备具有一到多个界面以用于客户与设备之间的数据传输。每个接口由一到多个在客户及设备端点之间独立传输的通道组成。USBD根据主机软件的请求来初始化这些通道和接口。当这些配置请求提出后,主机控制器将基于主机软件所提供的参数来提供服务。 每个通道基于数据传输模式和请求的有如下几个特性: ·数据传输的频率。 ·数据是以恒定速率提供还是随机出现的。 ·在数据传输前可延迟的时间。 ·在传输过程中数据的丢失是否是具有灾难性。 USB设备的端口描述了与之相连接的通道的特性。USB设备端口的特性的具体描述可参照第9章。 10.1.4 收集状态及活动统计数据 作为普通的为所有主机与设备之间的控制流与数据流服务的USB系统与主机控制器,一直处于随时接收状态变化及活动信息的状态,以使软件能及时接收并处理这些状态的变化。这里并不具体讲述需要被跟踪的状态信息及这些状态信息的特殊的格式。 10.1.5 电气接口因素 主机为连在集线器上的USB设备提供能量。一个集线器口所能提供的能量具体值在第七章有详细说明。 10.2 主机控制器功能 在所有的实现中,主机控制器都必须提供基本相同的功能。主机控制器对主机及设备来讲都必须满足一定的要求。下面是主机控制器所提供的功能的概况。每种功能在下面的小节中还有具体的说明。 1 状态处理(State Handling) 作为主机的一部份,主机控制器报告及管理它的状态。 2串行化与反串行化 对于从主机输出的数据,主机控制器将协议及数据信息从它原始形状转换为字位流。而对于主机接收的数据主机控制器进行反向操作。 3 帧产生(Frame Generation) 主机控制器以每1ms为单位产生SOF标志包。 4 数据处理 主机控制器处理从主机输入输出数据的请求。 5 协议引擎 主机控制器支持USB具体的协议 6传输差错控制 所有的主机控制器在发现和处理已定义的错误时展现相似的行为。 7 远程唤醒 所有的主机控制器都应具有将总线置于挂起状态及在远程唤醒事件下重新启动的能力。 8 集线器 集线器提供了标准的将多个USB设备连到主机控制器的功能。 9 主机系统接口 主机控制器在主机系统控制器之间建立一个高速的数据通道。 下面的各节将对上面提到的各功能进行详细的讨论。 10.2.1 状态处理 主机控制器具有一系列USB系统管理的状态。另外,主机控制器为下面两个与USB有关的部份提供接口。 ·状态改变传播 ·根集线器 根集线器提供与其它USB设备一样的标准状态给集线器驱动器。有关USB状态与其它之间的相互关系的详细讨论请参照第7章。 主机控制器的总的状态与根集线器及总体的USB密不可分。任何一个对设备来说可见的状态的改变都应反映设备状态的相应改变。从而保证主机控制器与设备之间的状态是一致的。 USB设备通过使用恢复信号请求唤醒,使设备回利已配置的状态。主机控制器本身也可以通过同样的方法产生一个恢复事件。主机控制器通过使用该实现系统的某种机制来通知主机的其它部份已产生了一个恢复事件。 10.2.2 串行化与反串行化 通过物理上的传输是以字位流的形式出现的。不管是作为主机的一部份,还是作为设备的一部份,串行接口引擎(STE)处理USB传输过程中的串行化与文串行化工作。在主机上,串行接口引擎是主机控制器的一部份。 10.2.3 帧产生 主机控制器有义务将USB时间划分为以1ms为单位的帧。主机控制器以每1ms间隙产生SOF(Start-of-Frame)标识以示新的一帧的开始(如图10-3)。SOF标识是一帧的开始部份,在SOF标识之后主机控制器在该帧的余下时间内传输其它的东西。当主机控制器处于正常工作状态时,SOF标识必须以1ms为间隙连续的发送而不管其它的总线活动。当总线控制器处于不给总线提供能量的状态时,它不能产生SOF标识。当总线控制器不产生SOF标识时,它处于一种节能方式。 EOF 间隙(FRAME N-1) FRAME N FRAME N+1 图10-3 帧产生 SOF标识具有取得总线的最高的优先权。集线器中的babble circuit在EOF期间停止任何传输任务,为SOF标识的传输提供一条空闲的总线。 主机控制器必须允许USB每帧的时间长度相差±1 bit的时间(参见10.5.3.3.4节)。主机控制器维持着一个当前帧的序号。 帧序号具有以下各方面的作用 ·用于将两帧唯一的区别开 ·在每帧的结尾处加1 ·对于它的后继帧有效 主机在每一个SOF标识中传输当前帧号的低11位。当接到主机控制器的请求时,主机返回请求发生时刻的帧序号。虽然主机控制器自身并不要求维持一个超过11位的帧序号,但是主机返回的帧序号至少是32位的,。 主机控制器在EOF期间要停止一切传输操作。当EOF间隙产生时,所有原定在刚才那帧上传输的事务暂停。如果主机控制器在执行传输的时候出现了EOF,主机控制器中止该项传输请求。 10.2.4 数据处理 主机控制器接收来自USB系统的数据并将其传送给USB设备或从USB设备接收数据送给USB系统。USB系统和主机控制器之间进行数据传输时的具体格式是基于具体的实现系统的,同时也要符合第5章所讲述的传输协议要求。 10.2.5 协议引擎 主机控制器管理着USB协议层的接口。在输出的数据中插入适当的协议信息,并且它将解释并去除输入数据中的协议信息。 10.2.6 传输差错控制 主机控制器必须能够发现如下的几种从主机的角度定义的错误: · 超时错。该类错误发生在目标端口没有相应的反应或传输系统被严重损坏以至于目标端口根本就没有收到信息。 ·数据丢失或无效传输。 主机控制器发送或接收到较应该传输的数据包为短的数据包。例如,一项传输超出了EOF,或缺少可使用的资源,或数据包CRC校验出错. ·协议错 ——无效的握手PID,例如形式错误或不恰当的握手包。 ——错误的包标志。 ——位插入错。 对批传输,命令传输,中断传输,主机必须维持一个错误统计记录。这些错误是由上述各种情况产生的,而不是由于端口不响应一个请求而产生的。错误统计记录反映了传输过程中出现的错误的次数。如果错误统计记录值达到三,则主机终止传输。如果传输是由于过多的传输错而被中止的话,则最后一次出现的错误将被简要的说明。每个同步传输事务仅进行一次,而不管结果,所以对于这种传输来说是没有被维持的错误记录。 10.2.7 远程唤醒 如果USB系统希望将总线置于挂起状态,它将请求主机控制器终止任何形式的传输,包括SOF。这使得所有的USB设备进入一种挂起状态。在这种状态下,USB系统可以使能主机控制器响应总线唤醒事件。这使得主机控制器能响应总线的唤醒信号,重启主机系统。 10.2.8 根集线器 根集线器提供主机控制器与一个或多个USB设备的连接。除了主机控制器及根集线器之间的硬件软件接口是由具体的硬件实现来定义的外,根集线器提供与其它的集线器一样的功能(参见11章)。 10.2.8.1 端口复位(Port Resets) 7.1.7.3节讲述了集线器为了保证每一个下行恢复请求都供给一个长时间的下行复位,所必须具备的条件,根集线器应能提供一个至少为50ms的复位时间。如果复位时间是由硬件控制的,并且硬件能提供的复位时间小于50ms,则USB系统可以产生连续的几个复位信号以产生足够长时间的复位。 10.2.9 主机系统接口 主机控制器提供一条高速的读出与写入系统内存的总线接口。内存与USB电缆的物理数据的交换是在主机控制器的控制下自动进行的。当数据缓冲区需要允满或清空时,主机控制器通知USB系统。 10.3 软件功能概论 HCD与USBD提供了基于不同抽象层次的软件界面。它们以一定的方式协同工作以实现USB系统的功能(见图10-2)。对USB系统的功能主要表现在对USBDI所能提供的功能上。USBD与HCD之间任务的划分没有具体的定义,但是HCDI必须要具备的一项功能就是它必须支持多种主机控制器的不同实现。 HCD提供了抽象的主机控制器,且对主机控制器所见到的USB系统的数据传输进行了抽象。USBD提供一个抽象的设备,且对USBD客户和USB设备功能部件之间的数据传输进行抽象。总之,USB系统简化了USBD客户与USB设备之间的数据传输过程,并且作为对USB设备的面向USB的接口进行控制的人口。作为简化数据传输功能的一部份,USB系统提供缓冲区管理功能,并且允许根据客户及设备功能部件的需求进行实时数据传输。 USBDI的提供的功能将在下面将具体的阐述。这些功能的具体实现将在相关的操作系统中关于HCDI及USBDI的部份找到。通过USBDI实现数据传输所经历的过程将在下面得到简述。 10.3.1 设备配置 不同的操作系统环境使用不同的软件及不同的事件序列来配置设备:在这里,我们讲述USB系统层时,并不以某个特定的实现系统为模板。但是USB系统的具体实现系统必须实现某一些基本的功能。在有些操作系统中由主机软件(host software)实现这些功能,而在其它的一些操作系统中,由USB系统层实现该项功能。 USBD有一类特殊的客户,称作集线器驱动器。集线器驱动器充当设备从特定的集线器连接与断开的清算中心(clearing house)。当集线器控制器接到有设备连接与断开的信息时,它会激活其它的主机软件或其它的USBD客户配置该设备或对这些信号作出其它的反应。上述的模型是下面讨论的基础,见图10-4 当一个设备连上某集线器的时候,集线器驱动器从集线器那儿收到一条表明集线器状态改变的消息。集线器驱动器使用集线器提供的信息,向USBD请求设备的标志码(identifier)。USBD为该设备建立标准的通道,并且返回该设备的身份码。现在该设备可以被配置和使用。对于任何一个设备,在使用之前必须要完成如下三项配置工作: 控制信息流 可选信息流 图10-4 设备配置信息图 1.设备配置:这包括设置设备的所有参数,为设备分配所有可见的USB主机资源。USB还允许以后更改设备的部分配置参数。一旦设备配置完以后,以设备的观点来看,它已是可用的。 2.USB配置 为了真正的创建客户可用的USBD通道,额外的对设备不可见的USB信息要由客户具体化。这些信息被称为通道策略,它描述了客户将如何使用该通道,其中包括一个I/O请求包容许的最大数据量,客户的最大服务间隙,客户的标识码等等。 3.功能配置 当设备配置与USB配置完成后,从USB的观点来看,该通道是完全可用的。然而在客户真正使用通道之前,或许额外的供应商定义的(vendor)或有关设备类(class-specific)配置需要进行。这些配置是客户与设备之间的私事,它并不由USBD来进行标准化。 下面的段落描述了客户配置与USB配置需要完成的工作。 配置软件完成具体的配置工作。具体的配置软件将基于特定的操作系统实现而有所不同,但一般它包括以下几个部份。 ·集线器驱动器 ·其它主机软件 ·设备驱动程序 配置软件首先读取设备的描述符,然后对于每一种可能的配置请求该配置的描述信息。配置软件使用提供的信息加载特定的客户,比如设备驱动程序,由它与设备进行初始的交互。配置软件可能要从设备驱动程序那儿输入一些信息,然后为设备选择一种配置。设备配置过程设置好设备的所有端口,并且返回一组用于USBD客户传输数据的接口。一个接口是为某个客户所拥有的一组通道。 初始配置为每个接口使用缺省的配置,为每个端口分配缺省的带宽。 USBD实现系统可能允许客户在一些可选配置中指定一种作为初始配置。同时,USB系统会检测端口所需要的资源是否能得到满足,如果能满足的话,就为它分配所需要的资源(参见10.3.2节关于资源管理)。 至此,设备已经配置完成了,但是创建的通道还不可用。当客户通过设置通道的使用策略为每一个通道初始化以后,USB配置也就完成了。这些需要被具体指明的使用策略包括客户的最大服务间隙和客户的标识信息。根据USB配置的结果,USB系统决定除了客户提供的数据缓冲区外还需的工作缓冲区的大小。工作缓冲区的大小是根据客户的功能选择及每次事务的需求来决定的。 当I/O请求包结束的时候,或者是顺利结束,或者是由于产生了错误,客户都将收到一条通知消息。在USB通知下,客户唤醒以检查即将到来的I/O请求包的状态。 客户可以进行一些配置的修改,比如说选择另一种可能的接口配置方案,改变已为某一通道分配的带宽。在进行这些配置更改时,相应的接口或通道必须处以空闲状态。 10.3.2 资源管理 当一个USBD为一个给定的通道进行设置的时候,USB系统将根据相应端口的描述符检查它是否能满足该通道的资源要求。其中必须被满足的一项是通道的带宽。在检查带宽是否能满足时中要经过两步。首先计算每次事务的最大运行时间,其次根据帧的时间分配表检查上述的带宽要求能否满足。 USB系统的软件完成为同步传输模式及中断传输模式分配所需的带宽和判断一个特定的控制传输事务和块传输事务能否装进一个给定的帧的工作。如果主机控制器的实际事务的执行时间超过了一帧 ,主机控制器有义务维护帧的完整性(参照10.2.3)。下面的讨论叙述了USB系统应具备的功能。 为了决定带宽是否能满足,或者传输事务能否被装入特定的帧,必须计算事务最大执行时间。在计算过程中使用到下述信息 ·每包的最大数据字节数 ·传输模式 ·拓扑结构深度。如果要求不是很精确的话,假定设备处于最大的拓扑深度。 上述的计算必须考虑到位传输时间,由于拓扑深度而造成的信号传输延迟,还有一些与具体实现系统有关的延迟。比如主机控制器的准备及复位时间。具体的计算公式请参照第5章。 10.3.3 数据传输 客户与功能部件之间通信的基础是如下的接口:与特定USB设备相联系的一串相关通道。 主机上的一个客户拥有一个给定的设备接口。客户初始化该接口,为接口中的每个通道设定使用策略,其中包括设定一次I/O请求的最大数据量,和通道的最大服务间隙(servile interval)。服务间隙是以毫秒计的,它反应了在同步传输模式下每两次传输的间隙,同时它反映了在中断传输模式下轮询间隙。当一个特定的请求处理完成以后,客户被唤醒。客户通过管理每一个I/O请求包的大小以维持它的任务循环(duty cycle)和延迟限制(latency)。其它的使用策略信息包括客户的通知信息等。 客户为传输事务提供数据缓冲区。USB系统根据客户的使用策略信息决定额外的工作缓冲区大小。 客户视它的数据为一个连续的串行数据流。客户以类似于其它总线的数据流管理方式管理这种数据流。在内部,USB系统可能根据自己的策略及主机控制器的限制将单个请求分割成多个在USB上传输的请求。但是当USB系统决定进行请求的分割的时候,必须要考虑到以下两点: ·将数据流分割成更小的块操作对客户是不可见的。 ·USB样本(Samples)在总线传输时是不被分割的。 当客户想传输数据的时候,它将I/O请求包发送给USBD。同时,客户将根据传输的方向提供一个空或满的数据缓冲区。当请求完成(或是顺利完成,或是出现了错误)I/O请求包及状态都将返回给客户。如果有必要的话,IRPS中将包括每次事务的状态。 10.3.4 普通数据定义(Common Data Definition) 为了使客户最直接的从它的设备处取得结果,有必要使客户与设备之间传输过程中的数据拷贝及处理降至最少。为了便于上述的实现,I/O请求包中的控制信息被标准化,以使得不同的层能直接访问到客户提供的控制信息。数据的具体格式与操作系统上USBDI的具体实现有类。有些数据成份可能对客户来请是不可见的,但是在客户提出请求的时候生成。 下面的数据成份定义了一次请求的相关信息。 ·与该请求有关的通道标识。通道的标识信息同样也包括了传输模式的信息。 ·特定客户的通知标志码。 ·数据缓冲区的位置及长度 ·请求的结束状态,包括总的状态及每次事务的结束状态 ·工作缓冲区的位置及长度。这与其实现系统有关。 客户与USBD之间交互请求的机制是由操作系统定义的。除了上面讲到的一个IRPS必须包含的请求信息外,还必须对请求的处理作出一些要求。这些基本的处理要求在第5章有描述,读者可以参考。另外,USD提供一套机制以指定一组同步I/O传输请求的首次传输事务出现在同一帧内。USBD还提供了一套机制以指定一组不可被中断的厂商定义的或有关设备类的请求到标准通道。没有其它的请求可以插入到该组非中断请求的执行流中。如果一组中间的某些请求出现了错误,整的该组请求都被中止。 10.4 主机控制器驱动器 HCD是主机控制器硬件的抽象,同时也是对主机控制器所见的数据传输的抽象。HCDI应符合下列条件: ·提供一个抽象的主机控制器硬件。 ·提供主机控制器在USB上传输数据过程的抽象。 ·提供主机控制器为给定设备分配(或不分配)必需的资源过程的抽象。 ·根据一般集线器的定义提供根集线器。这包括支持集线器驱动程序与根集线器的直接交互。具体的说,虽然一个根集线器是用硬件及软件共同实现的,它最初响应缺省的设备地址(从客户的观点),返回描述符信息,支持设备地址集,并且支持其它的集成器类型的请求。然而考虑到可能将主机控制器与根集线器集成在一起,所以,在对根集线器进行访问的时候可能并不需要经过总线。 HCD提供软件界面HCDI(HCD INTERFACE)以实现必要的抽象。HCD的功能是进行抽象、隐藏主机控制器的硬件细节。在主机控制器之下是物理的USB及所有与之连接的USB设备。 HCD是USB软件中的最下一层。HCD只有一个客户:USB驱动器(USBD)。USBD将客户的请求映射到相关的HCD。一个给定的主机控制器驱动器可能管理很多的主机控制器。 客户不能直接访问HCDI,所以HCDI的具体实现细节将不在下面作具体的讨论。 10.5 USBD USBD提供了供操作系统组件特别是设备驱动程序访问设备的一组接口。这些操作系统组件只能通过USBD来访问USB。USBD的具体实现基于不同的操作系统。下面的讨论将以USBD的实现系统所必须提供的基本功能为中心展开。对于在具体某一特定的操作系统环境下的USBD细节请参考相关的操作系统手册。一个USBD可以访问一个或多个HCD,而一个HCD可能与一个或多个主机控制器相连。某些操作系统可能允许对USBD的初始化进行一些设置。从客户的观点来看,与客户进行通信的USBD管理着所有连接着的USB设备。 10.5.1 USB概况 USBD的客户直接命令设备或从通道直接输入和输出数据流。USBD为客户提供两组工具。命令工具和通道工具。 命令工具允许客户配置和控制USBD操作同时配置及控制USB设备。命令工具提供了对设备标准通道的所有访问。 通道工具允许USBD客户管理特定设备的数据和控制数据的传输。通道工具不允客户直接访问设备的标准通道。 图10-5给出了USBD的总体框架。 图10-5 USB 驱动结构 10.5.1.1 USBD初始化 具体的USBD初始化工作是与操作系统有关的。当USB系统初始化时,USB的管理信息被创建,其中包括缺省地址(default address device)设备及它的标准通道。 当一个设备连上USB时,它响应特殊的缺省地址(参见第9章)直到他的唯一地址由主机给出。为了让USB系统能与新的设备进行通信,设备在刚连上总线时,设备的却省地址必须是可用的。在设备的初始化期间,设备的缺省地址被修改成一个唯一的地址。 10.5.1.2 USBD通道使用 通道是设备与主机的逻辑连结。一个通道由且仅由一个客户所拥有。虽然通道的基本属性不因通道的拥有者而改变,但在两类不同客户所拥有的通道之间还存在一定的差异: ·标准通道(default pipe)他们由USBD拥有和管理。 ·其他的通道(all other pipes) 它们由USBD的客户拥有和管理。 虽然标准通道经常用于完成一些客户通过命令接口所传递的请求,但是它们不能由客户直接访问的,。 10.5.1.2.1 标准通道 USBD有义务分配及管理恰当的缓冲区以支持对客户不可见的标准通道上的数据传输。比如设置设备的地址等。对于一些客户可见的传输,比如像传送厂商定义或有关设备类的命令,或者读取设备的描述符,客户提供必须的数据缓冲区。 10.5.1.2.2 客户通道 所有不是被USBD拥有及管理的通道都可由客户拥有及管理。从USBD的观点看,一个单独的客户拥有该通道。实际上可以是一组用户管理通道,只要该组用户在使用通道时表现出单个客户的行为。 客户有义务根据它所能取得的服务间隙内的数据提供一个足够大小的数据缓冲区。额外的工作缓冲区由USB系统给出。 10.5.1.3 USBD服务功能(Service Capabilities) USBD提供如下种类的服务: ·通过命令工具配置设备 ·通过命令工具及通道工具提供传输服务 ·事件通知 ·状态报告及错误恢复 10.5.2 USBD命令工具功能 USBD命令工具允许客户访问设备。通常,这些命令允许客户以读写形式访问某个设备数据及控制部份。客户要做的仅是提供设备的标识码和相关数据缓冲区或空缓冲区指针。 USBD命令传输时并不需要USB设备是已被配置好。USBD提供的设备配置设施大部分使用是用命令传输。 下面的是有关命令工具提供的功能。 10.5.2.1 接口状态控制 USBD客户必须能够设置具体的接口。接口状态的改变使得所有与该接口相连的通道都进入新的状态。另外接口的所有通道都能够被重新设置或废弃。 10.5.2.2 通道状态控制 USBD通道状态由两部份组成 ·主机状态。 ·反映的端口状态。 通道状态值总是包含上述两部份。USBD的客户管理由USBD报告通道状态,且客户能够与端口交互以改变它状态。 一个USBD可以处于如下的状态之一 ·活跃态,通道已经过初始化 设置好使用策略且能够传输数据。客户可以询问一个特定的通道是否正在处理I/O请求。一个不在处理I/O请求的端口也可认为处于活跃态,只要它能接收新的I/O请求包。 ·挂起状态 通道出现错误。该状态也可能反映了设备上的相关端口被挂起。 只要设备已被配置且通道及设备相关端口没有被挂起,相应通道及端口就可被认为是处于活跃态。客户可以通过如下的几种方式来操纵通道状态。 ·废弃一个通道:中止正在等待该通道传输的所有I/O请求包,且在IRPS上标上相应废弃的记录后,返回相应客户。废弃通道不改变主机状态及相应的端口状态。 ·重设通道(resetting a pipe) 通道的I/O请求包被中止。主机的状态处于活跃态。如果将相应的端口状态改变的话,由USBD客户显示命令。 ·清除被挂起通道 通道的状态从挂赶转移到活跃态 ·挂起通道 通道的状态被设置为挂起态。 10.5.2.3 获取描述码 USBD提供取得标准设备描述符,设备配置描述符,字串描述符和设备类或者厂商定义的描述符的功能。 10.5.2.4 取得当前配置参数 USBD提供取得任何设备当前配置参数的描述符的功能。如果设备没有被配置,则不返回描述符。当客户请求为设备设置特定的参数时也返回当前配置的描述符。返回的配置信息中包括如下一些内容: ·所有存放在设备上的配置描述符,包括接口的所有其他可替换配置。 ·返回接口的当前的配置的描述符。 ·接口当前配置中的某一端口(一个接口可能具有多个端口)的通道句柄(pipe handle) ·接口当前配置中的某一端口的最大允许包长。 另外,对于任一通道,USBDI必须提供返回该通道的当前正使用的最大包长的值的机制。 10.2.5.5 增加设备 USBDI必须提供某种机制以便于当增加新的设备的时候,集成器驱动器能通知USBD并能取得该新USB设备的USBD标识。USBD的任务包括分配设备地址并且为设备准备使用的标准通道。 10.5.2.6 设备断开 USBDI必须提供某种机制以便于集线器控制器通知USBD特定的设备已断开。 10.5.2.7 管理状态 USBDI必须提供取得和清除设备或接口或通道上与设备有关的状态的功能。 10.5.2.8 向设备发送与设备类有关的命令 USBD的客户,特别是特定类的和自适应的驱动器使用USBD提供的该种机制向设备送出一个或多个设备类命令。 10.5.2.9 向设备发送特殊的厂商定义的命令 客户使用USBDI提供的该种机制向设备送出一到多个厂商定义的命令。 10.5.2.10 更改接口配置 USBDI必须提供更改特定接口配置的机制。修改了配置后,接口的新通道句柄替换了旧的通道句柄。在上述的请求执行的过程中,接口必须是空闲的。 10.5.2.11 创建设备配置 配置软件向USBD提出进行设备配置的请求时提供一个包含配置信息的数据缓冲区。USBD根据提供的配置信息为设备端口请求资源。如果所有的资源请求都得到满足,USBD设置设备配置参数,并且返回当前设备所有活跃态接口句柄和与该接口中的某一端口相连的通道句柄。接口的设置可使用缺省参数。 注:进行配置的接口可能要求明确指明其配置参数。 10.5.2.12 设置描述符 对于支持该项行为的设备,USBDI允许升级设备上的描述符或者增加新的描述符。 10.5.3 USBD通道设施 USBD的通道设施使客户与设备之间高速的低附加信息的数据传输成为可能。数据传输的高性能是通过将USBD的一部份通道管理任务转交给客户来实现的。所以通道设施比USBD命令设施所提供的数据传输服务更直接。通道设施不允许访问设备的标准通道。 只有在USB及设备的配置都顺利完成后,客户才有可能进行USBD的通道传输。当设备被配置的时候USBD根据配置参数为设备的所有通道请求资源。当特定的接口或通道空闲的时候,客户可以更改配置。 客户为输出的通道提供一个满的数据缓冲区,并且在请求完成以后取得传输状态信息。客户可以根据返回的状态信息判断传输是否顺利完成。 客户为输入通道提供空的数据缓冲区,并且在请求完成以后得到一个具有数据的缓冲区及传输的状态信息。客户可根据该状态信息判断传输数据的数量及质量。 10.5.3.1 支持的通道类型 根据所支持的数据传输类型,共有四种通道类型。 10.5.3.1.1 同步数据传送 所有排队等待某同步传输通道进行传输的数据缓冲区都被被看作是一个样本流。像所有其它的通道一样,客户为同步通道提供一个通道使用策略,包括客户的服务间隙。当在输入过程中丢失字节或在输出过程中发现有传输问题时,客户都将被告知。 开始数据流的传输前,客户先提供第一个数据缓冲区,,为了维持同步传输的连续性,客户在当前的缓冲区还没有被允满或取空时就提供第二个数据缓冲区。 USBD应能够将客户的数据流看作是一个样本流,也就是说,在数据传输过程中实际的打包解包过程对客户隐敝了。另外,一次传输事务经常局限于客户的某数据缓冲区。 对于一个输出通道,客户提供一个满的数据缓冲区。USBD使用客户提供的同步方法,将在服务间隙中要传输的数据分配到在各帧中。 对于一个输入通道,客户必须提供一个足够大的空的缓冲区,以容纳下在服务间隙时间中所传输的最大数据量。当丢失数据或得到无效字节的时候,USBD必须在该字节应该放置的缓冲区位置上留下一个空缺,并且将错误消息发给客户。不使用同步方法的一个后果就是保留的空间被认为就是最大的包长。缓冲区结束的通知信息在IRP结束的时候产生、注意,当输入缓冲区返回给客户的时候,它不一定是满的。 USBD可能提供看待同步数据流的其它方法(除了以样本流的方式看待同步数据流),USBD同时也必须能将用户的数据流看作是包的流(Packet Stream)。 10.5.1.2 中断传送 中断数据输出是从USBD的客户输出到USB的设备。中断数据输入是由USB的设备输入到USBD的客户。USB系统保证中断传输能满足设备端口描述符所规定的最长延迟时间的限制。 客户提供一个足够大的数据缓冲区保存中断传输的数据(通常一次USB传输)。当所有的数据传输完毕,或是错误太多,超出了客许的最多错误次数,IRP被返回给用户。 10.5.3.1.3 块传送 块传输可以始于客户,也可以始于设备,它没有规定的延迟时间限制和周期。当所有的数据传输完或是由于错误太多IRP被返回给客户。 10.5.3.1.4 控制传送 所有的消息通道支持双向传输数据。在所有的情况下,客户先与设备进行SETUP阶段的通信。数据阶段的通信是可有可无的,或是输入,或是输出。最后状态返回主机。关于控制传送协议的具体情况参照第八章。 客户准备缓冲区,且根据需要提供一个空的或是满的数据缓冲区,然后开始SETUP 阶段的第一步(一阶段由几步(phrase)完成组成)。当控制传输的所有步骤都已完成以后,客户接到一个传送结束的消息,或是出现错误的而接到一条错误指示消息。 10.5.3.2 USBD通道设施功能 下面是所提供的通道设施功能。 10.5.3.2.1 废弃IRPS USBDI允许等待在某一个特定通道传输的IRP被废弃。 10.5.3.2.2 管理通道策略 USBD应能允许客户清除或者设置特定通道或整个接口的使用策略。在成功设置通道使用策略之前的所有IRP都将被USBD拒绝。 10.5.3.3.3 IPRS排队等待 USBDI应能允许客户向特定的通道提出IRPs请求。在当前的IRPS请求还没有完成的时候,客户可以提出新的IRPS请求,多个IRPS请求排队等待。当IRPs返回给客户的时候,请求状态同时也被返回。USBD提供了一种机制以指定一组同步传输的IRPs使它们的首次转送事务出现在同一帧内。 10.5.3.2.4 申请成为USB系统的主客户 主客户可以对每一帧时间作出微小的调整,从而使USB设备比如ISDN口与主机同步。请求成为主客户的客户必须说明自己正在控制的设备接口句柄。 USBDI允许客户请求成为该USB系统的主客户,并且当客户不需要的时候,使之放弃该项功能。USBD只能将主客户的地位给予一个客户。当当前的主客户没有放弃控制权的时候,所有请求成为主客户的请求都被忽略。主客户可能显式的放弃控制。或者是由于主客户的设备被复位或断开,主客户自动地放弃其主控地位。 10.5.4 通过USBD设施管理USB 使用提供的USBD功能设施,USB系统通常支持下面的基本功能。 10.5.4.1 配置服务(Configuration Server) 配置服务基于每个设备。配置软件告诉USBD何时配置设备。一个集线器驱动器在设备管理中扮演特殊的角色,它至少支持如下的功能。 ·设备联接,断开通知。它是由集线器驱动器的中断通道所驱动。 ·设备复位 由集线器驱动器重新设置集线器口的设备的上传流来实现的。 ·通知USBD给设备设置唯一的地址。 ·能量控制。 USBD还提供如下的配置功能,可由集线器驱动程序所使用或由其它的配置软件使用。 ·设备标识和访问配置信息(通过访问设备上的描述符) ·通过命令设施来配置设备 当集线器驱动器通知USBD有新的设备连接,USBD为新的设备创建标准通道。 10.5.4.1.1 配置管理服务 配置管理服务主要通过提供一组在标准通道上产生数据传送事务的接口命令来实现。值得注意的一个例外是集线器使用另外的中断通道直接将它的状态传递给集线器驱动器。 任何一个集线器在它的某一口的状态发生改变的时候初始化一次中断传输。通常,集线器口的状态改变是由于USB设备的连接或断开(详情请参考11章) 10.5.4.1.2 设备初始配置 设备配置过程在设备连上集线器的某一口时开始,集线器通过它的状态改变通道报告自己某一口的状态的改变。 配置管理服务允许配置软件从USB设备的一串可选配置中选择其中的一个作为设备的配置。USBD在真正设置配置信息之前检查是否能提供足够的能量(power)并且检查数据的传输速率是否超出了USB的当前能力范围。 10.5.4.1.3 修改设备的配置 配置管理服务允许配置软件更改设备的配置。当USB能提供足够的能量,且数据传输速率也在USB的能力范围之内,USB便完成更改配置的操作。如果新的配置被拒绝,则设备保留原先的配置。 配置管理服务允许配置软件将设备的状态返回到没有被配置的状态。 10.5.4.1.4 设备断开 当集线器通过它的状态改变通道报告设备断开时,错误恢复或者设备断开处理过程便开始了。 10.5.4.2 总线及设备管理 总线及设备管理服务允许客户成为USB的主客户,并且作为USB的主客户,可以调节总线上传输的每一帧的时间。一个主客户可能为当前传输的帧增加一bit 或削减一bit的时间。 10.5.4.3 能量控制 对USB来说,有紧密接合的两个层次的能量控制:总线层及设备层的能量控制。这种具体化提供更有效管理USB总线能量的设施。设备类可能定义与特定类有关的能量控制功能。 所有的设备都支持挂起状态(参见第9章)通过控制设备所连到的集线器口可以使设备处于挂起(suspend)状态。在挂起状态下,普通的设备操作都中止了,然而,如果设备支持远程唤醒且已经使能响应唤醒信号的话,它可以在外部事件的激励下产生恢复(resume)信号。 能量管理系统可能将设备置于挂起的状态或者干脆切断设备的能源以达到节能的目的。当设备在挂起和恢复的转换过程中,USB并不提供保存和恢复设备状态的机制和功能。设备的类可能定义特定类的状态保存及恢复功能。 USB系统协调设备的交互而不管设备是处于加电状态还是处于挂起状态。 10.5.4.4 事件通知 USBD客户可以从不同的源接到不同的通知消息,其中有可能的事件源有如下几种: ·客户发起的某些动作的结束 ·中断传输方式直接将设备的事件消息传递给客户。例如集线器使用中断通道传递与集线器状态改变有关的事件 ·标准的设备接口命令、设备类命令、厂商定义的命令以及普通的消息通道上的控制传输都可以被用来轮询设备的状态。 10.5.4.5 状态报告及错误恢复功能 USBD的命令设施及通道设施都提供状态报告及错误恢复的功能。 另外,USBD的客户可以通过命令设施取得USB设备的状态。 USBD允许通道被重设置或废弃以提供客户通道错误恢复的功能。 10.5.4.6 管理远程唤醒的设备 USB系统应使挂起的USB系统在恢复过程中消耗的能量最小。为了达到该目的,USB系统显式的使能某些具备远程唤醒功能的设备,控制恢复信号在树型拓扑中的传播,有选择的唤醒挂起某些设备。 在某些错误恢复场合,USB系统可能重新遍历子树,子树可能完全或部份被挂起。在错误恢复的过程中,USB系统必须避免在设备恢复的过程中,向设备所连接的集线器口驱动RESET信号。通过管理设备的远程唤醒特征及集线器的口特征可以避免以上情况的发生,规则如下: ·仅仅在有选择的挂起设备连接点与根集线器口之间的某一口之前,向叶子设备发生一个SetDeviceFeature(DEVICE-REMOTE-WAKEUP)请求。 ·如果某集线器口被挂起,且挂在该口的设备具有远程唤醒的能力,那么在向该口发生复位命令前先使能该集线器口 10.5.5 将操作系统起动前USB的控制交给操作系统 只有一个软件驱动程序拥有主机控制器。如果主机系统在操作系统被加载之前实现USB服务,主机控制器必须提供一种机制,使得操作系统起动前的软件对主机控制器的访问无效,且将控制转交给操作系统。一旦操作系统取得控制权,它必须设置好总线。如果操作系统提供一种机制,将控制转再转交给系统起动前的环境,总线将处于一种不确定状态。操作系统起动前的软件可以认为这是一种加电状态(Powerup) 10.6 操作系统环境指南 正如前面所说的,USB系统及主机软件之间的接口是基于特定的主机平台和操作系统的。特定的支持USB的主机平台及操作系统的组合提供了USB的详细说明。这说明描述了将USB完全溶合到主机所需的特定接口。任何一个支持USB的操作系统都提供全面的USB说明。
/
本文档为【10 usb主机硬件软件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索