velxio/test/test-esp32-p4/autosearch/02_chip_overview.md

70 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 02 — ESP32-P4 chip overview
## Procesador
- **HP core**: dual-core RISC-V hasta **400 MHz** (RV32IMAFC + extensiones AI propietarias de Espressif).
- **LP core**: RISC-V single-core hasta **40 MHz** (low-power, similar al ULP coprocessor de otros ESP32).
- ABI: `ilp32f` (single-precision FPU) — confirmado por `file blink.ino.elf` → "RVC, single-float ABI".
- ISA real observada en el ELF: **RV32IMC** (compressed) + soft-float a nivel de Arduino core (el FPU está pero arduino-esp32 aún no lo usa universalmente).
## Memoria
- **768 KB SRAM HP** on-chip (utilizable como cache cuando hay PSRAM).
- **8 KB TCM RAM** zero-wait.
- Soporta **PSRAM externa hasta 32 MB**.
- Flash externa SPI (típicamente QSPI, hasta 16/32 MB en dev kits).
## Sin radio integrado
⚠️ **El P4 NO tiene Wi-Fi ni Bluetooth nativos**. Los dev kits (FireBeetle 2 ESP32-P4, ESP32-P4-Module, ESP32-P4-NANO) llevan un **ESP32-C6 externo** conectado por SDIO/UART para Wi-Fi 6 y BLE.
Implicación para emulación: el modelo NIC `esp32_wifi` / `esp32c3_wifi` que usa el `esp_qemu_manager` actual **no aplica directamente**. Habría que:
- (a) emular el bus SDIO/UART hacia un C6 emulado (complejo, no existe),
- (b) interceptar la API de IDF/Arduino (`WiFi.begin()`, etc.) y devolver mocks (ya hay un patrón parecido en `wifi_status_parser.py`).
## Periféricos relevantes para Velxio
| Periférico | Cantidad | Uso típico Velxio |
|---|---|---|
| GPIO | 55 (vs 22 en ESP32) | LED, botón, sensor digital |
| ADC | 7 ch × 2 unidades, 12-bit | sensores analógicos, potenciómetro |
| I²C | 2 master / 1 slave | sensores BMP280, MPU6050, LCD I²C |
| SPI | 3 (uno dedicado a flash/PSRAM) | display TFT, SD card |
| I²S | 3 | audio |
| UART | 5 | serial monitor + comms externos |
| LEDC PWM | 8 ch | LED brillo, servos |
| MCPWM | 2 | motor control |
| RMT | 4 ch | NeoPixel, IR |
| USB OTG 2.0 HS | 1 | host/device, **480 Mbps** |
| Ethernet | 1 (RMII) | Ethernet en dev kits |
| SDIO Host | 1 (3.0) | SD card / Wi-Fi co-proc |
| **MIPI-CSI** | 1 (1080p) | cámara — **no emulable** |
| **MIPI-DSI** | 1 (1080p) | display — **no emulable hoy** |
## Variantes de board en arduino-cli (verificadas)
```
esp32:esp32:esp32p4 # ESP32P4 Dev Module (genérico)
esp32:esp32:esp32p4_core_board # ESP32P4 Core Board
esp32:esp32:dfrobot_firebeetle2_esp32p4 # DFRobot FireBeetle 2 ESP32-P4
esp32:esp32:esp32p4_4ds_mipi # 4D Systems ESP32-P4 MIPI Displays
esp32:esp32:esp32p4_4ds_mipi_round # 4D Systems redondo
```
Para Velxio, el FQBN canónico debería ser `esp32:esp32:esp32p4` (Dev Module) — paralelo a `esp32:esp32:esp32` para el clásico.
## Comparativa con boards ya soportados en Velxio
| Board | Arch | Dónde corre hoy |
|---|---|---|
| Arduino Uno (atmega328p) | AVR 8-bit | frontend (avr8js) |
| ATtiny85 | AVR 8-bit | frontend (avr8js) |
| Raspberry Pi Pico (RP2040) | ARM Cortex-M0+ dual | frontend (rp2040js) |
| ESP32 | Xtensa LX6 dual | backend QEMU xtensa |
| ESP32-S3 | Xtensa LX7 dual | backend QEMU xtensa |
| ESP32-C3 | RISC-V RV32IMC single | backend QEMU riscv32 |
| Raspberry Pi 3B | ARM64 | backend QEMU aarch64 |
| **ESP32-P4** | **RISC-V RV32IMAFC dual + LP** | **backend QEMU riscv32 (cuando exista)** |
El ESP32-P4 cae en la **misma categoría que el ESP32-C3**: backend, `qemu-system-riscv32`, `-M esp32p4`. Reutiliza casi toda la plomería del C3 (UART por TCP, GPIO chardev, NIC slirp si llega Wi-Fi).