打印
[USB驱动]

USB发送失败

[复制链接]
1372|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
2014hj|  楼主 | 2015-8-16 14:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我将库STM32_USB-FS-Device_Lib_V4.0.0移植到STM32F103ZE上,HID工作正常,但一次只能收发2个字节,于是我将描述符里面的:
0x02,          /* wMaxPacketSize: 2 Bytes max */
改成:
0x40,          /* wMaxPacketSize: 2 Bytes max */
希望它能一次收发64个字节,但是出现了以下错误:
(1)点击“端口2/HID发送”,发送了-1个字节,
(2)Bus Hound提示“USTS C0000004  stall pid”
请问大家,怎么做,才能一次收发64个字节??
描述符如下:
/* USB Standard Device Descriptor */
const uint8_t CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] =
  {
    0x12,                       /*bLength */
    USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
    0x00,                       /*bcdUSB */
    0x02,
    0x00,                       /*bDeviceClass*/
    0x00,                       /*bDeviceSubClass*/
    0x00,                       /*bDeviceProtocol*/
    0x40,                       /*bMaxPacketSize40*/
    0x83,                       /*idVendor (0x0483)*/
    0x04,
    0x89,//0x50,                       /*idProduct = 0x5750*/
    0x18,//0x57,
    0x00,                       /*bcdDevice rel. 2.00*/
    0x02,
    1,                          /*Index of string descriptor describing
                                              manufacturer */
    2,                          /*Index of string descriptor describing
                                             product*/
    3,                          /*Index of string descriptor describing the
                                             device serial number */
    0x01                        /*bNumConfigurations*/
  }
  ; /* CustomHID_DeviceDescriptor */


/* USB Configuration Descriptor */
/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =
  {
    0x09, /* bLength: Configuration Descriptor size */
    USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
    CUSTOMHID_SIZ_CONFIG_DESC,
    /* wTotalLength: Bytes returned */
    0x00,
    0x01,         /* bNumInterfaces: 1 interface */
    0x01,         /* bConfigurationValue: Configuration value */
    0x00,         /* iConfiguration: Index of string descriptor describing
                                 the configuration*/
    0xC0,         /* bmAttributes: Self powered */
    0x32,         /* MaxPower 100 mA: this current is used for detecting Vbus */

    /************** Descriptor of Custom HID interface ****************/
    /* 09 */
    0x09,         /* bLength: Interface Descriptor size */
    USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */
    0x00,         /* bInterfaceNumber: Number of Interface */
    0x00,         /* bAlternateSetting: Alternate setting */
    0x02,         /* bNumEndpoints */
    0x03,         /* bInterfaceClass: HID */
    0x00,         /* bInterfaceSubClass : 1=BOOT, 0=no boot */
    0x00,         /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */
    0,            /* iInterface: Index of string descriptor */
    /******************** Descriptor of Custom HID HID ********************/
    /* 18 */
    0x09,         /* bLength: HID Descriptor size */
    HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */
    0x10,         /* bcdHID: HID Class Spec release number */
    0x01,
    0x00,         /* bCountryCode: Hardware target country */
    0x01,         /* bNumDescriptors: Number of HID class descriptors to follow */
    0x22,         /* bDescriptorType */
    CUSTOMHID_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor */
    0x00,
    /******************** Descriptor of Custom HID endpoints ******************/
    /* 27 */
    0x07,          /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */

    0x81,          /* bEndpointAddress: Endpoint Address (IN) */
    0x03,          /* bmAttributes: Interrupt endpoint */
    0x40,          /* wMaxPacketSize: 2 Bytes max */
    0x00,
    0x20,          /* bInterval: Polling Interval (32 ms) */
    /* 34 */
           
    0x07,        /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE,        /* bDescriptorType: */
                        /*        Endpoint descriptor type */
    0x01,        /* bEndpointAddress: */
                        /*        Endpoint Address (OUT) */
    0x03,        /* bmAttributes: Interrupt endpoint */
    0x40,        /* wMaxPacketSize: 2 Bytes max  */
    0x00,
    0x20,        /* bInterval: Polling Interval (20 ms) */
    /* 41 */
  }
  ; /* CustomHID_ConfigDescriptor */
const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
{                    
        0x06,0x00,0xFF,         //USAGE_PAGE (Vendor Defined Page 1)
        0x09,0x01,              //USAGE (Vendor Usage 1)
        0xA1,0x01,              //COLLECTION (Application)

        0x19,0x01,              //(Vendor Usage 1)
        0x29,0x08,              //(Vendor Usage 1)
        0x15,0x00,              //LOGICAL_MINIMUM (0)
        0x26,0xFF,0x00,                        //LOGICAL_MAXIMUM (255)
        0x75,0x08,              //REPORT_SIZE (8)
        0x95,0x40,              //REPORT_COUNT (64)
        0x81,0x02,              //INPUT (Data,Var,Abs)

        0x19,0x01,              //(Vendor Usage 1)
        0x29,0x08,              //(Vendor Usage 1)
        0x91,0x02,              //OUTPUT (Data,Var,Abs)

        0xC0                         /*     END_COLLECTION           */

}; /* CustomHID_ReportDescriptor */

相关帖子

沙发
hevry| | 2015-8-21 20:44 | 只看该作者
const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
{                    
        0x06,0x00,0xFF,         //USAGE_PAGE (Vendor Defined Page 1)
        0x09,0x01,              //USAGE (Vendor Usage 1)
        0xA1,0x01,              //COLLECTION (Application)

        0x19,0x01,              //(Vendor Usage 1)
        0x29,0x08,              //(Vendor Usage 1)
        0x15,0x00,              //LOGICAL_MINIMUM (0)
        0x26,0xFF,0x00,                        //LOGICAL_MAXIMUM (255)
        0x75,0x08,              //REPORT_SIZE (8)
        0x95,0x40,              //REPORT_COUNT (64)
        0x81,0x02,              //INPUT (Data,Var,Abs)

        0x19,0x01,              //(Vendor Usage 1)
        0x29,0x08,              //(Vendor Usage 1)
        0x91,0x02,              //OUTPUT (Data,Var,Abs)

        0xC0                         /*     END_COLLECTION           */

}; /* CustomHID_ReportDescriptor */

有没有考虑HID描述符和Endpoint不对称

使用特权

评论回复
板凳
jiaerqiu| | 2015-8-26 09:11 | 只看该作者
长度的问题的话,应该要考虑实际收发的长度和最大长度的比较吧。如果实际长度小于最大长度的话,回包应该用实际长度吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝