A tiny, open hardware RISC‑V playground.
- MCU: WCH CH32V006 (RISC‑V, 48 MHz class)
- USB‑C for power (VBUS) and connectors
- On‑board 3.3 V LDO for clean power
- SWD header for flashing with WCH‑LinkE
- CH340C USB‑UART for serial logging / optional bootloader work
- Break‑out headers for all GPIOs (PD0–PD7, PC0–PC7, PA1–PA2, etc.)
- Compact 2‑layer PCB with mounting holes
⚠️ This is a hobby/experimental board. Double‑check pin mappings against your MCU datasheet before connecting expensive peripherals.
hardware.kicad_pro– KiCad projecthardware.kicad_sch– Schematichardware.kicad_pcb– PCB layouthardware.kicad_prl– Local KiCad settingspcb.png– PCB view3d.png– 3D renderschematic.png– Schematic snapshot
- Input: 5 V from USB‑C (VBUS)
- Regulated: 3.3 V rail on board
- Headers: Left/Right pin headers break out the MCU ports. A 3‑pin header exposes GND / SWD / VBUS for programming/power.
Use any of the following:
- WCH RISC‑V GCC: https://github.com/openwch/riscv-none-elf-gcc
- WCH SDK / SPL (for
ch32v00x.h& register definitions): https://github.com/openwch/ch32v003 - PlatformIO with
wch-riscvsupport (community packages exist).
Flashing (recommended): WCH‑LinkE via SWD (Header near the board edge). Serial log: CH340C enumerates as a standard USB‑UART.
// Minimal PD1 blink for CH32V006 using WCH SPL-style headers.
// Requires the WCH SDK providing ch32v00x.h
#include "ch32v00x.h"
static void delay(volatile uint32_t t) {
while (t--) __asm__("nop");
}
int main(void) {
// Enable GPIO Port D clock
RCC->APB2PCENR |= RCC_APB2PCENR_IOPDEN;
// Configure PD1 as push‑pull output (10 MHz)
GPIOD->CFGLR &= ~(0xF << (1 * 4)); // Clear PD1 config
GPIOD->CFGLR |= (0x1 << (1 * 4)); // MODE=01 (10 MHz), CNF=00 (PP)
while (1) {
GPIOD->BSHR = (1U << 1); // PD1 HIGH
delay(500000);
GPIOD->BCR = (1U << 1); // PD1 LOW
delay(500000);
}
}Tip: If you’re using the WCH SDK examples, drop this into a template project and adjust the linker script for CH32V006. Build with
riscv-none-elf-gccand flash with WCH‑LinkE.
- Clone the repo and open the project in KiCad.
- Build the firmware using WCH’s SDK or your favorite bare‑metal setup.
- Connect WCH‑LinkE to SWD, power via USB‑C.
- Flash the blink example and look for the LED on PD1 to toggle.
- Public hardware release
- Blink example on PD1
- USB‑CDC demo
- Gerbers & fab notes
- Detailed flashing walkthrough (WCH‑LinkE, OpenOCD if/when supported)
Hardware and examples are released under the MIT License unless otherwise noted in subfolders.
If you build one, I’d love to see it—PRs and issues welcome!


