PHY_ERROR_DECODE

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

cross mob
MaFa_974161
Level 5
Level 5
100 sign-ins 50 replies posted 50 questions asked

Hello,

I'm programming FX3 on a board developed by my colleague.

We are printing on console (by means UART and CyU3PDebugPrint)

PHY error counter and LNK error counter obtained by CyU3PUsbGetErrorCounts API.

We observe that PHY counter reaches 6 if we have USB3.0 connected to PC when software not communicate.

When software transfers some data counter increases, it reaches 5000 if we Xfer 1Kbyte of Data continuously.

We read at page 495 of EZ-USB FX3 TRM, Spec No. 001-76074 Rev. *E register LNK_PHY_ERROR_CONF:

this register can configure the types of PHY errors that the counter counts enabling/disabling the type of errors.

By means of LNK_PHY_ERROR_CONF we understand that there are just "8b/10b Decode Errors" (see page 8b/10b encoding - Wikipedia).

Our question is: what are this errors ?

Our software communicate correctly (so at APPLICATION level there is not problem) but why there are this 8b/10b errors ?

We change USB3 cable, demo board instead of our board, Host port, PC .... but systematically this error appears in the same way.

Can anyone explain me this error ?

Thank you in advice..

0 Likes
1 Solution

Hello,

Apologies. Please look for CyU3PUsbLPMDisable() API.

Best regards,

Srinath S

View solution in original post

7 Replies
SrinathS_16
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hello,

- 8b/10b decode errors indicate that the 10 bit symbols received do not match with any valid 8 bit data and this error is reported by the PHY and notified to the link layer as well. These errors could possibly be because of longer cable lengths, noise interference, etc. Kindly, ensure that you have followed the design guidelines mentioned in the AN70707.

- Please let know if you have tried using the Cypress FX3 SuperSpeed Explorer Kit (CYUSB3KIT-003).

- Also, does the device get disconnected upon encountering large number of PHY errors?

Best regards,

Srinath S

0 Likes

We observe this behavior on CYUSB3KIT-003 and our board

We not observe disconnect with large numbers of PHY errors ...

Now we are buying short USB3.0 and long USB3.0 cable to do some tests

0 Likes

Hello,

When the device enters/exits low power modes, PHY errors can occur. Kindly, try using CyU3PLpmDisable() API to prevent the device entering into low power modes after the application is started.

Best regards,

Srinath S

0 Likes

Sorry but I don't find

CyU3PLpmDisable()

in

EZ-USB® FX3 SDK

Firmware API Guide

Version 1.3.3

0 Likes

Hello,

Apologies. Please look for CyU3PUsbLPMDisable() API.

Best regards,

Srinath S

OK ... perfect !

My code is developed from the existing cyfxgpiftousb.

After this answer I modify it in this way :

  • in "CyFxAppThread_Entry" there is a infinite loop for(;;) where I remove this code ...

/* Try to get the USB 3.0 link back to U0. */


if (glForceLinkU2)

{

     stat = CyU3PUsbGetLinkPowerState (&curState);

     while ((glForceLinkU2) && (stat == CY_U3P_SUCCESS) && (curState == CyU3PUsbLPM_U0))

     {

          /* Repeatedly try to go into U2 state.*/

          CyU3PUsbSetLinkPowerState (CyU3PUsbLPM_U2);

          CyU3PThreadSleep (5);

          CyU3PUsbGetLinkPowerState (&curState);

     }

}       

else

{

     /* Once data transfer has started, we keep trying to get the USB link to stay in U0. If this is done

     if (CyU3PUsbGetSpeed () == CY_U3P_SUPER_SPEED)

     {

          /* If the link is in U1/U2 states, try to get back to U0. */

          stat = CyU3PUsbGetLinkPowerState (&curState);

          while ((stat == CY_U3P_SUCCESS) && (curState >= CyU3PUsbLPM_U1) && (curState <= CyU3PUsbLPM_U3))

          {

                CyU3PUsbSetLinkPowerState (CyU3PUsbLPM_U0);

               CyU3PThreadSleep (1);            

               stat = CyU3PUsbGetLinkPowerState (&curState);

          }

     }

}

  • in "CyFxApplnUSBEventCB" there is a "switch(evtype)" where in the case "CY_U3P_USB_EVENT_CONNECT" I add this code

CyU3PReturnStatus_t status = CyU3PUsbLPMDisable();

if(status!=CY_U3P_SUCCESS)

CyU3PDebugPrint (8, "LPMDisable return Error %d\r\n",status);

With this solution my PHY counter is always 0 (except for an instance after CY_U3P_USB_EVENT_CONNECT where I read about 400 errors).

Is this solution correct ? In particular I not understand the code involved in "ForceLinkU2" ...

0 Likes

Hello,

- glForceLinkU2 parameter is monitored to decide whether to enter low power mode or not. Whenever the interface is suspended by the host, the link is pushed into the U2 state thereby saving power.

- The mentioned approach is fine but another option would be to disable the low power entry in the CyFxApplnStart() function and re-enable it in the CyFxApplnStop() function.

Best regards,

Srinath S