第四章USB数据流模型

本文详细介绍了USB数据流模型,包括物理设备、客户软件、USB系统软件和USB主机控制器四个组成部分及其相互关系。USB通信流通过端点和通道进行,支持控制、同步、中断和批量四种传输类型。设备端点的特性决定了通信方式和数据格式,USB系统软件通过缺省控制通道管理设备。数据预缓存和SOF跟踪确保了数据同步,而错误处理机制则保证了通信的可靠性。
摘要由CSDN通过智能技术生成

第四章USB数据流模型

本章介绍了数据如何在USB中传送,将涉及到系统中关于信号的发送和协议定义的一层。 对于USB系统中这一层中各个定义的详细情况可参见第六章和第七章。本章中介绍的数据传送格式,将在第八章到第十一章中逐步扩充。所有的实现者必须阅读此章,以便了解USB中一些非常核心的概念。

4.1 实现者的视图

USB提供了在一台主机和若干台附属的USB设备之间的通信功能,从终端用户的角度看到的USB系统,可简单地用图4.1表示:在这里插入图片描述

但在实际的实现上,具体的系统要比这复杂,不同层次的实现者对USB的有不同要求,这使得我们必须从不同的层次观察USB系统。USB系统提出了一些重要的概念和情况来支持现代个人计算机所提出的可靠性要求,所以USB的分层理解是必须的。它能使不同层次的实现者只关心USB相关层次的特性功能细节,而不必掌握从硬件结构到软件系统的所有细节。USB的这种层次结构如图4-2所示,
在这里插入图片描述

各层次的具体细节将在以后逐步介绍。特别地,有四个层次的实现是较为集中的。
•USB物理设备(USB Physical Device):USB上的一种硬件,可运行一些用户程序。
•客户软件(client software):为一个特定的USB设备而在主机上运行的软件。这种软件由USB设备的提供者提供,或由操作系统提供。
•USB系统软件(USB system software):此软件用于在特定的操作系统中支持USB,它由操作系统提供。与具体的USB设备无关,也独立于客户软件。
•USB主机控制器(USB Host Controller):总线在主机方面的接口,是软件和硬件的总和。用于支持USB设备通过USB连到主机上。
这四个USB系统的组成部分在功能上存在相互重叠的部分。为了支持主机与客户之间的坚固可靠的通信,还需要在后面对这些部分进行细节性描述。
如图4-2所示,一台主机与一个USB设备间的连接是由许多层上的连接组成。USB总线接口层提供了在主机和设备之间的物理连接、发送连接、数据包连接。USB设备层对USB系统软件是可见的,系统软件基于它所见的设备层来完成对设备的一般的USB操作。应用层可以通过与之相配合的客户软件向主机提供一些额外的功能。USB设备层和应用层的通信是逻辑上的,对应于这些逻辑通信的实际物理通信由USB总线接口层来完成。
关于USB的物理通信在第5、6章中描述,而相关的逻辑通信在第8、9章中介绍。本章描述一些核心概念,USB系统的实现者必须先掌握它们,然后在往后几章中阅读更加详细的部分。
为了描述和管理USB通信,以下概念是很重要的:
•总线拓朴(Bus Topology):USB的基本物理组成、基本逻辑组成,以及各组成部分之间 的相互关系。这将在4.2节中描述。
•通信流模型(communication Flow Models):描述主机与设备如何通过USB通信,以及通信所用的四种通信类型。这将在4.3到4.8的各节中介绍。
•总线访问管理(BUS Access):主机面对大量的USB设备的各种通信要求,如何控制、协调总线的访问。
•关于同步传送的考虑:4.10节中将介绍。对要求同步传送的设备提供一些特性。非同步传送设备的实现者不必阅读此节。

4.2 总线拓朴

总线拓朴结构包括四个重要的组成部分。
•主机和设备:USB系统的基础组成部分。
•物理拓朴结构:描述USB系统中的各组成部分是如何连接起来的。
•逻辑拓朴结构:描述USB系统中各种组成部分的地位和作用,以及描述从主机和设备的角度观察到的USB系统。
•客户软件层与应用层的关系:描述从客户软件层看到的应用层的情况,以及从应用层看到的客户软件层的情况。
4.2.1 USB主机
主机的逻辑结构如图4-3,包括
•USB主机控制器(USB Host Controller)
•USB系统软件集合:USB驱动程序,主机控制器的驱动程序,主机软件
•客户软件
在这里插入图片描述

USB主机在USB系统中是一个起协调作用的实体,它不仅占有特殊的物理位置,而且对于USB以及连到USB上的设备来说,还负有特殊责任。主机控制所有的对USB的访问。一个USB设备想要访问总线必须由主机给予它使用权。主机还负责监督USB的拓朴结构。
关于主机和它的任务的更详细、更彻底的描述,请见第9章。
4.2.2 USB设备
一个USB设备的逻辑结构如图4.4所示,包括
•USB总线接口
•USB逻辑设备
•应用层
在这里插入图片描述

USB设备用于向主机提供一些额外的功能。USB设备提供的功能是多种多样的,但面向主机的接口却是一致的。所以,对于所有这些设备,主机可以用同样的方式来管理它们与USB有关的部分。
为了帮助主机辨认及确定USB设备,这些设备本身需要提供用于确认的信息。在某一些方面的信息,所有设备都是一样的;而另一些方面的信息,由这些设备具体的功能决定。信息的具体格式是不定的,由设备所处的设备级决定。
对USB设备更完备的描述,见第8章。
4.2.3 总线的物理拓朴结构
USB系统中的设备与主机的连接方式采用的是星形连接,如图4-5。
在这里插入图片描述

图中的Hub是一类特殊的USB设备,它是一组USB的连接点,主机中有一个被嵌入的Hub叫根Hub(root Hub)。主机通过根Hub提供若干个连接点。为了防止环状连接,采用星形连接来体现层次性,如图4-5。这种连接的形状很像一棵树。
用于提供具体功能的设备叫应用设备。许多不同功能的设备放在一起被看作一个整体,叫包。例如,键盘和轨迹球可以被视作一个整体,在它的内部,提供具体功能的设备被永久地接到Hub上,而这个Hub被接到USB上。所有这些设备及这个Hub被看作一个复合设备,而这个Hub又被看作这个复合设备的内部Hub。在主机看来,这个复合设备和一个带着若干设备的单独Hub是一样的。图中也标出了一个复合设备。
4.2.4 总线逻辑拓朴结构
在物理结构上,设备通过Hub连到主机上。但在逻辑上,主机是直接与各个逻辑设备通信的,就好像它们是直接被连到主机上一样。这个逻辑关系如图4-6所示。与之对应的物理结构就是图4-5中的结构。 Hub也是逻辑设备,但在图4-6中,为了简化起见,未被画出,虽然USB系统中的工作都是从逻辑角度来看待的,但主机必须对物理结构有个了解。例如,在处理Hub被移去的情况时,当一个Hub被移出,通过它与主机相连的设备也应一起被移去,这是由其物理结构决定的。关于Hub的更详细的讨论在第10章。

在这里插入图片描述

4.2.5 客户软件层与应用层的关系
USB系统的物理上、逻辑上的拓朴结构反映了总线的共享性。操纵USB应用设备的客户软件只关心设备上与它相关的接口,客户软件必须通过USB软件编程接口来操纵应用设备。这与另一些总线如PCL,ELSA,PCMUA等不同,这些总线是直接访问内存或I/O的。在运行中,客户软件必须独立于USB上的其它设备。这样,设备和客户软件的设计者就可以只关心该设备与主机硬件的相互作用和主机软件的相互作用的细节问题。图4-7说明了在图4-6的逻辑结构下,一个设备设计者看到的客户软件与相应应用的关系的视图。
在这里插入图片描述

4.3 USB通信流
USB是为主机软件和它的USB应用设备间的通信服务的,对客户与应用间不同的交互,USB设备对数据流有不同的要求。USB为此提供了更好的overall总线使用,它允许各种不同的数据流相互独立地进入一个USB设备。每种通信流都采取了某种总线访问方法来完成主机上的软件与设备之间的通信。每个通信都在设备上的某个端点结束。不同设备的不同端点用于区分不同的通信流。
图4-8是图4-2的扩充,它更详尽地描述了USB系统,支持了逻辑设备层和应用层间的通信。实际的通信流要经过好几个接口边界,从第5章到第7章,刻画了机械上、电气上以及协议上的USB接口的定义。第8章刻划了USB设备的编程接口。通过此接口,可从主机侧对USB设备进行控制,第9章介绍了两个主机侧的通信接口:
•主机控制器的驱动程序(HCD):它位于USB主机控制器与USB系统软件之间。主机控制器可以有一系列不同的实现,而系统软件独立于任何一个具体实现。一个驱动程序可以支持不同的控制器,而不必特别了解这个具体的控制器。一个USB控制器的实现者必须提供一个支持它自己的控制器的主机控制器驱动器(HCD)实现。
•USB驱动程序(USBD):USB系统软件与客户软件之间的接口,提供给客户软件一些方便的使用USB设备的功能。
一个USB逻辑设备对USB系统来说就是一个端点集合。端点可以根据它们实现的接口来分类。USB系统软件通过一个缺省的控制通道来管理设备。而客户软件用通道束管理接口。通道束的一端为端点,一端为缓冲区。客户软件要求通信数据在主机上的一个缓冲和USB设备上的一个端点之间进行。主机控制器或USB设备(取决于数据传送方向)将数据打包后在USB上传。由主机控制器(HC)协调何时用总线访问在USB上传递数据。
在这里插入图片描述

图4-9说明了数据如何在主机侧中的内存缓冲和设备中的端点中传送。在后面,将逐步介绍端点、通道和通信流。
主机上的软件通过一系列的通信流与逻辑设备进行通信。这一系列的通信流是由USB设备的软件和硬件设计者选择的,使设备能传送由USB提供的字符。
在这里插入图片描述

4.3.1 设备端点
一个端点是一个可唯一识别的USB设备的Portion,它是主机与设备间通信流的一个结束点。一系列相互独立的端点在一起构成了USB逻辑设备。每个逻辑设备有一个唯一的地址,这个地址是在设备连上主机时,由主机分配的,而设备中的每个端点在设备内部有唯一的端点号。这个端点号是在设备设计时被给定的。每个端点都是一个简单的连接点,或者支持数据流进设备,或者支持其流出设备,两者不可得兼。
一个端点的特性决定了它与客户软件进行的传送的类型。一个端点有以下特性:
•端点的总线访问频率要求
•端点的总线延迟要求
•端点的带宽要求
•端点的端点号
•对错误处理的要求
•端点能接收或发送的包的最大长度
•端点的传送类型(详见4.4节)
•端点与主机的数据传送方向
端点号不为0的端点在被设置前处于未知状态,是不能被主机访问的。
4.3.1 对0号端点的要求
所有USB设备都需要实现一个缺省的控制方法。这种方法将端点0作为输入端点,同时也将端点0作为输出端点。USB系统用这个缺省方法初始化及一般地使用逻辑设备(即设置此设备)。缺省控制通道(见4.3.2节)支持了对控制的传送(控制传送将在4.5中定义),一旦设备接上,并加电,且又收到一个总线复位命令,端点0就是可访问的了。
4.3.1.2 对非0号端点的要求
设备可以有除0以外的其它端点,这取决于这些设备的实现。低速设备在0号输入及输出端点外,只能有2个额外的可选端点。而高速设备可具有的额外端点数仅受限于协议的定义(协议中规定,最多15个额外的输入端点和最多15个额外的输出端点)。
除缺省控制通道的缺省端点外,其它端点只有在设备被设置后才可使用,对设备的设置是设备设置过程(见第8章)的一部分。
4.3.2 通道
一个USB通道是设备上的一个端点和主机上软件之间的联系。体现了主机上缓存和端点间传送数据的能力。
有两不同的且互斥的通道通信格式。
•流(Stream):指不具有USB定义的格式的数据流。
•消息(Message):指具有某种USB定义的格式的数据流。
USB不解释在通道中传送的数据的内容。消息通道要求数据组织成USB定义的格式,但它的内容,USB是不管的。
特别地,有下列概念与通道相关:
•对USB总线访问的申请(claim),带宽的使用情况
•传送类型
•与通道相连的端点的特性,例如:端点的数据传送方向,最大数据净负荷区的长度。数据净负荷是指在总线处理事务(transaction)中,数据包中数据区的数据(总线处理事务见第7章)。由两个0号端点组成的通道叫缺省控制通道。一旦设备加电并复位后,此通道即可使用。其它通道只在设备被设置后才存在。USB系统软件在决定设备身份、设置要求和设置设备时使用缺省控制通道。当设备被设置后,这个设备的特定软件还可使用该通道。USB系统软件保留缺省控制通道的拥有权,协调其它客户软件对通道的使用。
一个客户软件一般都通过I/O请求包(IRP)来要求数据传送。然后,或者等待,或者当传送完成后被通知。IRP的细节是由操作系统来指定的。客户软件提出与设备上的端点建立某个方向的数据传送的请求,IRP就可简单地理解为这个请求。一个客户软件可以要求一个通道回送所有的IRP。当关于IRP的总线传送结束时,无论它是成功地完成,还是出现错误,客户软件都将获得通知说IRP完成了。
如果通道上没有正在传送的数据,也没有数据想使用此通道,这个通道就处于闲置状态。主机控制器对它不采取任何动作,也就是说,这个通道的端点会发现没有任何的总线动作是冲它而来的。只有当有数据在通道上时,该通道才能发现总线对它的动作。
如果一个非同步通道遇到一个迫使它给主机发STALL的情况(参见第7章),或者在任一个IRP中发现3个总线错误。这个IRP将被中止。其它所有突出的IRP也一同被中止。通道不再接收任何IRP,直到客户软件从这个情况中恢复过来(恢复的方式取决于软件的实现),而且承认这个中止或出现的错误,并发一个USBD Call来表明它已承认。一个合适的状态信息将通知客户软件IRP的结果———出错或中止。同步通道的运作在4.6中介绍。
一个IRP可能会需要多个数据净荷区来传递数据。这些数据区除最后一个外,都具有数据净荷区的最大长度,最后一个数据区包含了这个IRP中剩下的数据。(可参见关于传送类型的介绍,以获得更详细的了解)。对这样的一个IRP,短包(也就是说未达到最大长度的数据区)在数据输入时无法填完IRP数据缓冲区。这可能会有二种不同解释,它依赖于客户软件的情况:
•如果该客户软件可以接受变长的IRP,那么,IRP数据缓冲区未被填满,可以看作一个分限,说明一个IRP已成功结束,主机控制器可以准备接收下一个IRP了。
•如果该客户软件只收定长的IRP。那么,我们认为发生了一个错误,这IRP将被中止,通道也会被阻塞,通道上的数据都中止。
因为对这两种情况,主机控制器会有不同的反应,而且采取何种措施不由控制器决定,所以对每个IRP都必须说明客户软件的具体要求。
通道的端点可以用NAK信号来通知主机自己正忙,NAK不能作为向主机返还IRP的中止条件。在一个给定的IRP处理过程中,可以遇到任意多个NAK,NAK不构成错误。
4.3.2.1 流通道
流通道中的数据是流的形式,也就是该数据的内容不具有USB要求的结构。数据从流通道一端流进的顺序与它们从流通道另一端流出时的顺序是一样的,流通道中的通信流总是单方向的。
对于在流通道中传送的数据,USB认为它来自同一个客户。USB系统软件不能够提供使用同一流通道的多个客户的同步控制。在流通道中传送的数据遵循先进先出原则。
流管流只能连到一个固定号码的端点上,或者流进,或者流出。(这个号码是由协议层决定的)。而具有这个号码的另一个方向的端点可以被分配给其它流通道。
流通道支持同步传送,中断传送和批传送,这些在稍后的章节会进一步解释。
4.3.2.2 消息通道
消息通道与端点的关系同流通道与端点的关系是不同的。首先,主机向USB设备发出一个请求;接着,就是数据的传送;最后,是一个状态阶段。为了能够容纳请求/数据/状态的变化,消息通道要求数据有一个格式,此格式保证了命令能够被可靠地传送和确认。 消息通道允许双方向的信息流,虽然大多数的通信流是单方向的。特别地,缺省控制通道也是一个消息通道。
U

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值