使用/用于HID报告,我在USB HID设备中遇到了一个奇怪的问题。我正在实现一个HID类设备,并将我的程序基于Keil提供的HID USB程序。在这个项目中已经改变了一些代码,它看起来很好用32字节输入和32字节输出报告。不知何故,经过数千次数据传输后,Endpoint 1 out会挂起并变成坏管道。然后我搜索谷歌的一些提示,一个主题提醒我,我们应该写一个数据长度为零的数据包后发送一个数据包匹配你在报告描述中定义的。但这对我不起作用。然后我收到一个输出数据包后,我向控制管道写入一个数据长度为零,神奇地说,它可以工作!在转移数百万次后它永远不会挂起!
以下是我的问题:为什么在将数据长度为零写入控件管道后它才有效。输出管道中传输的数据应与控制管道中的数据无关。它让我很困惑!
答案 0 :(得分:0)
如果您传输的任何数据小于预期的有效负载大小,则必须发送一个零长度数据包以指示数据已传输。
但它在很大程度上取决于主机控制器上的实现,并非所有设备都遵循规范并且可能会失速。
<强>来源:强>
When do USB Hosts require a zero-length IN packet at the end of a Control Read Transfer?