Machines › Computers › Espressif › ESP32-C6
ESP32-C6
2023
The ESP32-C6 (Espressif, 2023) is a low-cost connected microcontroller: a 160MHz single-core RISC-V RV32IMAC system-on-chip with 2.4GHz WiFi 6, Bluetooth Low Energy and an 802.15.4 radio for Thread and Zigbee. The DevKitC-1 exposes an addressable WS2812 RGB LED on GPIO8 and a UART0 serial console. Here it boots real bare-metal firmware on a from-scratch RISC-V interpreter, with the radios stubbed out. On-board only, and the bare devkit has no on-board audio, so it is silent.
ESP32-C6 Online Emulator
Play ESP32-C6 using JavaScript directly in your browser.
Controls
Boots real firmware on a from-scratch RISC-V RV32IMAC interpreter (RV32I + M mul/div + A atomics + C compressed, the machine-mode CSRs, traps and a functional interrupt controller) wired to an ESP32-C6 SoC model at the real hardware addresses: the 512 KB HP SRAM (unified I/D bus at 0x40800000), XIP flash + the flash-cache MMU + SPI-flash controller, the GPIO block (0x60091000, with the on-board WS2812 RGB LED on GPIO8), UART0 and the USB-Serial-JTAG console, the systimer and the interrupt matrix (PLIC). The default is stock, unmodified MicroPython v1.24.1 (MIT): the emulator HLE-s the ESP32-C6 mask ROM (from public linker-script addresses) and boots the real ESP-IDF + FreeRTOS all the way to a live Python >>> REPL — it auto-runs print(2+2) -> 4 and 6*7 -> 42 the moment it comes up, and you can type more (integer/float math, or drive the on-board GPIO8 RGB LED); stdin is delivered through the USB-Serial-JTAG console so typing stays reliable. Also in the picker: an RGB cycle that bit-bangs the DevKitC-1 WS2812 RGB LED as a real 800 kHz one-wire waveform (decoded from the GPIO edge timing), a Rainbow hue wheel, an original CC0 bare-metal mini-REPL, and Hello UART. Open the debugger to single-step the RISC-V core, read/write x0-x31 + pc + the machine CSRs, disassemble HP SRAM and flash with the shared RISC-V decoder, set breakpoints and write-watchpoints over the real ESP32-C6 memory map. WiFi 6, BLE and 802.15.4 have no radio here: their register windows are HLE stubs so firmware that probes them keeps running.
Boots real firmware on a from-scratch RISC-V RV32IMAC interpreter (RV32I + M mul/div + A atomics + C compressed, the machine-mode CSRs, traps and a functional interrupt controller) wired to an ESP32-C6 SoC model at the real hardware addresses: the 512 KB HP SRAM (unified I/D bus at 0x40800000), XIP flash + the flash-cache MMU + SPI-flash controller, the GPIO block (0x60091000, with the on-board WS2812 RGB LED on GPIO8), UART0 and the USB-Serial-JTAG console, the systimer and the interrupt matrix (PLIC). The default is stock, unmodified MicroPython v1.24.1 (MIT): the emulator HLE-s the ESP32-C6 mask ROM (from public linker-script addresses) and boots the real ESP-IDF + FreeRTOS all the way to a live Python >>> REPL — it auto-runs print(2+2) -> 4 and 6*7 -> 42 the moment it comes up, and you can type more (integer/float math, or drive the on-board GPIO8 RGB LED); stdin is delivered through the USB-Serial-JTAG console so typing stays reliable. Also in the picker: an RGB cycle that bit-bangs the DevKitC-1 WS2812 RGB LED as a real 800 kHz one-wire waveform (decoded from the GPIO edge timing), a Rainbow hue wheel, an original CC0 bare-metal mini-REPL, and Hello UART. Open the debugger to single-step the RISC-V core, read/write x0-x31 + pc + the machine CSRs, disassemble HP SRAM and flash with the shared RISC-V decoder, set breakpoints and write-watchpoints over the real ESP32-C6 memory map. WiFi 6, BLE and 802.15.4 have no radio here: their register windows are HLE stubs so firmware that probes them keeps running.
Boots real firmware on a from-scratch RISC-V RV32IMAC interpreter (RV32I + M mul/div + A atomics + C compressed, the machine-mode CSRs, traps and a functional interrupt controller) wired to an ESP32-C6 SoC model at the real hardware addresses: the 512 KB HP SRAM (unified I/D bus at 0x40800000), XIP flash + the flash-cache MMU + SPI-flash controller, the GPIO block (0x60091000, with the on-board WS2812 RGB LED on GPIO8), UART0 and the USB-Serial-JTAG console, the systimer and the interrupt matrix (PLIC). The default is stock, unmodified MicroPython v1.24.1 (MIT): the emulator HLE-s the ESP32-C6 mask ROM (from public linker-script addresses) and boots the real ESP-IDF + FreeRTOS all the way to a live Python >>> REPL — it auto-runs print(2+2) -> 4 and 6*7 -> 42 the moment it comes up, and you can type more (integer/float math, or drive the on-board GPIO8 RGB LED); stdin is delivered through the USB-Serial-JTAG console so typing stays reliable. Also in the picker: an RGB cycle that bit-bangs the DevKitC-1 WS2812 RGB LED as a real 800 kHz one-wire waveform (decoded from the GPIO edge timing), a Rainbow hue wheel, an original CC0 bare-metal mini-REPL, and Hello UART. Open the debugger to single-step the RISC-V core, read/write x0-x31 + pc + the machine CSRs, disassemble HP SRAM and flash with the shared RISC-V decoder, set breakpoints and write-watchpoints over the real ESP32-C6 memory map. WiFi 6, BLE and 802.15.4 have no radio here: their register windows are HLE stubs so firmware that probes them keeps running.
Boots real firmware on a from-scratch RISC-V RV32IMAC interpreter (RV32I + M mul/div + A atomics + C compressed, the machine-mode CSRs, traps and a functional interrupt controller) wired to an ESP32-C6 SoC model at the real hardware addresses: the 512 KB HP SRAM (unified I/D bus at 0x40800000), XIP flash + the flash-cache MMU + SPI-flash controller, the GPIO block (0x60091000, with the on-board WS2812 RGB LED on GPIO8), UART0 and the USB-Serial-JTAG console, the systimer and the interrupt matrix (PLIC). The default is stock, unmodified MicroPython v1.24.1 (MIT): the emulator HLE-s the ESP32-C6 mask ROM (from public linker-script addresses) and boots the real ESP-IDF + FreeRTOS all the way to a live Python >>> REPL — it auto-runs print(2+2) -> 4 and 6*7 -> 42 the moment it comes up, and you can type more (integer/float math, or drive the on-board GPIO8 RGB LED); stdin is delivered through the USB-Serial-JTAG console so typing stays reliable. Also in the picker: an RGB cycle that bit-bangs the DevKitC-1 WS2812 RGB LED as a real 800 kHz one-wire waveform (decoded from the GPIO edge timing), a Rainbow hue wheel, an original CC0 bare-metal mini-REPL, and Hello UART. Open the debugger to single-step the RISC-V core, read/write x0-x31 + pc + the machine CSRs, disassemble HP SRAM and flash with the shared RISC-V decoder, set breakpoints and write-watchpoints over the real ESP32-C6 memory map. WiFi 6, BLE and 802.15.4 have no radio here: their register windows are HLE stubs so firmware that probes them keeps running.
Boots real firmware on a from-scratch RISC-V RV32IMAC interpreter (RV32I + M mul/div + A atomics + C compressed, the machine-mode CSRs, traps and a functional interrupt controller) wired to an ESP32-C6 SoC model at the real hardware addresses: the 512 KB HP SRAM (unified I/D bus at 0x40800000), XIP flash + the flash-cache MMU + SPI-flash controller, the GPIO block (0x60091000, with the on-board WS2812 RGB LED on GPIO8), UART0 and the USB-Serial-JTAG console, the systimer and the interrupt matrix (PLIC). The default is stock, unmodified MicroPython v1.24.1 (MIT): the emulator HLE-s the ESP32-C6 mask ROM (from public linker-script addresses) and boots the real ESP-IDF + FreeRTOS all the way to a live Python >>> REPL — it auto-runs print(2+2) -> 4 and 6*7 -> 42 the moment it comes up, and you can type more (integer/float math, or drive the on-board GPIO8 RGB LED); stdin is delivered through the USB-Serial-JTAG console so typing stays reliable. Also in the picker: an RGB cycle that bit-bangs the DevKitC-1 WS2812 RGB LED as a real 800 kHz one-wire waveform (decoded from the GPIO edge timing), a Rainbow hue wheel, an original CC0 bare-metal mini-REPL, and Hello UART. Open the debugger to single-step the RISC-V core, read/write x0-x31 + pc + the machine CSRs, disassemble HP SRAM and flash with the shared RISC-V decoder, set breakpoints and write-watchpoints over the real ESP32-C6 memory map. WiFi 6, BLE and 802.15.4 have no radio here: their register windows are HLE stubs so firmware that probes them keeps running.
Configurations
| Configuration | Emulator | Machine | OS | Legal | |
|---|---|---|---|---|---|
| MicroPython v1.24.1 | ESP32-C6 | ESP32-C6 | open | Open ⛶ | |
| RGB cycle (WS2812) | ESP32-C6 | ESP32-C6 | open | Open ⛶ | |
| Rainbow (WS2812 hue wheel) | ESP32-C6 | ESP32-C6 | open | Open ⛶ | |
| Mini-REPL (UART0) | ESP32-C6 | ESP32-C6 | open | Open ⛶ | |
| Hello UART (serial) | ESP32-C6 | ESP32-C6 | open | Open ⛶ |
Downloads — ROMs & software
| Title | Type | Size (bytes) | Legal | |
|---|---|---|---|---|
| Hello UART (serial) | demo | 0 | open | Download ↓ |
| MicroPython v1.24.1 | firmware | 0 | open | Download ↓ |
| Rainbow (WS2812 hue wheel) | demo | 0 | open | Download ↓ |
| Mini-REPL (UART0) | demo | 0 | open | Download ↓ |
| RGB cycle (WS2812) | demo | 0 | open | Download ↓ |
Downloads — ROMs & software
| Title | Type | Size (bytes) | Legal | |
|---|---|---|---|---|
| Hello UART (serial) | demo | 0 | open | Download ↓ |
| MicroPython v1.24.1 | firmware | 0 | open | Download ↓ |
| Rainbow (WS2812 hue wheel) | demo | 0 | open | Download ↓ |
| Mini-REPL (UART0) | demo | 0 | open | Download ↓ |
| RGB cycle (WS2812) | demo | 0 | open | Download ↓ |
Downloads — ROMs & software
| Title | Type | Size (bytes) | Legal | |
|---|---|---|---|---|
| Hello UART (serial) | demo | 0 | open | Download ↓ |
| MicroPython v1.24.1 | firmware | 0 | open | Download ↓ |
| Rainbow (WS2812 hue wheel) | demo | 0 | open | Download ↓ |
| Mini-REPL (UART0) | demo | 0 | open | Download ↓ |
| RGB cycle (WS2812) | demo | 0 | open | Download ↓ |
Chips
Emulators
| Emulator | Type | License | Site |
|---|---|---|---|
| ESP32-C6 | online | CC0 firmware · from-scratch core | Website ↗ |