1 Reply Latest reply on Oct 15, 2012 5:29 AM by rama.sai.krishna.vakkantula

    CyU3PDmaChannelSetSuspend on active, but non-busy, USB egress socket?

    steve.magnani

      I am trying to use the DMA suspend/resume API  to work around the FX3 silicon bug that causes incorrect PIDs to go out on ZLPs for high-bandwidth isochronous endpoints (http://www.cypress.com/?app=forum&id=167&rID=62980). This is for UVC, so the DMA channel is configured as TYPE_MANUAL.

      In my DMA callback, at a point where I know there are no packets pending for USB transmission (i.e. the video stream has temporarily "bottomed out" and there is a risk of ZLPs being sent), I call

         CyU3PDmaChannelSetSuspend( CY_U3P_DMA_SCK_SUSP_NONE, CY_U3P_DMA_SCK_SUSP_CUR_BUF)

      Based on the API documentation I expect to receive a DMA callback of type CY_U3P_DMA_CB_CONS_SUSP, but one never comes.

      Is it not possible to suspend a MANUAL socket that is active but effectively idle? Does the HW require a DMA buffer to be committed before it will honor the suspend request? The documentation is fuzzy on this point, and I don't see any examples relating to DMA suspend/resume.