欢迎来到天天文库
浏览记录
ID:38924378
大小:142.00 KB
页数:12页
时间:2019-06-21
《STM32 USB HID详解》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、STM32USBHID详解1、USB简介2、USB描述符USB只是一个总线,只提供一个数据通路而已。USB总线驱动程序并不知道一个设备具体如何操作,有哪些行为。具体的一个设备实现什么功能,要由设备自己来决定。那么,USB主机是如何知道一个设备的功能以及行为呢?这就要通过描述符来实现了。描述符中记录了设备的类型、厂商ID和产品ID(通常依靠它们来加载对应的驱动程序)、端点情况、版本号等众多信息。标准的USB设备有5种USB描述符:设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符。下面详解:2.1、设备描述符一个USB
2、设备只有一个设备描述符。设备描述符主要记录的信息有:设备所使用的USB协议版本号、设备类型、端点0的最大包大小、厂商ID(VID)和产品ID(PID)、设备版本号、厂商字符串索引、产品字符串索引、设备序列号索引、可能的配置数等。偏移量域大小/字节说明0bLength1该描述符的长度(0x12=18字节)1bDescriptorType1描述符类型(0x01设备描述符)2bcdUSB2本设备使用的USB协议版本4bDeviceClass1类代码5bDeviceSubClass1子类代码6bDeviceProtocol1协议码7b
3、MaxPacketSize1端点0最大包长8idVendor2厂商ID10idProduct2产品ID12bcdDevice2设备版本号14iManufacturer1描述厂商的字符串索引15iProduct1描述产品的字符串索引16iSerialNumber1产品序列号的字符串索引17bNumConfigurations1可能的配置数2.2、配置描述符设备描述符里决定了该设备有多少种配置,每种配置都有一个配置描述符。配置描述符主要记录的信息有:配置所包含的接口数、配置的编号、供电方式、是否支持远程唤醒、电流需求量等。偏移量域
4、大小/字节说明0bLength1该描述符的长度(0x09字节)1bDescriptorType1描述符类型(0x02配置描述符)2wTotalLength2配置、接口、端点和类描述符字节总和4bNumInterfaces1支持接口数5bConfigurationValue1本配置描述符标识6iConfiguration1配置描述符说明字符串索引7bmAttributes1电源及唤醒8MaxPower1设备耗电电流2.3、接口描述符在每个配置描述符中又定义了该配置有多少个接口,每个接口都有一个接口描述符。接口描述符主要记录的信息
5、有:接口的编号、接口的端点数、接口所使用的类、子类、协议等。偏移量域大小/字节说明0bLength1该描述符的长度(0x09字节)1bDescriptorType1描述符类型(0x04接口描述符)2bInterfaceNumber1本接口描述符标识3bAlternateSetting14bNumEndpoints1接口端点数5bInterfaceClass1接口类代码6bInterfaceSubClass1启动类型1=BOOT,0=NoBOOT7bInterfaceProtocol10=None,1=Keyboard,2=Mo
6、use8iInterface1接口描述符说明字符串索引2.4、[类描述符]该描述符不是必须的,如果配置的USB类型有类特殊描述符(如HID类),它跟在相应的接口描述符之后。2.5、端点描述符在接口描述符里又定义了该接口有多少个端点,每个端点都有一个端点描述符。端点描述符主要记录的信息有:端点号及方向、端点的传输类型、最大包长度、查询时间间隔等。偏移量域大小/字节说明0bLength1该描述符的长度(0x07字节)1bDescriptorType1描述符类型(0x5端点描述符)2bEndpointAddress1端点地址3bmA
7、ttributes1端点类型4wMaxPacketSize2端点发送接收最大包长6bInterval1中断端点轮训时间间隔2.6、[字符串描述符]字符串描述符主要是提供一些方便人们阅读的信息,它不是必需的。偏移量域大小/字节说明0bLength1该描述符的长度(0x04/0xXX字节),第一个字符串描述符0x041bDescriptorType1描述符类型(0x3字符串描述符)2wLANGID2/XX第一个字符串描述符时2字节,表示语言编码,其他自定义3、USBHID为了把一个设备识别为HID类别,设备在定义描述符的时候必须遵
8、守HID规范。除了USB标准定义的一些描述符外,HID设备还必须定义HID描述符。另外设备和主机的通信是通过报告的形式来实现的,所以还必须定义报告描述符;而物理描述符不是必需的。还有就是HID描述符是关联于接口(而不是端点)的,所以设备不需要为每个端点都提供一个HID描述符。
此文档下载收益归作者所有