我遇到了从深度睡眠中醒来后重置 RTC 的问题。我已将范围缩小到 ESP32-C3 在其中一个 GPIO 引脚上被唤醒的方式。
我目前在 GPIO 输入端有一个 nchannel mosfet(见附图)并且在启动时有以下代码打印出唤醒的原因:
代码:
全选
esp_reset_reason_t esp_reason = esp_reset_reason();
printf("ESP reset reason: %i\n", esp_reason);
RESET_REASON rtc_reason = rtc_get_reset_reason(0);
printf("RTC reset reason: %i\n", rtc_reason);
esp_sleep_source_t wakeup_respon = esp_sleep_get_wakeup_cause();
printf("Wakeup reason: %i\n", wakeup_respon);
95% 的时间当我触发唤醒引脚时,我得到以下打印输出:
ESP 重置原因:8
RTC 重置原因:5
唤醒原因:7
但有时我得到以下信息:
ESP 重置原因:1
RTC 重置原因:1
唤醒原因:0
,当我得到这个时,RTC 时间已被重置。
我尝试的另一件事是用开关替换 nchannel mosfet(进行实验),发现在超过 10,000 次唤醒中,它总是正确唤醒。
然后我尝试使用正弦波作为唤醒信号,发现它总是会唤醒失败(RTC 将被重置)。
这让我相信 wkaeup 脉冲的上升/下降时间对这个错误有影响。上升/下降时间小于 100uS 的任何东西“似乎”都可以,但任何更大的东西都会导致唤醒问题。
注意:
目前在 IDF V4.4.2 上使用 ESP32-C3-MINI