Merge branch 'bugfix/some_changes_relating_to_phy_v3900' into 'master'

esp32: some changes relating to phy v3900

See merge request idf/esp-idf!2421
This commit is contained in:
Jiang Jiang Jian 2018-05-22 21:09:05 +08:00
commit b19afed31f
3 changed files with 17 additions and 3 deletions

View file

@ -37,7 +37,9 @@ typedef struct {
* @brief Opaque PHY calibration data * @brief Opaque PHY calibration data
*/ */
typedef struct { typedef struct {
uint8_t opaque[1904]; /*!< calibration data */ uint8_t version[4]; /*!< PHY version */
uint8_t mac[6]; /*!< The MAC address of the station */
uint8_t opaque[1894]; /*!< calibration data */
} esp_phy_calibration_data_t; } esp_phy_calibration_data_t;
typedef enum { typedef enum {

View file

@ -19,6 +19,8 @@
extern "C" { extern "C" {
#endif #endif
#define ESP_CAL_DATA_CHECK_FAIL 1
/** /**
* @file phy.h * @file phy.h
* @brief Declarations for functions provided by libphy.a * @brief Declarations for functions provided by libphy.a
@ -34,7 +36,7 @@ void phy_get_romfunc_addr(void);
* @param[in] init_data Initialization parameters to be used by the PHY * @param[in] init_data Initialization parameters to be used by the PHY
* @param[inout] cal_data As input, calibration data previously obtained. As output, will contain new calibration data. * @param[inout] cal_data As input, calibration data previously obtained. As output, will contain new calibration data.
* @param[in] cal_mode RF calibration mode * @param[in] cal_mode RF calibration mode
* @return reserved for future use * @return ESP_CAL_DATA_CHECK_FAIL if calibration data checksum fails, other values are reserved for future use
*/ */
int register_chipv7_phy(const esp_phy_init_data_t* init_data, esp_phy_calibration_data_t *cal_data, esp_phy_calibration_mode_t cal_mode); int register_chipv7_phy(const esp_phy_init_data_t* init_data, esp_phy_calibration_data_t *cal_data, esp_phy_calibration_mode_t cal_mode);

View file

@ -119,7 +119,16 @@ esp_err_t esp_phy_rf_init(const esp_phy_init_data_t* init_data, esp_phy_calibrat
// Enable WiFi/BT common peripheral clock // Enable WiFi/BT common peripheral clock
periph_module_enable(PERIPH_WIFI_BT_COMMON_MODULE); periph_module_enable(PERIPH_WIFI_BT_COMMON_MODULE);
phy_set_wifi_mode_only(0); phy_set_wifi_mode_only(0);
register_chipv7_phy(init_data, calibration_data, mode);
if (ESP_CAL_DATA_CHECK_FAIL == register_chipv7_phy(init_data, calibration_data, mode)) {
ESP_LOGW(TAG, "saving new calibration data because of checksum failure, mode(%d)", mode);
#ifdef CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE
if (mode != PHY_RF_CAL_FULL) {
esp_phy_store_cal_data_to_nvs(calibration_data);
}
#endif
}
coex_bt_high_prio(); coex_bt_high_prio();
} }
} }
@ -476,6 +485,7 @@ static esp_err_t load_cal_data_from_nvs_handle(nvs_handle handle,
ESP_LOGD(TAG, "%s: invalid length of cal_data (%d)", __func__, length); ESP_LOGD(TAG, "%s: invalid length of cal_data (%d)", __func__, length);
return ESP_ERR_INVALID_SIZE; return ESP_ERR_INVALID_SIZE;
} }
memcpy(out_cal_data->mac, sta_mac, 6);
return ESP_OK; return ESP_OK;
} }