This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
我正在尝试使用 TivaWare USB 库编写定制 HID USB 器件。
我将使用 HIDKeyboard 示例和 此论坛帖子作为起点。
在帖子中、另一个用户为创建"通用"HID 设备提供了一些代码库:
https://gist.github.com/duanebester/068c87d84d8708603d6c
https://gist.github.com/duanebester/771d683e0c76f1fe2ca1
我已将这些内容整合到我的开放测试应用中(构建于 hello TivaWare 示例)。 目前、该应用程序在编译和运行时不会产生任何我可以看到的错误、但在设备管理器中看不到该设备、因此我怀疑 USB 设备初始化期间出现了中断。 我已经尝试过单步执行文件可以跟踪所有函数调用、但到目前为止我还没有运气。 是否有人有幸使用 TivaWare 库或任何其他库构建定制 HID 器件?
我已检查未修改的键盘示例是否正常工作、并在 Windows 中检测到。
我在下面添加了我的项目。
您好 Erik、
我要在对 MAP_IntMasterEnable()的调用中添加一个值;此外,我看不到被调用,并且有几个中断设置。
您是否在 UART 上收到有关"主机已连接..."的消息? 这将指示器件是否正在连接到 Windows、只是没有枚举、或者代码是否甚至没有与 Windows 通信。
根据所发生的情况、您可能需要使用 USB 分析仪来了解中断过程中的位置。
程序从不接收主机连接事件、因此在 UART 消息之前始终在 while 循环中挂起。 我不确定在哪里MAP_IntMasterEnable();
使用、我已经浏览过键盘示例、我没有看到过调用此函数、是否应该在主循环开始附近调用它?
您好 Erik、
我将在以下之后添加它:
// //将系统节拍设置为每秒触发100次。 // MAP_SysTickPeriodSet (ui32SysClock / SYSTICKS_PER_second); map_SysTickIntEnable(); map_SysTickEnable();
好的、我添加了该行、但它仍然无法从主机接收到连接事件。
您好 Erik、
在这种情况下、您需要获取 USB 分析器、以检查正在交换的信息以及枚举过程中自定义 HID 设备无法满足 Windows 对 USB 设备的期望。 遗憾的是、由于我只是一名器件专家、我对定制 HID 等接口的 USB 枚举要求没有深入的了解、因此我实际上无法提供太多指导。 也许另一个社区成员能够提供帮助...
[引用用户="Erik Kinstler"]
好的、我添加了该行、但它仍然无法从主机接收到连接事件。
[/报价]
Erik、
"键盘 HID"和"通用 HID"之间的唯一区别是报告描述符。 "使用页面"告诉主机报告 符合标准设备(如键盘或鼠标)或定制/供应商特定设备。 主机使用此信息来了解要加载的驱动程序。
鉴于您对问题的描述方式、我怀疑您的报告描述符在某种程度上是固定的、或者描述符的大小被错误地报告。 总线分析器、甚至 Wireshark (具有 USB 分析功能)将告诉您描述符格式错误。
正确获取描述符是 USB 产品开发过程中的一个难题!
Andy、
感谢您的提示。 由于我没有 USB 分析器、而且我对用于"通用"器件的代码不是很自信、因此我决定从键盘示例返回、尝试构建符合 HID 标准的供应商定义器件、我能够实现这一目标。 通过查看通用器件源和 hid 键盘源、我不能完全确定故障的位置。 它必须是某种格式错误的描述符。
对于希望使用此库构建 HID 器件的任何人、我都强烈建议在工作示例和所需配置之间进行反向操作、进行小幅更改并在操作过程中观察结果。 也就是说、该库的来源是指针和结构的兔窝藏、因此需要花费大量的时间进行读取和逐步了解、从而能够进行修改。
感谢每个人的帮助!
Erik