nRF5340 UAC2: can isochronous IN endpoint use full 1023-byte buffer

I'm trying to advertise an isochronous IN endpoint with wMaxPacketSize = 768 bytes (8 channels × 48 kHz × 16-bit audio, 1 ms polling). USB init fails at usbd_init with Failed to assign endpoint addresses. for wMaxPacketSize > 511 bytes

Looking at zephyr/drivers/usb/udc/udc_nrf.c:

ep_cfg_in[i].caps.mps = NRF_USBD_COMMON_ISOSIZE / 2;   // = 511

with NRF_USBD_COMMON_ISOSIZE = 1023. My understanding based on this is that the iso IN endpoint cap is 511 bytes due to hardware double-buffering, even though USB full-speed spec allows up to 1023.

Questions:

  1. Is there a supported way (Kconfig, devicetree, runtime API) to disable double-buffering and use the full 1023 bytes per microframe?
  2. If I patch udc_nrf.c to remove the /2, are there known issues? Does the rest of the driver assume double-buffering, or is single-buffer mode supported?

Thank you!

Related