esp_device_uac multichannel speaker working with Linux but not Windows
Posted: Thu Mar 19, 2026 10:25 am
I work on a USB to I2S_TDM bridge supporting 8 channels. The platform will be ESP32-P4.
I use the Espressif esp_device_uac component from ESP IoT Solutions (https://components.espressif.com/compon ... device_uac), which relies on TinyUSB ^0.17.0~2 (TinyUSB last native version is 20.0
The application appear to work when plugged in a Linux Host. I can play a 8 channel audio track. But it doesn't work when plugged in a windows host (works however with 2 channels/stereo). There seems to be an out of range value.
I activated the TinyUSB debug. I got also information from the Windows side using their tracing tool. Both are attached.
The issue seems related to the setting of the sampling frequency/clock. Windows seems to stop progress on "Supported sampling frequencies:" log.
On the Tiny USB side:
USBD Setup Received A1 02 00 01 00 04 00 01
AUDIO control request
Clock get 1 freq ranges
Range 0 (48000, 48000, 0)
Queue EP 80 with 14 bytes ...
USBD Xfer Complete on EP 80 with 14 bytes
AUDIO control complete
Queue EP 00 with 0 bytes ...
USBD Xfer Complete on EP 00 with 0 bytes
USBD Setup Received 80 06 05 03 09 04 02 00
Get Descriptor String[5]
Queue EP 80 with 2 bytes ...
USBD Xfer Complete on EP 80 with 2 bytes
Queue EP 00 with 0 bytes ...
USBD Xfer Complete on EP 00 with 0 bytes
USBD Setup Received 80 06 05 03 09 04 10 00
Get Descriptor String[5]
Queue EP 80 with 16 bytes ...
USBD Xfer Complete on EP 80 with 16 bytes
Queue EP 00 with 0 bytes ...
USBD Xfer Complete on EP 00 with 0 bytes
I (13338) i2s_usb: MCLK: 18432000, delta: 0, buffer water mark: 0%
USBD Suspend : Remote Wakeup = 0
I (13827) usbd_uac: USB suspended
For completeness, I also add the descriptors as seen by Linux host.
Help would be very welcomed.
Best regards,
JMF111
I use the Espressif esp_device_uac component from ESP IoT Solutions (https://components.espressif.com/compon ... device_uac), which relies on TinyUSB ^0.17.0~2 (TinyUSB last native version is 20.0
The application appear to work when plugged in a Linux Host. I can play a 8 channel audio track. But it doesn't work when plugged in a windows host (works however with 2 channels/stereo). There seems to be an out of range value.
I activated the TinyUSB debug. I got also information from the Windows side using their tracing tool. Both are attached.
The issue seems related to the setting of the sampling frequency/clock. Windows seems to stop progress on "Supported sampling frequencies:" log.
On the Tiny USB side:
USBD Setup Received A1 02 00 01 00 04 00 01
AUDIO control request
Clock get 1 freq ranges
Range 0 (48000, 48000, 0)
Queue EP 80 with 14 bytes ...
USBD Xfer Complete on EP 80 with 14 bytes
AUDIO control complete
Queue EP 00 with 0 bytes ...
USBD Xfer Complete on EP 00 with 0 bytes
USBD Setup Received 80 06 05 03 09 04 02 00
Get Descriptor String[5]
Queue EP 80 with 2 bytes ...
USBD Xfer Complete on EP 80 with 2 bytes
Queue EP 00 with 0 bytes ...
USBD Xfer Complete on EP 00 with 0 bytes
USBD Setup Received 80 06 05 03 09 04 10 00
Get Descriptor String[5]
Queue EP 80 with 16 bytes ...
USBD Xfer Complete on EP 80 with 16 bytes
Queue EP 00 with 0 bytes ...
USBD Xfer Complete on EP 00 with 0 bytes
I (13338) i2s_usb: MCLK: 18432000, delta: 0, buffer water mark: 0%
USBD Suspend : Remote Wakeup = 0
I (13827) usbd_uac: USB suspended
For completeness, I also add the descriptors as seen by Linux host.
Help would be very welcomed.
Best regards,
JMF111