在您描述的问题中,增加HID报告描述符中的报告ID项后,芯片未能返回数据,这表明在数据传输过程中可能存在配置或处理上的问题。以下是对此问题的分析和建议的解决方案。
问题分析
1. 报告ID的引入:在HID报告描述符中增加报告ID(如0x85, 0x02)后,设备在发送和接收数据时需要在数据包中包含该报告ID。如果发送或接收函数未正确处理报告ID,可能导致数据无法正确传输。
2. 数据传输函数:usbbulkintrin函数负责将数据写入FIFO并设置相应的寄存器标志。如果该函数未考虑报告ID的存在,可能导致数据包格式不正确,从而无法被正确解析。
解决方案
1. 检查数据包格式:确保在发送数据时,数据包的首字节为报告ID(在本例中为0x02)。发送函数应正确处理报告ID,并在数据包中包含它。
2. 修改发送函数:根据HID规范,如果使用了报告ID,发送的数据包应在首字节包含报告ID。以下是修改后的usbbulkintrin函数示例:
- c
- void usbbulkintrin(BYTE pData, BYTE bSize, BYTE ep)
- {
- BYTE dataWithReportID[bSize + 1];
- dataWithReportID[0] = 0x02; // 报告ID
- memcpy(&dataWithReportID[1], pData, bSize); // 将原始数据复制到新数组中
- usbwritefifo((BYTE)(FIFO0 + ep), dataWithReportID, bSize + 1);
- usbwritereg(INCSR1, INIPRDY);
- }
复制代码
在上述代码中,我们创建了一个新的数组dataWithReportID,并在首字节添加报告ID,然后将原始数据复制到新数组中。这样,发送的数据包将包含报告ID,符合HID规范。
3. 验证数据传输:使用HID助手或其他工具验证数据是否能够正确发送和接收。确保芯片能够正确解析包含报告ID的数据包。
总结
通过上述修改,您可以确保在包含报告ID的情况下,数据包能够正确发送并被芯片解析。如果问题仍然存在,建议进一步检查芯片的固件配置和USB协议栈的实现,确保所有相关部分都正确处理了报告ID。
希望这些建议能帮助您解决问题。如有进一步疑问,请随时联系我们。
[本文内容由国芯人工智能辅助生成,仅供参考] |