ESP32-C6 chip capabilities
This skill is the chip layer, not a board layer. A board skill (e.g. a
future m5stack-nanoc6) tells you what's wired to what on one specific
product; this skill tells you what the ESP32-C6 silicon itself can do — the
peripherals, low-power modes, memory options, and (most distinctively)
three-radio behavior that are the same on every ESP32-C6 board regardless
of vendor. Read a board's own skill first for pin numbers and I2C
addresses, then come here when the user wants to go deeper on a capability
than "call the vendor's high-level library and move on" — e.g. diagnosing
WiFi+Thread coexistence packet loss, offloading an always-on task to the LP
core, or figuring out why SD card code ported from another ESP32 chip won't
compile.
The one thing every ESP32-C6 user needs to know: three radios, one antenna, time-shared
The C6 is Espressif's first WiFi 6 chip, and it packs three separate
wireless protocols — WiFi 6, Bluetooth LE 5.3, and 802.15.4 (Thread 1.3 +
Zigbee 3.0 certified) — behind a single shared RF front-end and antenna.
They are time-division multiplexed, not simultaneous: per Espressif's
own coexistence docs, "a module cannot receive or transmit data while
another module is engaged in data transmission or reception." This is fine
for light, bursty use (WiFi telemetry plus occasional BLE provisioning) but
becomes a real design constraint for continuous-reception roles like a
Thread Border Router or Zigbee gateway sharing the radio with active WiFi —
see references/memory-radio.md for the practical coexistence behavior and
Espressif's own recommendation to use a dual-SoC design (e.g. an
ESP32-S3 or classic ESP32 for WiFi/BLE, paired with a separate ESP32-H2 or
this chip dedicated to 802.15.4) for a production WiFi-backed Border
Router/gateway rather than relying on one C6 doing all three at once.
This is also why M5Stack uses the C6 two different ways in its own catalog:
as a standalone MCU with its own application code (NanoC6, Stamp
C6LoRa), and as a dedicated radio co-processor for a separate,
radio-less main SoC (the ESP32-C6-MINI-1U on Tab5, talking to Tab5's
ESP32-P4 over SDIO; Stamp-P4's "AddOn C6 For P4" is the same pattern). Both
are the same chip and everything in this skill applies to either role — the
co-processor case just means the C6's own application code is usually
Espressif's esp-hosted firmware (or similar) rather than user logic, with
the host chip's skill (e.g. esp32-p4) being where a user's actual
WiFi/BLE application code lives.
Not classic ESP32, not S2/S3, not C3/C5, not H2, not P4
M5Stack (and the ESP32 family generally) spans several very different chips
that are easy to conflate. Get this wrong and code silently targets the
wrong architecture or assumes a peripheral that doesn't exist.
| Chip |
Cores / arch |
Wireless |
Native USB |
Notable extras |
Not on this chip |
| ESP32-C6 (this skill) |
1× RISC-V (RV32IMAC) HP core @ up to 160MHz, 4-stage pipeline + 1× RISC-V LP core @ up to ~20MHz |
WiFi 6 (802.11ax, 2.4GHz only) + BLE 5.3 + Thread/Zigbee (802.15.4) — one shared RF front-end, time-division multiplexed |
No — USB-Serial-JTAG only (fixed-function console/flash/debug; no OTG, no custom device classes) |
First ESP32 with WiFi 6, Matter-ready three-radio stack, LP core is a genuine RISC-V coprocessor usable while the HP core is fully active, 2 independent TWAI/CAN controllers |
Second HP core, native USB OTG, PSRAM (none, ever — bare chip or any module variant), hardware FPU, SDMMC host (SD-SPI only, no eMMC), capacitive touch sensing |
| ESP32-S3 |
2× Xtensa LX7 @ up to 240MHz + 1 low-power coprocessor core |
WiFi 4 + BLE 5 |
Yes — OTG (full-speed) + separate USB-Serial-JTAG |
SIMD/vector AI instructions, ULP-RISC-V and ULP-FSM |
Thread/Zigbee/802.15.4, WiFi 6, MIPI-DSI/CSI, hardware video codecs |
| ESP32 (classic) |
2× Xtensa LX6 @ 240MHz |
WiFi 4 + Bluetooth Classic + BLE 4.2 |
No |
Widest library/example coverage, oldest silicon, Bluetooth Classic |
Native USB, SIMD extensions, ULP-RISC-V, WiFi 6, Thread/Zigbee |
| ESP32-S2 |
1× Xtensa LX7 @ 240MHz |
WiFi 4 only, no Bluetooth at all |
Yes — OTG |
Very low deep-sleep current |
Second core, Bluetooth |
| ESP32-C3 |
1× RISC-V @ 160MHz |
WiFi 4 + BLE 5 |
No |
Cheapest/smallest |
Second core, native USB, SIMD, Thread/Zigbee |
| ESP32-C5 |
1× RISC-V @ 240MHz + LP core |
WiFi 6 dual-band (2.4+5GHz) + BLE 5 + 802.15.4 |
No |
Only dual-band-WiFi6 ESP32 variant |
Second core, native USB |
| ESP32-H2 |
1× RISC-V @ 96MHz |
No WiFi — BLE 5 + Thread/Zigbee only |
No |
Purpose-built low-power mesh/Matter radio; Espressif's other half of the "dual-SoC Border Router" recommendation |
WiFi entirely, second core |
| ESP32-P4 |
2× RISC-V @ up to 400MHz + LP core |
None — always pairs with a companion chip (M5Stack's Tab5/Stamp-P4 use this chip, the C6) |
Yes — HS OTG + FS OTG |
MIPI-DSI/CSI, H.264 encode, up to 32MB in-package PSRAM |
Any wireless radio |
Quick specs
- HP (High-Performance) core: 1× 32-bit RISC-V (RV32IMAC — integer,
multiply/divide, atomic, compressed; no hardware FPU), 4-stage
pipeline, up to 160MHz. Single core — there is no PRO_CPU/APP_CPU split
the way S3/P4/classic ESP32 have; see
references/memory-radio.md for
what that means for concurrency.
- LP (Low-Power) core: 1× 32-bit RISC-V (same RV32IMAC ISA), 2-stage
pipeline, up to ~20MHz — a genuine coprocessor that can run independently
of, and concurrently with, the HP core, not just during sleep. See
references/power-sleep-lp.md.
- Memory: 320KB ROM, 512KB HP SRAM, 16KB LP SRAM (retained in deep
sleep, and the LP core's own working memory)
- PSRAM: none. Not on the bare chip, and no module variant embeds any —
unlike ESP32-S3/P4, there is no in-package PSRAM option for this chip at
all. Don't assume
ESP.getPsramSize()/esp_get_free_heap_size() will
ever return nonzero PSRAM on a C6 board. See references/memory-radio.md.
- Flash: in-package on the
ESP32-C6FH4 (4MB) / ESP32-C6FH8 (8MB)
chip variants (Quad SPI), or external up to 16MB via SPI on modules built
around the bare ESP32-C6 part. 6 GPIOs are dedicated to this flash
connection and not available for general use.
- Wireless: WiFi 6 (802.11ax, 2.4GHz only, up to 150Mbps PHY, OFDMA +
downlink MU-MIMO + Target Wake Time), Bluetooth LE 5.3 (coded PHY for
extended range, 2Mbps high-throughput mode, up to +20dBm TX), and 802.15.4
radio (Thread 1.3 and Zigbee 3.0 certified, 250kbps) — see "three radios,
one antenna" above and
references/memory-radio.md for coexistence
behavior.
- USB: no native OTG — only the fixed-function USB-Serial-JTAG
controller (serial console + flashing + JTAG debugging over one USB
connection, entirely hardware-implemented and not reconfigurable into
any other USB device class). If a user wants a board to present as a
custom HID/MSC/composite USB device, that's not possible on this chip —
point them at an S3 or P4 instead.
- GPIO: 30 pins (QFN40 package) or 22 pins (QFN32 package). 5 strapping
pins (GPIO8, GPIO9, GPIO15, plus the MTMS/MTDI JTAG-shared pins) set boot
mode at reset — check the current datasheet's strapping table before
wiring anything to them at board-design time. GPIO0–7 (8 pins) are the
RTC/LP-capable GPIOs, usable as deep-sleep wake sources and as the LP
core's own
LP_IO peripheral pins.
- Storage: no SDMMC host controller on this chip at all — SD cards are
only reachable via SD-SPI (the SD protocol run over a regular SPI
peripheral), and no eMMC support (eMMC requires the parallel SDMMC
protocol this chip doesn't have). Also has a separate SDIO slave
controller for acting as a co-processor to a host SoC (see "three radios"
above) — don't confuse SDIO slave with an SD-card-host capability, they're
unrelated peripherals. See
references/peripherals.md.
- Security: AES-128/256, ECC (P-192/P-256), HMAC-SHA-256, RSA up to
3072-bit + RSA Digital Signature, SHA-1/224/256, external-memory XTS-AES
encryption, hardware TRNG, Secure Boot and Flash Encryption — not detailed
further here, see ESP-IDF's security guides if the user needs this.
- Package / operating range: QFN40 (5×5mm) or QFN32 (5×5mm), –40°C to
105°C (some module SKUs are rated to 85°C standard / 105°C extended —
check the specific module datasheet).
- Power modes: Active, Modem-sleep, Light-sleep, Deep-sleep (~7µA) — see
references/power-sleep-lp.md.
Peripheral capability map
Full detail, with typical use cases and gotchas, is in
references/peripherals.md. Quick index of what's covered there:
| Peripheral |
For |
| RMT |
Precisely-timed signal generation/capture — IR remotes, WS2812/NeoPixel, custom one-wire-style protocols |
| LEDC |
PWM — LED dimming, buzzers/tone generation, simple motor speed control |
| I2S |
Digital audio in/out (mic, speaker, codec chips) — one controller only |
| ADC |
Analog sensing — one SAR ADC unit, no ADC1/ADC2 split the way classic ESP32/S3 have |
| PCNT |
Hardware pulse counting — rotary encoders, flow meters, tachometers |
| MCPWM |
Motor control PWM — H-bridges, ESCs, servo-adjacent timing |
| TWAI |
Two independent CAN 2.0-compatible controllers — more than any other chip in this family |
| SD-SPI / SDIO slave |
SD card access (SPI-only, no SDMMC host, no eMMC) and acting as a radio co-processor to a host SoC — two unrelated peripherals, don't conflate them |
| PARLIO |
General-purpose parallel I/O — not a display/camera peripheral, see below |
| SDM |
Sigma-delta modulation — lightweight analog-ish PWM-density output |
| GPTimer / dedicated GPIO |
General-purpose hardware timers; low-latency bit-banged GPIO |
| Temperature sensor |
Internal die temperature (not ambient) |
| No LCD/camera hardware |
No parallel (I80/RGB) LCD interface, no MIPI-DSI/CSI — displays are SPI/I2C only via the generic esp_lcd component |
| No capacitive touch |
Unlike classic ESP32/S3/P4, this chip has no built-in touch-sensing peripheral |
Power management: LP core is a real coprocessor, not a limited ULP-FSM
Light sleep, deep sleep, wake sources, and the LP core (a genuine RISC-V
core that runs normal compiled C, can access LP UART/LP I2C/LP GPIO/LP
Timer directly, and — unlike older chips' ULP-FSM — can run continuously
even while the HP core is fully active) are all in
references/power-sleep-lp.md. Because this chip has only one HP core,
offloading an always-on background task (a sensor poll loop, a
watchdog, a slow UART listener) to the LP core is especially valuable here —
it doesn't compete with the single HP core's FreeRTOS scheduler at all, not
even for a slice of time. Read this before telling a user "just call
esp_deep_sleep_start()" if they actually need something running in the
background.
Memory and radio coexistence
Why there's no PSRAM (ever, on any variant), which GPIOs the in-package
flash costs, the mechanics of the WiFi 6/BLE/802.15.4 time-sharing
(including Espressif's own dual-SoC recommendation for Border
Router/gateway use cases), and pointers to the Zigbee/Thread/Matter
software stacks are all in references/memory-radio.md.
Which M5Stack boards use this chip
NanoC6 is confirmed ESP32-C6FH4-based (verified against M5Stack's own
product page). Tab5 is confirmed to use this chip as its
ESP32-C6-MINI-1U wireless co-processor — see the m5stack-tab5 skill; the
C6 itself is not Tab5's main application SoC, that's the ESP32-P4 (see the
esp32-p4 skill). Stamp C6LoRa and Stamp-P4's "AddOn C6 For P4"
are likely matches by name, not yet independently verified.
Official resources
Working with the user
- If they're getting PSRAM-related errors or unexpectedly low free heap on
code ported from an S3/P4 project, check "Quick specs" above first — this
chip has no PSRAM on any variant, full stop, not a config flag to enable.
- If they're combining WiFi with Thread/Zigbee (a Border Router, a Zigbee
gateway, or any continuous-reception 802.15.4 role) and seeing packet
loss or instability, that's very likely the shared-antenna time-sharing
described in
references/memory-radio.md, not an application bug —
Espressif's own guidance is a dual-SoC design for production use of that
kind, not asking one C6 to do all three radios reliably at once.
- If they want a custom USB device (HID keyboard, MSC mass storage, a
composite device) or ask why
TinyUSB/USB.begin()-style code doesn't
do what it did on their S3/P4 board, tell them plainly this chip has no
native USB OTG — only the fixed-function Serial/JTAG controller.
- If they're trying to mount an SD card or (especially) an eMMC chip using
SDMMC-host-style code from another ESP32 target, this chip has no SDMMC
host peripheral — SD-SPI only, and eMMC isn't possible at all.
- If they want something to keep running in the background — not just
during deep sleep, but genuinely alongside normal operation without
spending the single HP core's FreeRTOS scheduler on it — point them at
the LP core in
references/power-sleep-lp.md rather than a
low-priority FreeRTOS task.
- This is chip-level guidance, cross-checked against Espressif's own
datasheet and ESP-IDF docs at time of writing — but ESP-IDF
version-to-version API and coexistence-behavior changes happen. If the
user hits a compile error on a specific function signature or a
coexistence-behavior discrepancy, point them at the current ESP-IDF docs
for their exact version rather than assuming this file is byte-exact.
1---2name: esp32-c63description: Chip-level ESP-IDF capability reference for the ESP32-C6 SoC (single-core RISC-V HP core + RISC-V LP core, WiFi 6 + BLE 5.3 + Thread/Zigbee) — what the chip can do, distinct from any board's wiring. Use when a user wants to exploit ESP32-C6 hardware — WiFi 6/BLE/802.15.4 radio coexistence (Thread Border Router, Zigbee gateway, Matter endpoints, why it's time-division not simultaneous), the LP core (a real always-available RISC-V coprocessor, not a restricted ULP-FSM), RMT/LEDC/I2S/ADC/PCNT/MCPWM/dual-TWAI peripherals, SD-SPI-only storage (no SDMMC host, no eMMC), deep sleep/wake sources, and why there's no PSRAM and no native USB OTG on this chip. Trigger on "how do I use WiFi 6/Thread/Zigbee/LP core/deep sleep on an ESP32-C6", radio-coexistence or Matter/Thread/Zigbee questions, or any M5Stack C6 board (NanoC6, Stamp C6LoRa, Tab5's C6 radio co-processor, Stamp-P4's AddOn C6) needing depth beyond its own SKILL.md. For pinouts/wiring use that board's skill — this is the shared chip layer it points into.4---56# ESP32-C6 chip capabilities78This skill is the **chip layer**, not a board layer. A board skill (e.g. a9future `m5stack-nanoc6`) tells you what's wired to what on one specific10product; this skill tells you what the ESP32-C6 silicon itself can do — the11peripherals, low-power modes, memory options, and (most distinctively)12three-radio behavior that are the same on every ESP32-C6 board regardless13of vendor. Read a board's own skill first for pin numbers and I2C14addresses, then come here when the user wants to go deeper on a capability15than "call the vendor's high-level library and move on" — e.g. diagnosing16WiFi+Thread coexistence packet loss, offloading an always-on task to the LP17core, or figuring out why SD card code ported from another ESP32 chip won't18compile.1920## The one thing every ESP32-C6 user needs to know: three radios, one antenna, time-shared2122The C6 is Espressif's first WiFi 6 chip, and it packs **three separate23wireless protocols — WiFi 6, Bluetooth LE 5.3, and 802.15.4 (Thread 1.3 +24Zigbee 3.0 certified) — behind a single shared RF front-end and antenna.**25They are **time-division multiplexed, not simultaneous**: per Espressif's26own coexistence docs, "a module cannot receive or transmit data while27another module is engaged in data transmission or reception." This is fine28for light, bursty use (WiFi telemetry plus occasional BLE provisioning) but29becomes a real design constraint for continuous-reception roles like a30Thread Border Router or Zigbee gateway sharing the radio with active WiFi —31see `references/memory-radio.md` for the practical coexistence behavior and32Espressif's own recommendation to use a **dual-SoC** design (e.g. an33ESP32-S3 or classic ESP32 for WiFi/BLE, paired with a separate ESP32-H2 or34this chip dedicated to 802.15.4) for a production WiFi-backed Border35Router/gateway rather than relying on one C6 doing all three at once.3637This is also why M5Stack uses the C6 two different ways in its own catalog:38as a **standalone MCU** with its own application code (NanoC6, Stamp39C6LoRa), and as a **dedicated radio co-processor** for a separate,40radio-less main SoC (the ESP32-C6-MINI-1U on Tab5, talking to Tab5's41ESP32-P4 over SDIO; Stamp-P4's "AddOn C6 For P4" is the same pattern). Both42are the same chip and everything in this skill applies to either role — the43co-processor case just means the C6's own application code is usually44Espressif's `esp-hosted` firmware (or similar) rather than user logic, with45the *host* chip's skill (e.g. `esp32-p4`) being where a user's actual46WiFi/BLE application code lives.4748## Not classic ESP32, not S2/S3, not C3/C5, not H2, not P44950M5Stack (and the ESP32 family generally) spans several very different chips51that are easy to conflate. Get this wrong and code silently targets the52wrong architecture or assumes a peripheral that doesn't exist.5354| Chip | Cores / arch | Wireless | Native USB | Notable extras | Not on this chip |55|---|---|---|---|---|---|56| **ESP32-C6** (this skill) | 1× RISC-V (RV32IMAC) HP core @ up to 160MHz, 4-stage pipeline + 1× RISC-V LP core @ up to ~20MHz | WiFi 6 (802.11ax, 2.4GHz only) + BLE 5.3 + Thread/Zigbee (802.15.4) — one shared RF front-end, time-division multiplexed | No — USB-Serial-JTAG only (fixed-function console/flash/debug; no OTG, no custom device classes) | First ESP32 with WiFi 6, Matter-ready three-radio stack, LP core is a genuine RISC-V coprocessor usable *while the HP core is fully active*, 2 independent TWAI/CAN controllers | Second HP core, native USB OTG, PSRAM (none, ever — bare chip or any module variant), hardware FPU, SDMMC host (SD-SPI only, no eMMC), capacitive touch sensing |57| ESP32-S3 | 2× Xtensa LX7 @ up to 240MHz + 1 low-power coprocessor core | WiFi 4 + BLE 5 | Yes — OTG (full-speed) + separate USB-Serial-JTAG | SIMD/vector AI instructions, ULP-RISC-V *and* ULP-FSM | Thread/Zigbee/802.15.4, WiFi 6, MIPI-DSI/CSI, hardware video codecs |58| ESP32 (classic) | 2× Xtensa LX6 @ 240MHz | WiFi 4 + Bluetooth Classic + BLE 4.2 | No | Widest library/example coverage, oldest silicon, Bluetooth Classic | Native USB, SIMD extensions, ULP-RISC-V, WiFi 6, Thread/Zigbee |59| ESP32-S2 | 1× Xtensa LX7 @ 240MHz | WiFi 4 only, **no Bluetooth at all** | Yes — OTG | Very low deep-sleep current | Second core, Bluetooth |60| ESP32-C3 | 1× RISC-V @ 160MHz | WiFi 4 + BLE 5 | No | Cheapest/smallest | Second core, native USB, SIMD, Thread/Zigbee |61| ESP32-C5 | 1× RISC-V @ 240MHz + LP core | WiFi 6 **dual-band (2.4+5GHz)** + BLE 5 + 802.15.4 | No | Only dual-band-WiFi6 ESP32 variant | Second core, native USB |62| ESP32-H2 | 1× RISC-V @ 96MHz | **No WiFi** — BLE 5 + Thread/Zigbee only | No | Purpose-built low-power mesh/Matter radio; Espressif's other half of the "dual-SoC Border Router" recommendation | WiFi entirely, second core |63| ESP32-P4 | 2× RISC-V @ up to 400MHz + LP core | **None** — always pairs with a companion chip (M5Stack's Tab5/Stamp-P4 use this chip, the C6) | Yes — HS OTG + FS OTG | MIPI-DSI/CSI, H.264 encode, up to 32MB in-package PSRAM | Any wireless radio |6465## Quick specs6667- **HP (High-Performance) core**: 1× 32-bit RISC-V (RV32IMAC — integer,68 multiply/divide, atomic, compressed; **no hardware FPU**), 4-stage69 pipeline, up to 160MHz. Single core — there is no PRO_CPU/APP_CPU split70 the way S3/P4/classic ESP32 have; see `references/memory-radio.md` for71 what that means for concurrency.72- **LP (Low-Power) core**: 1× 32-bit RISC-V (same RV32IMAC ISA), 2-stage73 pipeline, up to ~20MHz — a genuine coprocessor that can run independently74 of, and *concurrently with*, the HP core, not just during sleep. See75 `references/power-sleep-lp.md`.76- **Memory**: 320KB ROM, 512KB HP SRAM, 16KB LP SRAM (retained in deep77 sleep, and the LP core's own working memory)78- **PSRAM: none.** Not on the bare chip, and no module variant embeds any —79 unlike ESP32-S3/P4, there is no in-package PSRAM option for this chip at80 all. Don't assume `ESP.getPsramSize()`/`esp_get_free_heap_size()` will81 ever return nonzero PSRAM on a C6 board. See `references/memory-radio.md`.82- **Flash**: in-package on the `ESP32-C6FH4` (4MB) / `ESP32-C6FH8` (8MB)83 chip variants (Quad SPI), or external up to 16MB via SPI on modules built84 around the bare `ESP32-C6` part. 6 GPIOs are dedicated to this flash85 connection and not available for general use.86- **Wireless**: WiFi 6 (802.11ax, 2.4GHz only, up to 150Mbps PHY, OFDMA +87 downlink MU-MIMO + Target Wake Time), Bluetooth LE 5.3 (coded PHY for88 extended range, 2Mbps high-throughput mode, up to +20dBm TX), and 802.15.489 radio (Thread 1.3 and Zigbee 3.0 certified, 250kbps) — see "three radios,90 one antenna" above and `references/memory-radio.md` for coexistence91 behavior.92- **USB**: no native OTG — only the fixed-function USB-Serial-JTAG93 controller (serial console + flashing + JTAG debugging over one USB94 connection, entirely hardware-implemented and **not reconfigurable** into95 any other USB device class). If a user wants a board to present as a96 custom HID/MSC/composite USB device, that's not possible on this chip —97 point them at an S3 or P4 instead.98- **GPIO**: 30 pins (QFN40 package) or 22 pins (QFN32 package). 5 strapping99 pins (GPIO8, GPIO9, GPIO15, plus the MTMS/MTDI JTAG-shared pins) set boot100 mode at reset — check the current datasheet's strapping table before101 wiring anything to them at board-design time. GPIO0–7 (8 pins) are the102 RTC/LP-capable GPIOs, usable as deep-sleep wake sources and as the LP103 core's own `LP_IO` peripheral pins.104- **Storage**: no SDMMC host controller on this chip at all — SD cards are105 only reachable via SD-SPI (the SD protocol run over a regular SPI106 peripheral), and **no eMMC support** (eMMC requires the parallel SDMMC107 protocol this chip doesn't have). Also has a separate SDIO **slave**108 controller for acting as a co-processor to a host SoC (see "three radios"109 above) — don't confuse SDIO slave with an SD-card-host capability, they're110 unrelated peripherals. See `references/peripherals.md`.111- **Security**: AES-128/256, ECC (P-192/P-256), HMAC-SHA-256, RSA up to112 3072-bit + RSA Digital Signature, SHA-1/224/256, external-memory XTS-AES113 encryption, hardware TRNG, Secure Boot and Flash Encryption — not detailed114 further here, see ESP-IDF's security guides if the user needs this.115- **Package / operating range**: QFN40 (5×5mm) or QFN32 (5×5mm), –40°C to116 105°C (some module SKUs are rated to 85°C standard / 105°C extended —117 check the specific module datasheet).118- **Power modes**: Active, Modem-sleep, Light-sleep, Deep-sleep (~7µA) — see119 `references/power-sleep-lp.md`.120121## Peripheral capability map122123Full detail, with typical use cases and gotchas, is in124`references/peripherals.md`. Quick index of what's covered there:125126| Peripheral | For |127|---|---|128| RMT | Precisely-timed signal generation/capture — IR remotes, WS2812/NeoPixel, custom one-wire-style protocols |129| LEDC | PWM — LED dimming, buzzers/tone generation, simple motor speed control |130| I2S | Digital audio in/out (mic, speaker, codec chips) — one controller only |131| ADC | Analog sensing — one SAR ADC unit, no ADC1/ADC2 split the way classic ESP32/S3 have |132| PCNT | Hardware pulse counting — rotary encoders, flow meters, tachometers |133| MCPWM | Motor control PWM — H-bridges, ESCs, servo-adjacent timing |134| TWAI | **Two** independent CAN 2.0-compatible controllers — more than any other chip in this family |135| SD-SPI / SDIO slave | SD card access (SPI-only, no SDMMC host, no eMMC) and acting as a radio co-processor to a host SoC — two unrelated peripherals, don't conflate them |136| PARLIO | General-purpose parallel I/O — not a display/camera peripheral, see below |137| SDM | Sigma-delta modulation — lightweight analog-ish PWM-density output |138| GPTimer / dedicated GPIO | General-purpose hardware timers; low-latency bit-banged GPIO |139| Temperature sensor | Internal die temperature (not ambient) |140| No LCD/camera hardware | No parallel (I80/RGB) LCD interface, no MIPI-DSI/CSI — displays are SPI/I2C only via the generic `esp_lcd` component |141| No capacitive touch | Unlike classic ESP32/S3/P4, this chip has no built-in touch-sensing peripheral |142143## Power management: LP core is a real coprocessor, not a limited ULP-FSM144145Light sleep, deep sleep, wake sources, and the LP core (a genuine RISC-V146core that runs normal compiled C, can access LP UART/LP I2C/LP GPIO/LP147Timer directly, and — unlike older chips' ULP-FSM — can run continuously148even while the HP core is fully active) are all in149`references/power-sleep-lp.md`. Because this chip has only one HP core,150offloading an always-on background task (a sensor poll loop, a151watchdog, a slow UART listener) to the LP core is especially valuable here —152it doesn't compete with the single HP core's FreeRTOS scheduler at all, not153even for a slice of time. Read this before telling a user "just call154`esp_deep_sleep_start()`" if they actually need something running in the155background.156157## Memory and radio coexistence158159Why there's no PSRAM (ever, on any variant), which GPIOs the in-package160flash costs, the mechanics of the WiFi 6/BLE/802.15.4 time-sharing161(including Espressif's own dual-SoC recommendation for Border162Router/gateway use cases), and pointers to the Zigbee/Thread/Matter163software stacks are all in `references/memory-radio.md`.164165## Which M5Stack boards use this chip166167**NanoC6** is confirmed ESP32-C6FH4-based (verified against M5Stack's own168product page). **Tab5** is confirmed to use this chip as its169ESP32-C6-MINI-1U wireless co-processor — see the `m5stack-tab5` skill; the170C6 itself is not Tab5's main application SoC, that's the ESP32-P4 (see the171`esp32-p4` skill). **Stamp C6LoRa** and **Stamp-P4's "AddOn C6 For P4"**172are likely matches by name, not yet independently verified.173174## Official resources175176- Datasheet: https://documentation.espressif.com/esp32-c6_datasheet_en.html177- Product page: https://www.espressif.com/en/products/socs/esp32-c6178- ESP32-C6-MINI-1 / MINI-1U module datasheet: https://documentation.espressif.com/esp32-c6-mini-1_mini-1u_datasheet_en.html179- ESP-IDF API reference (esp32c6 target): https://docs.espressif.com/projects/esp-idf/en/stable/esp32c6/api-reference/index.html180- Sleep modes: https://docs.espressif.com/projects/esp-idf/en/stable/esp32c6/api-reference/system/sleep_modes.html181- LP Core / ULP-LP-core programming: https://docs.espressif.com/projects/esp-idf/en/stable/esp32c6/api-reference/system/ulp-lp-core.html182- USB Serial/JTAG console: https://docs.espressif.com/projects/esp-idf/en/stable/esp32c6/api-guides/usb-serial-jtag-console.html183- RF coexistence (WiFi/BLE/802.15.4): https://docs.espressif.com/projects/esp-idf/en/stable/esp32c6/api-guides/coexist.html184- SD/SDIO/MMC driver (confirms SD-SPI-only, no SDMMC host): https://docs.espressif.com/projects/esp-idf/en/stable/esp32c6/api-reference/storage/sdmmc.html185- TWAI (confirms 2 independent controllers): https://docs.espressif.com/projects/esp-idf/en/stable/esp32c6/api-reference/peripherals/twai.html186- ESP-Zigbee SDK: https://github.com/espressif/esp-zigbee-sdk187- ESP Thread Border Router: https://github.com/espressif/esp-thread-br188- OpenThread's ESP32 Border Router guide: https://openthread.io/guides/border-router/espressif-esp32189190## Working with the user191192- If they're getting PSRAM-related errors or unexpectedly low free heap on193 code ported from an S3/P4 project, check "Quick specs" above first — this194 chip has no PSRAM on any variant, full stop, not a config flag to enable.195- If they're combining WiFi with Thread/Zigbee (a Border Router, a Zigbee196 gateway, or any continuous-reception 802.15.4 role) and seeing packet197 loss or instability, that's very likely the shared-antenna time-sharing198 described in `references/memory-radio.md`, not an application bug —199 Espressif's own guidance is a dual-SoC design for production use of that200 kind, not asking one C6 to do all three radios reliably at once.201- If they want a custom USB device (HID keyboard, MSC mass storage, a202 composite device) or ask why `TinyUSB`/`USB.begin()`-style code doesn't203 do what it did on their S3/P4 board, tell them plainly this chip has no204 native USB OTG — only the fixed-function Serial/JTAG controller.205- If they're trying to mount an SD card or (especially) an eMMC chip using206 SDMMC-host-style code from another ESP32 target, this chip has no SDMMC207 host peripheral — SD-SPI only, and eMMC isn't possible at all.208- If they want something to keep running in the background — not just209 during deep sleep, but genuinely alongside normal operation without210 spending the single HP core's FreeRTOS scheduler on it — point them at211 the LP core in `references/power-sleep-lp.md` rather than a212 low-priority FreeRTOS task.213- This is chip-level guidance, cross-checked against Espressif's own214 datasheet and ESP-IDF docs at time of writing — but ESP-IDF215 version-to-version API and coexistence-behavior changes happen. If the216 user hits a compile error on a specific function signature or a217 coexistence-behavior discrepancy, point them at the current ESP-IDF docs218 for their exact version rather than assuming this file is byte-exact.