mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-31 19:24:33 +02:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
Submodule components/esp32/lib updated: 8a32f641e6...49bd17b2ba
@@ -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);
|
||||
|
Reference in New Issue
Block a user