USB Host的意思是该设备可以作为USB主机连接USB外围设备,如连接U盘、键盘、鼠标等。

与之对等的是USB Device(有些地方翻译成target),意思是该设备可以以U盘的身份连接USB主机。

对于手机来说,同时支持Host和Device模式的,称之为OTG

USB linux

设备通常有一个或多个配置;

配置通常有一个或多个接口;

接口通常有一个或多个设置;

接口有零或多个端点。

 

这样一个设备对应一个设备描述符,支持视频的功能对应一个接口描述符,支持音频功能的对应一个接口描述符。为了支持视频,在下层有多个端口同时工作为提供视频数据传输的支持,所以有多个端点描述符

      USB设备使用各种描述符来说明其设备架构,包括设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符,他们通常被保存在USB设备的固件程序中

设备描述符

      设备代表一个USB设备,它由一个或多个配置组成。设备描述符用于说明设备的总体信息,并指明其所含的配置的个数。一个USB设备只能有一个设备描述符

  1. struct usb_device_descriptor  
  2. {  
  3.     _ _u8 bLength; //描述符长度  
  4.     _ _u8 bDescriptorType; //描述符类型编号  
  5.   
  6.     _ _le16 bcdUSB; //USB版本号  
  7.     _ _u8 bDeviceClass; //USB分配的设备类code  
  8.     _ _u8 bDeviceSubClass;// USB分配的子类code  
  9.     _ _u8 bDeviceProtocol; //USB分配的协议code  
  10.     _ _u8 bMaxPacketSize0; //endpoint0最大包大小  
  11.     _ _le16 idVendor; //厂商编号  
  12.     _ _le16 idProduct; //产品编号  
  13.     _ _le16 bcdDevice; //设备出厂编号  
  14.     _ _u8 iManufacturer; //描述厂商字符串的索引  
  15.     _ _u8 iProduct; //描述产品字符串的索引  
  16.     _ _u8 iSerialNumber; //描述设备序列号字符串的索引  
  17.     _ _u8 bNumConfigurations; //可能的配置数量  
  18. } _ _attribute_ _ ((packed)); 

2、配置描述符

  1. struct usb_config_descriptor  
  2. {  
  3.     _ _u8 bLength; //描述符长度  
  4.     _ _u8 bDescriptorType; //描述符类型编号  
  5.       
  6.     _ _le16 wTotalLength; //配置所返回的所有数据的大小  
  7.     _ _u8 bNumInterfaces; // 配置所支持的接口数  
  8.     _ _u8 bConfigurationValue; //Set_Configuration命令需要的参数值  
  9.     _ _u8 iConfiguration; //描述该配置的字符串的索引值  
  10.     _ _u8 bmAttributes; //供电模式的选择  
  11.     _ _u8 bMaxPower; //设备从总线提取的最大电流  
  12. } _ _attribute_ _ ((packed));