CyU3PMipicsiInit returning CY_U3P_ERROR_FAILURE

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

cross mob
Anonymous
Not applicable

Hi,

I was wondering what circumstances would cause CyU3PMipicsiInit to return CY_U3P_ERROR_FAILURE? Our firmware works perfectly fine on the e-con systems dev board, but on our new board the above error occurs.

Thanks!

0 Likes
1 Solution
KandlaguntaR_36
Moderator
Moderator
Moderator
25 solutions authored 10 solutions authored 5 solutions authored

You can check the source code of the CyU3PMipicsiInit here.

We do I2C Writes and Reads in a few functions called in the CyU3PMipicsiInit.

In this case, we suspect that CY_U3P_ERROR_FAILURE is due to failure of I2C writes and Reads.

Can you please check whether the I2C Lines are connected properly? Are there proper Pull-Ups on the lines?

Please cross check the schematic of your board with e-con dev board or AN70707: AN70707 - EZ-USB® FX3™/FX3S™ Hardware Design Guidelines and Schematic Checklist | Cypress Semiconduc...

You can find this in the cyu3mipicsi.c file provided with SDK (Default path: C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\fx3_sdk_1_3_3_src\fx3_sdk_1_3_3_src\sdk\firmware\src\mipicsi)

/* Initiailize the MIPI-CSI block. The GPIO and I2C blocks need to have been initiailized prior to calling this function */

CyU3PReturnStatus_t

CyU3PMipicsiInit (

  void)

{

  CyU3PReturnStatus_t status = CY_U3P_SUCCESS;

  if(glMipiBlockInitialized)

  return CY_U3P_SUCCESS;

  /* Check if the device has Mipi CSI Support CX2/CX3 and set a flag */

  if (!(CyFx3DevIsMipicsiSupported()))

  {

  return CY_U3P_ERROR_NOT_SUPPORTED;

  }

  /* Setup number of Mipi lanes on the part based on PartInfo.*/

  glPartMipiLanes = CyFx3DevGetMipiLaneCount ();

  /* Code to Initialize the Reset line GPIO pin goes here. */

  status = CyU3PMipicsiSetupBlockResetGpio ();

  if (status != CY_U3P_SUCCESS)

  return status;

  /* Hard Reset the Mipi CSI Block by calling MipiReset with the param for hard reset*/

  /* Also reads and validates the ID register on the MIPI block and sets the CXRES

  * andCXSHUTDOWN lines to DRIVE LOW*/

  status = CyU3PMipicsiReset (CY_U3P_CSI_HARD_RST);

  if (status != CY_U3P_SUCCESS)

  return status;

  /* Enable MIPI block errors*/

  status = CyU3PMipicsiEnableMipiErrors ();

  if (status != CY_U3P_SUCCESS)

  return status;

  glIsMipiBlockActive = CyTrue;

  status = CyU3PMipicsiSleep();

  return status;

}

View solution in original post

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

You can check the source code of the CyU3PMipicsiInit here.

We do I2C Writes and Reads in a few functions called in the CyU3PMipicsiInit.

In this case, we suspect that CY_U3P_ERROR_FAILURE is due to failure of I2C writes and Reads.

Can you please check whether the I2C Lines are connected properly? Are there proper Pull-Ups on the lines?

Please cross check the schematic of your board with e-con dev board or AN70707: AN70707 - EZ-USB® FX3™/FX3S™ Hardware Design Guidelines and Schematic Checklist | Cypress Semiconduc...

You can find this in the cyu3mipicsi.c file provided with SDK (Default path: C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\fx3_sdk_1_3_3_src\fx3_sdk_1_3_3_src\sdk\firmware\src\mipicsi)

/* Initiailize the MIPI-CSI block. The GPIO and I2C blocks need to have been initiailized prior to calling this function */

CyU3PReturnStatus_t

CyU3PMipicsiInit (

  void)

{

  CyU3PReturnStatus_t status = CY_U3P_SUCCESS;

  if(glMipiBlockInitialized)

  return CY_U3P_SUCCESS;

  /* Check if the device has Mipi CSI Support CX2/CX3 and set a flag */

  if (!(CyFx3DevIsMipicsiSupported()))

  {

  return CY_U3P_ERROR_NOT_SUPPORTED;

  }

  /* Setup number of Mipi lanes on the part based on PartInfo.*/

  glPartMipiLanes = CyFx3DevGetMipiLaneCount ();

  /* Code to Initialize the Reset line GPIO pin goes here. */

  status = CyU3PMipicsiSetupBlockResetGpio ();

  if (status != CY_U3P_SUCCESS)

  return status;

  /* Hard Reset the Mipi CSI Block by calling MipiReset with the param for hard reset*/

  /* Also reads and validates the ID register on the MIPI block and sets the CXRES

  * andCXSHUTDOWN lines to DRIVE LOW*/

  status = CyU3PMipicsiReset (CY_U3P_CSI_HARD_RST);

  if (status != CY_U3P_SUCCESS)

  return status;

  /* Enable MIPI block errors*/

  status = CyU3PMipicsiEnableMipiErrors ();

  if (status != CY_U3P_SUCCESS)

  return status;

  glIsMipiBlockActive = CyTrue;

  status = CyU3PMipicsiSleep();

  return status;

}

0 Likes
Anonymous
Not applicable

Great thanks so much! This is perfect to help us track the issue down...

0 Likes
Anonymous
Not applicable

We fixed the issue in I2C hardware implementation. Thanks for the guidance!

0 Likes