基于USB AUDIO2.0写得描述符,不能正常枚举,求大佬帮忙看下

[复制链接]
 楼主| xuqingli123 发表于 2019-4-16 08:50 | 显示全部楼层 |阅读模式
IO, USB, TE, des, ip
本帖最后由 xuqingli123 于 2019-11-12 13:10 编辑

static uint8_t usbd_audio_CfgDesc[AUDIO_CONFIG_DESC_SIZE] =
{
  0x09,                                 /* bLength */
  0x02,                                 /* bDescriptorType */
  LOBYTE(AUDIO_CONFIG_DESC_SIZE),       /* wTotalLength */
  HIBYTE(AUDIO_CONFIG_DESC_SIZE),      
  0x03,                                 /* bNumInterfaces */
  0x01,                                 /* bConfigurationValue */
  0x00,                                 /* iConfiguration */
  0xC0,                                 /* bmAttributes BUS Powered*/
  0x32,                                 /* bMaxPower = 100 mA*/
  /* 09 byte*/

        /* Standard Interface Association Descriptor */
  0x08,
  0x0B,
  0x00,
  0x03,
  0x01,
  0x00,
  0x20,
  0x00,
  /* 08 byte */

  /* Standard AC Interface Descriptor */
  9,                                    /* bLength */
  0x04,                                 /* bDescriptorType */
  0x00,                                 /* bInterfaceNumber */
  0x00,                                 /* bAlternateSetting */
  0x00,                                 /* bNumEndpoints */
  0x01,                                 /* bInterfaceClass */
  0x01,                                 /* bInterfaceSubClass */
  0x20,                                 /* bInterfaceProtocol */
  0x00,                                 /* iInterface */
  /* 09 byte*/

  /* Class-specific AC Interface Descriptor */
  9,                                    /* bLength */
  0x24,                                 /* bDescriptorType */
  0x01,                                 /* bDescriptorSubtype */
  0x00,                                 /* bcdADC */
  0x02,                                 /* 2.00 */
  0x0b,                                 /* bCategory */
  0x6F,                                 /* wTotalLength */
  0x00,
  0x00,                                 /* bmControls */
  /* 09 byte*/


  /* USB Speaker Clock Source Descriptor */
  0x08,                                 /* bLength */
  0x24,                                 /* bDescriptorType */
  0x0A,                                 /* bDescriptorSubtype */
  0x04,                                 /* bClockID */
  0x03,                                 /* bmAttributes */
  0x07,                                 /* bmControls TODO */
  0x00,                                 /* bAssocTerminal */
  0x00,                                 /* iClockSource */
  /* 08 byte*/
       

  /* USB Speaker Input Terminal Descriptor */
  0x11,                                 /* bLength */
  0x24,                                 /* bDescriptorType */
  0x02,                                 /* bDescriptorSubtype */
  0x01,                                 /* bTerminalID */
  0x01,                                 /* wTerminalType AUDIO_TERMINAL_USB_STREAMING   0x0101 */
  0x01,
  0x00,                                 /* bAssocTerminal */
  0x04,                                 /* bCSourceID*/
  0x02,                                 /* bNrChannels */
  0x03,                                 /* wChannelConfig 0x00000003  Stereo */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* iChannelNames */
  0x00,                                 /* bmControls */
  0x00,
  0x00,                                 /* iTerminal */
  /* 17 byte*/

  /* USB Speaker Audio Feature Unit Descriptor */
  0x12,                                 /* bLength */
  0x24,                                 /* bDescriptorType */
  0x06,                                 /* bDescriptorSubtype */
  0x02,                                 /* bUnitID */
  0x01,                                 /* bSourceID */
  AUDIO_20_CTL_MUTE(CONTROL_BITMAP_PROG)/* bmaControls(0) */
  | AUDIO_20_CTL_VOLUME(CONTROL_BITMAP_PROG),
  0x00,
  0x00,
  0x00,
  0x00,                                 /* bmaControls(1) */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* bmaControls(2) */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* iFeature */
  /* 18 byte*/

  /*USB Speaker Output Terminal Descriptor */
  0x0C,                                                   /* bLength */
  0x24,                                 /* bDescriptorType */
  0x03,                                 /* bDescriptorSubtype */
  0x03,                                 /* bTerminalID */
  0x01,                                 /* wTerminalType  0x0301: Speaker, 0x0302: Headphone*/
  0x03,
  0x00,                                 /* bAssocTerminal */
  0x01,                                 /* bSourceID */
  0x04,                                 /* bCSourceID */
  0x00,                                 /* bmControls */
  0x00,
  0x00,                                 /* iTerminal */
  /* 12 byte*/

        /* USB Microphone Input Terminal Descriptor */
  0x11,                                 /* bLength */
  0x24,                                 /* bDescriptorType */
  0x02,                                 /* bDescriptorSubtype */
  0x05,                                 /* bTerminalID */
  0x01,                                 /* wTerminalType AUDIO_TERMINAL_USB_STREAMING   0x0201 */
  0x02,
  0x00,                                 /* bAssocTerminal */
  0x04,                                 /* bCSourceID*/
  0x02,                                 /* bNrChannels */
  0x03,                                 /* wChannelConfig 0x00000003  Stereo */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* iChannelNames */
  0x00,                                 /* bmControls */
  0x00,
  0x00,                                 /* iTerminal */
  /* 17 byte*/

  /* USB Microphone Audio Feature Unit Descriptor */
  0x12,                                 /* bLength */
  0x24,                                 /* bDescriptorType */
  0x06,                                 /* bDescriptorSubtype */
  0x06,                                 /* bUnitID */
  0x05,                                 /* bSourceID */
  AUDIO_20_CTL_MUTE(CONTROL_BITMAP_PROG)/* bmaControls(0) */
  | AUDIO_20_CTL_VOLUME(CONTROL_BITMAP_PROG),
  0x00,
  0x00,
  0x00,
  0x00,                                 /* bmaControls(1) */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* bmaControls(2) */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* iFeature */
  /* 18 byte*/

  /*USB Microphone Output Terminal Descriptor */
  0x0C,                                                    /* bLength */
  0x24,                                 /* bDescriptorType */
  0x03,                                 /* bDescriptorSubtype */
  0x07,                                 /* bTerminalID */
  0x01,                                 /* wTerminalType  0x0101*/
  0x01,
  0x00,                                 /* bAssocTerminal */
  0x05,                                 /* bSourceID */
  0x04,                                 /* bCSourceID */
  0x00,                                 /* bmControls */
  0x00,
  0x00,                                 /* iTerminal */
  /* 12 byte*/
       
  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwidth */
  /* Interface 1, Alternate Setting 0                                              */
  9,                                                      /* bLength */
  0x04,                                 /* bDescriptorType */
  0x01,                                 /* bInterfaceNumber */
  0x00,                                 /* bAlternateSetting */
  0x00,                                 /* bNumEndpoints */
  0x01,                                 /* bInterfaceClass */
  0x02,                                 /* bInterfaceSubClass */
  0x20,                                 /* bInterfaceProtocol */
  0x00,                                 /* iInterface */
  /* 09 byte*/

  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational */
  /* Interface 1, Alternate Setting 1                                           */
  9,                                                      /* bLength */
  0x04,                                 /* bDescriptorType */
  0x01,                                 /* bInterfaceNumber */
  0x01,                                 /* bAlternateSetting */
  0x01,                                 /* bNumEndpoints */
  0x01,                                 /* bInterfaceClass */
  0x02,                                 /* bInterfaceSubClass */
  0x20,                                 /* bInterfaceProtocol */
  0x00,                                 /* iInterface */
  /* 09 byte*/

  /* USB HeadSet Audio Streaming Interface Descriptor */
  0x10,                                 /* bLength */
  0x24,                                 /* bDescriptorType */
  0x01,                                 /* bDescriptorSubtype */
  0x01,                                 /* 0x01: bTerminalLink */
  0x00,                                 /* bmControls */
  0x01,                                 /* bFormatType */
  0x01,                                 /* bmFormats PCM */
  0x00,
  0x00,
  0x00,
  0x02,                                 /* bNrChannels */
  0x03,                                 /* bmChannelConfig */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* iChannelNames */
  /* 16 byte*/

  /* USB Speaker Audio Type I Format Interface Descriptor */
  0x06,                                 /* bLength */
  0x24,                                 /* bDescriptorType */
  0x02,                                 /* bDescriptorSubtype */
  0x01,                                 /* bFormatType */
  3,                                    /* bSubslotSize */
  24,                                   /* bBitResolution */
  /* 6 byte*/

  /* Endpoint 1 - Standard Descriptor */
  0x07,                                 /* bLength */
  0x05,                                 /* bDescriptorType */
  0x03,                                 /* bEndpointAddress 3 out endpoint for Audio */
  0x0d,                                 /* bmAttributes */
  AUDIO_PACKET_SZE(384000),    /* XXXX wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
  0x01,                                 /* bInterval */
  /* 07 byte*/

  /* Endpoint - Audio Streaming Descriptor*/
  0x08,                                 /* bLength */
  0x25,                                 /* bDescriptorType */
  0x01,                                 /* bDescriptor */
  0x00,                                 /* bmAttributes */
  0x00,                                 /* bmControls */
  0x00,                                 /* bLockDelayUnits */
  0x00,                                 /* wLockDelay */
  0x00,
  /* 08 byte*/
       
        /* USB Microphone Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
  /* Interface 2, Alternate Setting 0                                             */
        0x09,                                 /* bLength */
        0x04,                                 /* bDescriptorType */
        0x02,                                 /* bInterfaceNumber */
        0x00,                                 /* bAlternateSetting */
        0x00,                                 /* bNumEndpoints */
        0x01,                                 /* bInterfaceClass */
        0x02,                                 /* bInterfaceSubClass */
        0x20,                                 /* bInterfaceProtocol */
        0x00,                                 /* iInterface */
        /* 09 byte*/

  /* USB Microphone Standard AS Interface Descriptor - Audio Streaming Operational */
  /* Interface 2, Alternate Setting 1                                           */
        0x09,                                  /* bLength */
        0x04,                                  /* bDescriptorType */
        0x02,                                  /* bInterfaceNumber */
        0x01,                                  /* bAlternateSetting */
        0x01,                                  /* bNumEndpoints */
        0x01,                                  /* bInterfaceClass */
        0x02,                                  /* bInterfaceSubClass */
        0x20,                                  /* bInterfaceProtocol */
        0x00,                                  /* iInterface */
        /* 09 byte*/
       
        /* USB Microphone Audio Streaming Interface Descriptor */
  0x10,                                 /* bLength */
  0x24,                                 /* bDescriptorType */
  0x01,                                 /* bDescriptorSubtype */
  0x07,                                 /* 0x07: bTerminalLink */
  0x00,                                 /* bmControls */
  0x01,                                 /* bFormatType */
  0x01,                                 /* bmFormats PCM */
  0x00,
  0x00,
  0x00,
  0x02,                                 /* bNrChannels */
  0x03,                                 /* bmChannelConfig */
  0x00,
  0x00,
  0x00,
  0x00,                                 /* iChannelNames */
  /* 16 byte*/
       
        /* USB Microphone Audio Type I Format Interface Descriptor */
  0x06,                                 /* bLength */
  0x24,                                 /* bDescriptorType */
  0x02,                                 /* bDescriptorSubtype */
  0x01,                                 /* bFormatType */
  3,                                    /* bSubslotSize */
  24,                                   /* bBitResolution */
  /* 6 byte*/
       
        /* Endpoint 1 - Standard Descriptor */
  0x07,                                 /* bLength */
  0x05,                                 /* bDescriptorType */
  0x81,                                 /* bEndpointAddress 3 out endpoint for Audio */
  0x0d,                                 /* bmAttributes */
  AUDIO_PACKET_SZE(384000),             /* XXXX wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
  0x01,                                 /* bInterval */
  /* 07 byte*/

  /* Endpoint - Audio Streaming Descriptor*/
  0x08,                                 /* bLength */
  0x25,                                 /* bDescriptorType */
  0x01,                                 /* bDescriptor */
  0x00,                                 /* bmAttributes */
  0x00,                                 /* bmControls */
  0x00,                                 /* bLockDelayUnits */
  0x00,                                 /* wLockDelay */
  0x00,
  /* 08 byte*/
} ;

/**
  * @}
  */
不知道描述符对不对,刚接触USB AUDIO2.0,大佬们帮忙看下。
 楼主| xuqingli123 发表于 2019-4-18 09:28 | 显示全部楼层
自己顶一下
 楼主| xuqingli123 发表于 2019-4-18 09:30 | 显示全部楼层
描述符是枚举扬声器和麦克风的,但是不能正常枚举出来,专门枚举扬声器的是可以枚举出来的,不知道改过之后是不是哪地方写错了还是少些什么了?
 楼主| xuqingli123 发表于 2019-4-18 09:53 | 显示全部楼层
@jinxuan97 大佬帮忙看下
 楼主| xuqingli123 发表于 2019-4-18 10:49 | 显示全部楼层
现在把描述符分开枚举,扬声器和麦克风都是可以出来的,但是想把他们综合起来,就不能正常枚举,有个疑惑,是不是时钟描述符要写两个,就是扬声器一个时钟描述符,麦克风一个时钟描述符?还是有其他的问题?
jinxuan97 发表于 2019-4-18 11:31 | 显示全部楼层
jinxuan97 发表于 2019-4-18 11:32 | 显示全部楼层
Table A-7: Audio Function Category Codes
HEADSET          0x04
AUDIO/VIDEO   0x0B
 楼主| xuqingli123 发表于 2019-4-18 12:59 | 显示全部楼层
本帖最后由 xuqingli123 于 2019-4-18 13:12 编辑
jinxuan97 发表于 2019-4-18 11:32
Table A-7: Audio Function Category Codes
HEADSET          0x04
AUDIO/VIDEO   0x0B

这个不是应该配置0X0B吗?audio,改成0X04还是不对, 耳机是0X04,我现在想要枚举出来扬声器和麦克风都有的,所以这个配置的是0X0B。
 楼主| xuqingli123 发表于 2019-4-18 13:06 | 显示全部楼层
不好意思,这个比较冷门,很少能找到这方面的资料,在论坛里面就看到过你比较熟悉这方面,所以每次都@你,不好意思,@jinxuan97
jinxuan97 发表于 2019-4-18 14:46 | 显示全部楼层
xuqingli123 发表于 2019-4-18 13:06
不好意思,这个比较冷门,很少能找到这方面的资料,在论坛里面就看到过你比较熟悉这方面,所以每次都@你, ...

没问题啊!
jinxuan97 发表于 2019-4-18 14:47 | 显示全部楼层
你的Device Descriptor是怎样的?

--------------------------------------------------------------------------------
Device Descriptor:
--------------------------------------------------------------------------------
BYTE  bLength             0x12
BYTE  bDescriptorType     0x01
WORD  bcdUSB              0x0200
BYTE  bDeviceClass        0xEF
BYTE  bDeviceSubClass     0x02
BYTE  bDeviceProtocol     0x01
BYTE  bMaxPacketSize0     0x40
WORD  idVendor            0x045E
WORD  idProduct           0xFFFF
WORD  bcdDevice           0x0100
BYTE  iManufacturer       0x01
WORD  iProduct            0x02
WORD  iSerialNumber       0x03
BYTE  bNumConfigurations  0x01
 楼主| xuqingli123 发表于 2019-4-18 15:14 | 显示全部楼层
jinxuan97 发表于 2019-4-18 14:47
你的Device Descriptor是怎样的?

-------------------------------------------------------------------- ...

__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
  {
    0x12,                       /*bLength */
    0x01,                       /*bDescriptorType*/
    0x00,                       /*bcdUSB */
    0x02,
    0x00,                       /*bDeviceClass*/
    0x00,                       /*bDeviceSubClass*/
    0x00,                       /*bDeviceProtocol*/
    64,                         /*bMaxPacketSize*/
    LOBYTE(USBD_VID),           /*idVendor*/
    HIBYTE(USBD_VID),           /*idVendor*/
    LOBYTE(USBD_PID),           /*idVendor*/
    HIBYTE(USBD_PID),           /*idVendor*/
    0x00,                       /*bcdDevice rel. 2.00*/
    0x02,
    0x01,                       /*Index of manufacturer  string*/
    0x02,                       /*Index of product string*/
    0x03,                       /*Index of serial number string*/
    1                           /*bNumConfigurations*/
  } ; /* USB_DeviceDescriptor */
 楼主| xuqingli123 发表于 2019-4-18 15:16 | 显示全部楼层
本帖最后由 xuqingli123 于 2019-4-18 15:20 编辑
jinxuan97 发表于 2019-4-18 14:47
你的Device Descriptor是怎样的?

-------------------------------------------------------------------- ...

改成你上面这样的了  还是不行,是不是从扬声器改成扬声器和麦克风都有的,代码里面请求也需要修改一下吗?
eydj2008 发表于 2019-4-19 08:02 | 显示全部楼层
直接用CUBEMX的例子就可以 注意堆的分配
 楼主| xuqingli123 发表于 2019-4-19 08:31 | 显示全部楼层
eydj2008 发表于 2019-4-19 08:02
直接用CUBEMX的例子就可以 注意堆的分配

CUBXMX有USB AUDIO2.0吗?我以前配过,官方带的都是USB AUDIO1.0的。
 楼主| xuqingli123 发表于 2019-4-19 08:32 | 显示全部楼层
eydj2008 发表于 2019-4-19 08:02
直接用CUBEMX的例子就可以 注意堆的分配

如果能直接用CUBEMX配置,那就很方便了,但是找不到USB AUDIO2.0的库,
 楼主| xuqingli123 发表于 2019-4-19 09:46 | 显示全部楼层
自己顶一下,希望做过的大佬们,帮助一下
eydj2008 发表于 2019-4-19 13:52 | 显示全部楼层
xuqingli123 发表于 2019-4-19 08:32
如果能直接用CUBEMX配置,那就很方便了,但是找不到USB AUDIO2.0的库,

你说的是USB 2.0 吧 ,High Speed - 480 Mb/s   
芯片支持这么快的速度才行.
 楼主| xuqingli123 发表于 2019-4-19 16:14 | 显示全部楼层
本帖最后由 xuqingli123 于 2019-4-19 16:40 编辑
eydj2008 发表于 2019-4-19 13:52
你说的是USB 2.0 吧 ,High Speed - 480 Mb/s   
芯片支持这么快的速度才行.

不是,是USB AUDIO2.0,是USB音频协议,和USB2.0是不一样的。
eydj2008 发表于 2019-4-19 17:28 | 显示全部楼层
xuqingli123 发表于 2019-4-19 16:14
不是,是USB AUDIO2.0,是USB音频协议,和USB2.0是不一样的。

USB Audio Class 2 standard (2009)
USB Audio Class 2 additionally supports 32 bit and all common sample rates > 96 kHz
Class 2 uses High Speed (480 MHz). This requires USB 2 or 3.
As the data rate of High Speed is 40 X Full speed, recording a 60 channel using 24 bits at 96 kHz (132 Mbit/s) is not a problem.
Using High Speed USB for playback there are no limits in resolution.
It is downwards compatible with class 1.

From mid-2010 on USB audio class 2 drivers are available in OSX 10.6.4 and Linux.
Both support sample rates up to 384 kHz.
Companies like Thesycon or Centrance have developed a USB Class 2 Audio driver for Windows.
This was necessary because Microsoft simply didn’t support UAC2.
In April 2017, an update of Win10 finally brought native mode drivers.
If you use older versions of Win, you still need a third party driver.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

174

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

29

主题

174

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部