你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

USBD_HID_SendReport只能发送4个字节

[复制链接]
jyl_518 提问时间:2018-7-25 08:55 /
阅读主题, 点击返回1楼
收藏 评论19 发布时间:2018-7-25 08:55
19个回答
yelm 回答时间:2018-10-12 15:02:41
imgroot 发表于 2018-7-27 04:00
不对。 你要改的是USBD_HID_ConfigDesc 里面End point的 wMaxPacketSize 值。
同时,要让操作系统能够理解 ...

__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __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

};
yelm 回答时间:2018-10-12 17:50:14
但是目标是一次发送64个字节,楼主有解决么?像楼主那样改最多一次只能发20~30个字节
imgroot 回答时间:2018-10-12 22:33:36
有可能你的ENDPOINT大小没有改?把HID_MOUSE_ReportDesc注释一下才贴上来好分析。你也可以用usbview.exe或者 lsusb 看看,确保所有应该设置为64 byte的地方都已经改过。
yelm 回答时间:2018-10-13 09:44:55
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
imgroot 回答时间:2018-11-1 21:36:54
我看了下你在16楼的帖子,你可能对HID Descriptor不熟悉。光靠改Report Size从8到64,操作系统是不会理解的。同时需要给这64byte里面每一个字节的意义都要和操作系统描述。

这篇文章不错 http://eleccelerator.com/tutoria ... report-descriptors/
你可以用这个来确认HID Descriptor http://eleccelerator.com/usbdescreqparser/

推荐用Linux,因为直接一行命令
  1. cat /sys/kernel/debug/hid/<interface>/rdesc
复制代码
然后你的HID descriptor就一幕了然。如果有任何错误内核dmesg会有相应信息。在windows上面我不太清楚如何来看。
12
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版