打印
[技术问答]

寻高手:NUC472做USB复合设备,SETUP阶段失败!

[复制链接]
3093|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jackem|  楼主 | 2014-8-13 16:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用472做USB复合设备,HID+MassStorage,需要用到2个接口和4个端口,刚好配置描述符里一共用到64字节,问题来了,插上主机时识别不了,但如果减少7个字节(去掉一个端口的描述部分)就可以了。
请问有做过的吗?纠结了好几天,望指点 ,跪谢!
沙发
jackem|  楼主 | 2014-8-13 16:52 | 只看该作者
在线等……在线等……

使用特权

评论回复
板凳
jackem|  楼主 | 2014-8-13 17:12 | 只看该作者

RE: 寻高手:NUC472做USB复合设备,SETUP阶段失败!

uint8_t gu8DeviceDescriptor[] = {
    LEN_DEVICE,     /* bLength */
    DESC_DEVICE,    /* bDescriptorType */
    0x00, 0x02,     /* bcdUSB */
    0x00,           /* bDeviceClass */
    0x00,           /* bDeviceSubClass */
    0x00,           /* bDeviceProtocol */
    CEP_MAX_PKT_SIZE,   /* bMaxPacketSize0 */ //64
    /* idVendor */
    USBD_VID & 0x00FF,
    (USBD_VID & 0xFF00) >> 8,
    /* idProduct */
    USBD_PID & 0x00FF,       
    (USBD_PID & 0xFF00) >> 8,
    0x00, 0x02,     /* bcdDevice */
    0x00,           /* iManufacture - index of string*/
    0x00,           /* iProduct - index of manufacturer string*/
    0x00,           /* iSerialNumber - index of product string */
    0x01            /* bNumConfigurations */
};


uint8_t gu8ConfigDescriptor[] = {

    LEN_CONFIG,     /* bLength */
    DESC_CONFIG,    /* bDescriptorType */
    LEN_CONFIG_AND_SUBORDINATE, 0x00,        /* wTotalLength */
    0x02,           /* bNumInterfaces */                //此配置支持的接口数量
    0x01,           /* bConfigurationValue */        //用SetConofiguration()选择此配置,所指定的配置号
    0x00,           /* iConfiguration */                //用于描述此配置的字符描述符的索引号
    0x80 | (USBD_SELF_POWERED << 6) | (USBD_REMOTE_WAKEUP << 5),/* bmAttributes */ //0x80
    USBD_MAX_POWER,         /* MaxPower */        //0x64 or 0xfa

        /*********** I/F descr:   HID ***********/
    LEN_INTERFACE,  /* bLength */
    DESC_INTERFACE, /* bDescriptorType */
    0x00,           /* bInterfaceNumber */   //接口索引号
    0x00,           /* bAlternateSetting */         //备用的接口描述符编号
    0x01,           /* bNumEndpoints */                 //此接口使用的端点数
    0x03,           /* bInterfaceClass */         //接口类型
    0x00,           /* bInterfaceSubClass */ //接口子类型
    HID_NONE,              /* bInterfaceProtocol */ //接口遵循的协议,此非键盘鼠标
    0x00,           /* iInterface */                 //用于描述此接口的字符描述符的索引号

        /* HID Descriptor */
    LEN_HID,        /* Size of this descriptor in UINT8s. */
    DESC_HID,       /* HID descriptor type. */
    0x10, 0x01,     /* HID Class Spec. release number. */
    0x00,           /* H/W target country. */
    0x01,           /* Number of HID class descriptors to follow. */
    DESC_HID_RPT,   /* Dscriptor type. */
    /* Total length of report descriptor. */
    HID_DEVICE_REPORT_DESCRIPTOR_SIZE & 0x00FF,
    (HID_DEVICE_REPORT_DESCRIPTOR_SIZE & 0xFF00) >> 8,

        /* EP Descriptor: interrupt IN. */
    LEN_ENDPOINT,   /* bLength */
    DESC_ENDPOINT,  /* bDescriptorType */
    (INT_IN_EP_NUM | EP_INPUT), /* bEndpointAddress */
    EP_INT,         /* bmAttributes */
    /* wMaxPacketSize */
    EPC_MAX_PKT_SIZE & 0x00FF,
    (EPC_MAX_PKT_SIZE & 0xFF00) >> 8,
    HID_DEFAULT_INT_OUT_INTERVAL,     /* bInterval */

        /* EP Descriptor: interrupt OUT. */
    LEN_ENDPOINT,   /* bLength */
    DESC_ENDPOINT,  /* bDescriptorType */
    (INT_OUT_EP_NUM | EP_OUTPUT), /* bEndpointAddress */
    EP_INT,         /* bmAttributes */
    /* wMaxPacketSize */
    EPD_MAX_PKT_SIZE & 0x00FF,
    (EPD_MAX_PKT_SIZE & 0xFF00) >> 8,
    HID_DEFAULT_INT_OUT_INTERVAL,     /* bInterval */

    /***** I/F descr: Descriptor of Mass Storage interface  *****/
    LEN_INTERFACE,  /* bLength */
    DESC_INTERFACE, /* bDescriptorType */
    0x01,           /* bInterfaceNumber */        //接口索引号
    0x00,           /* bAlternateSetting */        //备用的接口描述符编号
    0x02,           /* bNumEndpoints */                //所使用的端点数
        0x08,           /* bInterfaceClass */     //接口类型:        0x08- Mass Storage
    0x06,           /* bInterfaceSubClass */  //接口子类型:        0x05- SFF-8070i        适用移动存储设备 /0x06- SCSI
    0x50,               /* bInterfaceProtocol */  //接口协议:        0x50-Only BULK
    0x00,           /* iInterface */                   //用于描述此接口的字符描述符的索引号

    /* EP Descriptor: bulk in. */
    LEN_ENDPOINT,   /* bLength */
    DESC_ENDPOINT,  /* bDescriptorType */
    (BULK_IN_EP_NUM | EP_INPUT),    /* bEndpointAddress */
    EP_BULK,        /* bmAttributes */
    /* wMaxPacketSize */
    EPA_MAX_PKT_SIZE & 0x00FF,        //size 512
    (EPA_MAX_PKT_SIZE & 0xFF00) >> 8,
    0x00,           /* bInterval */

    /* EP Descriptor: bulk out. */
    LEN_ENDPOINT,   /* bLength */
    DESC_ENDPOINT,  /* bDescriptorType */
    (BULK_OUT_EP_NUM | EP_OUTPUT),  /* bEndpointAddress */
    EP_BULK,        /* bmAttributes */
    /* wMaxPacketSize */
    EPB_MAX_PKT_SIZE & 0x00FF,        //size 512
    (EPB_MAX_PKT_SIZE & 0xFF00) >> 8,
    0x00        /* bInterval */
};

其中宏“CEP_MAX_PKT_SIZE”值为64,宏“LEN_CONFIG_AND_SUBORDINATE”值也为64, Setup时按上述各项配置发送以上就不行了,问题在哪?

使用特权

评论回复
地板
jackem|  楼主 | 2014-8-14 10:36 | 只看该作者
怎么坛子里没人弄这块吗?

使用特权

评论回复
5
sdnumcu| | 2014-8-14 12:33 | 只看该作者
有的

使用特权

评论回复
6
jackem|  楼主 | 2014-8-15 15:46 | 只看该作者
有好人吗?

使用特权

评论回复
7
jackem|  楼主 | 2014-8-15 15:46 | 只看该作者
都不想要分呢? 20分不少了

使用特权

评论回复
8
jackem|  楼主 | 2014-8-18 15:19 | 只看该作者
此坛不热闹!

使用特权

评论回复
9
jackem|  楼主 | 2014-8-19 20:12 | 只看该作者
已搞定,收工!

使用特权

评论回复
10
从小木丁丁| | 2014-8-19 22:03 | 只看该作者
楼主,分享一下吧,你猴急

使用特权

评论回复
11
jackem|  楼主 | 2014-8-20 19:31 | 只看该作者
解决办法是把LEN_CONFIG_AND_SUBORDINATE变大,定义为66,而数组实际长度为64,这样不影响功能,但是setup成功。但是为什么不能为64,还不知道原因,有兴趣的朋友可以自测下,多交流!

使用特权

评论回复
12
从小木丁丁| | 2014-8-20 22:02 | 只看该作者
jackem 发表于 2014-8-20 19:31
解决办法是把LEN_CONFIG_AND_SUBORDINATE变大,定义为66,而数组实际长度为64,这样不影响功能,但是setup ...

谢谢楼主分享心得,在测试

使用特权

评论回复
13
gaoyang9992006| | 2014-8-21 20:27 | 只看该作者
从小木丁丁 发表于 2014-8-19 22:03
楼主,分享一下吧,你猴急


楼主,分享一下吧,你猴急

使用特权

评论回复
14
从小木丁丁| | 2014-8-24 23:04 | 只看该作者
gaoyang9992006 发表于 2014-8-21 20:27
楼主,分享一下吧,你猴急

复制别人的东西

使用特权

评论回复
15
从小木丁丁| | 2014-8-24 23:05 | 只看该作者
gaoyang9992006 发表于 2014-8-21 20:27
楼主,分享一下吧,你猴急

好歹你也是个版主啊,我要向跑堂举报你

使用特权

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

本版积分规则

个人签名:没有完美的追求,只有执着的理想!

3

主题

64

帖子

1

粉丝