USB Host的意思是该设备可以作为USB主机连接USB外围设备,如连接U盘、键盘、鼠标等。
与之对等的是USB Device(有些地方翻译成target),意思是该设备可以以U盘的身份连接USB主机。
对于手机来说,同时支持Host和Device模式的,称之为OTG
USB linux
设备通常有一个或多个配置;
配置通常有一个或多个接口;
接口通常有一个或多个设置;
接口有零或多个端点。
这样一个设备对应一个设备描述符,支持视频的功能对应一个接口描述符,支持音频功能的对应一个接口描述符。为了支持视频,在下层有多个端口同时工作为提供视频数据传输的支持,所以有多个端点描述符。
USB设备使用各种描述符来说明其设备架构,包括设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符,他们通常被保存在USB设备的固件程序中。
设备描述符
设备代表一个USB设备,它由一个或多个配置组成。设备描述符用于说明设备的总体信息,并指明其所含的配置的个数。一个USB设备只能有一个设备描述符。
- struct usb_device_descriptor
- {
- _ _u8 bLength; //描述符长度
- _ _u8 bDescriptorType; //描述符类型编号
- _ _le16 bcdUSB; //USB版本号
- _ _u8 bDeviceClass; //USB分配的设备类code
- _ _u8 bDeviceSubClass;// USB分配的子类code
- _ _u8 bDeviceProtocol; //USB分配的协议code
- _ _u8 bMaxPacketSize0; //endpoint0最大包大小
- _ _le16 idVendor; //厂商编号
- _ _le16 idProduct; //产品编号
- _ _le16 bcdDevice; //设备出厂编号
- _ _u8 iManufacturer; //描述厂商字符串的索引
- _ _u8 iProduct; //描述产品字符串的索引
- _ _u8 iSerialNumber; //描述设备序列号字符串的索引
- _ _u8 bNumConfigurations; //可能的配置数量
- } _ _attribute_ _ ((packed));
2、配置描述符
- struct usb_config_descriptor
- {
- _ _u8 bLength; //描述符长度
- _ _u8 bDescriptorType; //描述符类型编号
- _ _le16 wTotalLength; //配置所返回的所有数据的大小
- _ _u8 bNumInterfaces; // 配置所支持的接口数
- _ _u8 bConfigurationValue; //Set_Configuration命令需要的参数值
- _ _u8 iConfiguration; //描述该配置的字符串的索引值
- _ _u8 bmAttributes; //供电模式的选择
- _ _u8 bMaxPower; //设备从总线提取的最大电流
- } _ _attribute_ _ ((packed));