mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 18:57:19 +02:00
Merge branch 'bugfix/close_rf_in_deep_sleep_backport_v4.4' into 'release/v4.4'
deep sleep: further optimize sleep current if RF is enabled (backport v4.4) See merge request espressif/esp-idf!22737
This commit is contained in:
@ -206,7 +206,6 @@ void rtc_sleep_init(rtc_sleep_config_t cfg)
|
|||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG,
|
CLEAR_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG,
|
||||||
RTC_CNTL_CKGEN_I2C_PU | RTC_CNTL_PLL_I2C_PU |
|
RTC_CNTL_CKGEN_I2C_PU | RTC_CNTL_PLL_I2C_PU |
|
||||||
RTC_CNTL_RFRX_PBUS_PU | RTC_CNTL_TXRF_I2C_PU);
|
RTC_CNTL_RFRX_PBUS_PU | RTC_CNTL_TXRF_I2C_PU);
|
||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_OPTIONS0_REG, RTC_CNTL_BB_I2C_FORCE_PU);
|
|
||||||
} else {
|
} else {
|
||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_PWC_REG, RTC_CNTL_DG_WRAP_PD_EN);
|
CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_PWC_REG, RTC_CNTL_DG_WRAP_PD_EN);
|
||||||
}
|
}
|
||||||
|
@ -156,7 +156,6 @@ void rtc_sleep_init(rtc_sleep_config_t cfg)
|
|||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG,
|
CLEAR_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG,
|
||||||
RTC_CNTL_CKGEN_I2C_PU | RTC_CNTL_PLL_I2C_PU |
|
RTC_CNTL_CKGEN_I2C_PU | RTC_CNTL_PLL_I2C_PU |
|
||||||
RTC_CNTL_RFRX_PBUS_PU | RTC_CNTL_TXRF_I2C_PU);
|
RTC_CNTL_RFRX_PBUS_PU | RTC_CNTL_TXRF_I2C_PU);
|
||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_OPTIONS0_REG, RTC_CNTL_BB_I2C_FORCE_PU);
|
|
||||||
} else {
|
} else {
|
||||||
SET_PERI_REG_MASK(RTC_CNTL_BIAS_CONF_REG, RTC_CNTL_DG_VDD_DRV_B_SLP_EN);
|
SET_PERI_REG_MASK(RTC_CNTL_BIAS_CONF_REG, RTC_CNTL_DG_VDD_DRV_B_SLP_EN);
|
||||||
REG_SET_FIELD(RTC_CNTL_BIAS_CONF_REG, RTC_CNTL_DG_VDD_DRV_B_SLP, RTC_CNTL_DG_VDD_DRV_B_SLP_DEFAULT);
|
REG_SET_FIELD(RTC_CNTL_BIAS_CONF_REG, RTC_CNTL_DG_VDD_DRV_B_SLP, RTC_CNTL_DG_VDD_DRV_B_SLP_DEFAULT);
|
||||||
|
@ -156,7 +156,6 @@ void rtc_sleep_init(rtc_sleep_config_t cfg)
|
|||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG,
|
CLEAR_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG,
|
||||||
RTC_CNTL_CKGEN_I2C_PU | RTC_CNTL_PLL_I2C_PU |
|
RTC_CNTL_CKGEN_I2C_PU | RTC_CNTL_PLL_I2C_PU |
|
||||||
RTC_CNTL_RFRX_PBUS_PU | RTC_CNTL_TXRF_I2C_PU);
|
RTC_CNTL_RFRX_PBUS_PU | RTC_CNTL_TXRF_I2C_PU);
|
||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_OPTIONS0_REG, RTC_CNTL_BB_I2C_FORCE_PU);
|
|
||||||
} else {
|
} else {
|
||||||
SET_PERI_REG_MASK(RTC_CNTL_REG, RTC_CNTL_REGULATOR_FORCE_PU);
|
SET_PERI_REG_MASK(RTC_CNTL_REG, RTC_CNTL_REGULATOR_FORCE_PU);
|
||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_PWC_REG, RTC_CNTL_DG_WRAP_PD_EN);
|
CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_PWC_REG, RTC_CNTL_DG_WRAP_PD_EN);
|
||||||
|
@ -212,7 +212,6 @@ void rtc_sleep_init(rtc_sleep_config_t cfg)
|
|||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG,
|
CLEAR_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG,
|
||||||
RTC_CNTL_CKGEN_I2C_PU | RTC_CNTL_PLL_I2C_PU |
|
RTC_CNTL_CKGEN_I2C_PU | RTC_CNTL_PLL_I2C_PU |
|
||||||
RTC_CNTL_RFRX_PBUS_PU | RTC_CNTL_TXRF_I2C_PU);
|
RTC_CNTL_RFRX_PBUS_PU | RTC_CNTL_TXRF_I2C_PU);
|
||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_OPTIONS0_REG, RTC_CNTL_BB_I2C_FORCE_PU);
|
|
||||||
} else {
|
} else {
|
||||||
REG_SET_FIELD(RTC_CNTL_REGULATOR_DRV_CTRL_REG, RTC_CNTL_DG_VDD_DRV_B_SLP, RTC_CNTL_DG_VDD_DRV_B_SLP_DEFAULT);
|
REG_SET_FIELD(RTC_CNTL_REGULATOR_DRV_CTRL_REG, RTC_CNTL_DG_VDD_DRV_B_SLP, RTC_CNTL_DG_VDD_DRV_B_SLP_DEFAULT);
|
||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_PWC_REG, RTC_CNTL_DG_WRAP_PD_EN);
|
CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_PWC_REG, RTC_CNTL_DG_WRAP_PD_EN);
|
||||||
|
@ -427,7 +427,13 @@ static uint32_t IRAM_ATTR esp_sleep_start(uint32_t pd_flags)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!deep_sleep) {
|
if (deep_sleep) {
|
||||||
|
extern bool esp_phy_is_initialized(void);
|
||||||
|
if (esp_phy_is_initialized()){
|
||||||
|
extern void phy_close_rf(void);
|
||||||
|
phy_close_rf();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
misc_modules_sleep_prepare();
|
misc_modules_sleep_prepare();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,6 +150,12 @@ esp_err_t esp_phy_store_cal_data_to_nvs(const esp_phy_calibration_data_t* cal_da
|
|||||||
*/
|
*/
|
||||||
esp_err_t esp_phy_erase_cal_data_in_nvs(void);
|
esp_err_t esp_phy_erase_cal_data_in_nvs(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get phy initialize status
|
||||||
|
* @return return true if phy is already initialized.
|
||||||
|
*/
|
||||||
|
bool esp_phy_is_initialized(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enable PHY and RF module
|
* @brief Enable PHY and RF module
|
||||||
*
|
*
|
||||||
|
@ -219,6 +219,11 @@ static inline void phy_digital_regs_load(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool esp_phy_is_initialized(void)
|
||||||
|
{
|
||||||
|
return s_is_phy_calibrated;
|
||||||
|
}
|
||||||
|
|
||||||
void esp_phy_enable(void)
|
void esp_phy_enable(void)
|
||||||
{
|
{
|
||||||
_lock_acquire(&s_phy_access_lock);
|
_lock_acquire(&s_phy_access_lock);
|
||||||
|
@ -31,7 +31,7 @@ Once wakeup sources are configured, application can enter sleep mode using :cpp:
|
|||||||
WiFi/BT and sleep modes
|
WiFi/BT and sleep modes
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
In deep sleep and light sleep modes, wireless peripherals are powered down. Before entering deep sleep or light sleep modes, applications must disable WiFi and BT using appropriate calls (:cpp:func:`esp_bluedroid_disable`, :cpp:func:`esp_bt_controller_disable`, :cpp:func:`esp_wifi_stop`). WiFi and BT connections will not be maintained in deep sleep or light sleep, even if these functions are not called.
|
In deep sleep and light sleep modes, wireless peripherals are powered down. Before entering light sleep modes, applications must disable WiFi and BT using appropriate calls (:cpp:func:`esp_bluedroid_disable`, :cpp:func:`esp_bt_controller_disable`, :cpp:func:`esp_wifi_stop`). WiFi and BT connections will not be maintained in deep sleep or light sleep, even if these functions are not called.
|
||||||
|
|
||||||
.. only:: not SOC_BT_SUPPORTED
|
.. only:: not SOC_BT_SUPPORTED
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user