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:
- Is there a supported way (Kconfig, devicetree, runtime API) to disable double-buffering and use the full 1023 bytes per microframe?
- If I patch
udc_nrf.cto remove the/2, are there known issues? Does the rest of the driver assume double-buffering, or is single-buffer mode supported?
Thank you!