feat(phy): update PHY libraries and improve PLL temperature tracking

1. Allow customization of temperature deltas for PHY track PLL.

2. Fix abnormal PHY state which may trigger task watchdog timeout.
This commit is contained in:
sibeibei
2025-11-05 19:57:06 +08:00
committed by zwx
parent 4fb37541a0
commit 2e07405917
4 changed files with 57 additions and 0 deletions

View File

@@ -207,5 +207,46 @@ menu "PHY"
PLL track helps the PHY module adapt to temperature changes, ensuring stable performance.
When pll enabled, the ESP PHY module will periodically track and adjust PLL parameters.
config ESP_PHY_PLL_TRACK_TEMP_DEBUG
bool "PHY temperature tracking debug mode"
depends on ESP_PHY_DEBUG
default n
help
If enabled, allows customization of temperature delta for PHY track pll.
config ESP_PHY_PLL_TRACK_TEMP_DEBUG_FLAG
int "Debug flag for PHY temperature tracking"
depends on ESP_PHY_PLL_TRACK_TEMP_DEBUG
range 1 3
default 1
help
Bitmask debug flag passed to the PHY temperature tracking routine.
Each bit enables a specific tracking mode.
- bit0: PLL tracking
- bit1: Calibration parameter tracking
config ESP_PHY_PLL_TRACK_TEMP_DELTA
int "Temperature delta for PHY track pll"
depends on ESP_PHY_PLL_TRACK_TEMP_DEBUG
range 0 255
default 10
help
Set the temperature delta for PHY track pll.
config ESP_PHY_INIT_IRAM
bool "Place PHY (de)init in IRAM"
depends on SOC_IEEE802154_BLE_ONLY
default n
help
Select this option to place esp_phy and PHY library functions related to phy_init in IRAM.
This config applies to ESP32-H2, ESP32-H21, and ESP32-H4.
config ESP_PHY_ENABLE_VERSION_PRINT
bool "Print PHY version"
default y
help
Select to print PHY version in esp_phy_enable. This config only applies to esp32hxx for now.
endif
endmenu # PHY

View File

@@ -247,6 +247,16 @@ void esp_phy_modem_rf_flag_update(void);
*/
void phy_wait_freq_hw_hop_done(void);
#if CONFIG_ESP_PHY_PLL_TRACK_TEMP_DEBUG
/**
* @brief Set the temperature delta for PHY track pll
*
* @param debug_flag Debug flag for PHY temperature tracking
* @param track_temp Temperature delta for PHY temperature tracking
*/
void phy_track_temp_debug(uint8_t debug_flag, uint8_t track_temp);
#endif
#ifdef __cplusplus
}
#endif

View File

@@ -334,6 +334,9 @@ void esp_phy_enable(esp_phy_modem_t modem)
assert(phy_module_has_clock_bits(PHY_INIT_MODEM_CLOCK_REQUIRED_BITS));
if (s_is_phy_calibrated == false) {
esp_phy_load_cal_and_init();
#if CONFIG_ESP_PHY_PLL_TRACK_TEMP_DEBUG
phy_track_temp_debug(CONFIG_ESP_PHY_PLL_TRACK_TEMP_DEBUG_FLAG, CONFIG_ESP_PHY_PLL_TRACK_TEMP_DELTA);
#endif
s_is_phy_calibrated = true;
} else {
#if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP

View File

@@ -118,6 +118,9 @@ void esp_phy_enable(esp_phy_modem_t modem)
if (!s_phy_is_enabled) {
register_chipv7_phy(NULL, NULL, PHY_RF_CAL_FULL);
phy_version_print();
#if CONFIG_ESP_PHY_PLL_TRACK_TEMP_DEBUG
phy_track_temp_debug(CONFIG_ESP_PHY_PLL_TRACK_TEMP_DEBUG_FLAG, CONFIG_ESP_PHY_PLL_TRACK_TEMP_DELTA);
#endif
s_phy_is_enabled = true;
} else {
phy_wakeup_init();