This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC3235MODSF: No wake up from hibernate when

Part Number: CC3235MODSF
Other Parts Discussed in Thread: CC3200MOD

Hi,

I'm working on a project with the cc3235modsf on a custom board with TI-RTOS based on http get example.

With the following configuration, the device wakes up successfully when GPIO04 is set to high. But when adding PRCM_IO_RET_GRP_0  in ioRetentionShutdown it does not anymore.

Do you have any idea what could be causing the issue?

const PowerCC32XX_ConfigV1 PowerCC32XX_config = {
    .policyInitFxn = &PowerCC32XX_initPolicy,
    .policyFxn = &PowerCC32XX_sleepPolicy,
    .enterLPDSHookFxn = NULL,
    .resumeLPDSHookFxn = NULL,
    .enablePolicy = false,
    .enableGPIOWakeupLPDS = true,
    .enableGPIOWakeupShutdown = true,
    .enableNetworkWakeupLPDS = true,
    .wakeupGPIOSourceLPDS = PRCM_LPDS_GPIO4,
    .wakeupGPIOTypeLPDS = PRCM_LPDS_HIGH_LEVEL,
    .wakeupGPIOFxnLPDS = NULL,
    .wakeupGPIOFxnLPDSArg = 0,
    .wakeupGPIOSourceShutdown = PRCM_HIB_GPIO4,
    .wakeupGPIOTypeShutdown = PRCM_HIB_HIGH_LEVEL,
    .ramRetentionMaskLPDS = PRCM_SRAM_COL_1 | PRCM_SRAM_COL_2 |
        PRCM_SRAM_COL_3 | PRCM_SRAM_COL_4,
    .keepDebugActiveDuringLPDS = false,
    .ioRetentionShutdown = PRCM_IO_RET_GRP_1,
    .pinParkDefs = parkInfo,
    .numPins = sizeof(parkInfo) / sizeof(PowerCC32XX_ParkInfo)
};

Latest sdk and service pack: sp_4.2.0.3_3.1.0.5_3.1.0.17

Best regards,

Cédric

  • Hi Cédric,

    As a sanity check, if you run your program on a CC3235 launchpad, does it also result in the same behavior?

    Also, are you doing any pin parking in your program? By using PRCM_IO_RET_GRP_0, you enable pin parking during hibernate. By default, using Power_shutdown() will not park any pins for you. However, if you have already parked pins before entering hibernate, then those pins will be set to the park state that you specify.

    Regards,
    Michael
  • Hi Michael,

    Thank you for your feedback!

    I park all output GPIOs to a fixed value to avoid floating pins, but I use GPIO04 only as input (using only GPIO_read function ) and do not park it explicitly.  

    Is it correct that pinParkDefs is only used for lpds and not for hibernate?

    Additionally I'm using the same method on the CC3220modasf on another of our boards without issue. 

    I can try to adapt it for the launchpad later this week.

    Best regards,

    Cédric

  • Hi Cédric,

    pinParkDefs is only automatically used by the RTOS when entering LPDS, but you can manually park pins in hibernate if you have .ioRetentionShutdown = PRCM_IO_RET_GRP_0.

    If you can run your code on a launchpad, then there is probably something in your hardware design that needs to be looked at. Let me know how the launchpad test goes.

    Regards,
    Michael
  • Hi Michael,

    I don't see how the hardware could be the culprit for a few reasons:

    • The exact same board is used with a CC3200mod without issue
    • The same concept is used on another board with the cc3220modasf
    • The wake up works fine when not activating the pin retention, and any output would not have any impact on this particular input.
    • The voltage at the pin measured with an oscilloscope shows the expected 0V deactivated => 2.7V wake up requested

    I'll try to reproduce the issue with the launchpad and a minimal project.

    Regards,

    Cédric

  • Hi Michael,

    After some checks and tweaks it now works, I'm note sure exactly what helped so here is a short description for futur readers ; )

    parkInfo is not used and can be left as it is.
    .ioRetentionShutdown = PRCM_IO_RET_GRP_0 | PRCM_IO_RET_GRP_1,

    At wake up, first initialize gpio
    GPIO_init();
    Then disable retention
    PowerCC32XX_disableIORetention(PowerCC32XX_config.ioRetentionShutdown);

    Then enable the power policy
    Power_enablePolicy();

    And at shutdown, configure the wake up pins
    PRCMHibernateWakeupSourceEnable(PRCM_HIB_GPIO4);
    PRCMHibernateWakeUpGPIOSelect(PRCM_HIB_GPIO4, PRCM_HIB_HIGH_LEVEL);