USB设备类请求处理-HID类请求详解

需积分: 45 28 下载量 116 浏览量 更新于2024-08-06 收藏 18.87MB PDF 举报
"LPC178x下册" 在USB设备的开发中,处理来自主机的请求是至关重要的。本文档以LPC178x微控制器为例,介绍了如何在USB设备驱动中处理HID(Human Interface Device)类请求。LPC178x是一款基于ARM Cortex-M3内核的微控制器,常用于嵌入式系统,包括USB设备应用。 在USB通信中,设备需要能够响应主机的各种请求,这些请求可以是标准请求、厂商特定请求或类请求。在LPC178x的USB设备驱动中,这些请求的处理主要集中在`__usbDevControlHandler()`函数中。该函数首先读取请求类型和请求索引,然后根据请求的类型调用相应的处理函数。 当请求类型为USB_CLASS_REQUEST时,即涉及到类相关的请求,例如HID类请求。在程序清单10.24中,我们可以看到新增加的类请求处理部分。这里通过`(*HidClassRequest[ucRequestindex])();`调用了HID类请求处理函数入口列表中的对应函数。 HID类请求处理函数入口列表如程序清单10.25所示,它包含了5个函数入口,分别对应HID类请求的不同部分: 1. `get_report`:获取报告请求,用于主机从设备获取HID报告。 2. `get_idle`:获取空闲状态请求,主机通过此请求获取设备当前的非活动时间间隔设置。 3. `get_protocol`:获取协议请求,允许主机查询设备当前使用的报告协议。 4. `__usbDevReserved`:预留的函数入口,通常不用于实际代码,可能用于未来的扩展或特定用途。 5. `__usbDevReserved`:同样为预留的函数入口。 对于HID类请求,除了`get_idle`请求需要进行实际处理外,其他未定义的请求通常回应STALL,表示设备无法处理该请求。例如,如果主机发送了一个设备未实现的`get_report`请求,设备会回应STALL,通知主机该请求无效。 在处理HID类设备时,理解并正确实现这些请求处理函数对于确保USB设备的正常工作至关重要。例如,`get_idle`请求的处理可能涉及更新设备内部的空闲计时器设置,以控制在无数据传输时设备进入低功耗模式的时间。 此外,文档中还提到了LPC178x的其他功能部件,如E2PROM存储器和外部存储器控制器(EMC)。E2PROM存储器允许设备存储非易失性数据,即使在电源断开后也能保持数据。EMC则负责管理与外部存储器如SRAM、SDRAM、Nor Flash等的交互,为系统提供扩展的内存访问能力。 LPC178x的USB设备驱动设计考虑了HID类设备的需求,提供了对不同USB请求的灵活处理机制。同时,该微控制器还集成了多种功能部件,以支持复杂的嵌入式系统应用。开发者在实现USB设备驱动时,需要对这些请求处理函数有深入的理解,并结合具体设备的硬件特性进行适配和编程。