summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2021-02-08 12:40:20 -0500
committerDan Halbert <halbert@halwitz.org>2021-02-08 12:40:20 -0500
commitc3a1bd8f137814b1fa3519ab0a52f0dffa2f696f (patch)
tree984f1b81349ccddfed283814807b86ebbfb3a909
parent482e58307756bfec3cb7d4c0c8d73ffae0ec228d (diff)
turn off brownout before deep sleep
-rw-r--r--ports/esp32s2/common-hal/alarm/__init__.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/ports/esp32s2/common-hal/alarm/__init__.c b/ports/esp32s2/common-hal/alarm/__init__.c
index 1cec5d4ae..be435e210 100644
--- a/ports/esp32s2/common-hal/alarm/__init__.c
+++ b/ports/esp32s2/common-hal/alarm/__init__.c
@@ -150,6 +150,14 @@ void common_hal_alarm_set_deep_sleep_alarms(size_t n_alarms, const mp_obj_t *ala
void NORETURN alarm_enter_deep_sleep(void) {
alarm_pin_pinalarm_prepare_for_deep_sleep();
alarm_touch_touchalarm_prepare_for_deep_sleep();
+
+ // Disable brownout detection, which appears to be triggered sometimes when
+ // waking from deep sleep.
+ // See https://www.esp32.com/viewtopic.php?f=13&t=19208#p71084
+ // and https://github.com/adafruit/circuitpython/issues/4025#issuecomment-771027606
+ // TODO: We can remove this workaround when ESP-IDF handles this.
+ CLEAR_PERI_REG_MASK(RTC_CNTL_BROWN_OUT_REG, RTC_CNTL_BROWN_OUT_RST_ENA);
+
// The ESP-IDF caches the deep sleep settings and applies them before sleep.
// We don't need to worry about resetting them in the interim.
esp_deep_sleep_start();