I ran into an issue where it seems that VDDR regulation seems to go unstable during deep sleep. Here is the sequence of events and my theory of what goes wrong:
- CC1350 is run intermittently, and going into deep sleep with all power domains powered off for several hundred ms between each wakeup
- After returning to active operation, SysCtrlAdjustRechargeAfterPowerDown(0); is called, so no margin on the recharge margin adjustment
- Then, an event occurs and we change the SSI1 configuration and toggle a few bits before going back to deep sleep. To avoid resetting SSI1 upon returning from deep sleep, this time we don't power down the PERIPH domain so we retain the state.
- When we go to deep sleep, the VDDR voltage dips dramatically (down to 0.7 V) and the VDDR regulator seems to struggle to regain control. The system behaves erratic after this.
I believe that the increased current consumption combined with no recharge margin adjustment makes the regulator fail. (Is this a likely hypothesis?) The regulator is also run with a capacitor that is lower than the recommendation from the reference design, likely adding to the issue.
To solve this, I'd like to reset the recharge parameters to something with a low period so it adjusts to the higher current, so I do:
SysCtrlSetRechargeBeforePowerDown(XOSC_IN_HIGH_POWER_MODE);
HWREG( AON_WUC_BASE + AON_WUC_O_RECHARGECFG ) =
( 0x80A4E700 ) |
( 1 << AON_WUC_RECHARGECFG_PER_M_S );
to reset the recharge period to roughly 1ms (heavily inspired by SysCtrlSetRechargeBeforePowerDown in sys_ctrl.c).
This seems to work well. When the deep sleep cycle starts, the regulator starts out with a low recharge interval and then adjusts it up until a reasonable sawtooth amplitude is reached at VDDR.
My question is, is this a reasonable way to deal with it or do you have other suggested solutions that would be preferable?