diff --git a/components/esp8266/Kconfig b/components/esp8266/Kconfig index 9b8d8e76..9b1f08cb 100644 --- a/components/esp8266/Kconfig +++ b/components/esp8266/Kconfig @@ -560,6 +560,31 @@ endmenu menu PHY +choice ESP8266_PHY_CALIBRATION + prompt "RF calibration" + default ESP8266_PHY_FULL_CALIBRATION + help + If calibration data is not found, full calibration will be performed. To ensure better RF performance, + it is recommend to set RF_calibration to ESP8266_PHY_FULL_CALIBRATION, otherwise the RF performance may become poor. + + Full calibration needs 170 - 180ms. + Partial calibration needs 35 - 40ms. + No calibration needs 3.260 - 3.264ms. + +config ESP8266_PHY_FULL_CALIBRATION + bool "RF full calibration" +config ESP8266_PHY_NO_CALIBRATION + bool "RF no calibration" +config ESP8266_PHY_PARTIAL_CALIBRATION + bool "RF partial calibration" +endchoice + +config ESP8266_PHY_CALIBRATION + int + default 3 if ESP8266_PHY_FULL_CALIBRATION + default 2 if ESP8266_PHY_PARTIAL_CALIBRATION + default 1 if ESP8266_PHY_NO_CALIBRATION + config ESP_PHY_CALIBRATION_AND_DATA_STORAGE bool "Store phy calibration data in NVS" default y diff --git a/components/esp8266/source/phy.h b/components/esp8266/source/phy.h index dd2a6716..cb549b38 100644 --- a/components/esp8266/source/phy.h +++ b/components/esp8266/source/phy.h @@ -26,6 +26,8 @@ uint8_t phy_check_data_table(uint32_t *table, uint8_t, uint8_t); void phy_afterwake_set_rfoption(uint8_t); +void phy_set_powerup_option(uint8_t); + void write_data_to_rtc(uint8_t *); void get_data_from_rtc(uint8_t *); diff --git a/components/esp8266/source/phy_init.c b/components/esp8266/source/phy_init.c index ff1d9e39..cc1f01ac 100644 --- a/components/esp8266/source/phy_init.c +++ b/components/esp8266/source/phy_init.c @@ -71,6 +71,7 @@ esp_err_t esp_phy_rf_init(const esp_phy_init_data_t* init_data, esp_phy_calibrat uint8_t *local_init_data = calloc(1, 256); memcpy(local_init_data, init_data->params, 128); + memcpy(local_init_data + 128, calibration_data->rf_cal_data, 128); extern uint32_t* phy_rx_gain_dc_table; phy_rx_gain_dc_table = calibration_data->rx_gain_dc_table; @@ -78,6 +79,7 @@ esp_err_t esp_phy_rf_init(const esp_phy_init_data_t* init_data, esp_phy_calibrat phy_check_data_table(phy_rx_gain_dc_table, 125, 1); phy_afterwake_set_rfoption(1); + phy_set_powerup_option(CONFIG_ESP8266_PHY_CALIBRATION); if (!cal_data_check) { write_data_to_rtc(calibration_data->rf_cal_data);