UVC application: FX3 gets stuck on CyU3PGpifDisable()

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

cross mob
Magnus_P
Level 2
Level 2
First like received First like given 10 sign-ins

Hello!

We are using the FX3 and the AN75779 in a customer camera project.
For certain use cases we see the code executing gets stuck on the call to CyU3PGpifDisable(CyTrue).
It hangs until the watchdog expires and the processor is restarted.
We have noted this thread:
https://community.infineon.com/t5/USB-superspeed-peripherals/About-UVC-application-backflow-detect-p...
We have tried the various suggestions in that thread on temporarily disabling either all or specific interrupts, but it has no effect.

Is there a known solution to this problem?

This typically happens after a commit buffer failure when the streaming is first stopped an then restarted.

 

Regards,

Magnus

0 Likes
1 Solution
Rashi_Vatsa
Moderator
Moderator
Moderator
5 likes given 500 solutions authored 1000 replies posted

Hello,

Thank you for the confirmation.

Please test this and let me know if it works

CyU3PPibRegisterCallback(CyFxUvcAppPibCallback,0); //disable the interrupt 

CyU3PGpifDisable(CyTrue);

When GPIF is reloaded, enable the interrupts again

CyU3PGpifLoad(((CyU3PGpifConfig_t *) &CyFxGpifConfig)

CyU3PPibRegisterCallback (CyFxUvcAppPibCallback, CYU3P_PIB_INTR_ERROR);

CyU3PGpifSMSwitch(...)

Regards,
Rashi

View solution in original post

4 Replies
Rashi_Vatsa
Moderator
Moderator
Moderator
5 likes given 500 solutions authored 1000 replies posted

Hello,

The thread and the KBA pointed in the thread refer to the case when CyU3PGpifDisable(CyFalse) is used.

From the description I understand, that you are using  CyU3PGpifDisable(CyTrue) and then reloading the GPIF configuration again and starting the GPIF state machine when video streaming is resumed.

To understand the issue better, please let me know if you can try with CyU3PGpifDisable(CyFalse) and the workaround mentioned in  FX3 FAQs - KBA224051 - Infineon Developer Community  and check if the issue still persists

Regards,
Rashi
0 Likes
Magnus_P
Level 2
Level 2
First like received First like given 10 sign-ins

Hi!

I'm reading the KBA224051 you refer to .... I can't find any other suggestion than the suggestions that we already have tested, ie to disable all (or selected) interrupts before the call to CyU3GpifDisable() and to reenable them directly after. That trick does not help. And I can't find anything else in that article referring to this issue ...

Yes, it is correct that we call  CyU3PGpifDisable(CyTrue), beacuse we need to recofnigure the GPIF. We have two modes to chose from, a 8-bit and a 16-bit, so the state machine is configured rigth before streaming is started based on the selected mode.

Best Regards,

Magnus

 

0 Likes
Rashi_Vatsa
Moderator
Moderator
Moderator
5 likes given 500 solutions authored 1000 replies posted

Hello,

Thank you for the confirmation.

Please test this and let me know if it works

CyU3PPibRegisterCallback(CyFxUvcAppPibCallback,0); //disable the interrupt 

CyU3PGpifDisable(CyTrue);

When GPIF is reloaded, enable the interrupts again

CyU3PGpifLoad(((CyU3PGpifConfig_t *) &CyFxGpifConfig)

CyU3PPibRegisterCallback (CyFxUvcAppPibCallback, CYU3P_PIB_INTR_ERROR);

CyU3PGpifSMSwitch(...)

Regards,
Rashi

I have the same problem on cyusb3014,and it works for me, thanks a lot.