3.8 KiB
06 — Recomendaciones / plan accionable
Decisión propuesta
No agregar ESP32-P4 como board emulable hoy. Sumarlo en estado "compilable, no emulable" tiene un valor marginal (el usuario ve el ELF generado, pero al pulsar Run no pasa nada útil) y crea expectativa que no se puede cumplir.
Sin embargo, toda la plomería de toolchain se puede dejar lista hoy con muy poco esfuerzo, de modo que el día que espressif/qemu mergee la máquina P4, sumar el board sea cuestión de un PR de ~50 líneas.
Plan en 3 fases
Fase A — Hoy (preparación, sin exponer al usuario)
Esfuerzo: ~2 h. Riesgo: bajo. No agrega un board nuevo en el frontend.
- Refactor mínimo en
arduino_cli.py: renombrar_is_esp32c3_board→_is_esp32_riscv_boardy extender la lista aesp32c3, esp32c6, esp32h2, esp32p4. Misma lógica debootloader_offset = 0x0000. ~10 líneas. - Subscribirse al issue #127 de espressif/qemu para enterarse cuando aterrice la máquina P4.
- Mantener este folder
test/test-esp32-p4/como referencia viva — actualizar01_findings.mdcada vez que haya un release deespressif/qemu.
Fase B — Cuando QEMU soporte ESP32-P4
Esfuerzo: ~1-2 días. Riesgo: medio (depende de qué peripherals emule realmente la máquina).
- Backend (
esp_qemu_manager.py):- Agregar
'esp32-p4': (QEMU_RISCV32, 'esp32p4')al_MACHINEdict. - Forzar
wifi_enabled = Falsepara P4 (chip sin radio nativa) — devolver warning explícito si el usuario lo activa.
- Agregar
- Frontend (
types/board.ts):- Agregar
'esp32-p4'aBoardKind. - Agregar a
BOARD_KIND_LABELScon label "ESP32-P4 Dev Module". - Agregar a
BOARD_SUPPORTS_MICROPYTHON(MicroPython tiene puerto P4 desde mediados 2025).
- Agregar
- Pin mapping (
utils/boardPinMapping.ts):- Mapear los 55 GPIOs según pinout del Dev Module Espressif. Patrón idéntico al ESP32-S3.
- Componente visual:
- SVG nuevo en
components-wokwi/(no hay element open enwokwi-elements). Alternativa de bajo esfuerzo: reutilizar el SVG del ESP32-S3 con renombrado de pines, hasta tener un dibujo propio.
- SVG nuevo en
- Smoke test:
test/test-esp32-p4/scripts/smoke.shque (a) compila blink, (b) lanzaqemu-system-riscv32 -M esp32p4 -drive ..., (c) verifica que aparece "ESP32-P4 blink starting" en el TCP serial. - Tests backend: agregar caso ESP32-P4 a
test/esp32/test_esp32_integration.py.
Fase C — Wi-Fi mock (opcional, cuando haya demanda real)
Cuando un usuario reporte que quiere usar WiFi.h con ESP32-P4, implementar mock por parsing del UART (mismo patrón que wifi_status_parser.py ya usa para C3). El bus SDIO al C6 emulado real es prohibitivo y se puede ignorar.
Lo que NO hacer
- ❌ No empezar a portar
rp2040jsa "esp32p4js". Es un proyecto de años y duplica esfuerzo de Wokwi/Espressif. - ❌ No mergear el board en producción sin el QEMU operacional. Da una mala primera impresión.
- ❌ No comprometerse con Wi-Fi/BLE para este chip. La radio externa C6 es una bestia distinta.
- ❌ No usar QEMU-WASM para P4 mientras el backend QEMU funcione bien para los otros ESP32. Costo (~40 MB WASM extra) > beneficio.
Métrica de éxito
Cuando se ejecute Fase B, el criterio de aceptación es:
arduino-cli compile --fqbn esp32:esp32:esp32p4 blinkproduce ELF (ya OK).- En Velxio, seleccionar board "ESP32-P4 Dev Module" + Run reproduce el LED parpadeando + Serial Monitor muestra "HIGH/LOW" cada 500 ms.
- Smoke test CI verde.
Cómo monitorear el bloqueante
- GitHub: watch espressif/qemu releases.
- Issue principal: #127.
- Mirror: esp-toolchain-docs/qemu.
Cuando aparezca hw/riscv/esp32p4.c en esp-develop, activar Fase B.