hid 中断传输单次上报数据长度大于端点长度时,上报数据频率疑问点

浮光的冰凉 2023-06-19 11:36:19 编辑


我在开发hid 中断节点上报时,遇到了以下问题:

我的usb工作模式为 usb 2.0 fs模式,hid报告描述符通知PC端中断轮询间隔1ms,最大数据包大小256字节。但是呢,由于usb 在FS模式下工作,单次只能上报64字节,此时需要分多次上报。在使用bus hound查看数据时,我发现底层我按照800Hz的频率周期性上报129字节的数据数据,上层实际读取的数据周期为300Hz左右。通过底层加打印监听,发现usb断电读取中断处的时间间隔为1ms,也就是说,我发一个129字节的包,需要3ms才能上报完成。数据长度大于断电支持的最大包长度,需要等多个中断的消息才能上报完数据的情况正常吗?即截图中一个中断传输内会有多个事务,这个事务的定义是轮询间隔?

USB中文网 2023-06-19 11:41:25 编辑

正常。
固件的中断是每一次的事务,而上层如BUSHOUND是一次传输。
一次传输可以包含多个事务。一次传输的数据量大于端点的最大数据量时,前面几个事务是按最大包长度来传输,最后一个事务有多少传输多少。如果刚好为整数倍,最后一个事务的传输长度为0,用于通知主机本次传输完成。

浮光的冰凉 2023-06-19 11:57:03 编辑

我在usb 2.0标准里面看到HS模式下,一个微帧可以使用2到3次中断事务,这种情况下,超过1024字节的数据也是按照0.125ms的间隔获取的吗?还是说,超过部分也会在一个0.125ms以内被usb host端读取走?