1、USBD_HID_ConfigDesc 里面End point的 wMaxPacketSize 值已由0x04改0x08,此值前期改过不管用,可能是只 ...
HID_EPIN_SIZE 改了没有?不然描述符里虽然说 wMaxPacketSize 是0x8, 但是你的设备因为USB 驱动配置原因自己发不出去 0x8个字节
另外,我说的HID REPORT SIZE 不是 HID_MOUSE_REPORT_DESC_SIZE, 这个可能给你搞糊涂了。HID_MOUSE_REPORT_DESC_SIZE 是 USB HID 描述符本身的大小 (见HID_MOUSE_ReportDesc)。 在这个 USB HID 描述符里面会告诉操作系统这个设备的HID REPORT是多少字节,如何去处理,等等细节。你学习下USB HID规范就了解了。HID_MOUSE_ReportDesc这个array里面奥妙很多的。
具体请看 http://notes.iopush.net/stm32-custom-usb-hid-step-by-step-2/ 和 http://damogranlabs.com/2016/03/stm32-custom-usb-hid-device-yes-please/ imgroot 发表于 2018-7-31 05:35
HID_EPIN_SIZE 改了没有?不然描述符里虽然说 wMaxPacketSize 是0x8, 但是你的设备因为USB 驱动配置原因 ...
非常感谢,回答的很详细,这二天工作又忙 了,等空了再研究下。 imgroot 发表于 2018-7-31 05:35
HID_EPIN_SIZE 改了没有?不然描述符里虽然说 wMaxPacketSize 是0x8, 但是你的设备因为USB 驱动配置原因 ...
非常感谢,谢谢您的耐心解答,终于搞定了。
个人总结下:
1、主要还是我对描述报告“HID_MOUSE_ReportDesc”没理解。
2、现将HID_EPIN_SIZE改为5,并在“HID_MOUSE_ReportDesc”中要发送的数据改为5个,且HID_MOUSE_REPORT_DESC_SIZE改为数组(HID_MOUSE_ReportDesc)实际大小后OK了。
3、改这个东西好像没有赛普拉斯的方便。 好贴,顶起! imgroot 发表于 2018-7-27 04:00
不对。 你要改的是USBD_HID_ConfigDesc 里面End point的 wMaxPacketSize 值。
同时,要让操作系统能够理解 ...
__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc __ALIGN_END =
{
0x05, 0x01,
0x09, 0x02,
0xA1, 0x01,
0x09, 0x01,
0xA1, 0x00,
0x05, 0x09,
0x19, 0x01,
0x29, 0x03,
0x15, 0x00,
0x25, 0x01,
0x95, 0x03,
0x75, 0x01,
0x81, 0x02,
0x95, 0x01,
0x75, 0x05,
0x81, 0x01,
0x05, 0x01,
0x09, 0x30,
0x09, 0x31,
0x09, 0x38,
0x15, 0x81,
0x25, 0x7F,
0x75, 0x40, //0x75, 0x08,//此处由原来0x8字节改成0x40(64)字节,发送变成一次发送成功
0x95, 0x03,
0x81, 0x06,
0xC0, 0x09,
0x3c, 0x05,
0xff, 0x09,
0x01, 0x15,
0x00, 0x25,
0x01, 0x75,
0x01, 0x95,
0x02, 0xb1,
0x22, 0x75,
0x06, 0x95,
0x01, 0xb1,
0x01, 0xc0
}; 但是目标是一次发送64个字节,楼主有解决么?像楼主那样改最多一次只能发20~30个字节 有可能你的ENDPOINT大小没有改?把HID_MOUSE_ReportDesc注释一下才贴上来好分析。你也可以用usbview.exe或者 lsusb 看看,确保所有应该设置为64 byte的地方都已经改过。 imgroot 发表于 2018-10-12 22:33
有可能你的ENDPOINT大小没有改?把HID_MOUSE_ReportDesc注释一下才贴上来好分析。你也可以用usbview.exe或 ...
#define HID_IN_EP 0x81
#define HID_OUT_EP 0x01
#define HID_IN_PACKET 64//4
#define HID_OUT_PACKET 64// 4
你说的ENDPOINT大小应该是我这的HID_IN_PACKET和HID_OUT_PACKET吧,有改的。
HID_MOUSE_ReportDesc里的值我是照搬ST的DEVICE HID例子来的,它里边也没有解释,我只是估计改0x75或者0x95开头的。
另外USBVIEW的结果如下
Device Descriptor:
bcdUSB: 0x0200
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x40 (64)
idVendor: 0x0483 (STMicroelectronics)
idProduct: 0x5710
bcdDevice: 0x0200
iManufacturer: 0x01
iProduct: 0x02
iSerialNumber: 0x03
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x05
Open Pipes: 2
Endpoint Descriptor:
bEndpointAddress: 0x81
Transfer Type: Interrupt
wMaxPacketSize: 0x0040 (64)
bInterval: 0x0A
Endpoint Descriptor:
bEndpointAddress: 0x01
Transfer Type: Interrupt
wMaxPacketSize: 0x0040 (64)
bInterval: 0x0A
我看了下你在16楼的帖子,你可能对HID Descriptor不熟悉。光靠改Report Size从8到64,操作系统是不会理解的。同时需要给这64byte里面每一个字节的意义都要和操作系统描述。
这篇文章不错 http://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/
你可以用这个来确认HID Descriptor http://eleccelerator.com/usbdescreqparser/
推荐用Linux,因为直接一行命令 cat /sys/kernel/debug/hid/<interface>/rdesc 然后你的HID descriptor就一幕了然。如果有任何错误内核dmesg会有相应信息。在windows上面我不太清楚如何来看。
页:
1
[2]