[USB驱动]

usb复合设备CDC+AUDIO不正常

[复制链接]
3631|9
手机看帖
扫描二维码
随时随地手机跟帖
qinchxiong|  楼主 | 2019-7-29 09:28 | 显示全部楼层 |阅读模式
USB, dc, IO, CD, TE
本帖最后由 qinchxiong 于 2019-7-29 09:51 编辑

我现在在STM32 F7上做USB复合设备
1. stm32 复合设备USB CDC+USB audio , 自定义VID = 0x0483, PID = 0x5972
2. 烧录后第一次插入电脑usb,电脑设备管理器显示USB串口+黄色感叹号的STM USB AUDIO。 第一次插USB.jpg
C:\Documents and Settings\Administrator\桌面\USB总结\第一次插USB.jpg
3. 之后反复插拔USB,电脑设备管理器只显示USB串口。
第二次插USB.png
C:\Documents and Settings\Administrator\桌面\USB总结\第二次插USB.png
4. 描述符如下:
uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC]=
{
  0x12,                       /*bLength */
  USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
  0x00,                       /*bcdUSB */
  0x02,
  0x00,                       /*bDeviceClass*/
  0x00,                       /*bDeviceSubClass*/
  0x00,                       /*bDeviceProtocol*/
  USB_OTG_MAX_EP0_SIZE,      /*bMaxPacketSize*/
  LOBYTE(USBD_VID),           /*idVendor*/
  HIBYTE(USBD_VID),           /*idVendor*/
  LOBYTE(USBD_PID),           /*idVendor*/
  HIBYTE(USBD_PID),           /*idVendor*/
  0x00,                       /*bcdDevice rel. 2.00*/
  0x02,
  USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/
  USBD_IDX_PRODUCT_STR,       /*Index of product string*/
  USBD_IDX_SERIAL_STR,        /*Index of serial number string*/
  USBD_CFG_MAX_NUM            /*bNumConfigurations*/
} ; /* USB_DeviceDescriptor */

uint8_t usbd_audiocdc_CfgDesc[USB_AUDIOCDC_CONFIG_DESC_SIZ] =
{
  /*Configuration Descriptor*/
  0x09,   /* bLength: Configuration Descriptor size */
  USB_CONFIGURATION_DESCRIPTOR_TYPE,          /* bDescriptorType: Configuration */
  USB_AUDIOCDC_CONFIG_DESC_SIZ,                                  /* wTotalLength:no of returned bytes */
  0x00,
  0x04, //0x01,   /* bNumInterfaces: 2 interface */ //0x02
  0x01,   /* bConfigurationValue: Configuration value */
  0x00,   /* iConfiguration: Index of string descriptor describing the configuration */
  0xC0,   /* bmAttributes: self powered */
  0x32,   /* MaxPower 0 mA */
  
/******** /IAD descriptor *******/
  0x08, /* bLength */
  0x0B, /* bDescriptorType */
  0x00, /* bFirstInterface */
  0x02, /* bInterfaceCount */
  0x02, /* bFunctionClass */
  0x02, /* bFunctionSubClass */
  0x01, /* bFunctionProtocol */
  0x00, /* iFunction (Index of string descriptor describing this function) */

  /*Interface Descriptor */
  0x09,   /* bLength: Interface Descriptor size */
  USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
  /* Interface descriptor type */
  0x00,   /* bInterfaceNumber: Number of Interface */
  0x00,   /* bAlternateSetting: Alternate setting */
  0x01,   /* bNumEndpoints: One endpoints used */
  0x02, //0xFF,   /* bInterfaceClass: Communication Interface Class */        //0x02        
  0x02, //0x00,   /* bInterfaceSubClass: Abstract Control Model */         //0x02  
  0x01, //0x00,   /* bInterfaceProtocol: Common AT commands */        //0x01        
  0x00,   /* iInterface: */

  /*Header Functional Descriptor*/
  0x05,   /* bLength: Endpoint Descriptor size */
  0x24,   /* bDescriptorType: CS_INTERFACE */
  0x00,   /* bDescriptorSubtype: Header Func Desc */
  0x10,   /* bcdCDC: spec release number */
  0x01,
  
  /*Call Management Functional Descriptor*/
  0x05,   /* bFunctionLength */
  0x24,   /* bDescriptorType: CS_INTERFACE */
  0x01,   /* bDescriptorSubtype: Call Management Func Desc */
  0x00,   /* bmCapabilities: D0+D1 */
  0x01,   /* bDataInterface: 1 */
  
  /*ACM Functional Descriptor*/
  0x04,   /* bFunctionLength */
  0x24,   /* bDescriptorType: CS_INTERFACE */
  0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
  0x02,   /* bmCapabilities */
  
  /*Union Functional Descriptor*/
  0x05,   /* bFunctionLength */
  0x24,   /* bDescriptorType: CS_INTERFACE */
  0x06,   /* bDescriptorSubtype: Union func desc */
  0x00,   /* bMasterInterface: Communication class interface */
  0x01,   /* bSlaveInterface0: Data Class Interface */

  /*Endpoint 2 Descriptor*/
  0x07,                                                   /* bLength: Endpoint Descriptor size */
  USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
  0x82,                                          /* bEndpointAddress */
  0x03,                                                   /* bmAttributes: Interrupt */
  LOBYTE(CDC_CMD_PACKET_SZE),          /* wMaxPacketSize: */
  HIBYTE(CDC_CMD_PACKET_SZE),
#ifdef USE_USB_OTG_HS
  0x10,                                                   /* bInterval: */
#else
  0xFF,                                                   /* bInterval: */
#endif /* USE_USB_OTG_HS */
  
  /*Data class interface descriptor*/
  0x09,   /* bLength: Endpoint Descriptor size */
  USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
  0x01,   /* bInterfaceNumber: Number of Interface */
  0x00,   /* bAlternateSetting: Alternate setting */
  0x02,   /* bNumEndpoints: Two endpoints used */
  0x0A,   /* bInterfaceClass: CDC */
  0x00,   /* bInterfaceSubClass: */
  0x00,   /* bInterfaceProtocol: */
  0x00,   /* iInterface: */

  /*Endpoint OUT Descriptor*/
  0x07,   /* bLength: Endpoint Descriptor size */
  USB_ENDPOINT_DESCRIPTOR_TYPE,          /* bDescriptorType: Endpoint */
  0x01,                                                 /* bEndpointAddress */
  0x02,                                                          /* bmAttributes: Bulk */
  LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
  HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
  0x00,                                                          /* bInterval: ignore for Bulk transfer */
  
  /*Endpoint IN Descriptor*/
  0x07,   /* bLength: Endpoint Descriptor size */
  USB_ENDPOINT_DESCRIPTOR_TYPE,          /* bDescriptorType: Endpoint */
  0x81,                                                 /* bEndpointAddress */
  0x02,                                                          /* bmAttributes: Bulk */
  LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
  HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
  0x00,                                                           /* bInterval: ignore for Bulk transfer */

/******** /IAD descriptor *******/
  0x08, /* bLength */
  0x0B, /* bDescriptorType */
  0x02, /* bFirstInterface */
  0x02, /* bInterfaceCount */
  0x01, /* bFunctionClass */
  0x00, /* bFunctionSubClass */
  0x00, /* bFunctionProtocol */
  0x00, /* iFunction (Index of string descriptor describing this function) */

/*************************************AUDIO**************************************************/
/*************************************AUDIO**************************************************/
  
  /* USB Speaker Standard interface descriptor */
  0x09,                          /* bLength */
  USB_INTERFACE_DESCRIPTOR_TYPE,                  /* bDescriptorType */
  0x02,                                                           /* bInterfaceNumber */
  0x00,                                                           /* bAlternateSetting */
  0x00,                                                           /* bNumEndpoints */
  USB_DEVICE_CLASS_AUDIO,                          /* bInterfaceClass */
  AUDIO_SUBCLASS_AUDIOCONTROL,                  /* bInterfaceSubClass */
  AUDIO_PROTOCOL_UNDEFINED,                   /* bInterfaceProtocol */
  0x00,                                                           /* iInterface */
  /* 09 byte*/
  
  /* USB Speaker Class-specific AC Interface Descriptor */
  0x09,                          /* bLength */
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */
  AUDIO_CONTROL_HEADER,                           /* bDescriptorSubtype */
  0x00,            /* 1.00 */                          /* bcdADC */
  0x01,
  0x27,                                                           /* wTotalLength = 39*/
  0x00,
  0x01,                                                           /* bInCollection */
  0x01,                                                           /* baInterfaceNr */
  /* 09 byte*/
  
  /* USB Speaker Input Terminal Descriptor */
  0x0C,          /* bLength */
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */
  AUDIO_CONTROL_INPUT_TERMINAL,           /* bDescriptorSubtype */
  0x01,                                                           /* bTerminalID */
  0x01,                                                           /* wTerminalType AUDIO_TERMINAL_USB_STREAMING   0x0101 */
  0x01,
  0x00,                                                           /* bAssocTerminal */
  0x01,                                                           /* bNrChannels */
  0x00,                                                           /* wChannelConfig 0x0000        Mono */
  0x00,
  0x00,                                                           /* iChannelNames */
  0x00,                                                           /* iTerminal */
  /* 12 byte*/
  
  /* USB Speaker Audio Feature Unit Descriptor */
  0x09,                                                           /* bLength */
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */
  AUDIO_CONTROL_FEATURE_UNIT,                  /* bDescriptorSubtype */
  AUDIO_OUT_STREAMING_CTRL,                   /* bUnitID */
  0x01,                                                           /* bSourceID */
  0x01,                                                           /* bControlSize */
  AUDIO_CONTROL_MUTE,                                  /* bmaControls(0) */
  0x00,                                                           /* bmaControls(1) */
  0x00,                                                           /* iTerminal */
  /* 09 byte*/
  
  /*USB Speaker Output Terminal Descriptor */
  0x09,    /* bLength */
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */
  AUDIO_CONTROL_OUTPUT_TERMINAL,                  /* bDescriptorSubtype */
  0x03,                                                           /* bTerminalID */
  0x01,                                                           /* wTerminalType        0x0301*/
  0x03,
  0x00,                                                           /* bAssocTerminal */
  0x02,                                                           /* bSourceID */
  0x00,                                                           /* iTerminal */
  /* 09 byte*/
  
  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
  /* Interface 1, Alternate Setting 0                                                                                        */
  0x09,        /* bLength */
  USB_INTERFACE_DESCRIPTOR_TYPE,                  /* bDescriptorType */
  0x03,                                                           /* bInterfaceNumber */
  0x00,                                                           /* bAlternateSetting */
  0x00,                                                           /* bNumEndpoints */
  USB_DEVICE_CLASS_AUDIO,                          /* bInterfaceClass */
  AUDIO_SUBCLASS_AUDIOSTREAMING,                  /* bInterfaceSubClass */
  AUDIO_PROTOCOL_UNDEFINED,                   /* bInterfaceProtocol */
  0x00,                                                           /* iInterface */
  /* 09 byte*/
  
  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational */
  /* Interface 1, Alternate Setting 1                                                                                  */
  0x09,        /* bLength */
  USB_INTERFACE_DESCRIPTOR_TYPE,                  /* bDescriptorType */
  0x03,                                                           /* bInterfaceNumber */
  0x01,                                                           /* bAlternateSetting */
  0x01,                                                           /* bNumEndpoints */
  USB_DEVICE_CLASS_AUDIO,                          /* bInterfaceClass */
  AUDIO_SUBCLASS_AUDIOSTREAMING,                  /* bInterfaceSubClass */
  AUDIO_PROTOCOL_UNDEFINED,                   /* bInterfaceProtocol */
  0x00,                                                           /* iInterface */
  /* 09 byte*/
  
  /* USB Speaker Audio Streaming Interface Descriptor */
  0x07,        /* bLength */
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */
  AUDIO_STREAMING_GENERAL,                          /* bDescriptorSubtype */
  0x01,                                                           /* bTerminalLink */
  0x01,                                                           /* bDelay */
  0x01,                                                           /* wFormatTag AUDIO_FORMAT_PCM  0x0001*/
  0x00,
  /* 07 byte*/
  
  /* USB Speaker Audio Type III Format Interface Descriptor */
  0x0B,                                                           /* bLength */
  AUDIO_INTERFACE_DESCRIPTOR_TYPE,          /* bDescriptorType */
  AUDIO_STREAMING_FORMAT_TYPE,                  /* bDescriptorSubtype */
  AUDIO_FORMAT_TYPE_III,                                  /* bFormatType */
  0x02,                                                           /* bNrChannels */
  0x02,                                                           /* bSubFrameSize :  2 Bytes per frame (16bits) */
  16,                                                                  /* bBitResolution (16-bits per sample) */
  0x01,                                                           /* bSamFreqType only one frequency supported */
  SAMPLE_FREQ(USBD_AUDIO_FREQ),           /* Audio sampling frequency coded on 3 bytes */
  /* 11 byte*/
  
  /* Endpoint 1 - Standard Descriptor */
  0x09,          /* bLength */
  USB_ENDPOINT_DESCRIPTOR_TYPE,           /* bDescriptorType */
  0x02,                                           /* bEndpointAddress 1 out endpoint*/
  USB_ENDPOINT_TYPE_ISOCHRONOUS,                  /* bmAttributes */
  AUDIO_PACKET_SZE(USBD_AUDIO_FREQ),          /* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
  0x01,                                                           /* bInterval */
  0x00,                                                           /* bRefresh */
  0x00,                                                           /* bSynchAddress */
  /* 09 byte*/
  
  /* Endpoint - Audio Streaming Descriptor*/
  0x07,        /* bLength */
  AUDIO_ENDPOINT_DESCRIPTOR_TYPE,          /* bDescriptorType */
  0x02,                          /* bDescriptor */
  0x00,                                                           /* bmAttributes */
  0x00,                                                           /* bLockDelayUnits */
  0x00,                                                           /* wLockDelay */
  0x00,
  /* 07 byte*/
}

5. stm usb audio 显示感叹号是因为配置描述符问题吗还是电脑哪里需要设置?为什么插入usb一次之后再插入不再显示stm usb audio ?

期待高手指点!!!

使用特权

评论回复

相关帖子

394645065| | 2019-7-29 10:29 | 显示全部楼层
有偿的话,我帮你搞定

使用特权

评论回复
xuqingli123| | 2019-8-7 09:27 | 显示全部楼层
这种问题感觉还是描述符没配置好

使用特权

评论回复
wuheng13| | 2019-8-12 10:29 | 显示全部楼层
楼主问题解决了吗,类似的问题,可否分享下解决办法,谢谢

使用特权

评论回复
peteryf| | 2019-10-17 16:39 | 显示全部楼层
394645065 发表于 2019-7-29 10:29
有偿的话,我帮你搞定

你好,我需要,450929771

使用特权

评论回复
peteryf| | 2019-10-17 16:40 | 显示全部楼层
394645065 发表于 2019-7-29 10:29
有偿的话,我帮你搞定

你好,我需要,450929771

使用特权

评论回复
lipc20| | 2020-11-9 21:24 | 显示全部楼层
请问怎么样啦,正在学习这部分,有解决方法吗?有偿可以,谢谢

使用特权

评论回复
随风而去吧| | 2021-1-10 16:15 | 显示全部楼层
很棒棒哦,值得学习

使用特权

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

本版积分规则

12

主题

41

帖子

0

粉丝