-
Notifications
You must be signed in to change notification settings - Fork 925
Description
Answers checklist.
- I have read the documentation ESP-IDF Programming Guide and the issue is not addressed there.
- I have updated my IDF branch (master or release) to the latest version and checked that the issue is present there.
- I have searched the issue tracker for a similar issue and not found a similar issue.
IDF version.
ESP-IDF v5.5.1
Espressif SoC revision.
ESP32-S3
Operating System used.
Windows
How did you build your project?
VS Code IDE
If you are using Windows, please specify command line type.
None
Development Kit.
ESP32S3N16R8
Power Supply used.
USB
What is the expected behavior?
Data from the USB microphone array is obtained through the usb_host_uac component.
What is the actual behavior?
An error message appears after I call uac_host_device_start.
Steps to reproduce.
I referenced the example at https://github.com/espressif/esp-iot-solution/tree/master/examples/usb/host/usb_audio_player, which only plays audio and doesn't receive audio. I modified it, and the core logic is as follows.
` case UAC_HOST_DRIVER_EVENT_RX_CONNECTED: {
uac_host_device_handle_t uac_device_handle = NULL;
const uac_host_device_config_t dev_config = {
.addr = addr,
.iface_num = iface_num,
.buffer_size = 16000,
.buffer_threshold = 4000,
.callback = uac_device_callback,
.callback_arg = NULL,
};
ESP_ERROR_CHECK(uac_host_device_open(&dev_config, &uac_device_handle));
uac_host_dev_alt_param_t iface_alt_params;
uac_host_get_device_alt_param(uac_device_handle, iface_num, &iface_alt_params);
uac_host_stream_config_t stream_config = {
.channels = iface_alt_params.channels,
.bit_resolution = iface_alt_params.bit_resolution,
.sample_freq = iface_alt_params.sample_freq[0],
};
ESP_ERROR_CHECK(uac_host_device_start(uac_device_handle, &stream_config));
ESP_LOGI(TAG, "UAC Device connected: MIC");
break;
}`
Debug Logs.
I (305) usb_audio_player: USB Host installed
I (305) uac-host: Install Succeed, Version: 1.3.2
I (305) usb_audio_player: UAC Class Driver installed
*** Configuration descriptor ***
bLength 9
bDescriptorType 2
wTotalLength 132
bNumInterfaces 3
bConfigurationValue 1
iConfiguration 4
bmAttributes 0xc0
bMaxPower 500mA
*** Interface descriptor ***
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 0x1
bInterfaceSubClass 0x1
bInterfaceProtocol 0x0
iInterface 5
*** Audio control header descriptor ***
bLength 9
bDescriptorType 0x24
bDescriptorSubtype 0x1
bcdADC 0x100
wTotalLength 39
bInCollection 1
Interface number[0] = 1
*** Audio control input terminal descriptor ***
bLength 12
bDescriptorType 0x24
bDescriptorSubtype 0x2
bTerminalID 1
wTerminalType 0x201
bAssocTerminal 0
bNrChannels 1
wChannelConfig 0x0001
iChannelNames 7
iTerminal 6
*** Audio control feature unit descriptor ***
bLength 9
bDescriptorType 0x24
bDescriptorSubtype 0x6
bUnitID 5
bSourceID 1
bControlSize 2
bmaControls[ch0] 0x2
iFeature 2
*** Audio control output terminal descriptor ***
bLength 9
bDescriptorType 0x24
bDescriptorSubtype 0x3
bTerminalID 2
wTerminalType 0x101
bAssocTerminal 0
bSourceID 5
iTerminal 9
*** Interface descriptor ***
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 0x1
bInterfaceSubClass 0x2
bInterfaceProtocol 0x0
iInterface 10
*** Interface descriptor ***
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 0x1
bInterfaceSubClass 0x2
bInterfaceProtocol 0x0
iInterface 11
*** Audio stream general descriptor ***
bLength 7
bDescriptorType 0x24
bDescriptorSubtype 0x1
bTerminalLink 2
bDelay 1
wFormatTag 1
*** Audio stream format type descriptor ***
bLength 11
bDescriptorType 0x24
bDescriptorSubtype 0x2
bFormatType 1
bNrChannels 1
bSubframeSize 2
bBitResolution 16
bSamFreqType 1
tSamFreq[0] 16000
*** Endpoint descriptor ***
bLength 9
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 0x5 ISOC
wMaxPacketSize 1023
bInterval 4
*** Audio stream endpoint general descriptor ***
bLength 7
bDescriptorType 0x25
bDescriptorSubtype 0x1
bmAttributes 0x1
bLockDelayUnits 0
wLockDelay 0
*** Interface descriptor ***
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 0xff
bInterfaceSubClass 0x42
bInterfaceProtocol 0x1
iInterface 13
*** Endpoint descriptor ***
bLength 7
bDescriptorType 5
bEndpointAddress 0x1 EP 1 OUT
bmAttributes 0x2 BULK
wMaxPacketSize 64
bInterval 0
*** Endpoint descriptor ***
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 0x2 BULK
wMaxPacketSize 64
bInterval 0
I (955) usb_audio_player: channels=1, bit_resolution=16, sample_freq=16000
E (965) HCD DWC: EP MPS (1023) exceeds supported limit (600)
E (965) USBH: EP Alloc error: ESP_ERR_NOT_SUPPORTED
E (975) USB HOST: EP allocation error ESP_ERR_NOT_SUPPORTED
E (975) USB HOST: Claiming interface error: ESP_ERR_NOT_SUPPORTED
E (985) uac-host: uac_host_interface_claim_and_prepare_transfer(1108): Unable to claim Interface
E (995) uac-host: uac_host_device_start(2322): Unable to claim Interface
ESP_ERROR_CHECK failed: esp_err_t 0x106 (ESP_ERR_NOT_SUPPORTED) at 0x42006829
More Information.
I found that Hardware FIFO size biasing can be configured in menuconfig, but the maximum MPS is only 600.
I consulted the microphone array manufacturer, and they said that the MPS of a typical microphone array is 1023, which is also verified by the printed UVC equipment information. My question is, is the maximum MPS of the ESP32S3's USB hardware FIFO 600? Can a USB microphone array be connected?