8038|12

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

usb复合设备遇到问题 [复制链接]

要做一个HID和MSD的复合设备,stm32f103在发送完config descriptor后出现问题。bushond如下:
  21.0  CTL    80 06 00 01  00 00 12 00                                                                                GET DESCRIPTOR           1.1.0        
  21.0  DI     12 01 00 02  00 00 00 40  83 04 50 57  00 02 01 02  03 01                                               .......@..PW....         1.2.0        
  21.0  CTL    80 06 00 02  00 00 09 00                                                                                GET DESCRIPTOR           2.1.0        
  21.0  DI     09 02 40 00  02 01 00 c0  32                                                                            ..@.....2                2.2.0        
  21.0  CTL    80 06 00 02  00 00 40 00                                                                                GET DESCRIPTOR           3.1.0        
  21.0  DI     09 02 40 00  02 01 00 c0  32 09 04 00  00 02 03 00  00 00 09 21  10 01 00 01  22 26 00 07  05 81 03 40  ..@.....2.......         3.2.0        
               00 20 07 05  01 03 40 00  20 09 04 01  00 02 08 06  50 04 07 05  83 02 40 00  00 07 05 02  02 40 00 00  . ....@. .......         3.2.32       
  21.0  CTL    00 09 01 00  00 00 00 00                                                                                SET CONFIG               4.1.0        

config descriptor如下:

const u8 CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =
  {
    0x09,         /* bLength: Configuation Descriptor size */
    USB_CONFIGURATION_DESCRIPTOR_TYPE,  /* bDescriptorType: Configuration */
    CUSTOMHID_SIZ_CONFIG_DESC,          /* wTotalLength: Bytes returned */                 
    0x00,
    0x02,         /* bNumInterfaces: 2 interface */
    0x01,         /* bConfigurationValue: Configuration value */
    0x00,         /* iConfiguration: Index of string descriptor describing
                                 the configuration*/
    0xC0,         /* bmAttributes: Bus powered */
    0x32,         /* MaxPower 100 mA: this current is used for detecting Vbus */
    /* 09 */

    /************** Descriptor of Custom HID interface ****************/
    
    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 */
    /* 18 */
    /******************** Descriptor of Custom HID HID ********************/
    
    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,
    /* 27 */
    /******************** Descriptor of Custom HID endpoints ******************/

    0x07,          /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: */
    0x81,          /* bEndpointAddress: Endpoint Address (IN) */
    0x03,          /* bmAttributes: Interrupt endpoint */
    0x40,          /* wMaxPacketSize: 64 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 (32 ms) */
    /* 41 */
    /************** Descriptor of MSD interface ****************/

    0x09,         /* bLength: Interface Descriptor size */
    USB_INTERFACE_DESCRIPTOR_TYPE,   /* bDescriptorType: Interface descriptor type*/
    0x01,         /* bInterfaceNumber: Number of Interface */
    0x00,         /* bAlternateSetting: Alternate setting */
    0x02,         /* bNumEndpoints*/
    0x08,         /* bInterfaceClass: MASS STORAGE Class */
    0x06,         /* bInterfaceSubClass : SCSI transparent*/
    0x50,         /* nInterfaceProtocol */
    4,            /* iInterface: */
    /* 50 */
    /******************** Descriptor of MSD endpoints ******************/

    0x07,         /* Endpoint descriptor length = 7*/
    0x05,         /* Endpoint descriptor type */
    0x83,         /* Endpoint address (IN, address 3) */
    0x02,         /* Bulk endpoint type */
    0x40,         /* Maximum packet size (64 bytes) */
    0x00,
    0x00,         /* Polling interval in milliseconds */
    /* 57 */
    0x07,         /* Endpoint descriptor length = 7 */
    0x05,         /* Endpoint descriptor type */
    0x02,         /* Endpoint address (OUT, address 2) */
    0x02,         /* Bulk endpoint type */
    0x40,         /* Maximum packet size (64 bytes) */
    0x00,
    0x00          /*Polling interval in milliseconds*/
    /* 64 */
  }

bushond显示host发送了set config,但跟踪发现mcu中没收到该命令,怀疑config descriptor设置有问题。但查不出来,请高手们帮忙解惑啦:)
此帖出自stm32/stm8论坛

最新回复

                                 ls的还在吗?我刚刚也碰到了这个问题, 修改idProduct后好了,但是为什么要改呢?  详情 回复 发表于 2010-8-11 13:45
点赞 关注
 

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

没看出什么问题

                                  
此帖出自stm32/stm8论坛
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

如果下面文章的内容都是正确的话

那么LZ所说的应该是组合设备,我也准备弄个玩玩,在偶的开发工具上集成一个CDC串口
相关链接:http://www.61ic.com/Technology/Industry/200701/11582.html
此帖出自stm32/stm8论坛
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 

set config没收到和descriptor没有关系吧

                                 如果HOST没有发,那倒可能有关系
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 

set config 没有进中断

                                 host 发set config的时候,没有进中断。原因查不出来。。。。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 

再贴上hub发的bushond log

   7.0  CTL    a3 00 00 00  01 00 04 00                                                                                GET STATUS               1.1.0(2)     
   7.0  DI     01 01 01 00                                                                                             ....                     1.2.0        
   7.0  CTL    23 01 10 00  01 00 00 00                                                                                CLEAR FEATURE            3.1.0        
   7.0  CTL    a3 00 00 00  01 00 04 00                                                                                GET STATUS               4.1.0(2)     
   7.0  DI     01 01 00 00                                                                                             ....                     4.2.0        
   7.0  CTL    23 03 04 00  01 00 00 00                                                                                SET FEATURE              6.1.0        
   7.0  CTL    a3 00 00 00  01 00 04 00                                                                                GET STATUS               7.1.0        
   7.0  DI     03 01 10 00                                                                                             ....                     7.2.0        
   7.0  CTL    23 01 14 00  01 00 00 00                                                                                CLEAR FEATURE            8.1.0        
   7.0  CTL    a3 00 00 00  01 00 04 00                                                                                GET STATUS               9.1.0(2)     
   7.0  DI     03 01 00 00                                                                                             ....                     9.2.0        
   7.0  CTL    23 03 04 00  01 00 00 00                                                                                SET FEATURE             11.1.0        
   7.0  CTL    a3 00 00 00  01 00 04 00                                                                                GET STATUS              12.1.0        
   7.0  DI     03 01 10 00                                                                                             ....                    12.2.0        
   7.0  CTL    23 01 14 00  01 00 00 00                                                                                CLEAR FEATURE           13.1.0        
   7.0  CTL    80 06 00 03  00 00 ff 00                                                                                GET DESCRIPTOR          14.1.0        
   7.0  DI     04 03 09 04                                                                                             ....                    14.2.0        
   7.0  CTL    80 06 03 03  09 04 ff 00                                                                                GET DESCRIPTOR          15.1.0        
   7.0  DI     1a 03 32 00  ff 00 ff 00  ff 00 36 00  39 00 32 00  35 00 47 00  50 00 01 00  43 00                     ..2.......6.9.2.        15.2.0        
   7.0  CTL    80 06 00 02  00 00 ff 00                                                                                GET DESCRIPTOR          16.1.0        
   7.0  DI     09 02 40 00  02 01 00 c0  32 09 04 00  00 02 03 00  00 00 09 21  10 01 00 01  22 26 00 07  05 81 03 40  ..@.....2.......        16.2.0        
               00 20 07 05  01 03 40 00  20 09 04 01  00 02 08 06  50 04 07 05  83 02 40 00  00 07 05 02  02 40 00 00  . ....@. .......        16.2.32       
   7.0  CTL    80 06 00 06  00 00 0a 00                                                                                GET DESCRIPTOR          17.1.0        
   7.0  CTL    a3 00 00 00  02 00 04 00                                                                                GET STATUS              18.1.0        
   7.0  DI     03 01 00 00                                                                                             ....                    18.2.0        
  21.0  CTL    80 06 00 01  00 00 12 00                                                                                GET DESCRIPTOR          19.1.0        
  21.0  DI     12 01 00 02  00 00 00 40  83 04 50 57  00 02 01 02  03 01                                               .......@..PW....        19.2.0        
  21.0  CTL    80 06 00 02  00 00 09 00                                                                                GET DESCRIPTOR          20.1.0        
  21.0  DI     09 02 40 00  02 01 00 c0  32                                                                            ..@.....2               20.2.0        
  21.0  CTL    80 06 00 02  00 00 40 00                                                                                GET DESCRIPTOR          21.1.0        
  21.0  DI     09 02 40 00  02 01 00 c0  32 09 04 00  00 02 03 00  00 00 09 21  10 01 00 01  22 26 00 07  05 81 03 40  ..@.....2.......        21.2.0        
               00 20 07 05  01 03 40 00  20 09 04 01  00 02 08 06  50 04 07 05  83 02 40 00  00 07 05 02  02 40 00 00  . ....@. .......        21.2.32       
  21.0  CTL    00 09 01 00  00 00 00 00                                                                                SET CONFIG              22.1.0        
   7.0  CTL    23 01 01 00  01 00 00 00                                                                                CLEAR FEATURE           23.1.0        
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 

楼主是否使用的是ST的USB库?

                                 你是如何判断没有收到中断?
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

8
 

to 香主

我在中断中打印,或者设断点都尝试了。
stm在发送完config descriptor后就没进中断了
奇怪的是第一次发送config descriptor后是正常的(响应hub的get congfig_descriptor)
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 

to 香主

补充:
stm在发送完config descriptor后(setup的state阶段完成后)
正常情况下,stm准备接收下一个setup,应该进入CTR中断,
但是跟踪发现没进CTR中断,而是SUSPEND中断。
为什么设备会挂起呢?
会不会是有个等待时间,等待host的set config超时导致SUSPEND?
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 

调试USB时不能随便设置断点

程序遇到断点时不会再响应PC端的请求,设备不响应主机的请求超过一段时间后,PC会中止USB通信,所以你的程序会进入SUSPEND中断。
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(中级)

11
 

LZ说说你的USB复合设备是从ST哪个USB DEMO改过来的?

                                 除了DESCRIPTOR你还改了些什么?
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

12
 

问题找到了

idProduct没改。
晕死了,把core都跟踪了个遍都没找到问题。。。。。
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

13
 
ls的还在吗?我刚刚也碰到了这个问题,
修改idProduct后好了,但是为什么要改呢?
此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表