USB设备的端点
USB外设本身应包含一定数量的独立的寄存器端口,并能由USB设备驱动程序直接操作。这些寄存器也就是USB设备的端点。一个设备可以有多个端点,但所有的USB设备都必须有一个零端点以用于设置,完成Control类型传送。
每一个设备都有一个由主机分配的唯一的地址,而各个设备上的端点都有设备确定的端点号和通信方向。每个端点只支持单向通信,要么是输入端点,数据流方向是从设备到主机;要么是输出端点,数据流方向是从主机到设备。设备地址、端点号和通信方向三者结合起来就唯一确定了各个端点。
在设备配置时,必须告诉主机设备的各个端点的特性,包括端点号、通信方向、端点支持的最大包大小、带宽要求,以及支持的通信方式等。其中,端点支持的最大包大小称为数据有效负载(Data Payload),这是个重要的概念。前面提到的端点0比较特殊,它实际是由输入和输出两个端点组成。每个设备都必须有端点0、主机和它建立的默认管道(Default Pipe),用于配置设备和实现对设备的一些基本的控制功能。除了端点0,其余的端点在设备配置之前是不能和主机通信的。只有设备在配置描述符中报告了主机,它有那些端点及这些端点的特性,待主机确认后,这些端点才被激活。除端点0之外,低速USB设备最多只能有两个端点,而全速设备最多能有15个。
USB 通信流
管道
管道(Pipe)是USB设备的端点和主机软件进行数据传输的通道。管道是从逻辑概念上来描述信息传输的通道。USB协议规定了流管道(Stream Pipe)和消息管道(Message Pipe)两种管道。其中,消息管道有定义的结构;默认控制管道属于消息管道。
在一个传输发生之前,主机与设备之间必须先建立一个管道。因此,每条管道与端点的特性都有直接关系,它只能支持一种通信方式。例如,一个USB设备应有一个端点来支持接收数据的管道,还应有另一个端点来支持发送数据的管道。端点0所对应的管道称为默认管道。USB主机对外设的控制就是通过在与外设之间相连的默认管道发“外设请求”来实现的。