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