diff --git a/components/bootloader_support/src/bootloader_efuse_esp32s2.c b/components/bootloader_support/src/bootloader_efuse_esp32s2.c index 6108efc191..766a87d2c9 100644 --- a/components/bootloader_support/src/bootloader_efuse_esp32s2.c +++ b/components/bootloader_support/src/bootloader_efuse_esp32s2.c @@ -20,7 +20,7 @@ uint8_t bootloader_common_get_chip_revision(void) { // should return the same value as esp_efuse_get_chip_ver() - /* No other revisions for ESP32-S2 */ + return REG_GET_FIELD(EFUSE_RD_MAC_SPI_SYS_3_REG, EFUSE_WAFER_VERSION); return 0; } diff --git a/components/efuse/src/esp32s2/esp_efuse_fields.c b/components/efuse/src/esp32s2/esp_efuse_fields.c index f9174ca9e2..e85eb2b1d7 100644 --- a/components/efuse/src/esp32s2/esp_efuse_fields.c +++ b/components/efuse/src/esp32s2/esp_efuse_fields.c @@ -33,7 +33,7 @@ uint8_t esp_efuse_get_chip_ver(void) { // should return the same value as bootloader_common_get_chip_revision() uint32_t chip_ver = 0; - // TODO: ESP32S2 does not have this field + esp_efuse_read_field_blob(ESP_EFUSE_WAFER_VERSION, &chip_ver, ESP_EFUSE_WAFER_VERSION[0]->bit_count); return chip_ver; } diff --git a/components/esp_wifi/esp32s2/include/phy_init_data.h b/components/esp_wifi/esp32s2/include/phy_init_data.h index a17b7b910b..2714a150aa 100644 --- a/components/esp_wifi/esp32s2/include/phy_init_data.h +++ b/components/esp_wifi/esp32s2/include/phy_init_data.h @@ -44,64 +44,76 @@ static const char phy_init_magic_pre[] = PHY_INIT_MAGIC; * @brief Structure containing default recommended PHY initialization parameters. */ static const esp_phy_init_data_t phy_init_data= { { - 3, - 0, - 0x04, - 0x05, - 0x04, - 0x05, - 0x05, - 0x04, - 0x06, - 0x06, - 0x06, - 0x05, - 0x06, + 0x80, + 0x00, + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x4E), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x4E), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x44), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x44), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x44), + LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 0x42), 0x00, 0x00, 0x00, - 0x00, - 0x05, - 0x09, - 0x06, - 0x05, - 0x03, - 0x06, - 0x05, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xf4, - 0xf8, - 0xf8, - 0xf0, - 0xf0, - 0xf0, - 0xe0, - 0xe0, - 0xe0, - 0x18, - 0x18, - 0x18, - LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 84), - LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 72), - LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 66), - LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 60), - LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 56), - LIMIT(CONFIG_ESP32_PHY_MAX_TX_POWER * 4, 0, 52), - 0, - 1, - 1, - 2, - 2, - 3, - 4, - 5, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, + 0xff, 0, 0, 0, @@ -151,6 +163,15 @@ static const esp_phy_init_data_t phy_init_data= { { 0, 0, 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0xf1 } }; static const char phy_init_magic_post[] = PHY_INIT_MAGIC; diff --git a/components/esp_wifi/include/phy.h b/components/esp_wifi/include/phy.h index 14e1286db0..40c3a1d499 100644 --- a/components/esp_wifi/include/phy.h +++ b/components/esp_wifi/include/phy.h @@ -101,6 +101,13 @@ void phy_freq_mem_backup(bool backup_en, uint32_t *mem); void phy_bbpll_en_usb(bool en); #endif +#if CONFIG_IDF_TARGET_ESP32S2 +/** + * @brief Phy version select for ESP32S2 + */ +void phy_eco_version_sel(uint8_t chip_ver); +#endif + #ifdef __cplusplus } #endif diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index 349ac70804..2ee8c6208a 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit 349ac708040fcd6ce3142a4413d501c2d27af24c +Subproject commit 2ee8c6208ab3ace53fb220a7dee46c1746a2019f diff --git a/components/esp_wifi/src/phy_init.c b/components/esp_wifi/src/phy_init.c index 9e1cf4aaf5..4f8375f8ba 100644 --- a/components/esp_wifi/src/phy_init.c +++ b/components/esp_wifi/src/phy_init.c @@ -25,6 +25,7 @@ #include "esp_log.h" #include "nvs.h" #include "nvs_flash.h" +#include "esp_efuse.h" #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/portmacro.h" @@ -577,6 +578,10 @@ void esp_phy_load_cal_and_init(void) char * phy_version = get_phy_version_str(); ESP_LOGI(TAG, "phy_version %s", phy_version); +#if CONFIG_IDF_TARGET_ESP32S2 + phy_eco_version_sel(esp_efuse_get_chip_ver()); +#endif + esp_phy_calibration_data_t* cal_data = (esp_phy_calibration_data_t*) calloc(sizeof(esp_phy_calibration_data_t), 1); if (cal_data == NULL) {