您现在的位置: USB开发网 > USB技术文档 > USB专题 > USB1.1协议中文完整在线版
USB1.1协议中文完整在线版

5.3 USB通信流

------分隔线----------------------------

  USB是为主机软件和它的USB应用设备间的通信服务的,对客户与应用间不同的交互,USB设备对数据流有不同的要求。USB为此提供了更好的overall总线使用,它允许各种不同的数据流相互独立地进入一个USB设备。每种通信流都采取了某种总线访问方法来完成主机上的软件与设备之间的通信。每个通信都在设备上的某个端点结束。不同设备的不同端点用于区分不同的通信流。

  图5-8是图5-2的扩充,它更详尽地描述了USB系统,支持了逻辑设备层和应用层间的通信。实际的通信流要经过好几个接口边界,从第6章到第8章,刻画了机械上、电气上以及协议上的USB接口的定义。第9章刻划了USB设备的编程接口。通过此接口,可从主机侧对USB设备进行控制,第10章介绍了两个主机侧的通信接口:

  •主机控制器的驱动程序(HCD):它位于USB主机控制器与USB系统软件之间。主机控制器可以有一系列不同的实现,而系统软件独立于任何一个具体实现。一个驱动程序可以支持不同的控制器,而不必特别了解这个具体的控制器。一个USB控制器的实现者必须提供一个支持它自己的控制器的主机控制器驱动器(HCD)实现。

  •USB驱动程序(USBD):USB系统软件与客户软件之间的接口,提供给客户软件一些方便的使用USB设备的功能。

  一个USB逻辑设备对USB系统来说就是一个端点集合。端点可以根据它们实现的接口来分类。USB系统软件通过一个缺省的控制通道来管理设备。而客户软件用通道束管理接口。通道束的一端为端点,一端为缓冲区。客户软件要求通信数据在主机上的一个缓冲和USB设备上 的一个端点之间进行。主机控制器或USB设备(取决于数据传送方向)将数据打包后在USB上传。由主机控制器(HC)协调何时用总线访问在USB上传递数据。

 

USB主机/设备的细节图
图5-8 USB主机/设备的细节图

  图5-9说明了数据如何在主机侧中的内存缓冲和设备中的端点中传送。在后面,将逐步介 绍端点、通道和通信流。

  主机上的软件通过一系列的通信流与逻辑设备进行通信。这一系列的通信流是由USB设备 的软件和硬件设计者选择的,使设备能传送由USB提供的字符。

USB通信流
图5-9 USB通信流

5.3.1 设备端点

  一个端点是一个可唯一识别的USB设备的Portion,它是主机与设备间通信流的一个结束点。一系列相互独立的端点在一起构成了USB逻辑设备。每个逻辑设备有一个唯一的地址,这个地址是在设备连上主机时,由主机分配的,而设备中的每个端点在设备内部有唯一的端点号。这个端点号是在设备设计时被给定的。每个端点都是一个简单的连接点,或者支持数据流进设备,或者支持其流出设备,两者不可得兼。

  一个端点的特性决定了它与客户软件进行的传送的类型。一个端点有以下特性:

•端点的总线访问频率要求
•端点的总线延迟要求
•端点的带宽要求
•端点的端点号
•对错误处理的要求
•端点能接收或发送的包的最大长度
•端点的传送类型(详见5.4节)
•端点与主机的数据传送方向

  端点号不为0的端点在被设置前处于未知状态,是不能被主机访问的。

5.3.1 对0号端点的要求

  所有USB设备都需要实现一个缺省的控制方法。这种方法将端点0作为输入端点,同时也将端点0作为输出端点。USB系统用这个缺省方法初始化及一般地使用逻辑设备(即设置此设备)。缺省控制通道(见5.3.2节)支持了对控制的传送(控制传送将在5.5中定义),一旦设备接上,并加电,且又收到一个总线复位命令,端点0就是可访问的了。

5.3.1.2 对非0号端点的要求

  设备可以有除0以外的其它端点,这取决于这些设备的实现。低速设备在0号输入及输出端点外,只能有2个额外的可选端点。而高速设备可具有的额外端点数仅受限于协议的定义(协议中规定,最多15个额外的输入端点和最多15个额外的输出端点)。

  除缺省控制通道的缺省端点外,其它端点只有在设备被设置后才可使用,对设备的设置是设备设置过程(见第9章)的一部分。

5.3.2 通道

  一个USB通道是设备上的一个端点和主机上软件之间的联系。体现了主机上缓存和端点间传送数据的能力。

  有两不同的且互斥的通道通信格式。

•流(Stream):指不具有USB定义的格式的数据流。
•消息(Message):指具有某种USB定义的格式的数据流。

  USB不解释在通道中传送的数据的内容。消息通道要求数据组织成USB定义的格式,但它的内容,USB是不管的。

  特别地,有下列概念与通道相关:

•对USB总线访问的申请(claim),带宽的使用情况
•传送类型
•与通道相连的端点的特性,例如:端点的数据传送方向,最大数据净负荷区的长度。数据净负荷是指在总线处理事务(transaction)中,数据包中数据区的数据(总线处理事务见第8章)。由两个0号端点组成的通道叫缺省控制通道。一旦设备加电并复位后,此通道即可使用。其它通道只在设备被设置后才存在。USB系统软件在决定设备身份、设置要求和设置设备时使用缺省控制通道。当设备被设置后,这个设备的特定软件还可使用该通道。USB系统软件保留缺省控制通道的拥有权,协调其它客户软件对通道的使用。

  一个客户软件一般都通过I/O请求包(IRP)来要求数据传送。然后,或者等待,或者当传送完成后被通知。IRP的细节是由操作系统来指定的。客户软件提出与设备上的端点建立某个方向的数据传送的请求,IRP就可简单地理解为这个请求。一个客户软件可以要求一个通道回送所有的IRP。当关于IRP的总线传送结束时,无论它是成功地完成,还是出现错误,客户软件都将获得通知说IRP完成了。

  如果通道上没有正在传送的数据,也没有数据想使用此通道,这个通道就处于闲置状态。主机控制器对它不采取任何动作,也就是说,这个通道的端点会发现没有任何的总线动作是冲它而来的。只有当有数据在通道上时,该通道才能发现总线对它的动作。

  如果一个非同步通道遇到一个迫使它给主机发STALL的情况(参见第8章),或者在任一个IRP中发现3个总线错误。这个IRP将被中止。其它所有突出的IRP也一同被中止。通道不再接收任何IRP,直到客户软件从这个情况中恢复过来(恢复的方式取决于软件的实现),而且承认这个中止或出现的错误,并发一个USBD Call来表明它已承认。一个合适的状态信息将通知客户软件IRP的结果———出错或中止。同步通道的运作在5.6中介绍。

  一个IRP可能会需要多个数据净荷区来传递数据。这些数据区除最后一个外,都具有数据净荷区的最大长度,最后一个数据区包含了这个IRP中剩下的数据。(可参见关于传送类型的介绍,以获得更详细的了解)。对这样的一个IRP,短包(也就是说未达到最大长度的数据区)在数据输入时无法填完IRP数据缓冲区。这可能会有二种不同解释,它依赖于客户软件的情况:

•如果该客户软件可以接受变长的IRP,那么,IRP数据缓冲区未被填满,可以看作一个分限,说明一个IRP已成功结束,主机控制器可以准备接收下一个IRP了。
•如果该客户软件只收定长的IRP。那么,我们认为发生了一个错误,这IRP将被中止,通道也会被阻塞,通道上的数据都中止。 因为对这两种情况,主机控制器会有不同的反应,而且采取何种措施不由控制器决定,所以对每个IRP都必须说明客户软件的具体要求。

  通道的端点可以用NAK信号来通知主机自己正忙,NAK不能作为向主机反还IRP的中止条件。在一个给定的IRP处理过程中,可以遇到任意多个NAK,NAK不构成错误。

5.3.2.1 流通道

  流通道中的数据是流的形式,也就是该数据的内容不具有USB要求的结构。数据从流通道一端流进的顺序与它们从流通道另一端流出时的顺序是一样的,流通道中的通信流总是单方向的。

  对于在流通道中传送的数据,USB认为它来自同一个客户。USB系统软件不能够提供使用同一流通道的多个客户的同步控制。在流通道中传送的数据遵循先进先出原则。

  流管流只能连到一个固定号码的端点上,或者流进,或者流出。(这个号码是由协议层决定的)。而具有这个号码的另一个方向的端点可以被分配给其它流通道。

  流通道支持同步传送,中断传送和批传送,这些在稍后的章节会进一步解释。

5.3.2.2 消息通道

  消息通道与端点的关系同流通道与端点的关系是不同的。首先,主机向USB设备发出一个请求;接着,就是数据的传送;最后,是一个状态阶段。为了能够容纳请求/数据/状态的变化,消息通道要求数据有一个格式,此格式保证了命令能够被可靠地传送和确认。 消息通道允许双方向的信息流,虽然大多数的通信流是单方向的。特别地,缺省控制通道也 是一个消息通道。

  USB系统软件不会让多个请求同时要求同一个消息通道。一个设备的每个消息通道在一个时间段内,只能为一个消息请求服务,多个客户软件可以通过缺省控制通道发出它们的请求,但这些请求到达设备的次序是按先进先出的原则的。设备可以在数据传送阶段和状态阶段控制信息流,这取决于这些设备与主机交互的能力(参见第8章)。正常情况下,在上一个消息未被处理完之前,是不能向消息通道发下一个消息的。但在有错误发生的情况下,主机会取消这次消息传送,并且不等设备将已收的数据处理完,就开始下一次的消息传送。在操作通道的软件看来,一个IRP中的错误,使这个IRP被取消,并且所有正排队等待的IRP一同也被取消。申请这个IRP的客户被通知IRP结束,且有出错提示。
消息通道后有两个相同号码的端点,一个用于输入,一个用于输出。两个号码必须相同。

  消息通道支持控制传送,这将在5.5中进行介绍。

------分隔线----------------------------
USB开源项目
联系我们
  • Q Q: 1148374829 点击这里给我发消息
  • 旺旺:jhoneqhsieh 点击这里给我发消息
  • 电话:(0)15923141204
  • 淘宝网店