STM32做USB HID设备最大包长度和ReportID的几个问题

STM32做USB HID设备最大包长度和ReportID的几个问题最大包长度 64 字节包含 ReportID 字节吗 包含与否取决于报告描述符 Report Descriptor 的配置

欢迎大家来到IT世界,在知识的湖畔探索吧!

最大包长度64字节包含ReportID字节吗?

包含与否取决于报告描述符(Report Descriptor)的配置。

1、如果在报告描述符中明确为某个报告分配了Report ID,并且该报告被设计为包含Report ID进行传输,那么当这个报告被发送时,其数据包将会以Report ID作为第一个字节,紧接着是报告的实际数据。在这种情况下,如果数据包的总长度是64字节,那么实际的数据部分将是63字节,因为第一个字节是Report ID。设备app层可以看到ReportID。

2、如果报告描述符中没有为报告指定Report ID,或者虽然指定了Report ID但在实际传输中并不包含(例如,某些实现可能选择不使用Report ID或默认其值为0但不显式发送),则数据包将不包含Report ID,直接包含报告的数据。此时,64字节将全部用于报告数据。设备程序看不到reportID的0。

如果配置描述符没有为报告指定Report ID,那么通常认为报告是匿名的,即不需要在报告的开始处明确指定一个Report ID。然而,这并不意味着报告的第一个字节就自动成为Report ID;相反,这意味着整个报告内容直接跟随在报告描述符定义的数据格式之后,没有额外的Report ID字节。即全部64字节都是数据!

3、如果报告描述符中没有为报告指定Report ID,则报告描述符中无法增加其他带ReportID的描述。

USB设备只发送了64字节数据,bushound监控到65个字节的原因

  • 在HID报告中,如果配置描述符没有明确指定不使用Report ID,但设备实际发送时没有包含Report ID(或相反),则可能导致监控工具在解析数据包时出现误解。然而,在这种情况下,通常不会增加额外的字节到数据负载中,而是可能导致数据包被错误地识别或处理。
  • BusHound等工具在监控USB通信时,可能会以不同的方式显示数据包。有时,工具会将包头、包尾或其他控制信息也计入显示的数据长度中,这可能导致显示的数据长度比实际的数据负载要长。
STM32做USB HID设备最大包长度和ReportID的几个问题



欢迎大家来到IT世界,在知识的湖畔探索吧!

  • USBFS一包最多只能传输64字节吗?

是的,这是由USB协议规定的,USB全速设备最大包长64字节,低速设备最大包长8字节。但是报告描述符可以大于64,不可以用,造成数据错位。

当USB配置描述符、报告描述符REPORT_COUNT的值大于64时,由于USB协议的限制,主机及设备都需要遵守最大包长64字节的规定,主机\设备应当分包发送。

以下REPORT_COUNT = 70为例,可以看到主机分2包发送。

报告描述符REPORT_COUNT=70,因未指定ReportID,默认再增加1字节ReportID,所以输出长度71

USBFS最大包长度64字节,但报告描述符要求每次报告70字节,所以要分两包发送这70字节。

通过串口转发收到的HID数据,,每收到1包转发1次,串口按固定发送64字节;绿线围起来的部分是PMA缓存只更新收到的长度的部分数据,与设备的USB驱动有关。

STM32做USB HID设备最大包长度和ReportID的几个问题

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/132353.html

(0)
上一篇 32分钟前
下一篇 2分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信