理解HID设备接口与HID类描述符:从接口描述符到协议代码解析

需积分: 45 28 下载量 94 浏览量 更新于2024-08-06 收藏 18.87MB PDF 举报
"接口描述符-word.origins.the.secret.histories.of.english.words.from.a.to.z" 在USB设备的通信中,接口描述符起着至关重要的作用,它定义了设备的接口特性,尤其是对于HID(Human Interface Device)设备。HID设备如键盘、鼠标等,它们与主机通信的方式依赖于接口描述符中的信息。接口描述符的定义通常在USB设备的头文件中,例如在`usbDevDescriptor.h`。 接口描述符是一个结构体,如程序清单10.18所示,包含以下几个关键字段: 1. `bLength`:表示整个描述符的长度,用于确定解析描述符所需的字节数。 2. `bDescriptorType`:标识这是哪种类型的描述符,对于HID设备,这个值应为0x04,表示接口描述符。 3. `bInterfaceNumber`:指定接口的编号,用于区分设备上的多个接口。 4. `bAlternateSetting`:表示接口的备用设置数,对于不支持备用设置的接口,通常是0。 5. `bNumEndpoints`:指示接口使用的端点数,HID设备通常至少有一个数据传输端点。 6. `bInterfaceClass`:类型代码,对于HID设备,必须设置为0x03,表明这是一个HID接口。 7. `bInterfaceSubClass`:子类型代码,可以指示设备是否支持引导接口,如值为1,则表示设备可以在没有HID类驱动的情况下工作。 8. `bInterfaceProtocol`:协议代码,定义了HID设备的具体类型,如0代表无特定协议,1代表键盘,2代表鼠标。 9. `iInterface`:指向字符串描述符的索引,提供用户可读的接口名称。 除了接口描述符,HID设备还需要HID类描述符来进一步定义其功能。HID类描述符通常包含报告描述符和可能的物理描述符。报告描述符定义了HID设备如何传输数据,包括输入、输出和特征报告。在USB_HID_DESCRIPTOR结构体中,会指定一个或多个从属类描述符,如程序清单10.19所示。在这个例子中,只有一个报告描述符。 HID设备的子类型代码和协议代码提供了关于设备功能的更具体信息,如表10.62和表10.63所示。子类型代码值为0表示没有特定的子类型,而1则表示支持引导接口。协议代码值为0表示无特定协议,1和2分别对应键盘和鼠标,其他值则保留未定义。 在LPC178x/177x这样的微控制器中,可能会涉及对这些接口和描述符的处理,以正确地与HID设备交互。例如,E2PROM存储器可以用来存储配置信息,外部存储器控制器(EMC)则可能用于管理与USB设备交互过程中涉及的内存操作。理解这些接口描述符的细节对于编写和调试USB设备驱动至关重要,确保设备能够正确地被操作系统识别和控制。