Skip to content

Add ESP32 PARLIO-capable boards (C5, C6, H2, P4) with required ISR-IRAM flags #9

@zackees

Description

@zackees

Problem

The starter repo currently only has [env:uno] in platformio.ini — no ESP32 boards at all. For users who clone this starter to develop FastLED applications on modern ESP32 chips with the PARLIO peripheral, the experience is "add an env yourself, and don't forget the magic compile flags or your LED protocol timing will silently corrupt."

Specifically, every PARLIO-capable ESP32 chip (ESP32-C5, ESP32-C6, ESP32-H2, ESP32-P4 — per Espressif's SOC_PARLIO_SUPPORTED=1 capability bit) requires these two build flags or the PARLIO TX ISR sits in flash and takes cache-miss stalls during execution:

-DCONFIG_PARLIO_TX_ISR_HANDLER_IN_IRAM=1
-DCONFIG_PARLIO_TX_ISR_CACHE_SAFE=1

The FastLED driver only signals their absence with a compile-time #warning (see src/platforms/esp/32/drivers/parlio/parlio_peripheral_esp.cpp.hpp:46-48 in the main FastLED repo), which is easy to miss.

What to add

Add [env:...] blocks for the four PARLIO-capable ESP32 chips. Each must include the two ISR flags. Suggested:

[env:esp32c6]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.35/platform-espressif32.zip
board = esp32-c6-devkitc-1
framework = arduino
board_build.partitions = huge_app.csv
build_flags =
	-DCONFIG_PARLIO_TX_ISR_HANDLER_IN_IRAM=1
	-DCONFIG_PARLIO_TX_ISR_CACHE_SAFE=1
	-DARDUINO_USB_MODE=1
	-DARDUINO_USB_CDC_ON_BOOT=1
lib_deps =
	FastLED

[env:esp32c5]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.35/platform-espressif32.zip
board = esp32-c5-devkitc-1
framework = arduino
build_flags =
	-DCONFIG_PARLIO_TX_ISR_HANDLER_IN_IRAM=1
	-DCONFIG_PARLIO_TX_ISR_CACHE_SAFE=1
lib_deps =
	FastLED

[env:esp32h2]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.35/platform-espressif32.zip
board = esp32-h2-devkitm-1
framework = arduino
build_flags =
	-DCONFIG_PARLIO_TX_ISR_HANDLER_IN_IRAM=1
	-DCONFIG_PARLIO_TX_ISR_CACHE_SAFE=1
lib_deps =
	FastLED

[env:esp32p4]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.35/platform-espressif32.zip
board = esp32-p4-evboard
framework = arduino
board_build.partitions = huge_app.csv
build_flags =
	-DCONFIG_PARLIO_TX_ISR_HANDLER_IN_IRAM=1
	-DCONFIG_PARLIO_TX_ISR_CACHE_SAFE=1
	-DARDUINO_USB_MODE=1
lib_deps =
	FastLED

The exact platform-package URL and per-board pin assignments can mirror what the main FastLED repo's ci/boards.py has — that's the canonical source for ESP32 board configs.

Boards explicitly NOT to add (with these flags)

  • ESP32-S3 does not have the PARLIO peripheral (SOC_PARLIO_SUPPORTED is 0 on S3). S3 has parallel-output capability via the LCD_CAM/I2S peripheral, but PARLIO is a different peripheral. Adding the CONFIG_PARLIO_TX_* flags to an S3 build is a no-op (no PARLIO code is compiled) but suggests the chip has PARLIO when it doesn't — misleading for downstream users. If you add an S3 env, do NOT include the PARLIO flags.
  • ESP32 (original), ESP32-S2, ESP32-C2, ESP32-C3 — same reasoning.

A short comment in platformio.ini next to the PARLIO flags noting "only set on chips with PARLIO peripheral (C5/C6/H2/P4) — see FastLED src/platforms/esp/32/drivers/parlio/" would help future maintainers keep the list correct.

Optional follow-up

If the starter also wants ESP32, S3, etc. as targets (without PARLIO), add them as separate [env:...] blocks without the PARLIO flags. RMT is the recommended driver for those.

Refs

  • FastLED main repo PARLIO chipset list: src/platforms/esp/32/drivers/parlio/bus_traits.h:6 (P4/C6/H2/C5)
  • FastLED ci/boards.py parlio_capable field: PR FastLED#3306 (closed FastLED#3304)
  • FastLED channels README documenting the chipset list: FastLED#3299
  • FastLED PARLIO IRAM flag default in ci/boards.py: FastLED PR #3276 (closed FastLED#3271)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions