diff --git a/boards/esp32p4r3.json b/boards/esp32p4r3.json new file mode 100644 index 000000000..c3495b79c --- /dev/null +++ b/boards/esp32p4r3.json @@ -0,0 +1,39 @@ +{ + "build": { + "core": "esp32", + "extra_flags": [ + "-DARDUINO_TASMOTA -DESP32P4R3 -DESP32_16M -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE" + ], + "f_cpu": "400000000L", + "f_flash": "80000000L", + "f_psram": "200000000L", + "flash_mode": "qio", + "mcu": "esp32p4", + "chip_variant": "esp32p4", + "variant": "esp32p4", + "partitions": "boards/partitions/esp32_partition_app4096k_spiffs8124k.csv" + }, + "connectivity": [ + "wifi", + "bluetooth", + "openthread", + "ethernet" + ], + "debug": { + "openocd_target": "esp32p4.cfg" + }, + "frameworks": [ + "arduino", + "espidf" + ], + "name": "Espressif Generic ESP32-P4 rev.3 16M Flash, ESPEasy 4096k Code/OTA 8M FS", + "upload": { + "flash_size": "16MB", + "maximum_ram_size": 768000, + "maximum_size": 16777216, + "require_upload_port": true, + "speed": 1500000 + }, + "url": "https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/index.html", + "vendor": "Espressif" +} \ No newline at end of file diff --git a/docs/source/ESPEasy/ESPchips.rst b/docs/source/ESPEasy/ESPchips.rst index 527505b11..f196876ce 100644 --- a/docs/source/ESPEasy/ESPchips.rst +++ b/docs/source/ESPEasy/ESPchips.rst @@ -43,7 +43,11 @@ ESPEasy does support a number of variants of the processors manufactured by Espr * **ESP32-H21** ❌ * **ESP32-H4** ❌ * **ESP32-P4** Support added: 2026-01-08 -* **ESP32-P4rev3** ❌ (support planned) +* **ESP32-P4rev3** Support added: 2026-04-20 + +.. note:: + ESP32-P4 rev. 1.x was renamed by Espressif to "ESP32-P4 ES" as in "Engineering Sample". The newer 'rev.3.x' silicon is now named "ESP32-P4", though some pages on the Espressif site refer to this as "ESP32-P4X". + It is unclear yet what will be the common naming schema for these. Both silicon revisions do require different build files. .. note:: @@ -131,7 +135,7 @@ ESPEasy does support a number of variants of the processors manufactured by Espr - 2023/11 - 2026/01 - ❌ - - 2026/01 + - 2026/01 (v3.x:2026/04) * - Introduction - 2014 - 2016 diff --git a/platformio.ini b/platformio.ini index 7977ddb5c..8b85a1147 100644 --- a/platformio.ini +++ b/platformio.ini @@ -31,6 +31,7 @@ extra_configs = platformio_esp32c6_envs.ini platformio_esp32c61_envs.ini platformio_esp32p4_envs.ini + platformio_esp32p4r3_envs.ini ;default_envs = normal_ESP32_4M diff --git a/platformio_esp32p4r3_envs.ini b/platformio_esp32p4r3_envs.ini new file mode 100644 index 000000000..364173fd3 --- /dev/null +++ b/platformio_esp32p4r3_envs.ini @@ -0,0 +1,14 @@ + + +[esp32p4r3_common_LittleFS] +extends = esp32p4_common_LittleFS +build_flags = ${esp32p4_common_LittleFS.build_flags} +extra_scripts = ${esp32p4_common_LittleFS.extra_scripts} +board = esp32p4r3 + + +[env:max_ESP32p4r3_16M8M] +extends = env:max_ESP32p4_16M8M +board = esp32p4r3 + + diff --git a/tools/pio/copy_files.py b/tools/pio/copy_files.py index 1b8b58506..f52d97d6b 100644 --- a/tools/pio/copy_files.py +++ b/tools/pio/copy_files.py @@ -25,7 +25,7 @@ def get_max_bin_size(env_name, file_suffix): if "_8M1M" in env_name: # ESP32 with 3520k of sketch space. max_bin_size = 3604480 - if "_ESP32_" in env_name or "_ESP32c3_" in env_name or "_ESP32c5_" in env_name or "_ESP32c6_" in env_name or "_ESP32p4_" in env_name or "_ESP32s2_" in env_name or "_ESP32s3_" in env_name: + if "_ESP32_" in env_name or "_ESP32c3_" in env_name or "_ESP32c5_" in env_name or "_ESP32c6_" in env_name or "_ESP32p4_" in env_name or "_ESP32p4r3_" in env_name or "_ESP32s2_" in env_name or "_ESP32s3_" in env_name: if "_16M8M" in env_name or "_16M2M" in env_name or "_16M1M" in env_name: # ESP32 with 4096k of sketch space. max_bin_size = 4194304 diff --git a/tools/pio/generate_web_flasher_manifest.py b/tools/pio/generate_web_flasher_manifest.py index 306887840..c71a68d9c 100644 --- a/tools/pio/generate_web_flasher_manifest.py +++ b/tools/pio/generate_web_flasher_manifest.py @@ -26,7 +26,9 @@ def create_display_text(description, version, families): fam_split.append('ESP32') if 'ESP32-S2' in families: esp32_split.append('S2') - if 'ESP32-S3' in families: + if 'ESP32-S31' in families: + esp32_split.append('S31') + elif 'ESP32-S3' in families: esp32_split.append('S3') if 'ESP32-C2' in families: esp32_split.append('C2') @@ -34,17 +36,20 @@ def create_display_text(description, version, families): esp32_split.append('C3') if 'ESP32-C5' in families: esp32_split.append('C5') - if 'ESP32-C6' in families: - esp32_split.append('C6') if 'ESP32-C61' in families: esp32_split.append('C61') + elif 'ESP32-C6' in families: + esp32_split.append('C6') if 'ESP32-H2' in families: esp32_split.append('H2') if 'ESP32-H21' in families: esp32_split.append('H21') - if 'ESP32-P4' in families: + if 'ESP32-P4R3' in families: + esp32_split.append('P4R3') + elif 'ESP32-P4' in families: esp32_split.append('P4') + if len(esp32_split) > 0: fam_split.append('ESP32-' + '/'.join(esp32_split)) @@ -76,6 +81,8 @@ def parse_filename(file, version, variant, file_suffix): manifest_suff = '.manifest.json' if 'ESP32s2' in variant: chipFamily = 'ESP32-S2' + elif 'ESP32s31' in variant: + chipFamily = 'ESP32-S31' elif 'ESP32s3' in variant: chipFamily = 'ESP32-S3' elif 'ESP32c2' in variant: @@ -94,7 +101,7 @@ def parse_filename(file, version, variant, file_suffix): chipFamily = 'ESP32-H2' elif 'ESP32p4' in variant: chipFamily = 'ESP32-P4' - if 'rev300' in variant: + if 'rev300' in variant or 'r3' in variant: chipVariant = 'rev300' else: chipVariant = 'rev0' @@ -261,7 +268,7 @@ def parse_filename(file, version, variant, file_suffix): builds = dict([('chipFamily', chipFamily), ('parts', [parts])]) else: if add_improv: - builds = dict([('chipFamily', chipFamily), ('chipVariant', chipVariant), ('improv', False), ('parts', [parts])]) + builds = dict([('chipFamily', chipFamily), ('chipVariant', chipVariant), ('improv', True), ('parts', [parts])]) else: builds = dict([('chipFamily', chipFamily), ('chipVariant', chipVariant), ('parts', [parts])]) @@ -382,7 +389,7 @@ def generate_manifest_files(bin_folder, output_prefix): ' \n', ' \n', ' \n', ' \n',