2012年(1008)
分类:
2012-08-01 11:03:02
原文地址:USB通信流 作者:luozhiyong131
USB接口是一个基予令牌包(token-based)的总线协议,对于USB的通信,USB规范引入了一种管道的概念。在整个USB的通信中包含了一个大的管道,这个大管道可以分为高达127个小的管道,每个小管道连接到一个USB的设备上。由于在USB令牌包中都含有7个用来寻址的位(位于地址数据域,ADDR),因此最多可寻址至U128个设备,但是由于00000000B地址是默认地址,且用来指定给所有刚连上的设备。这也就是为什么USB最多能连接至I]127个设备的原因,而每一个连接到设备的小管道又可再细分为许多的微管道。由于在令牌包中包含了4位的端点(Endpoint)地址(位于端点数据域,ENDP)以及一个输入/输出位,所以在一个单独的小管道内最多可再分割成16组微管道,也就是可对16个输出/输入点的端点(共32个端点)寻址。
下面对端点和管道的概念进行一些解释。
1.设备端点(Endpoint)
端点是一个USB设备唯一可以确认的部分,它是主机和设备之间通信流的终点。USB为主机上的客户软件与USB功能模块之间的通信提供了服务。端点可以决定端点和客户软件之间通信所需要的传输服务类型。一个端点具有以下一些属性:
(1)端点号
(2)总线频率/延时要求
(3)带宽要求
(4)差错控制要求
(5)端点可以接收或传递的最大分组
(6)端点的传送类型
(7)端点和主机之间的数据传送方向
(8)端点0是USB设备的缺省端点,所有USB设备都必须拥有端点。该端点用于对USB设备进行配置(初始化)。端点0提供了对设备配置信息的访问权,通过它还允许访问USB状态和控制操作。端点0总是在设备接入和上电时就立即进行配置。
(9)除端点0外,功能设备还具有其他的端点。低速功能设备有两个端点可供选择。而对于全速率设备来说,它的附加的端点数仅受到协议的限制,最多可有16个输入端点和16个输出端点。在对端点进行配置之前,端点处于一种不确定的状态。所以一个端点只在对其进行配置之后,主机才能访问它。包括端点O在内的所有端点,都作为设备配置过程中的普通对象来对其进行配置。
2.管道(pipe)
一个USB管道是设备上的一个端点和主机上的软件的联合体。管道表示经过一个存储器缓冲区和一个设备上的端点,可以在主机上的软件之间传送数据的能力。
USB并不对管道中传递的数据内容进行翻译,即使是消息管道要求根据USB的规定对数据进行打包,USB也不会翻译这些数据的内容。对一个USB设备进行配置之后,就会形成管道。由于一个USB设备上电后总要对端点0进行配置,所以端点0总是拥有一个管道。该管道称为缺省管道。
系统软件利用该管道来识别设备和确定配置要求,并对设备进行配置。当设备配置完毕后,该设备的专用软件也可以使用缺省管道。同时USB系统软件也保留对缺省管道的“所有权",并由它来协调其他客户软件对该管道的使用。