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

5.9 USB传输的总线访问

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

  要完成主机与USB设备间的任何数据传输,必须要使用一定的USB带宽。要想支持从同步设备到异步设备的各种传输,必须要能满足它们对传输的不同要求。分配总线带宽给设备的工作叫做传输管理。主机上有几个部分是用于协调USB上的信息流的,它们是:客户软件、USB驱动器(USBD)和主机控制器驱动器(HCD)。实现这些部件必须要了解关于总线访问的一些核心概念:

•传输管理:用于支持USB上信息流的各实体和各对象
•事务跟踪:一种USB机制,跟踪在USB系统中的事务
•总线时间:总线传一个信息包的时间
•设备/软件缓冲区大小:支持一个事务所需要的空间。
•总线带宽归还:被分配给其它传输的总线带宽未被使用时,可以重新给控制传输和批传输使用。

  前几节主要着重于客户软件如何与它的应用层进行联系和什么是两实体之间的逻辑流。这节介绍主机上的不同部分如何相互协调工作来支持USB上的数据传输,对设备实现者来说,这个信息也是有用的,他们可以由此知道当客户请求传输时主机该做什么,以及传输请求是如何被发给设备的。

5.9.1 传输管理

  传输管理涉及以下几个为不同目标工作的部分,它们共同工作使数据能在总线上传输:

•客户软件:通过对USBD界面发出调用(calls)和响应调用(calls backs)的IRP请求,消费从应用端点来的数据或生产到消费端点去的数据。
•USBD(USB驱动器):通过对合适的主机控制器驱动器(HCD)的调用(calls)和响应调用(callbacks),将从设备端点来的或到设备端点去的IRP中的数据进行一定转换。一个客户IRP可能会需要几个传输来完成。
•主机控制器驱动器(HCD):将IRP转换成事务或将事务转换成IRP(按照主机控制器的要求),并对它们进行组织,以使主机控制器进行操作。HCD和它的硬件间的互相作用与它的实现有关,不在USB说明的范围内。
•主机控制器:进行事务,为每个事务在总线上通过包传输数据。

  图5-10说明了当在客户软件和USB间有信息流动时,这些部分是如何工作的。它们之间的界面是我们了解的目标。

 


 
图5-10 从客户软件到总线的USB信息转换
 

5.9.1.1 客户软件

  客户软件决定某个应用应该用何种传输类型。它通过操作系统指定的界面来请求IRP。客户软件知道它用来操作应用的通道(接口)的存在;客户知道总线访问和带宽的限制,并且遵守它们。客户软件将自己的请求发给USB驱动器接口。

  有些客户通过操作系统提供的另一些设备级接口来操作USB功能,而不直接进行USBD的调用(calls)。但总要有一些低级的客户进行直接的USBD 的调用(calls),以便将IRP传给USBD。所有这些提交的IRP必须遵守通道建立时定下的带宽限制。如果一个设备从一个非USB环境进入USB,客户软件将通过主存和I/O访问直接操作这个设备的硬件。USB系统中的最低级的客户软件和USBD相互作用,来操纵USBD的USB功能。

  当客户软件要求一个与它的应用层间的数据传输,而且又被满足后,客户软件将收到一个关于IRP完成状态的通知。如果传输中有应用层到主机的数据,客户软件收到IRP完成的通知后,可在数据缓冲区中取到所要的数据。

  USBD的接口在第10章中介绍。

5.9.1.2 USB驱动器(USBD) 

  USBD将在两个主要的时间介入总线访问:

•在设备接上主机的设置期间
•在正常传输中

  当设备被接上,并被设置时,USBD将确认设备的设置是否与总线兼容,USBD从设置软件处获得设置请求,它描述了要进行的设置:端点、传输类型、传输周期、数据长度等。

  SBD根据可用带宽的大小以及总线是否与请求的类型兼容来决定接受还是不接受这个设置。如果接收,USBD就为请求者建立一个相应类型的通道,自然也带有这个传输类型所应有的各种限制。在设备设置期间,不一定必须为周期性的端点作带宽分配。做过的带宽分配也可以放弃,而并不影响设备的设置。 

  对USBD的设置是典型地由操作系统决定的,而且反过来影响操作系统的设置特征。这样做可免除一些多余的接口。

  一旦设备被设置,客户软件就可以通过IRP来请求与应用端点进行数据传输。

5.9.1.3 主机控制器驱动器(HCD)

  HCD负责跟踪IRP,并确保USB带宽和帧最大时间不被突破。当有IRP要求通道时,HCD将它们加入事务表中,当IRP结束,HCD将把它的完成状态通报给发它的客户软件,如果IRP中涉及应用设备向主机的传输,来的数据将被放在客户指定的数据缓存中。

  IRP的定义依靠于一定的操作系统。

5.9.1.4 事务表

  事务表描述了当前需要被做的事务。它与HC(主机控制器)的实现有关。只有HCD和它的HC可以访问这些特殊的描述。这些描述包括了事务的各种参数。例如,数据长度(字节)。设备地址、端点号,以及发出数据和存放收到数据的主存区域。

  事务表和HCD与HC间的接口是依赖于实现的,不能作为USB说明的一个部分而作出明确的定义。

5.9.1.5 主机控制器(HC)

  HC可以访问事务表,并根据此表引起总线的动作。特别地,HC提供的报告机制使事务的状态(完成、等待、中止等)是可以知道的。HC将事务变成相应的总线动作(这种转换依赖于具体的实现),这些动作又引起了在以根 Hub为根的总线拓朴结构上的USB包的传递。

  HC可以保证协议规定的对总线访问的限制都被遵守了,例如:包间时限、超时等,HCD的接口向HC提供了参与决定是否允许一个新的通道访问总线的途径。这是因为HC的实现中有对两个事务间最小间隔的限制,这种限制支持了总线事务的组合。

  事务表与HC的接口是被隐藏在HCD和HC的实现中的。

5.9.2 事务的跟踪

  USB应用设备看到的总线上的数据是放在包中的。(参见第8章)。HC利用某种与实现有关的表示方法来跟踪包,跟踪的信息包括这个包是什么包,到哪个端点去/从哪个端点来,在什么时间传输,有什么顺序。绝大多数客户软件不愿直接与被打了包的数据流打交道,因为这造成了一定的复杂性和对连接的依赖性,从而又限制了实现方法。USB系统软件(USBD和HCD)提供了将客户对数据运动的要求加到包上的方法。对组成一个客户软件和应用层间的数据传输的各个事务,HC利用IRP来跟踪它们。图5-11简要说明了事务是如何被组织成四种传输类型的IRP的。关于传输的详细协议规定,可见第8章。关于客户软件对IRP的使用的更详细信息可见第10章和特定操作系统的系统说明信息。

 


图5-11 通信流的传输方式

  虽然IRP要跟踪传输数据的总线事务,HC仍可自由地选择如何传输这些事务,但必须遵守USB定义的限制,即一帧内只可有一个同步传输的事务。一般情况下,端点看到的各个事务的顺序与它们出现在IRP中的顺序是一样的,除非发生了错误。例如,图5-12表示了两个IRP,每个IRP有3个事务,用2个通道。对任何传输类型,HC可在第一帧内先传第一个IRP的第一事务,再传第二个IRP的第一个事务;同时在第二帧内先传第二IRP的第二事务,再传第一IRP的第二事务;如图中所示。

 

IRP组织成事务/帧.png
 
图5-12 IRP组织成事务/帧

  如果有同步传输,HC的自由度也就到此为止了。但对控制传输和批传输,HC可以在这两帧中的任一帧内多传或少传几个第一IRP或第二IRP的事务。

5.9.3 计算总线事务的时间

  当USB系统软件允许在总线上新建一个通道,它必须计算对一个给定的事务需要多少总线时间。这个时间是按照端点报告的最大包长度来计算的,同时也必须包括协议规定的开销、信号强加的位填充的开销、协议规定的包间时间的开销、事务间的时间的开销等等。计算的结果用来检查帧内可用的时间是否够用的,以下是计算用的各方程。

KEY:  

Data_bc 

The byte count of data payload 

Host_Delay 

 

The time required for the host to prepare for or
recover from the transmission; Host Controller
implementation-specific 

Floor() 

The integer portion of argument 

Hub_LS_Setup 

 

The time provided by the Host Controller for hubs to
enable low-speed ports; measured as the delay from the
end of the PRE PID to the start of the low-speed SYNC;
minimum of four full-speed bit times 

BitStuffTime 

 

Function that calculates theoretical additional time
required due to bit stuffing in signaling; worst case
is (1.1667*8*Data_bc) 

  由以上方程计算出的总线时间的单位是纳秒,而且计算结果包含了由于主机和设备之间的延迟而造成的传播延时,这些方程是典型的用于计算总线时间的方程,但实现时可选用一些较粗糙的近似计算。

  某个特定的事务实际所用的总线时间总是小于计算出的总线时间,因为位填充的开销是与数据有关的,最糟的情况是位填充的时间是原时间的1.1667(7/6)倍(方程中用8*1.1667乘以Data-bc)。这就是说,当所有规则安排的事务完成后,总有些总线时间是未用的(服从于数据模式的指定),这些未用的时间可以被重新用于别处,参见5.9.5节。

  方程中的Host-Delay项是与HC及系统有关的,它允许HC由于申请访问造成的延迟或其它与实现有关的延迟的原因多要求一点额外时间。通过HCD接口提供的传输管理功能,这项被包括在方程的实现中。方程的实现可采用USBD和HCD软件的共同工作来完成,这些方程的结果决定了一个传输或通道是否被USB设置所支持。

5.9.4 应用层及软件对缓冲区大小的计算

  客户软件和应用设备必须给正在等待传输的数据事务提供缓冲区。对非同步传输,这个缓冲区的大小必须恰好能装下下一个数据包,如果不止一个事务在等待同一个端点,必须为一个事务提供数据缓冲区。由于在应用层与客户软件间的事务的出现,应用可能需要一定大小的缓冲区,关于这个区的精确的最小绝对长度的计算是不在USB说明的范围之内的。

  HC能够支持的等待事务的数量应是不受限的,但实际上,要受限于可用内存缓冲的大小和描述器的空间大小等。对同步通道,5.10.4节描述了影响主机侧和设备侧的缓冲要求的一些细节。一般说来,缓冲区应容纳约等于1ms中能传的数据量的两倍大小的数据。

5.9.5 总线带宽归还

  USB带宽和总线访问的允许都是从最糟的情况考虑的。由于不同传输类型的限制以及被算作常数的位填充的时间实际是数据相关,所以在每帧内,与计算出的时间相比,总有些时间剩余。为了提高带宽利用率,这些时间可以用于控制传输或批传输。HC具体如何去做是与实现相关的。HC可以考虑等待的IRP的传输类型和剩余时间的情况来决定如何使用这些被归还的时间。

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