70 lines
3.4 KiB
Markdown
70 lines
3.4 KiB
Markdown
# 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).
|