In FX3 SDK 1.3.4, if the DMA channel associated with a USB socket is created before setting up the USB connection using the CyU3PConnectState () API, USB transfers may not occur even after successfully committing the data to the USB socket (CyU3PDmaChannelCommitBuffer () or CyU3PDmaMultiChannelCommitBuffer () API returns CY_U3P_SUCCESS). An example scenario is shown in Figure 1 and Figure 2.
Figure 1. UART Debug Prints showing DMA buffers committed to USB Socket
Figure 2. USB IN Transfer fails from USB Control Center
This problem can be due to the known issue listed in the FX3 SDK Release Notes, which mentions that the settings for the DMA channels associated with USB sockets may be invalidated during the USB device mode connection startup.
To avoid this problem, you must reset the DMA channel using CyU3PDmaChannelReset () or CyU3PDma-MultiChannelReset () API and re-enable after each enumeration cycle. This can be done when the CY_U3P_USB_EVENT_SETCONF event occurs, indicating that the USB device has enumerated successfully. You should not use the DMA channel associated with the USB socket before the CY_U3P_USB_EVENT_SETCONF event.