Fix WiFi TX issue during after esp_restart

1. Delay 1us when reset WiFi/BT mac
2. Stop BT first before esp_restart
3. Update libphy.a to 4185
This commit is contained in:
liu zhifu
2020-09-29 17:24:07 +08:00
committed by maojianxin
parent 04b68f2002
commit 59b1f8bc89
3 changed files with 59 additions and 10 deletions

View File

@@ -47,6 +47,10 @@
#include "hli_api.h"
#include "esp_core_dump.h"
#ifdef CONFIG_BLUEDROID_ENABLED
#include "esp_bt_main.h"
#endif
#if CONFIG_BT_ENABLED
#define CONFIG_BT_HLIGH_LEVEL_INT
/* Macro definition
@@ -1207,6 +1211,35 @@ esp_err_t esp_bt_controller_deinit(void)
return ESP_OK;
}
static esp_err_t bt_restart(void)
{
int ret = 0;
ESP_LOGI(BTDM_LOG_TAG, "stop/deinit bt");
#ifdef CONFIG_BLUEDROID_ENABLED
ret = esp_bluedroid_disable();
if (ESP_OK != ret) {
ESP_LOGW(BTDM_LOG_TAG, "bluedroid disable ret=%d", ret);
}
ret = esp_bluedroid_deinit();
if (ESP_OK != ret) {
ESP_LOGW(BTDM_LOG_TAG, "bluedroid deinit ret=%d", ret);
}
#endif
ret = esp_bt_controller_disable();
if (ESP_OK != ret) {
ESP_LOGW(BTDM_LOG_TAG, "controller disable ret=%d", ret);
}
ret = esp_bt_controller_deinit();
if (ESP_OK != ret) {
ESP_LOGW(BTDM_LOG_TAG, "controller deinit ret=%d", ret);
}
return ESP_OK;
}
esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
{
int ret;
@@ -1266,6 +1299,7 @@ esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
}
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_ENABLED;
esp_register_shutdown_handler((shutdown_handler_t)bt_restart);
return ESP_OK;
}
@@ -1304,6 +1338,7 @@ esp_err_t esp_bt_controller_disable(void)
esp_pm_lock_release(s_pm_lock);
#endif
return ESP_OK;
}

View File

@@ -44,7 +44,7 @@ static const char* TAG = "system_api";
static uint8_t base_mac_addr[6] = { 0 };
#define SHUTDOWN_HANDLERS_NO 2
#define SHUTDOWN_HANDLERS_NO 3
static shutdown_handler_t shutdown_handlers[SHUTDOWN_HANDLERS_NO];
void system_init()
@@ -211,14 +211,25 @@ esp_err_t esp_read_mac(uint8_t* mac, esp_mac_type_t type)
esp_err_t esp_register_shutdown_handler(shutdown_handler_t handler)
{
int i;
for (i = 0; i < SHUTDOWN_HANDLERS_NO; i++) {
if (shutdown_handlers[i] == NULL) {
shutdown_handlers[i] = handler;
return ESP_OK;
}
}
return ESP_FAIL;
int empty_slot = SHUTDOWN_HANDLERS_NO;
int i;
for (i = 0; i < SHUTDOWN_HANDLERS_NO; i++) {
if (shutdown_handlers[i] == handler) {
return ESP_OK;
}
if ((empty_slot == SHUTDOWN_HANDLERS_NO) && (shutdown_handlers[i] == NULL)) {
empty_slot = i;
}
}
if (empty_slot < SHUTDOWN_HANDLERS_NO) {
shutdown_handlers[empty_slot] = handler;
return ESP_OK;
}
return ESP_FAIL;
}
void esp_restart_noos() __attribute__ ((noreturn));
@@ -303,6 +314,9 @@ void IRAM_ATTR esp_restart_noos()
DPORT_RW_BTMAC_RST | DPORT_RW_BTLP_RST);
DPORT_REG_WRITE(DPORT_CORE_RST_EN_REG, 0);
// Delay 1us to make sure wifi/bt mac/bb reset successfully
ets_delay_us(1);
// Reset timer/spi/uart
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG,
DPORT_TIMERS_RST | DPORT_SPI01_RST | DPORT_UART_RST | DPORT_UART1_RST | DPORT_UART2_RST);