每个USB设备有一个或多个配置来控制其行为;每个配置中都含有一个或多个接口;设备的接口具有一个或多个端点,每个USB设备在主机看来就是一些端点的结合,提取一个端点的地址、缓冲区长度、数据传输方向、类别等信息,就把一个端点封装成一个管道,利用这个管道句柄就可以实现主机与一个内存缓冲区和设备多个端点之间的数据传输。
USB通信模型,它表明了端点和管道所扮演的角色。整个模型分为3级结构:在最低一级,USB电缆把主控制器与设备的总线接口连接起来;在第二级,一个控制管道把系统软件与逻辑设备连接起来;在第三级,一捆数据管道把客户软件与一组接口连接起来,这些接口组成设备的功能.
Descriptor是描述符,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令(即URB)要求设备发送这些信息. 描述附共有如下:
1——设备描述符
2——配置描述符
struct _CONFIGURATION_DEscriptOR_STRUCT
{
BYTE bLength; //描述符的长度
BYTE bDescriptorType; //描述符类型编号
WORD wTotalLength; //配置所返回的所有数量的大小
BYTE bNumInterface; //此配置所支持的接口数量
BYTE bConfigurationVale; //Set_Configuration命令需要的参数值
BYTE iConfiguration; //描述该配置的字符串的索引值
BYTE bmAttribute; //供电模式的选择
BYTE MaxPower; //设备从总线提取的最大电流
}
3——字符描述符
4——接口描述符
struct _INTERFACE_DESCRIPTOR_STRUCT
{
BYTE bLength; //长度
BYTE bDescriptorType; //描述符类型编号
BYTE bInterfaceNunber; //接口的编号
BYTE bAlternateSetting;//备用的接口描述符编号
BYTE bNumEndpoints; //该接口使用端点数,不包括端点0
BYTE bInterfaceClass; //接口类型
BYTE bInterfaceSubClass;//接口子类型
BYTE bInterfaceProtocol;//接口所遵循的协议
BYTE iInterface; //描述该接口的字符串索引值
}
5——端点描述符;
struct _ENDPOIN_DESCRIPTOR_STRUCT
{
BYTE bLength; //长度
BYTE bDescriptorType; //描述符类型编号
BYTE bEndpointAddress; //端点地址
BYTE bmAttribute; //端点的传输类型属性
WORD wMaxPacketSize; //端点收、发的最大包的大小
BYTE bInterval; //主机查询端点的时间间隔
}