FX3 Bulkloop example: unexpected warm reset sent by host with some host controler after some time

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

cross mob
yvdec_1251166
Level 1
Level 1

Hello everyone,

we designed an industrial camera using FX3 in bulk mode. With some type of host controller (for example: Renesas USB 3.0 eXtensible Host Controler) we face some issue while doing basic bulk out write in loop on endpoint 0 => After a while, the Host (PC Win10 v1803 64bit) sends a warm reset which makes camera to reenumerate, and an unplug event is sent to the PC application.

We succeeded to reproduce the issue with the EZ-USB FX3 development board and the Bulkloop example Firmware & software  (Cypress USB suite v1.3.3). After a few minutes, the application stops itself because it receives a device removal event.

With an USB analyser, we clearly see a warm reset sent by the host and we suspect it is caused by errors in the USB link flow control.

See analyser screen shot in attachment: Capture1.PNG show the last good transactions done,  then you have all other USB traffic until warm reset which happened in Capture5.PNG (timestamp: 10 799 947 426)

I also sent PC configuration (report.HTM) in attachment.

Does anyone face the same problem ? What can we do to prevent this issue ?

Best regards.

Yves D.

0 Likes
1 Solution

Hi thanks for the answer. I did the test to switch to SDK v1.3.4 and effectively it solved the issue, but I noticed a difference in the BulkLpAutoCpp Firmware for the cyfxbulklpauto.cpp file: in the CyFxBulkLpApplnUSBEventCB function for the event CY_U3P_USB_EVENT_SETCONF, there was added a call to  CyU3PUsbLPMDisable(); 

CyFxBulkLoopApplication::CyFxBulkLpApplnUSBEventCB (

switch (evtype)

case CY_U3P_USB_EVENT_SETCONF:

/* Disable the low power entry to optimize USB throughput */

CyU3PUsbLPMDisable();       <= HERE

But, if you remove "CyU3PUsbLPMDisable()" there is still the issue.

My question is: if we also add CyU3PUsbLPMDisable(), what is the impact to forbid switch to U1/U2 state ? is there any side effects ?

The CyU3PUsbLPMDisable description says: "Indiscriminate use of this function can result in USB compliance test failures. Please ensure that the LPM functionality

                                             is enabled every time an USB connect or reset event is received. This can be disabled again after ensuring

                                             that the device is functioning in a performance critical mode."

   

Best regards

Yves

View solution in original post

0 Likes
3 Replies
KandlaguntaR_36
Moderator
Moderator
Moderator
25 solutions authored 10 solutions authored 5 solutions authored

Can you please specify that the FX3 SDK Version that you have used in your firmware?

Have you tried SDK 1.3.4? If not, please buld the firmware with SDK 1.3.4 and check the functionality.

0 Likes

Hi thanks for the answer. I did the test to switch to SDK v1.3.4 and effectively it solved the issue, but I noticed a difference in the BulkLpAutoCpp Firmware for the cyfxbulklpauto.cpp file: in the CyFxBulkLpApplnUSBEventCB function for the event CY_U3P_USB_EVENT_SETCONF, there was added a call to  CyU3PUsbLPMDisable(); 

CyFxBulkLoopApplication::CyFxBulkLpApplnUSBEventCB (

switch (evtype)

case CY_U3P_USB_EVENT_SETCONF:

/* Disable the low power entry to optimize USB throughput */

CyU3PUsbLPMDisable();       <= HERE

But, if you remove "CyU3PUsbLPMDisable()" there is still the issue.

My question is: if we also add CyU3PUsbLPMDisable(), what is the impact to forbid switch to U1/U2 state ? is there any side effects ?

The CyU3PUsbLPMDisable description says: "Indiscriminate use of this function can result in USB compliance test failures. Please ensure that the LPM functionality

                                             is enabled every time an USB connect or reset event is received. This can be disabled again after ensuring

                                             that the device is functioning in a performance critical mode."

   

Best regards

Yves

0 Likes

As you can see in firmware examples section in page 5 of FX3 SDK release notes, we have disabled USB 3.0 LPM support in most of the generic USB examples which do not have a well-defined data transfer protocol. LPM support is still enabled and controlled properly in real use cases like UVC, MSC and HID applications.

If you call CyU3PUsbLPMDisable in CY_U3P_USB_EVENT_SETCONF, it will fail the USB compliance test.

The best part to use CyU3PUsbLPMDisable  in CyFxUvcApplnStart as used in AN75779 UVC example firmware. This way, the device does not have any side effects.

Ensure that you have called CyU3PUsbLPMEnable API in CyFxUvcApplnStop.