{
    "key": "esp32-p4-function-ev-board",
    "kind": "board",
    "source": "authored",
    "status": "draft",
    "harness": {
        "gpio": {
            "notes": "Almost every pin is routable to almost any peripheral through the GPIO matrix, so a driver binds to a pin number chosen at deploy time rather than to a fixed function. The strapping pins and the pins bonded to on-package flash are the exceptions and must not be used.",
            "library": null,
            "pin_scheme": "gpio"
        },
        "flash": {
            "baud": 921600,
            "tool": "esptool.py",
            "notes": "The SoC exposes USB Serial/JTAG directly, so no bridge chip is involved. A firmware that reconfigures those pins loses the port until the board is put back into download mode by holding BOOT while tapping RESET.",
            "method": "usb-native",
            "port_hint": "/dev/ttyACM0"
        },
        "probe": {
            "commands": [
                "arduino-cli board list",
                "arduino-cli board details --fqbn <fqbn>"
            ],
            "model_file": null,
            "overlay_file": null
        },
        "runtime": {
            "python3": false,
            "os_family": null,
            "package_manager": null,
            "service_manager": null
        },
        "verified": {
            "by": null,
            "os": null,
            "date": null,
            "reviewed_by": null,
            "evidence_url": null
        },
        "transport": {
            "ota": true,
            "tls": true,
            "notes": "Wi-Fi is provided by an on-board ESP32-C6 reached over ESP-Hosted, not by the P4. That co-processor firmware is a separate build artefact and a separate thing to keep updated.",
            "network": [
                "wifi",
                "bluetooth"
            ],
            "mqtt_client": null
        },
        "toolchains": [
            "ESP-IDF",
            "Arduino IDE",
            "Arduino CLI",
            "PlatformIO"
        ],
        "local_inference": {
            "llm": {
                "notes": "Kilobytes of RAM. A general language model does not run here and never will. Send the reading to something that can.",
                "viable": false,
                "runtimes": [],
                "max_params_b": null,
                "quantisation": [],
                "max_model_size_gb": null
            },
            "notes": "The P4 has no radio of its own. Wireless comes from a separate ESP32-C6 over ESP-Hosted, so networking is a two-chip arrangement and firmware has to be built for both.",
            "tinyml": {
                "notes": "32MB of PSRAM and a camera interface put real image models within reach, by a wide margin the most capable microcontroller in this registry.",
                "viable": true,
                "frameworks": [
                    "ESP-DL",
                    "TensorFlow Lite Micro"
                ]
            },
            "viable": true,
            "accelerator": "dsp",
            "usable_memory_gb": null
        },
        "provisioning_model": "arduino-sketch",
        "component_attachment": "gpio-header",
        "supported_provisioning_models": [
            "arduino-sketch",
            "vendor-firmware"
        ]
    },
    "platform": {
        "cpu": "RISC-V dual-core 32-bit @ 400MHz",
        "ram": "768KB on-chip SRAM plus 32MB PSRAM",
        "name": "ESP32-P4-Function-EV-Board",
        "power": [
            {
                "source": "USB",
                "voltage_max": 5,
                "voltage_min": 5
            },
            {
                "source": "5V pin",
                "voltage_max": 5,
                "voltage_min": 5
            },
            {
                "source": "3V3 pin",
                "voltage_max": 3.3,
                "voltage_min": 3.3
            }
        ],
        "has_gpu": false,
        "has_npu": false,
        "has_tpu": false,
        "storage": "16MB Flash",
        "weight_g": null,
        "gpio_pins": 55,
        "board_type": "Microcontroller",
        "interfaces": [
            {
                "type": "USB-C",
                "count": 2
            },
            {
                "type": "MIPI-CSI camera",
                "count": 1
            },
            {
                "type": "MIPI-DSI display",
                "count": 1
            },
            {
                "type": "microSD",
                "count": 1
            },
            {
                "type": "2.54mm header",
                "count": 2
            }
        ],
        "description": "Dual core 400MHz RISC-V with MIPI camera and display interfaces. No radio on the P4 itself; the board carries an ESP32-C6 for wireless.",
        "adc_channels": 8,
        "dac_channels": 0,
        "manufacturer": "Espressif",
        "model_number": "ESP32-P4-Function-EV-Board",
        "pwm_channels": 8,
        "datasheet_url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32p4/hw-reference/esp32p4/user-guide-esp32-p4-function-ev-board.html",
        "dimensions_mm": null,
        "serial_protocols": [
            {
                "count": 3,
                "protocol": "I2C"
            },
            {
                "count": 3,
                "protocol": "SPI"
            },
            {
                "count": 5,
                "protocol": "UART"
            },
            {
                "count": 3,
                "protocol": "I2S"
            }
        ],
        "operating_systems": [
            {
                "name": "ESP-IDF"
            },
            {
                "name": "Arduino Core"
            }
        ],
        "operating_voltage": "3.3V",
        "communication_chips": [
            {
                "protocol": "Wi-Fi",
                "standard": "802.11ax Wi-Fi 6 through the on-board co-processor",
                "chip_model": "ESP32-C6"
            },
            {
                "protocol": "Bluetooth",
                "standard": "5.3 LE through the on-board co-processor",
                "chip_model": "ESP32-C6"
            }
        ]
    },
    "revision": 1
}