05usb数据流模型(编辑修改稿)内容摘要:

频率和带宽。 这由 USB 系统软件从全局优化角度加以决定。 USB 系统软件会限制设备要求的访问频率和带宽,这些限制在。 控制传送类型的数据格式 Setup包的数据格式属于一个命令集,这个集合能保证主机和设备之间正常通信。 这个格式也允许一些销售商对设备命令的扩展。 Setup包后的数据传送也具有 USB定义的格式,除非这个数据是销售商提供的信息。 回传的状态信息仍然具有 USB定义的格式。 8章将介绍控制传送 的 Setup定义和数据定义。 控制传送的方向 控制传送使用的是消息通道上的双向信息流。 所以,一旦一个控制通道被确认之后,这个通道就使用了具有某个端点号的两个端点,一个输入,一个输出。 控制传送包的大小的限制 控制传送的端点决定了它所能接收或发送的最大数据净负荷区长度。 USB为高速设备定义的最大数据净负荷区长度为 1 32或 64字节,低速设备的数据净负荷区的长度只能是8字节。 Setup后的所有数据包都要遵守这个规定,这个规定是针对这些数据包中的数据净负荷区的,不包括包中的协 议要求的额外信息, Setup包实际上也是 8 字节。 控制通道 (包括缺省控制通道 )总是使用 w Max Packet Size的值。 端点在自己的设置信息中报告自己允许的最大净负荷区长度。 USB不要求数据净负荷区必须达到最大长度,当长度不够时,不必填充到最大长度。 主机控制器对高速设备的控制通道端点支持 1 3 64 字节的最大长度,对低速设备支持 8字节的长度。 它不能支持更大的或更小的其它长度。 对于缺省控制通道的最大数据区长度, USB 系统软件要从设备描述器的头 8 个字节中读出,设备将这 8 个字节放 在一个包中发出,其中的七个字包含了缺省通道的wMaxPacketSize。 对其它的控制端点来说, USB系统软件在它们被设置后,获得此长度,然后 USB 系统软件就会保证数据净负荷区不会超长。 另外,主机总是认为数据净负荷区的最大长度至少为 8。 端点所传的数据净负荷区长度必须小于或等于其 wMaxPacketSize(参见第 8章 ),当一个数据区不能容纳所传数据时,就分几个区来传。 除最后一个区外,其它区都应达到最大长度。 最后一区包含最后剩下的数据。 当端点做了以下两件事时,控制传送的数据阶段可被认为结束: 已传了由 Setup阶段指定的数据量。 传了一个数据包,它的长度为 0或它的数据区长度小于最大长度。 数据阶段结束后,主机控制器进入状态阶段,而不是开始另一个数据传诵。 如果它不这样做,端点会认为通道脱线而中止通道 (通道脱线见 )。 如果主机在状态阶段时,主机收到一个大于最大长度的数据区,那么请求这次传送的 IRP将被中止。 当数据全部传完,主机与端点之间的控制传送的数据阶段结束。 如果其间,端点收到了超过最大长度的数据区,它将中止通道。 控制传送的总线访问的限制 无论低速设备还 是高速设备都可以使用控制通道。 端点没法指明控制通道对总线访问频率的要求。 USB权衡所有控制通道的总线访问频率和正等待的 IRP,从全局优化,提供一个“最佳”传送方案。 USB要求数据帧中的一部分被留给控制传送使用。 如果被引发的控制传送 (引发方式由实现决定 )只用了数据帧的不到 10%的时间,则剩余的时间留给批传送 (参见 )。 如果一个控制传送被引发又被中止,则它的中止可在本次的帧内,也可在以后的帧内。 也就是说,引发和中止不必在同一个帧内。 如果留给控制传送的时间不够用,但恰好有 一些同步和中断传送的帧时间未用,则主机控制器利用这些时间进行额外的控制传送。 如果对可用的帧时间有太多的控制传送在等待,那么就对它们进行排序然后传送。 如果各个控制传送申请的是不同的端点,主机控制器根据公平访问原则决定它们的访问顺序。 公平访问原则的具体内容决定于主机控制器的实现。 如果一个控制传送事务频繁地被中止,不能认为给它的总线访问时间是不公平的。 这些要求使得控制传送一般可以在总线上进行规则地、最优化地传送。 对某个端点的控制传送的速率是可以变化的, USB系统软件控制这些离散 的变化。 端点和其客户软件不能想当然的认为其有一个固定的传送速率,端点可能发现在一帧内有零个或若干个传送。 一个端点和它相应的客户软件可占用的总线时间会因为其它设备进入或退出系统或者本设备上的其它端点进入或退出系统而改变。 总线频率和帧定时决定于一个帧内可传送的控制传送的最大个数。 在任一个 USB系统内,一个帧内的 8字节高速数据区须少于 29个, 8字节低速数据区须少于 4个。 表 41是关于不同规格的高速的控制传送的情况,以及在一帧内可能的最大的传送数目。 这张表有两个默认的前提,即控制传送有一个数据传送阶段而且这个 数据传送阶段有一个长度为 0 状态阶段,表 41 还指出了出现两个数据区都达不到最大长度的情况,表中不包括用于管理的一些额外的位。 表 41 高速控制传送限制 协议开销( 46 字节) ( 9 SYNC bytes, 9 PID bytes, 6 Endpoint+CRC bytes, 6 CRC bytes, 8 Setup data bytes, and a 7_byte interpacker delay(EOP, etc.)) 数据净荷区 最大带宽 (字节 /秒) Frame 带宽 /传送 最大传送数 剩余字节 有用数据 字节 /Frame 1 32020 3% 32 23 32 2 62020 3% 31 43 62 4 120200 3% 30 30 120 8 224000 4% 28 16 224 16 384000 4% 24 36 384 32 608000 5% 19 37 608 64 832020 7% 13 83 832 Max 1500000 1500 因为一个帧内只留 10%的时间给非周期性传送,所以 当一个系统的总线时间被排满的时候,这个系统内的所有控制传送只能去竞争每个帧内的三个控制传送名额。 因为除了客户软件会要求控制传送外, USB系统要用控制传送来传送设置信息,所以对某个客户和它的应用就不能指望它们的控制传送像它们想的一样进行。 主机控制器可以自由地决定如何将某个具体的控制传送在总线上进行,可以在一个帧内,也可以跨几个帧。 一个端点可能发现一个控制传送的各个总线处理事务在同一帧内或分在几个不连续的帧内。 由于具体实现的不同,主机控制器可能不能提供理论上的每帧的最大控制传送数目。 低速控制传送与高速控制 传送都是竞争同样多的可用帧时间。 低速控制传送只是要用更多的时间来传送罢了。 表 42 列出了不同规格的低速包的情况,以及一帧内允许的最大包数。 这张表同样没包括进管理用的开销。 无论低速与高速,由于一个控制传送都由几个包组成,所以都可能要用几个帧才能完成传送。 表 42 低速控制传送限制 协议开销( 46 字节) 数据净荷区 最大带宽 字节 /Frame Frame 带宽 /传送 最大传送数 剩余字节 有用数据 字节 /Frame 1 3000 25% 3 46 3 2 6000 26% 3 43 6 4 12020 27% 3 37 12 8 24000 29% 3 25 24 Max 187500 187 控制传送的数据顺序 要进行控制传送,先要由主机向设备发一个总线建立( Setup)信息。 它描述了控制访问的类型,设备将执行此控制访问。 这个阶段之后,是零个或多个控制数据信息的传送,这是进行访问的具体信息。 最后,由状态信息的传送来结束这次控制传送,允许端点将这次控传的状态回送给客户软件。 这次控传完成之后, 可以进行对这个端点的下一个控传,如,每次控传何时在总线上进行由主机控制器的具体实现决定。 在数据传送阶段和状态信息回传阶段,可能由于设备自身的原因,设备处于“忙”状态。 此时端点可设法表明自己正忙 (见第 8章 ),主机将试着在稍后时间重传一次。 如果在上一个控传结束之前,端点又收到一个总线建立信息,设备将结束现未完成的传送,转而处理新的控传。 正常情况下,是不会早发总线建立信息的,不过当上一个控传因错误而被中止后,主机可发下一个控传的总线建立信息。 在端点看来,这是在上一个控传结束前过早发 出的。 一旦主机遇到一个引起中止的条件或检测到一个错误,端点可以通过接收下一个 Setup包的 PID来恢复,也就是说,不一定必须从别的通道进行恢复。 对于缺省控制通道,如果端点收不到 Setup的 PID时,最终会要求设备复位来清除中止条件或错误条件。 在控传中, USB提供了强大的错误检测功能和错误恢复和重传功能。 传送器和接收器可以保持阶段的同步,既关于他们在控传的哪个阶段这个问题上保持同步。 并且以最小的代价恢复。 接收器可以识别一个数据重传包或状态信息重传包,因为包中带有数据重传的指示。 一个发送器可以通 过对方给它发的握手信息确知它发的数据重送包和状态信息包已被成功接收,除了 Setup包以外,协议可以将一个重送的包与原来的包区分开来, Setup包可以因为出错而重传,但无法说明此包是重传的,还是原来的。 同步传送 在非 USB 的环境下,同步传送意味着恒定速率、错误容忍 (errortolerant)的传送。 在USB环境下,要求同步传送能提供以下几点: 固定的延迟下,确保对 USB带宽的访问。 只要数据能提供得上,就能保证通道上的恒定数据传送速度。 如果由于错误而造成传送失败,并不重 传数据。 当 USB 同步传送类型被用来支持同步的源和目的时,使用这个传送类型的软件并不要求是同步的, USB上的同步数据的处理。 同步传送的数据格式 对于同步传送的通道 (同步通道 ), USB并不对数据格式做要求。 同步传送的方向 同步通道是一种流通道,所以是单方向的。 在对端点的描述中指明了与它相连的通道的数据流方向。 如果设备要同步的双向流的话,只好用两个同步通道,一个流进,一个流出。 同步传送中包的大小的限制 同步通道的端点确定了数据区的最大 长度, USB在设置端点期间,使用这一个信息,看是否可在每帧内为最大长度的数据区留下足够的时间。 如果可以,设置端点成功;否则,不成功。 USB系统软件可为一个控制传送的通道调整最大数据区长度,但无法为同步通道进行如此调整。 在确定的 USB设置下,同步通道要么被支持,要么不被支持。 USB限制了同步通道的最大数据区长度为 1023字节,表 43列出了不同规格的同步传送,以及一帧内可能的最大传送数。 表中未包括管理开销的字节。 表 43 同步传送限制 协议开销( 9 字节) ( 2 SYNC bytes, 2 PID bytes, 2 Endpoint+CRC bytes,2 CRC bytes, and a 1_byte interpacket delay) 数据净荷区 最大带宽 字节 /秒 Frame 带宽 /传送 最大传送数 剩余字节 有用字节 字节 /Frame 1 150000 1% 150 0 150 2 272020 1% 136 4 272 4 460000 1% 115 5 460 8 704000 1% 88 4 704 16 960000 2% 60 0 960 32 1152020 3% 36 24 1152 64 1280000 5% 20 40 1280 128 1280000 9% 10 130 1280 256 1280000 18% 5 175 1280 512 1024000 35% 2 458 1024 1023 1023000 69% 1 468 1023 Max 1500000 1500 并不是每一次的数据区都要达到最大长度。 数据区的长度由发送者 (客户软件或应用软件 )决定,每次可以不同。 USB可保证主机控制器看到的包有 多长,在总线上传的包就有多长。 数据的实际长度由发送者决定,可以小于早先协商好的最大长度。 总线错误可以使接收者看到的长度比实际长度有了变化。 但这些错误可被检测到。 具体地讲,或者通过数据上的CRC码,或者让接收者预先知道实际应该的长度,以此进行检测。 同步传送的总线方向限制 只有高速设备可以使用同步方式。 USB设备要求一个帧内不能有超过 90%的时间用于周期性传送 (同步传送或中断传送 )。 同步通道的端点描述自己的总线访问频率。 所有的同步通道一般在一帧内传一个包 (也就是说, 1ms一个包 )。 但总线上的错误或者操作系统对客户软件调度上的延迟会造成一个帧内一个包也没有的情况。 此时,设备将一个错误指示信息作为状态信息返回给客户软件。 设备可以通过跟踪 SOF(帧开始)信号来测到此类错误。 如果两个 SOF信号间无数据包,则出错。 总线频率和帧定时限制了一个帧内的同步传送的上限,在任何 USB 系统内,最多有 150个单字节的数据区。 但由于实现上的原因,主机控制器可能无法支持到理论。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。