控制传输允许访问一个设备的不同部分。控制传输用于支持在客户软件和它的应用之间的关于设置信息、命令信息、状态信息的传输。控制传输由以下几个事务组成:(1)建立联系,把请求信息从主机传到它的应用设备;(2)零个或多个数据传输事务,按照(1)事务中指明的方向传输数据;(3)状态信息回传。将状态信息从应用设备传到主机。当端点成功地完 成了被要求的操作时,回传的状态信息为“success”。7.2中将介绍控制传输的细节,例如, 什么样的包,什么样的总线事务和总线事务的顺序。而第9章将介绍USB定义的USB命令字。 USB设备必须实现缺省控制通道,并将它实现成一个消息通道。这个通道由USB系统软件使用。USB设备的确认信息、状态信息以及控制信息由该通道传输。如果需要的话,一个应用设备可以为端点实现额外的控制通道。 USB设备框架(见第9章)定义了标准的,设备级的或由销售商提供的请求,这些请求可操作设备的状态。USB设备框架又定义了一些描述器(descriptor),用于存放USB设备的各种信息。控制机制提供访问设备描述器和请求操作设备的机制。 控制传输只能通过消息通道进行。所以,使用控制传输的数据必须具有USB定义的数据格式(见5.5.1节)。 应用层和相应的客户软件不能为控制传输指定总线访问频率和带宽。这由USB系统软件从全局优化角度加以决定。USB系统软件会限制设备要求的访问频率和带宽,这些限制在5.5.3和5.5.4中介绍。 5.5.1 控制传输类型的数据格式 Setup包的数据格式属于一个命令集,这个集合能保证主机和设备之间正常通信。这个格式也允许一些销售商对设备命令的扩展。Setup包后的数据传输也具有USB定义的格式,除非这个数据是销售商提供的信息。回传的状态信息仍然具有USB定义的格式。7.5.8节和第9章将介绍控制传输的Setup定义和数据定义。 5.5.2 控制传输的方向 控制传输使用的是消息通道上的双向信息流。所以,一旦一个控制通道被确认之后,这个通道就使用了具有某个端点号的两个端点,一个输入,一个输出。 5.5.3 控制传输包的大小的限制 控制传输的端点决定了它所能接收或发送的最大数据净负荷区长度。USB为高速设备定义的最大数据净负荷区长度为8、16、32或64字节,低速设备的数据净负荷区的长度只能是8字节。Setup后的所有数据包都要遵守这个规定,这个规定是针对这些数据包中的数据净负荷区的,不包括包中的协议要求的额外信息,Setup包实际上也是8字节。控制通道(包括缺省控制通道)总是使用w Max Packet Size的值。 端点在自己的设置信息中报告自己允许的最大净负荷区长度。USB不要求数据净负荷区必须达到最大长度,当长度不够时,不必填充到最大长度。 主机控制器对高速设备的控制通道端点支持8、16、32、64字节的最大长度,对低速设备支持8字节的长度。它不能支持更大的或更小的其它长度。 对于缺省控制通道的最大数据区长度,USB系统软件要从设备描述器的头8个字节中读出,设备将这8个字节放在一个包中发出,其中的七个字包含了缺省通道的wMaxPacketSize。对其它的控制端点来说,USB系统软件在它们被设置后,获得此长度,然后USB系统软件就会保证数据净负荷区不会超长。另外,主机总是认为数据净负荷区的最大长度至少为8。 端点所传的数据净负荷区长度必须小于或等于其wMaxPacketSize(参见第8章),当一个数据区不能容纳所传数据时,就分几个区来传。除最后一个区外,其它区都应达到最大长度。最后一区包含最后剩下的数据。 当端点做了以下两件事时,控制传输的数据阶段可被认为结束: •已传了由Setup阶段指定的数据量。 数据阶段结束后,主机控制器进入状态阶段,而不是开始另一个数据传诵。如果它不这样做,端点会认为通道脱线而中止通道(通道脱线见5.3.2)。如果主机在状态阶段时,主机收到一个大于最大长度的数据区,那么请求这次传输的IRP将被中止。 当数据全部传完,主机与端点之间的控制传输的数据阶段结束。如果其间,端点收到了超过最大长度的数据区,它将中止通道。 5.5.4 控制传输的总线访问的限制 无论低速设备还是高速设备都可以使用控制通道。 端点没法指明控制通道对总线访问频率的要求。USB权衡所有控制通道的总线访问频率和正等待的IRP,从全局优化,提供一个“最佳”传输方案。 USB要求数据帧中的一部分被留给控制传输使用。 •如果被引发的控制传输(引发方式由实现决定)只用了数据帧的不到10%的时间,则剩余的时间留给批传输(参见5.8节)。 这些要求使得控制传输一般可以在总线上进行规则地、最优化地传输。 对某个端点的控制传输的速率是可以变化的,USB系统软件控制这些离散的变化。端点和其客户软件不能想当然的认为其有一个固定的传输速率,端点可能发现在一帧内有零个或若干个传输。一个端点和它相应的客户软件可占用的总线时间会因为其它设备进入或退出系统或者本设备上的其它端点进入或退出系统而改变。 总线频率和帧定时决定于一个帧内可传输的控制传输的最大个数。在任一个USB系统内,一个帧内的8字节高速数据区须少于29个,8字节低速数据区须少于4个。表4-1是关于不同规格的高速的控制传输的情况,以及在一帧内可能的最大的传输数目。这张表有两个默认的前提,即控制传输有一个数据传输阶段而且这个数据传输阶段有一个长度为0状态阶段,表4-1还指出了出现两个数据区都达不到最大长度的情况,表中不包括用于管理的一些额外的位。 表4-1 高速控制传输限制
因为一个帧内只留10%的时间给非周期性传输,所以当一个系统的总线时间被排满的时候,这个系统内的所有控制传输只能去竞争每个帧内的三个控制传输名额。因为除了客户软件会要求控制传输外,USB系统要用控制传输来传输设置信息,所以对某个客户和它的应用就不能指望它们的控制传输像它们想的一样进行。主机控制器可以自由地决定如何将某个具体的控制传输在总线上进行,可以在一个帧内,也可以跨几个帧。一个端点可能发现一个控制传输的各个总线处理事务在同一帧内或分在几个不连续的帧内。由于具体实现的不同,主机控制器可能不能提供理论上的每帧的最大控制传输数目。 低速控制传输与高速控制传输都是竞争同样多的可用帧时间。低速控制传输只是要用更多的时间来传输罢了。表4-2列出了不同规格的低速包的情况,以及一帧内允许的最大包数。这张表同样没包括进管理用的开销。无论低速与高速,由于一个控制传输都由几个包组成,所以都可能要用几个帧才能完成传输。 表4-2低速控制传输限制
5.5.5 控制传输的数据顺序 要进行控制传输,先要由主机向设备发一个总线建立(Setup)信息。它描述了控制访问的类型,设备将执行此控制访问。这个阶段之后,是零个或多个控制数据信息的传输,这是进行访问的具体信息。最后,由状态信息的传输来结束这次控制传输,允许端点将这次控传的状态回送给客户软件。这次控传完成之后,可以进行对这个端点的下一个控传,如5.5.4节所述,每次控传何时在总线上进行由主机控制器的具体实现决定。 在数据传输阶段和状态信息回传阶段,可能由于设备自身的原因,设备处于“忙”状态。此时端点可设法表明自己正忙(见第7、8章),主机将试着在稍后时间重传一次。 如果在上一个控传结束之前,端点又收到一个总线建立信息,设备将结束现未完成的传输,转而处理新的控传。正常情况下,是不会早发总线建立信息的,不过当上一个控传因错误而被中止后,主机可发下一个控传的总线建立信息。在端点看来,这是在上一个控传结束前过早发出的。 一旦主机遇到一个引起中止的条件或检测到一个错误,端点可以通过接收下一个Setup包的 PID来恢复,也就是说,不一定必须从别的通道进行恢复。对于缺省控制通道,如果端点收不到Setup的 PID时,最终会要求设备复位来清除中止条件或错误条件。 在控传中,USB提供了强大的错误检测功能和错误恢复和重传功能。传输器和接收器可以保持阶段的同步,既关于他们在控传的哪个阶段这个问题上保持同步。并且以最小的代价恢复。接收器可以识别一个数据重传包或状态信息重传包,因为包中带有数据重传的指示。一个发送器可以通过对方给它发的握手信息确知它发的数据重送包和状态信息包已被成功接收,除了Setup包以外,协议可以将一个重送的包与原来的包区分开来,Setup包可以因为出错而重传,但无法说明此包是重传的,还是原来的。 |