- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I am using a master MCU to communicate with touch board which is powered by CY8C4014LQI-422. The master uses io simulated iic and CY8C4014LQI-422 uses EZI2C. EZI2C is configured as 400Kbps and 8bits sub address. The whole system works normally. But there is a chance that IIC SCL is pulled low by CY8C4014LQI-422 and keeps low forever. There is no specific way to duplicate this issue. And I tried to reset CY8C4014LQI-422 by pulling XRES to GND. The whole system can return back to normal again.
Anyone can show me why this could happen and how to deal with it? Great appreciation.
BTW, the Enable wakeup from deep sleep mode is checked.
Best Regards
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I cannot open your project, please use
Creator->File->Create Workspace Bundle (minimal)
and attach the resulting file.
Bob
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
On page 54 of the SCB component there are suggestions for setting the I2C interface asleep. There is shown, it has to be controlled that all I2C communication must have ceased before entering deep sleep. I would suggest you to enter something similar into your GoToSleep() routine.
Bob
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks Bob. I updated my GotoSleep function as datasheet requested. Hopefully this time problem will be solved. Any specific way to verify this?
void GotoSleep(void)
{
unsigned char intState = CyEnterCriticalSection();
if(0 == (SCB_EzI2CGetActivity() & SCB_EZI2C_STATUS_BUSY))
{
LED_Sleep();
BUZZER_Sleep();
DEBUG_LED_Sleep();
CapSense_CSD_Sleep();
SCB_Sleep();
CySysPmDeepSleep();
CyExitCriticalSection(intState);
SCB_Wakeup();
CapSense_CSD_Wakeup();
DEBUG_LED_Wakeup();
BUZZER_Wakeup();
LED_Wakeup();
}
else
{
CyExitCriticalSection(intState);
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
BTW, I used a 4.7K pull up resistor to 3.3V. Do I need to change the resistor to 1K may be less to meet 3mA sink current?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Looks good, although I would have put intuitively the ExitCriticalSection before entering deep sleep to keep all interrupts active.
Bob
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Bob, I still find once the power consumption rise to up to 40uA when EZI2C is added and back to 1.4uA when EZI2C removed. According to SPEC the power consumption should be 2.5uA when EZI2C wakeup and WDT is on.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Well, that is because I wakeup system every 500ms. I can NOT exactly remember whey I still wakeup system during deep sleep. Just wondering if it OK if I remove this feature during deep sleep to save extra power.Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content