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)
Problem
The starter repo currently only has
[env:uno]inplatformio.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=1capability bit) requires these two build flags or the PARLIO TX ISR sits in flash and takes cache-miss stalls during execution:The FastLED driver only signals their absence with a compile-time
#warning(seesrc/platforms/esp/32/drivers/parlio/parlio_peripheral_esp.cpp.hpp:46-48in 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:The exact platform-package URL and per-board pin assignments can mirror what the main FastLED repo's
ci/boards.pyhas — that's the canonical source for ESP32 board configs.Boards explicitly NOT to add (with these flags)
SOC_PARLIO_SUPPORTEDis 0 on S3). S3 has parallel-output capability via the LCD_CAM/I2S peripheral, but PARLIO is a different peripheral. Adding theCONFIG_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.A short comment in
platformio.ininext to the PARLIO flags noting "only set on chips with PARLIO peripheral (C5/C6/H2/P4) — see FastLEDsrc/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
src/platforms/esp/32/drivers/parlio/bus_traits.h:6(P4/C6/H2/C5)ci/boards.pyparlio_capablefield: PR FastLED#3306 (closed FastLED#3304)ci/boards.py: FastLED PR #3276 (closed FastLED#3271)