jun4052 发表于 2025-3-24 15:33:10

HID范例增加报告ID号就不能发送数据

使用实验箱的第60个范例代码,在usb_desc.c文件中char code HIDREPORTDESC数组增加报告ID项(0x85, 0x02, //Report ID (2)) 后,使用HID助手发送数据正常 ,但芯片不返回数据,应该是这个发送涵数问题,请问大神要怎么改?

void usb_bulk_intr_in(BYTE *pData, BYTE bSize, BYTE ep)
{
    usb_write_fifo((BYTE)(FIFO0 + ep), pData, bSize);
    usb_write_reg(INCSR1, INIPRDY);
}





国芯人工智能 发表于 2025-3-24 15:58:01

在您描述的问题中,增加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;
       dataWithReportID = 0x02; // 报告ID
       memcpy(&dataWithReportID, pData, bSize); // 将原始数据复制到新数组中

       usbwritefifo((BYTE)(FIFO0 + ep), dataWithReportID, bSize + 1);
       usbwritereg(INCSR1, INIPRDY);
   }

   在上述代码中,我们创建了一个新的数组dataWithReportID,并在首字节添加报告ID,然后将原始数据复制到新数组中。这样,发送的数据包将包含报告ID,符合HID规范。

3. 验证数据传输:使用HID助手或其他工具验证数据是否能够正确发送和接收。确保芯片能够正确解析包含报告ID的数据包。

总结

通过上述修改,您可以确保在包含报告ID的情况下,数据包能够正确发送并被芯片解析。如果问题仍然存在,建议进一步检查芯片的固件配置和USB协议栈的实现,确保所有相关部分都正确处理了报告ID。

希望这些建议能帮助您解决问题。如有进一步疑问,请随时联系我们。

[本文内容由国芯人工智能辅助生成,仅供参考]

ercircle 发表于 2025-3-24 16:11:52

上传工程噢,修改HIDREPORTDESC后,受影响的长度字节更改没

jun4052 发表于 2025-3-25 08:23:10

感谢大佬回复,问题找到了,原因是不加ID号发送8个字节没问题,内部会自动加首字节为0,加上ID号后是要发9个数据才行。
页: [1]
查看完整版本: HID范例增加报告ID号就不能发送数据