Share via

USB microphone with 24bit/sample - Descriptor seems to be wrong

Anonymous
2024-03-11T20:50:18+00:00

Hi, I'm currently developing a USB microphone-like device that is supposed to support:

  • fs = 48kHz
  • Up to 6 channels
  • 24bit/sample

The USB framework that comes with the hardware supports USB Audio Class 1.0 at full-speed profile. I was able to make it work with 2 channels @ 16 bits/sample. However, it fails to operate for anything above that since the Windows USB driver doesn't seem to recognize the settings specified in the USB descriptor.

I've pasted the full USB description of my device below where I set bSubframeSize = 0x03 and bBitResolution = 0x18 to work on 24bit/sample. The USB device isn't working with these changes as my recording software fails to record with it. When I set those to 16 bit/sample (bSubframeSize = 0x02 and bBitResolution = 0x10) it works without issues.

I hope anybody can advise me on that.

Information for device Bose Mathers (VID=0x05A7 PID=0xBC61): 

------------------------------ 

Connection Information: 

------------------------------ 

Device current bus speed: FullSpeed 

Device supports USB 1.1 specification 

Device address: 0x0015 

Current configuration value: 0x01 

Number of open pipes: 3 

------------------------------ 

Device Descriptor: 

------------------------------ 

0x12	bLength 

0x01	bDescriptorType 

0x0200	bcdUSB 

0x00	bDeviceClass       

0x00	bDeviceSubClass    

0x00	bDeviceProtocol    

0x40	bMaxPacketSize0   (64 bytes) 

0x05A7	idVendor 

0xBC61	idProduct 

0x3050	bcdDevice 

0x01	iManufacturer   "Bose Corporation" 

0x02	iProduct        "Bose Mathers" 

0x03	iSerialNumber   "P329980000388741007B010" 

0x01	bNumConfigurations 

------------------------- 

Configuration Descriptor: 

------------------------- 

0x09	bLength 

0x02	bDescriptorType 

0x00A7	wTotalLength   (167 bytes) 

0x04	bNumInterfaces 

0x01	bConfigurationValue 

0x00	iConfiguration 

0xC0	bmAttributes   (Self-powered Device) 

0x00	bMaxPower      (0 mA) 

Interface Descriptor: 

------------------------------ 

0x09	bLength 

0x04	bDescriptorType 

0x00	bInterfaceNumber 

0x00	bAlternateSetting 

0x00	bNumEndPoints 

0x01	bInterfaceClass      (Audio Device Class) 

0x01	bInterfaceSubClass   (Audio Control Interface) 

0x00	bInterfaceProtocol   (Audio Protocol undefined) 

0x00	iInterface 

AC Interface Header Descriptor: 

------------------------------ 

0x09	bLength 

0x24	bDescriptorType 

0x01	bDescriptorSubtype 

0x0100	bcdADC 

0x0028	wTotalLength   (40 bytes) 

0x01	bInCollection 

0x01	baInterfaceNr(1) 

AC Input Terminal Descriptor: 

------------------------------ 

0x0C	bLength 

0x24	bDescriptorType 

0x02	bDescriptorSubtype 

0x07	bTerminalID 

0x0201	wTerminalType   (Microphone) 

0x00	bAssocTerminal 

0x02	bNrChannels   (2 channels) 

0x0003	wChannelConfig 

0x00	iChannelNames 

0x00	iTerminal 

AC Feature Unit Descriptor: 

------------------------------ 

0x0A	bLength 

0x24	bDescriptorType 

0x06	bDescriptorSubtype 

0x08	bUnitID 

0x07	bSourceID 

0x01	bControlSize 

bmaControls:  

 0x02	Channel(0) - Volume 

 0x00	Channel(1) 

 0x00	Channel(2) 

0x00	iFeature 

AC Output Terminal Descriptor: 

------------------------------ 

0x09	bLength 

0x24	bDescriptorType 

0x03	bDescriptorSubtype 

0x09	bTerminalID 

0x0101	wTerminalType   (USB Streaming) 

0x00	bAssocTerminal 

0x08	bSourceID 

0x00	iTerminal 

Interface Descriptor: 

------------------------------ 

0x09	bLength 

0x04	bDescriptorType 

0x01	bInterfaceNumber 

0x00	bAlternateSetting 

0x00	bNumEndPoints 

0x01	bInterfaceClass      (Audio Device Class) 

0x02	bInterfaceSubClass   (Audio Streaming Interface) 

0x00	bInterfaceProtocol   (Audio Protocol undefined) 

0x00	iInterface 

Interface Descriptor: 

------------------------------ 

0x09	bLength 

0x04	bDescriptorType 

0x01	bInterfaceNumber 

0x01	bAlternateSetting 

0x01	bNumEndPoints 

0x01	bInterfaceClass      (Audio Device Class) 

0x02	bInterfaceSubClass   (Audio Streaming Interface) 

0x00	bInterfaceProtocol   (Audio Protocol undefined) 

0x00	iInterface 

AS Interface Descriptor: 

------------------------------ 

0x07	bLength 

0x24	bDescriptorType 

0x01	bDescriptorSubtype 

0x09	bTerminalLink 

0x00	bDelay 

0x0001	wFormatTag   (PCM) 

AS Format Type 1 Descriptor: 

------------------------------ 

0x0B	bLength 

0x24	bDescriptorType 

0x02	bDescriptorSubtype 

0x01	bFormatType   (FORMAT_TYPE_1) 

0x02	bNrChannels   (2 channels) 

0x03	bSubframeSize 

0x18	bBitResolution   (24 bits per sample) 

0x01	bSamFreqType   (Discrete sampling frequencies) 

0x00BB80 	tSamFreq(1)   (48000 Hz) 

Endpoint Descriptor (Audio/MIDI 1.0): 

------------------------------ 

0x09	bLength 

0x05	bDescriptorType 

0x81	bEndpointAddress  (IN endpoint 1) 

0x01	bmAttributes      (Transfer: Isochronous / Synch: None / Usage: Data) 

0x0120	wMaxPacketSize    (1 x 288 bytes) 

0x01	bInterval         (1 frames) 

0x00	bRefresh 

0x00	bSynchAddress 

AS Isochronous Data Endpoint Descriptor: 

------------------------------ 

0x07	bLength 

0x25	bDescriptorType 

0x01	bDescriptorSubtype 

0x00	bmAttributes 

0x02	bLockDelayUnits   (decoded PCM samples) 

0x0000	wLockDelay 

Interface Descriptor: 

------------------------------ 

0x09	bLength 

0x04	bDescriptorType 

0x02	bInterfaceNumber 

0x00	bAlternateSetting 

0x02	bNumEndPoints 

0x03	bInterfaceClass      (Human Interface Device Class) 

0x00	bInterfaceSubClass    

0x00	bInterfaceProtocol    

0x00	iInterface 

HID Descriptor: 

------------------------------ 

0x09	bLength 

0x21	bDescriptorType 

0x0111	bcdHID 

0x99	bCountryCode 

0x01	bNumDescriptors 

0x22	bDescriptorType   (Report descriptor) 

0x007E	bDescriptorLength 

Endpoint Descriptor: 

------------------------------ 

0x07	bLength 

0x05	bDescriptorType 

0x01	bEndpointAddress  (OUT endpoint 1) 

0x03	bmAttributes      (Transfer: Interrupt / Synch: None / Usage: Data) 

0x0040	wMaxPacketSize    (1 x 64 bytes) 

0x01	bInterval         (1 frames) 

Endpoint Descriptor: 

------------------------------ 

0x07	bLength 

0x05	bDescriptorType 

0x82	bEndpointAddress  (IN endpoint 2) 

0x03	bmAttributes      (Transfer: Interrupt / Synch: None / Usage: Data) 

0x0040	wMaxPacketSize    (1 x 64 bytes) 

0x01	bInterval         (1 frames) 

Interface Descriptor: 

------------------------------ 

0x09	bLength 

0x04	bDescriptorType 

0x03	bInterfaceNumber 

0x00	bAlternateSetting 

0x01	bNumEndPoints 

0x03	bInterfaceClass      (Human Interface Device Class) 

0x00	bInterfaceSubClass    

0x00	bInterfaceProtocol    

0x00	iInterface 

HID Descriptor: 

------------------------------ 

0x09	bLength 

0x21	bDescriptorType 

0x0111	bcdHID 

0x00	bCountryCode 

0x01	bNumDescriptors 

0x22	bDescriptorType   (Report descriptor) 

0x00B0	bDescriptorLength 

Endpoint Descriptor: 

------------------------------ 

0x07	bLength 

0x05	bDescriptorType 

0x83	bEndpointAddress  (IN endpoint 3) 

0x03	bmAttributes      (Transfer: Interrupt / Synch: None / Usage: Data) 

0x0040	wMaxPacketSize    (1 x 64 bytes) 

0x01	bInterval         (1 frames) 

Microsoft OS Descriptor is not available. Error code: 0x0000001F 

-------------------------------- 

String Descriptor Table 

-------------------------------- 

Index  LANGID  String 

0x00   0x0000  0x0409  

0x01   0x0409  "Bose Corporation" 

0x02   0x0409  "Bose Mathers" 

0x03   0x0409  "P329980000388741007B010" 

------------------------------ 

Connection path for device:  

USB xHCI Compliant Host Controller 

Root Hub 

Qualcomm USB Hub 

Bose Mathers (VID=0x05A7 PID=0xBC61) Port: 1 

Running on: Windows 10 or greater (Build Version 19045) 

Brought to you by TDD v2.17.0, Feb 23 2021, 14:04:02
Windows for home | Windows 10 | Devices and drivers

Locked Question. This question was migrated from the Microsoft Support Community. You can vote on whether it's helpful, but you can't add comments or replies or follow the question.

0 comments No comments

2 answers

Sort by: Most helpful
  1. Anonymous
    2024-03-18T09:03:17+00:00

    Hello Mathias,

    Greetings of the Day!

    When you change it to 24 bits/sample and once USB device is enumerated, kindly uninstall USB audio driver manually from device manager and then select refresh. Audio driver will get loaded again. Please check with it. We were facing similar type of problem, (when we change it from 16 bits/sample to 24 bits/sample), there was no request initiated. After manually uninstalling driver, it started to work. But this needs to be done each time you change it from 16 bits to 24 bits or vice-versa. There will be some other way to avoid this manual work but we are yet to figure it out. We came to know about this method from following post: windows - 24bit USB Sample Rate Support - Stack Overflow

    Thank you,

    Bhaumik

    Was this answer helpful?

    0 comments No comments
  2. Anonymous
    2024-03-12T10:12:27+00:00

    Hi Mathias Buder,

    Welcome to Microsoft Community.

    The Answer community is primarily involved in general guidance at the usage level for products.

    I wish I could handle your problem, however, analyzing issues related to USB Device development requires deeper knowledge of the driver API, hardware and software interaction, which is beyond our technical reserves. The issue on USB Device Development is out of reach of the response support community. For further professional assistance, it is more suitable for publishing on Microsoft Learn (English only), you can click on "Ask a question", there are experts who can provide more professional insights in that place. Here are links to the forums where you can raise specific scenarios and share your idea to help analyze the problem. 

    Thanks for your patience and cooperation.

    Best Regards,

    Kyo - MSFT | Microsoft Community Technical Support

    Was this answer helpful?

    0 comments No comments