我正在开发一个自定义 USB HID 设备,其 IN 和 OUT 中断端点各 64 字节长度。有 2 个报告(一个报告 ID 为 1,另一个报告 ID 为 2),每个报告计数为 63 个字节。当用 VC++ 开发的 PC 应用程序使用 WriteFile() 发送一个 64 字节的缓冲区时,我在 OUT 中断端点上的设备上正确接收了整个缓冲区。但是,当我从设备向 IN 端点上的 PC 发送一个 64 字节缓冲区时,ReadFile() 返回值为 4(超时)。插入设备时,这种情况仅发生 2 次。之后一切正常,PC 正确读取设备发送的 64 字节。
我正在使用 USBlyzer 工具来嗅探 USB 总线流量。该软件显示,前两次设备在中断 IN 端点上发送一个 64 字节的缓冲区,但它也无法显示其中的数据。从第三次开始,一切都神奇地运行,PC 应用程序和 USBlyzer 都接收并在屏幕上显示 64 字节缓冲区内容。
我不确定问题到底出在哪里,是在 PC 端代码还是在设备固件中?请分享你的想法。