Host doesn't get interrupt from Interrupt EndPoint

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
prchc_3505471
Level 2
Level 2
First like given

Hi All,

Can anyone pinpoint because of what it might occur following described behavior ?

We are using FX3 (USB3.0) chip which gets connected with Linux PC where its device driver runs. As per project need, FX3 sends 2 byte data using DMA buffer (total 4 DMA buffers) on its interrupt end-point. However most of time host receives these data since it submits URB every time before FX3 generated interrupt data, sometime host doesn't get this data. While debugging at FX3 firmware code, it seems like it has successfully got the DMA buffer, copied the 2 byte data into this buffer and committed it without any failure. We couldn't see any failure on these APIs in firmware (CyU3PDmaChannelGetBuffer() & CyU3PDmaChannelCommitBuffer()), they always returns 0 i.e. Success.

Also, from host perspective, device-driver developer says that there is no issue in URB submission. We couldn't see any error in syslog.

While further testing, we could see that if host makes any single transaction on BULK-OUT EP (from host to FX3), this earlier committed (and stalled) interrupt now gets received by host. So we don't know what exact happens whether it gets blocked somewhere either in FX3 side or Host side.

So let me ask whether anyone has faced such thing or any idea on this, please let me know.

Thanks,

Premji

0 Likes
1 Solution

Hello Premji,

Please find my comments below:

 But if I make value less than 0x0B, then this slow interrupt doesn't retrived by host.

>> Do you mean that when bInterval value is increased the interrupt endpoint works fine and data is received by the host?

If yes, for Interrupt IN transfer please check the USB trace to understand that the request is sent by the host. Also try increasing the timeout period from the host application. Please check the return status of the USB interrupt transfer on the host side for failure case

Also, please check that device doesn't go to Low power mode by calling CyU3PUsbLPMDisable() in CY_U3P_USB_EVENT_SETCONF

Regards,
Rashi

View solution in original post

0 Likes
9 Replies