2020-07-21 05:15:19 -04:00
|
|
|
menu "Power Management"
|
|
|
|
config PM_ENABLE
|
|
|
|
bool "Support for power management"
|
2022-06-15 04:17:59 -04:00
|
|
|
# SMP FreeRTOS currently does not support power management IDF-4997
|
2022-11-07 09:10:22 -05:00
|
|
|
# ESP32H2 currently does not support power management IDF-6270
|
|
|
|
# Note. Disabling this option for H2 will also cause all sdkconfig.release test cases run without pm enabled
|
|
|
|
# ORed with __DOXYGEN__ to pass H2 docs build, need to remove when pm is supported on H2
|
|
|
|
depends on (!FREERTOS_SMP && !IDF_TARGET_ESP32H2) || __DOXYGEN__
|
2020-07-21 05:15:19 -04:00
|
|
|
default n
|
|
|
|
help
|
|
|
|
If enabled, application is compiled with support for power management.
|
|
|
|
This option has run-time overhead (increased interrupt latency,
|
|
|
|
longer time to enter idle state), and it also reduces accuracy of
|
|
|
|
RTOS ticks and timers used for timekeeping.
|
|
|
|
Enable this option if application uses power management APIs.
|
|
|
|
|
|
|
|
config PM_DFS_INIT_AUTO
|
|
|
|
bool "Enable dynamic frequency scaling (DFS) at startup"
|
|
|
|
depends on PM_ENABLE
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
If enabled, startup code configures dynamic frequency scaling.
|
|
|
|
Max CPU frequency is set to DEFAULT_CPU_FREQ_MHZ setting,
|
|
|
|
min frequency is set to XTAL frequency.
|
|
|
|
If disabled, DFS will not be active until the application
|
|
|
|
configures it using esp_pm_configure function.
|
|
|
|
|
|
|
|
config PM_PROFILING
|
|
|
|
bool "Enable profiling counters for PM locks"
|
|
|
|
depends on PM_ENABLE
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
If enabled, esp_pm_* functions will keep track of the amount of time
|
|
|
|
each of the power management locks has been held, and esp_pm_dump_locks
|
|
|
|
function will print this information.
|
|
|
|
This feature can be used to analyze which locks are preventing the chip
|
|
|
|
from going into a lower power state, and see what time the chip spends
|
|
|
|
in each power saving mode. This feature does incur some run-time
|
|
|
|
overhead, so should typically be disabled in production builds.
|
|
|
|
|
|
|
|
config PM_TRACE
|
|
|
|
bool "Enable debug tracing of PM using GPIOs"
|
|
|
|
depends on PM_ENABLE
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
If enabled, some GPIOs will be used to signal events such as RTOS ticks,
|
|
|
|
frequency switching, entry/exit from idle state. Refer to pm_trace.c
|
|
|
|
file for the list of GPIOs.
|
|
|
|
This feature is intended to be used when analyzing/debugging behavior
|
|
|
|
of power management implementation, and should be kept disabled in
|
|
|
|
applications.
|
|
|
|
|
2020-12-23 01:45:36 -05:00
|
|
|
config PM_SLP_IRAM_OPT
|
|
|
|
bool "Put lightsleep related codes in internal RAM"
|
|
|
|
depends on FREERTOS_USE_TICKLESS_IDLE
|
|
|
|
help
|
2020-12-25 07:04:32 -05:00
|
|
|
If enabled, about 1.8KB of lightsleep related source code would be in IRAM and chip would sleep
|
2020-12-23 01:45:36 -05:00
|
|
|
longer for 760us at most each time.
|
2020-12-25 07:04:32 -05:00
|
|
|
This feature is intended to be used when lower power consumption is needed
|
|
|
|
while there is enough place in IRAM to place source code.
|
2020-07-21 05:15:19 -04:00
|
|
|
|
2020-12-23 01:45:36 -05:00
|
|
|
config PM_RTOS_IDLE_OPT
|
|
|
|
bool "Put RTOS IDLE related codes in internal RAM"
|
|
|
|
depends on FREERTOS_USE_TICKLESS_IDLE
|
|
|
|
help
|
2020-12-25 07:04:32 -05:00
|
|
|
If enabled, about 260B of RTOS_IDLE related source code would be in IRAM and chip would sleep
|
2020-12-23 01:45:36 -05:00
|
|
|
longer for 40us at most each time.
|
2020-12-25 07:04:32 -05:00
|
|
|
This feature is intended to be used when lower power consumption is needed
|
|
|
|
while there is enough place in IRAM to place source code.
|
|
|
|
|
2020-11-12 07:39:55 -05:00
|
|
|
config PM_SLP_DISABLE_GPIO
|
|
|
|
bool "Disable all GPIO when chip at sleep"
|
|
|
|
depends on FREERTOS_USE_TICKLESS_IDLE
|
|
|
|
help
|
|
|
|
This feature is intended to disable all GPIO pins at automantic sleep to get a lower power mode.
|
|
|
|
If enabled, chips will disable all GPIO pins at automantic sleep to reduce about 200~300 uA current.
|
|
|
|
If you want to specifically use some pins normally as chip wakes when chip sleeps,
|
|
|
|
you can call 'gpio_sleep_sel_dis' to disable this feature on those pins.
|
|
|
|
You can also keep this feature on and call 'gpio_sleep_set_direction' and 'gpio_sleep_set_pull_mode'
|
|
|
|
to have a different GPIO configuration at sleep.
|
|
|
|
Waring: If you want to enable this option on ESP32, you should enable `GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL`
|
|
|
|
at first, otherwise you will not be able to switch pullup/pulldown mode.
|
|
|
|
|
2021-02-22 21:17:27 -05:00
|
|
|
config PM_SLP_DEFAULT_PARAMS_OPT
|
|
|
|
bool
|
|
|
|
default n
|
|
|
|
|
2023-04-08 05:27:40 -04:00
|
|
|
config PM_CHECK_SLEEP_RETENTION_FRAME
|
|
|
|
bool
|
|
|
|
depends on PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP
|
|
|
|
default n if !IDF_CI_BUILD
|
|
|
|
help
|
|
|
|
This option is invisible to users, and it is only used for ci testing,
|
|
|
|
enabling it in the application will increase the sleep and wake-up time overhead
|
|
|
|
|
2021-03-10 08:55:49 -05:00
|
|
|
config PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP
|
|
|
|
bool "Power down CPU in light sleep"
|
2023-01-31 07:11:25 -05:00
|
|
|
depends on IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3 || IDF_TARGET_ESP32C6
|
2021-08-20 08:33:33 -04:00
|
|
|
select PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP if ESP32S3_DATA_CACHE_16KB
|
2021-03-10 08:55:49 -05:00
|
|
|
default y
|
|
|
|
help
|
2021-06-18 05:25:04 -04:00
|
|
|
If enabled, the CPU will be powered down in light sleep. On esp32c3 soc, enabling this
|
|
|
|
option will consume 1.68 KB of internal RAM and will reduce sleep current consumption
|
|
|
|
by about 100 uA. On esp32s3 soc, enabling this option will consume 8.58 KB of internal
|
|
|
|
RAM and will reduce sleep current consumption by about 650 uA.
|
2021-03-10 08:55:49 -05:00
|
|
|
|
2021-08-20 08:33:33 -04:00
|
|
|
config PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP
|
|
|
|
bool "Power down I/D-cache tag memory in light sleep"
|
|
|
|
depends on IDF_TARGET_ESP32S3 && PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
If enabled, the I/D-cache tag memory will be retained in light sleep. Depending on the the
|
|
|
|
cache configuration, if this option is enabled, it will consume up to 9 KB of internal RAM.
|
|
|
|
|
2023-02-14 01:35:05 -05:00
|
|
|
config PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP
|
2023-03-22 23:37:42 -04:00
|
|
|
bool "Power down Digital Peripheral in light sleep (EXPERIMENTAL)"
|
2023-02-14 01:35:05 -05:00
|
|
|
depends on SOC_PAU_SUPPORTED
|
|
|
|
default n #TODO: enable by default if periph init/deinit management supported (WIFI-5252)
|
|
|
|
help
|
2023-03-22 23:37:42 -04:00
|
|
|
If enabled, digital peripherals will be powered down in light sleep, it will reduce sleep
|
|
|
|
current consumption by about 100 uA. Chip will save/restore register context at sleep/wake
|
|
|
|
time to keep the system running. Enabling this option will increase static RAM and heap usage,
|
|
|
|
the actual cost depends on the peripherals you have initialized. In order to save/restore the
|
|
|
|
context of the necessary hardware for FreeRTOS to run, it will need at least 4.55 KB free heap
|
|
|
|
at sleep time. Otherwise sleep will not power down the peripherals.
|
|
|
|
|
2023-05-08 03:11:22 -04:00
|
|
|
Note1: Please use this option with caution, the current IDF does not support the retention of
|
2023-03-22 23:37:42 -04:00
|
|
|
all peripherals. When the digital peripherals are powered off and a sleep and wake-up is completed,
|
|
|
|
the peripherals that have not saved the running context are equivalent to performing a reset.
|
|
|
|
!!! Please confirm the peripherals used in your application and their sleep retention support status
|
|
|
|
before enabling this option, peripherals sleep retention driver support status is tracked in
|
|
|
|
power_management.rst
|
2023-02-14 01:35:05 -05:00
|
|
|
|
2023-05-08 03:11:22 -04:00
|
|
|
Note2: When this option is enabled simultaneously with FREERTOS_USE_TICKLESS_IDLE, since the UART will
|
|
|
|
be powered down, the uart FIFO will be flushed before sleep to avoid data loss, however, this has the
|
|
|
|
potential to block the sleep process and cause the wakeup time to be skipped, which will cause the tick
|
|
|
|
of freertos to not be compensated correctly when returning from sleep and cause the system to crash.
|
|
|
|
To avoid this, you can use ESP_PM_NO_LIGHT_SLEEP to protect your UART transmission, fflush the stdout
|
|
|
|
after printing, or increase FREERTOS_IDLE_TIME_BEFORE_SLEEP threshold in menuconfig.
|
|
|
|
|
2021-11-09 22:46:46 -05:00
|
|
|
config PM_UPDATE_CCOMPARE_HLI_WORKAROUND
|
|
|
|
bool
|
|
|
|
default y if PM_ENABLE && BTDM_CTRL_HLI
|
|
|
|
|
2020-07-21 05:15:19 -04:00
|
|
|
endmenu # "Power Management"
|