mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-29 05:38:42 +00: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 "hli_api.h"
|
||||||
#include "esp_core_dump.h"
|
#include "esp_core_dump.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLUEDROID_ENABLED
|
||||||
|
#include "esp_bt_main.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CONFIG_BT_ENABLED
|
#if CONFIG_BT_ENABLED
|
||||||
#define CONFIG_BT_HLIGH_LEVEL_INT
|
#define CONFIG_BT_HLIGH_LEVEL_INT
|
||||||
/* Macro definition
|
/* Macro definition
|
||||||
@@ -1207,6 +1211,35 @@ esp_err_t esp_bt_controller_deinit(void)
|
|||||||
return ESP_OK;
|
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)
|
esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
|
||||||
{
|
{
|
||||||
int ret;
|
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;
|
btdm_controller_status = ESP_BT_CONTROLLER_STATUS_ENABLED;
|
||||||
|
esp_register_shutdown_handler((shutdown_handler_t)bt_restart);
|
||||||
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
@@ -1304,6 +1338,7 @@ esp_err_t esp_bt_controller_disable(void)
|
|||||||
esp_pm_lock_release(s_pm_lock);
|
esp_pm_lock_release(s_pm_lock);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
return ESP_OK;
|
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 };
|
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];
|
static shutdown_handler_t shutdown_handlers[SHUTDOWN_HANDLERS_NO];
|
||||||
|
|
||||||
void system_init()
|
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)
|
esp_err_t esp_register_shutdown_handler(shutdown_handler_t handler)
|
||||||
{
|
{
|
||||||
int i;
|
int empty_slot = SHUTDOWN_HANDLERS_NO;
|
||||||
for (i = 0; i < SHUTDOWN_HANDLERS_NO; i++) {
|
int i;
|
||||||
if (shutdown_handlers[i] == NULL) {
|
|
||||||
shutdown_handlers[i] = handler;
|
for (i = 0; i < SHUTDOWN_HANDLERS_NO; i++) {
|
||||||
return ESP_OK;
|
if (shutdown_handlers[i] == handler) {
|
||||||
}
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
return ESP_FAIL;
|
|
||||||
|
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));
|
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_RW_BTMAC_RST | DPORT_RW_BTLP_RST);
|
||||||
DPORT_REG_WRITE(DPORT_CORE_RST_EN_REG, 0);
|
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
|
// Reset timer/spi/uart
|
||||||
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG,
|
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);
|
DPORT_TIMERS_RST | DPORT_SPI01_RST | DPORT_UART_RST | DPORT_UART1_RST | DPORT_UART2_RST);
|
||||||
|
Reference in New Issue
Block a user