- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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!
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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;
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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;
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Great thanks so much! This is perfect to help us track the issue down...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
We fixed the issue in I2C hardware implementation. Thanks for the guidance!