找回密码
 立即注册
查看: 62|回复: 3

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-03-26 19:50:06
已绑定手机

1

主题

1

回帖

21

积分

新手上路

积分
21
发表于 2025-3-24 15:33:10 | 显示全部楼层 |阅读模式
使用实验箱的第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);
}

不加报告ID

不加报告ID





报告ID为02

报告ID为02
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 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函数示例:

  
  1. c
  2.    void usbbulkintrin(BYTE pData, BYTE bSize, BYTE ep)
  3.    {
  4.        BYTE dataWithReportID[bSize + 1];
  5.        dataWithReportID[0] = 0x02; // 报告ID
  6.        memcpy(&dataWithReportID[1], pData, bSize); // 将原始数据复制到新数组中
  7.        usbwritefifo((BYTE)(FIFO0 + ep), dataWithReportID, bSize + 1);
  8.        usbwritereg(INCSR1, INIPRDY);
  9.    }
复制代码

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

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

总结

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

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

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-3-24 16:11:52 | 显示全部楼层
上传工程噢,修改HIDREPORTDESC后,受影响的长度字节更改没
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-03-26 19:50:06
已绑定手机

1

主题

1

回帖

21

积分

新手上路

积分
21
发表于 2025-3-25 08:23:10 | 显示全部楼层
感谢大佬回复,问题找到了,原因是不加ID号发送8个字节没问题,内部会自动加首字节为0,加上ID号后是要发9个数据才行。
回复 支持 1 反对 0

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:02 , Processed in 0.130818 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表