USB HID设备类驱动详解:描述符、请求与驱动程序

4星 · 超过85%的资源 需积分: 9 127 下载量 94 浏览量 更新于2024-08-02 2 收藏 317KB DOC 举报
"HID设备类驱动程序" HID(Human Interface Device)设备类驱动程序是针对需要直接与用户交互的USB设备,如键盘、鼠标、游戏控制器等设计的。HID设备可以是低速或全速设备,它们通过中断IN传输向主机发送数据。HID设备的类代码为0x03,子类代码为0x01,有0x01和0x02两种协议代码。 HID设备的特点主要包括: 1. 拥有一个控制端点,用于处理11种标准USB设备请求和6种HID设备类请求,控制端点数据传输量小且对时间要求不严格。 2. 至少有一个中断IN端点,用于向主机发送数据。 3. 中断OUT端点是可选的,可以通过控制传输的SetReport请求发送报告,传递少量数据。 4. 数据传输的端点配置如图所示,显示了不同类型的端点在HID设备中的应用。 HID设备支持的端点类型决定了其特定功能: 1. 适合传输少量到中量的数据,数据包大小根据设备速度限制(全速:64字节,低速:8字节,高速:1024字节)。 2. 数据传输具有突发性,主机需定期查询获取设备数据。 3. 速率受限,如全速设备最低1ms服务周期,最高速度64KB/s,高速设备最低125μs服务周期,最高速度24.576MB/s。 4. 无固定的传输速率。 5. 交换数据存储在报告结构中,设备必须遵循HID报告格式。 HID设备的识别主要依赖于设备的描述符,包括HID描述符、报表描述符和物理描述符: - HID描述符定义了设备的基本信息,如版本号、最大报告长度等。 - 报表描述符详细描述了设备可能发送和接收的报告结构,包括main、global和local项目。 - Main项目包含输入、输出和Feature报告的定义。 - Global项目设置范围和单位,如逻辑最小值、最大值、物理最小值和最大值。 - Local项目定义特定输入、输出和特征项。 - 物理描述符则描述了设备的物理特性,如按钮的尺寸、位置等。 - 以标准键盘描述符为例,会包含按键布局、功能键等信息。 HID设备类请求包括GETREPORT、SETREPORT、GETIDLE、SETIDLE、GETPROTOCOL和SETPROTOCOL: 1. GETREPORT请求用于从设备获取报告。 2. SETREPORT请求用于向设备发送报告。 3. GETIDLE请求获取设备当前的空闲状态设置。 4. SETIDLE请求设置设备在没有数据发送时的等待时间。 5. GETPROTOCOL请求获取设备当前的工作协议。 6. SETPROTOCOL请求改变设备的工作协议。 HID设备驱动程序的层次关系通常包括: 1. 用户模式下的应用程序,它们通过系统提供的API与设备交互。 2. 用户模式下的驱动程序库,提供高层接口供应用程序调用。 3. 内核模式下的驱动程序,负责实际的I/O操作和硬件通信。 程序的关键回调函数部分可能包括: - 设备初始化和枚举过程中的回调,例如设备连接和断开时的处理。 - 数据传输相关的回调,如中断IN端点的数据接收和发送。 - 用户请求处理的回调,实现GETREPORT、SETREPORT等请求的响应。 理解和开发HID设备类驱动程序涉及对USB协议、HID规范、设备描述符和驱动模型的深入理解,以及编写能够有效管理设备交互的代码。