[圈圈教你玩USB] HID通信字节限制问题

[复制链接]
 楼主| bmwlover02 发表于 2009-4-7 12:05 | 显示全部楼层 |阅读模式
我在开发基于HID的自定义传输应用,当前的想法是实现每次64字节的报文传输通路。但是在实现过程中发现,我只能每次写入3个字节到下位机即STM32中,如果写入过多,Windows的hid驱动会提示写入失败,错误代码为31(Device&nbsp;A&nbsp;device&nbsp;attached&nbsp;to&nbsp;the&nbsp;system&nbsp;is&nbsp;not&nbsp;functioning).<br /><br />下面是我的HID描述符以及USB端口描述符:<br />部分HID描述符:<br />const&nbsp;u8&nbsp;CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC]&nbsp;=<br />&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;0x05,&nbsp;0xAC,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;USAGE_PAGE&nbsp;(Vendor&nbsp;Defined&nbsp;Page&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;0x09,&nbsp;0x01,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;USAGE&nbsp;(Undefined)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;0xa1,&nbsp;0x01,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;COLLECTION&nbsp;(Application)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;PC&nbsp;to&nbsp;STM32&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;0x85,&nbsp;0x01,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REPORT_ID&nbsp;(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x09,&nbsp;0x01,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USAGE&nbsp;(LED&nbsp;1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x15,&nbsp;0x00,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOGICAL_MINIMUM&nbsp;(0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;0x26,&nbsp;0xFF,&nbsp;0x00,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOGICAL_MAXIMUM&nbsp;(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;0x75,&nbsp;0x08,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REPORT_SIZE&nbsp;(8)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;0x95,&nbsp;0x02,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REPORT_COUNT&nbsp;(2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;0xB1,&nbsp;0x82,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;FEATURE&nbsp;(Data,Var,Abs,Vol)&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;0x85,&nbsp;0x01,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REPORT_ID&nbsp;(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x09,&nbsp;0x01,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USAGE&nbsp;(LED&nbsp;1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x91,&nbsp;0x82,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUTPUT&nbsp;(Data,Var,Abs,Vol)&nbsp;&nbsp;*/<br /><br />....<br /><br />&nbsp;&nbsp;};&nbsp;/*&nbsp;CustomHID_ReportDescriptor&nbsp;*/<br /><br />USB描述符<br />&nbsp;&nbsp;&nbsp;&nbsp;/********************&nbsp;Descriptor&nbsp;of&nbsp;Custom&nbsp;HID&nbsp;endpoints&nbsp;******************/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;27&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x07,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;bLength:&nbsp;Endpoint&nbsp;Descriptor&nbsp;size&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;USB_ENDPOINT_DESCRIPTOR_TYPE,&nbsp;/*&nbsp;bDescriptorType:&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;0x81,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;bEndpointAddress:&nbsp;Endpoint&nbsp;Address&nbsp;(IN)&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x03,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;bmAttributes:&nbsp;Interrupt&nbsp;endpoint&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x40,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;wMaxPacketSize:&nbsp;2&nbsp;Bytes&nbsp;max&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x00,<br />&nbsp;&nbsp;&nbsp;&nbsp;0x20,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;bInterval:&nbsp;Polling&nbsp;Interval&nbsp;(32&nbsp;ms)&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;34&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;0x07,&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;bLength:&nbsp;Endpoint&nbsp;Descriptor&nbsp;size&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;USB_ENDPOINT_DESCRIPTOR_TYPE,&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;bDescriptorType:&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;Endpoint&nbsp;descriptor&nbsp;type&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x01,&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;bEndpointAddress:&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;Endpoint&nbsp;Address&nbsp;(OUT)&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x03,&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;bmAttributes:&nbsp;Interrupt&nbsp;endpoint&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x40,&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;wMaxPacketSize:&nbsp;2&nbsp;Bytes&nbsp;max&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;0x00,<br />&nbsp;&nbsp;&nbsp;&nbsp;0x14,&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;bInterval:&nbsp;Polling&nbsp;Interval&nbsp;(20&nbsp;ms)&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;41&nbsp;*/<br /><br />其中,将HID报文中的0x95,&nbsp;0x02,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REPORT_COUNT&nbsp;(2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;<br />改为4以下数字可以通信,改成4以上数字则不能通信,请问有兄弟遇到过雷系情况吗?
computer00 发表于 2009-4-7 12:31 | 显示全部楼层

没有遇到过,你可以参看书中第五章的代码。

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

本版积分规则

9

主题

25

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

9

主题

25

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部