USB设备中的唯一可寻址部分是设备端点。端点是主机与设备之间通信的目的或来源。控制端点可以双向传输数据,而其它端点只能在单方向传输数据。主机和设备的通信最终作用于设备上的各个端点,它是主机与设备间通信流的一个逻辑终端。每个USB设备有一个唯一的地址,这个地址是在设备连上主机时,由主机分配的,而设备中的每个端点在设备内部有唯一的端点号。这个端点号是在设计设备时给定的。每个端点都是一个简单的连接点,或者支持数据流进设备,或者支持其流出设备,两者不可兼得。基于PnP机制,设备被枚举时,它必须向主机报告各个端点的特性,包括端点号,通信方向,端点支持的最大包大小,带宽要求等 (其中端点支持的最大包大小叫做数据有效负载)。每个设备必须有端点0,它用于设备枚举和对设备进行一些基本的控制功能。除了端点0,其余的端点在设备配置之前不能与主机通信,只有向主机报告这些端点的特性并被确认后才能被激活。
管道是一个USB通信设备上的一个端点和主机上软件之间的联系。体现了主机缓存和端点间传送数据的能力。有流和消息两种不同且互斥的管道通信格式。流指不具有USB定义格式的数据流。流通道中的数据是流的形式,也就是该数据的内容不具有USB要求的结构。数据从流通道一端流进的顺序与它们从流通道另一端流出时的顺序是一样的,流通道中的通信流总是单方向的。对于在流通道中传送的数据,USB认为它来自同一个客户。USB系统软件不能够提供使用同一流通道的多个客户的同步控制。在流通道中传送的数据遵循先进先出原则。流管道只能连到一个固定号码的端点上,或者流进,或者流出。而具有这个号码的另一个方向的端点可以被分配给其它流通道。流通道支持同步传送,中断传送和批量传送;消息指具有某种USB定义的格式的数据流。消息通道与端点的关系同流通道与端点的关系是不同的。首先,主机向USB设备发出一个请求;接着,就是数据的传送;最后,是一个状态阶段。为了能够容纳请求/数据/状态的变化,消息通道要求数据有一个格式,此格式保证了命令能够被可靠地传送和确认。消息通道允许双方向的信息流,虽然大多数的通信流是单方向的。特别地,缺省控制通道也是一个消息通道。当客户程序通过USB管道发送或接收数据时,它首先调用Win32 APl,调用最终将使功能驱动程序收到一个IRP。而驱动程序的工作就是把客户的请求引导到有正确端点的管道上。它把请求提交到总线驱动程序,总线驱动程序再把请求分解成多个事务,然后这些事务被送往总线。总线上的信息流以每毫秒一帧数据的形式流动。总线驱动程序必须安排好多个事务以使它们能被装入同一帧中。
管道是对主机和usb设备间通信流的抽象。
管道和usb设备中的端点一一对应,一个usb设备含有多少个端点,其和主机进行通信时就可以使用多少条管道,且端点的类型决定了管道中数据的传输类型。
开的端点数是由软件决定的,所以管道自然也是软件决定的咯。
管道: 一个USB管道是驱动程序的一个数据缓冲区,与一个外设端点的连接。它代表了一种在两者之间移动数据的能力。管道有两种类型:数据流管道(其中的数据没有USB定义的结构)和消息管道(其中的数据必须有USB定义的结构)。管道只是一个逻辑上的概念。所有的设备必须支持端点0以作为设备的控制管道。通过控制管道,可以获取完全描述USB设备的信息。一个USB设备可以分为三个层:最底层是总线接口,用来发送与接收包;中间层处理总线接口与不同的端点之间的数据流;最上层就是USB设备所提供的功能。
Hub:Hub提供了附加的USB节点(又叫端口)。Hub可以检测出每一个下行端口的状态,并且可以给下端的设备提供电源。