Merge branch 'feat/support_bod_p4_eco2_v5.3' into 'release/v5.3'

feat(bod): Update bod threshold on esp32p4-eco2 (backport v5.3)

See merge request espressif/esp-idf!34591
This commit is contained in:
Michael (XIAO Xufeng)
2024-11-07 21:36:01 +08:00
6 changed files with 36 additions and 25 deletions

View File

@ -13,12 +13,15 @@ choice ESP32P4_REV_MIN
bool "Rev v0.0"
config ESP32P4_REV_MIN_1
bool "Rev v0.1"
config ESP32P4_REV_MIN_100
bool "Rev v1.0"
endchoice
config ESP32P4_REV_MIN_FULL
int
default 0 if ESP32P4_REV_MIN_0
default 1 if ESP32P4_REV_MIN_1
default 100 if ESP32P4_REV_MIN_100
config ESP_REV_MIN_FULL
int
@ -28,7 +31,7 @@ config ESP_REV_MIN_FULL
# MAX Revision
#
comment "Maximum Supported ESP32-P4 Revision (Rev v0.99)"
comment "Maximum Supported ESP32-P4 Revision (Rev v1.99)"
# Maximum revision that IDF supports.
# It can not be changed by user.
# Only Espressif can change it when a new version will be supported in IDF.
@ -36,7 +39,7 @@ config ESP_REV_MIN_FULL
config ESP32P4_REV_MAX_FULL
int
default 99
default 199
# keep in sync the "Maximum Supported Revision" description with this value
config ESP_REV_MAX_FULL

View File

@ -10,34 +10,28 @@ menu "Brownout Detector"
choice ESP_BROWNOUT_DET_LVL_SEL
prompt "Brownout voltage level"
depends on ESP_BROWNOUT_DET
default ESP_BROWNOUT_DET_LVL_SEL_7
depends on ESP_BROWNOUT_DET
help
The brownout detector will reset the chip when the supply voltage is approximately
below this level. Note that there may be some variation of brownout voltage level
between each chip.
Please note that this config is only valid when P4 SOC version is above v1.0. When you are using a
earlier P4 SOC version (v0.x), the brownout value should be fixed around 2.52V and not configurable.
#The voltage levels here are estimates, more work needs to be done to figure out the exact voltages
#of the brownout threshold levels.
config ESP_BROWNOUT_DET_LVL_SEL_7
bool "2.51V"
bool "2.6V"
config ESP_BROWNOUT_DET_LVL_SEL_6
bool "2.64V"
bool "2.52V"
config ESP_BROWNOUT_DET_LVL_SEL_5
bool "2.76V"
config ESP_BROWNOUT_DET_LVL_SEL_4
bool "2.92V"
config ESP_BROWNOUT_DET_LVL_SEL_3
bool "3.10V"
config ESP_BROWNOUT_DET_LVL_SEL_2
bool "3.27V"
bool "2.42V"
endchoice
config ESP_BROWNOUT_DET_LVL
int
default 2 if ESP_BROWNOUT_DET_LVL_SEL_2
default 3 if ESP_BROWNOUT_DET_LVL_SEL_3
default 4 if ESP_BROWNOUT_DET_LVL_SEL_4
default 5 if ESP_BROWNOUT_DET_LVL_SEL_5
default 6 if ESP_BROWNOUT_DET_LVL_SEL_6
default 7 if ESP_BROWNOUT_DET_LVL_SEL_7

View File

@ -65,7 +65,8 @@ static inline void brownout_ll_reset_config(bool reset_ena, uint32_t reset_wait,
*/
static inline void brownout_ll_set_threshold(uint8_t threshold)
{
REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD, threshold);
REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD_L, threshold);
REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD_H, threshold);
}
/**

View File

@ -15,6 +15,8 @@
#include "soc/lp_analog_peri_struct.h"
#include "hal/regi2c_ctrl.h"
#include "soc/regi2c_brownout.h"
#include "hal/efuse_hal.h"
#include "soc/chip_revision.h"
#ifdef __cplusplus
extern "C" {
@ -62,7 +64,11 @@ static inline void brownout_ll_reset_config(bool reset_ena, uint32_t reset_wait,
*/
static inline void brownout_ll_set_threshold(uint8_t threshold)
{
REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD, threshold);
if (!ESP_CHIP_REV_ABOVE(efuse_hal_chip_revision(), 100)) {
threshold = 0; // Fix this level as 0 so that on v0.x brownout value will be fixed around 2.52v.
}
REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD_L, threshold);
REGI2C_WRITE_MASK(I2C_BOD, I2C_BOD_THRESHOLD_H, threshold);
}
/**

View File

@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@ -44,6 +44,10 @@
#define I2C_PMU_OR_DREFH_VDDA_MSB 7
#define I2C_PMU_OR_DREFH_VDDA_LSB 5
#define I2C_BOD_THRESHOLD I2C_PMU_OR_DREFL_VDDA
#define I2C_BOD_THRESHOLD_MSB I2C_PMU_OR_DREFL_VDDA_MSB
#define I2C_BOD_THRESHOLD_LSB I2C_PMU_OR_DREFL_VDDA_LSB
#define I2C_BOD_THRESHOLD_L I2C_PMU_OR_DREFL_VDDA
#define I2C_BOD_THRESHOLD_L_MSB I2C_PMU_OR_DREFL_VDDA_MSB
#define I2C_BOD_THRESHOLD_L_LSB I2C_PMU_OR_DREFL_VDDA_LSB
#define I2C_BOD_THRESHOLD_H I2C_PMU_OR_DREFH_VDDA
#define I2C_BOD_THRESHOLD_H_MSB I2C_PMU_OR_DREFH_VDDA_MSB
#define I2C_BOD_THRESHOLD_H_LSB I2C_PMU_OR_DREFH_VDDA_LSB

View File

@ -14,9 +14,12 @@
* bus. These definitions are used via macros defined in regi2c_ctrl.h.
*/
#define I2C_BOD 0x61
#define I2C_BOD 0x6a
#define I2C_BOD_HOSTID 0
#define I2C_BOD_THRESHOLD 0x5
#define I2C_BOD_THRESHOLD_MSB 2
#define I2C_BOD_THRESHOLD_LSB 0
#define I2C_BOD_THRESHOLD_L 0x9
#define I2C_BOD_THRESHOLD_L_MSB 4
#define I2C_BOD_THRESHOLD_L_LSB 2
#define I2C_BOD_THRESHOLD_H 0x9
#define I2C_BOD_THRESHOLD_H_MSB 7
#define I2C_BOD_THRESHOLD_H_LSB 5