Solución al error de inicialización WiFi en ESP32S3: "wifi:init nvs: failed, ret=101"

La siguiente explicación detalla el error que experimenta el ESP32 durante la inicialización de WiFi y proporciona pasos para solucionarlo.

Análisis del Mensaje de Error

El registro de errores indica un problema crítico al iniciar la funcionalidad WiFi en su ESP32. La causa principal es un fallo al leer la partición NVS (Non-Volatile Storage).

  • wifi:init nvs: failed, ret=101: Este mensaje señala que la biblioteca WiFi intentó recuperar configuraciones previamente guardadas (como SSID y contraseña) desde el almacenamiento NVS y falló. El código de error 101 a menudo se correlaciona con ESP_ERR_NVS_NOT_FOUND, sugiriendo que los datos esperados no existen o que el propio repositorio NVS está dañado.
  • Failed to deinit Wi-Fi driver y Failed to deinit Wi-Fi: Como resultado del fallo inicial en la lectura NVS, el sistema intenta limpiar y abortar el proceso de inicialización, pero esta operación también falla, creando un bucle problemático.

Raíces del Problema

NVS es una sección de la memoria flash del ESP32 utilizada para almacenar datos en formato clave-valor. Configuraciones de WiFi, credenciales del dispositivo y otra información volátil se guardan aquí. Las causas más comunes de este error son:

  1. Corrupción de Datos NVS: La razón más frecuente. Puede ocurrir debido a:
  • Interrupciones de energía o reinicios abruptos mientras se escriben datos.
  • Problemas físicos en la memoria flash.
  • Uso de tablas de partición o bibliotecas NVS incompatibles.
  1. Primer Uso / Falta de Inicialización: Si el chip es nuevo o la partición NVS nunca ha sido inicializada, contendrá datos inválidos, provocando fallos en la lectura.
  2. Secuencia de Código Incorrecta: La inicialización del WiFi (llamadas a WiFi.begin(), WiFi.mode(), etc.) se ejecuta en la función setup() antes de que se haya inicializado NVS (con nvs_flash_init()).

Pasos para la Solución

Intente las siguientes soluciones en orden:

Solución 1: Borrar y Re-inicializar NVS (La más efectiva)

Utilizar una herramienta como esptool para borrar la memoria flash del ESP32S3 es la forma más directa de resolver la corrupción de NVS. Advertencia: Esto eliminará toda la información almacenada en NVS, incluyendo contraseñas WiFi previamente guardadas.

Método A: Usar la herramienta de borrado de flash de la IDE de Arduino

  1. Abra la IDE de Arduino.
  2. Conecte su placa ESP32 al ordenador mediante USB.
  3. Vaya a Herramientas -> Borrar Flash -> Borrado completo.
  4. Espere a que termine el borrado y vuelva a cargar su programa.

Método B: Lógica de borrado en el código de inicializaciónPuede añadir el siguiente código al principio de su función setup(). Es útil durante el desarrollo, pero debe eliminarse o usarse con precaución en producción.

#include <nvs_flash.h> // Asegúrese de incluir esta cabecera

void setup() {
  Serial.begin(115200);
  
  // Inicializar NVS; si falla, borrar y reintentar
  esp_err_t err = nvs_flash_init();
  if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
    // Si la partición NVS está llena o se encontró una nueva versión, borrarla
    ESP_ERROR_CHECK(nvs_flash_erase());
    err = nvs_flash_init(); // Reintentar la inicialización
  }
  ESP_ERROR_CHECK(err); // Comprobar si la inicialización fue exitosa
  
  // Proceder con la inicialización de WiFi después de NVS
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  // ... resto de su código
}

void loop() {
  // ...
}

Solución 2: Verificar la Secuencia de Inicialización del Código

Asegúrese de que en su función setup(), la inicialización de NVS se complete siempre antes de cualquier operación WiFi. El orden correcto es:

void setup() {
  Serial.begin(115200);
  nvs_flash_init();      // 1. Inicializar NVS primero
  initOtherComponents(); // 2. Inicializar otros componentes (si existen)
  setupWiFi();           // 3. Configurar WiFi al final
}

Solución 3: Revisar la Tabla de Particiones (Avanzado)

Si ha modificado el archivo partitions.csv, verifique que la partición nvs tenga un tamaño adecuado (generalmente al menos 20KB). Particiones demasiado pequeñas pueden llevar a la corrupción de datos. Intente volver a usar la tabla de particiones predeterminada.

Resumen y Pasos Recomendados

  1. Opción Principle: Utilice la opción Borrado completo de la IDE de Arduino y vuelva a cargar el código. Esto resuelve la gran mayoría de estos problemas.
  2. Medida Preventiva: Integre la lógica de borrado de NVS (Solución 1, Método B) en su setup() para auto-reparar errores de NVS durante el desarrollo.
  3. Revisión del Código: Confirme que su código no llama a funciones relacionadas con WiFi antes de ejecutar nvs_flash_init().

Siguiendo estos pasos, debería poder resolver el error wifi:init nvs: failed, ret=101.

Etiquetas: ESP32S3 WiFi NVS Arduino error de inicialización

Publicado el 6-8 23:49