2022-06-14 11:33 AM
I am working on enabling feedback for the PLAYBACK endpoint using STM32H750XB. I was successfully able to control the packet transfer between host and device based on feedback data sent to host, it plays for hours, no issues at all, no rollovers, no underruns. However, the moment the playback ( + feedback) endpoint is active, it triggers USB_OTG_GINTSTS_IISOIXFR.
I verified that the issue happens only when feedback data is sent. In synchronous mode (without feedback), no such ISCO_INCOMPLETE_TXNS were seen. The handling for ISCO_INCOMPLETE_TXNS looks fine, the driver disables the EP, flushes the FIFO, prepare the next feedback transmission, it circles back and we get the USB_OTG_GINTSTS_IISOIXFR interrupt.
Is there any criteria for an application to send feedback data to the USB driver only after certain events? Currently, when the PLAY interface is set by host, the application notifies the driver by calling ready to receive data (USBD_LL_PrepareReceive()) for the audio packet case and the transmit data API (USBD_LL_Transmit()) for feedback.
I would like to know what could be causing it and make sure that application isn't responsible somehow.
It sounds similar to an old STM32 issue reported long back.
https://community.st.com/s/question/0D50X00009XkZKLSA3/source-of-isochronous-in-incomplete-interrupt