Skip to the content
PCBKitNew board
2 layers100 × 100 mmWall, the printed circuit board in 3D

Modular LED Wall Tiles powered by CH32V006 RISC-V slaves.

Size
100 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
40
Nets
48
Pads
197
Tracks, vias
761, 60
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
7 Jul 2025
Updated
10 Sep 2025

Overview

Wall is an open-source printed circuit board by rmingon, from the rmingon/led-wall repository on GitHub. It is a 2-layer board of 100 × 100 mm with 40 parts on 48 nets, routed with 761 tracks and 60 vias.

It is built around the AMS1117-3.3 and WS2812B. Its parts include 26 diodes, 5 connectors, 4 capacitors, 2 resistors and 2 ICs. It belongs with the RISC-V boards of this library.

Main components

2

README

README.md

LED-Wall Tile — CH32V003 Parallel-Bus WS2812B Controller (5×5)

A modular 5×5 WS2812B LED tile driven by a CH32V003 slave MCU.
Tiles share a simple 8-bit parallel bus + CLK + EN so a Raspberry Pi (or any MCU) can address many tiles and push pixel data quickly.

3d

Highlights

  • 25× WS2812B per tile (5 rows × 5 columns), daisy-chained on-board
  • Parallel control bus: DATA0…DATA7, CLK, EN, optional RST
  • MCU: WCH CH32V003F… (RISC-V, 3.3 V)
  • Power: 5 V input for LEDs; onboard AMS1117-3.3 LDO for the MCU
  • Connectors on four edges for tiling/rotation; pass-through for power & bus
  • Status LED on a GPIO for quick diagnostics
  • Designed with KiCad 9.0.3

Repo structure

text
/wall/
  wall.kicad_pro
  wall.kicad_pcb
  wall.kicad_sch
  wall.kicad_prl
/media/
  wall_top_3d.jpeg
  wall_bottom_3d.jpeg
  wall_pcb.png
  wall_schematic.png
/firmware/        # (placeholder) CH32V003 code
/tools/           # (placeholder) host examples (Raspberry Pi)
README.md

Images

  • Top 3D: media/wall_top_3d.jpeg
  • Bottom 3D: media/wall_bottom_3d.jpeg
  • PCB layout: media/wall_pcb.png
  • Schematic: media/wall_schematic.png

Electrical overview

  • LED matrix: 25 × WS2812B (5050). Data is routed serpentine per row.
  • MCU: CH32V003F*P6 (labelled U1 in the schematic).
    • Parallel data bus on PC0…PC7
    • CLK and EN on PDx pins (see net labels in schematic)
    • PA1/PA2 used for the WS2812 data output to the first LED in the chain
    • RST net broken out (optional external reset)
  • Power:
    • +5 V for LEDs
    • AMS1117-3.3 (U3) generates +3V3 for the MCU; C1/C2/C3 for decoupling
  • Indicators: D26 + R4 connected to a GPIO (status / heartbeat)

⚠️ Current budget: Each WS2812B can draw up to 40 mA at full-white.
One tile worst-case ≈ 25 × 40 mA = 1.5 A @ 5 V (plus margin).
Size your power rails accordingly and avoid sustained full-white if thermals are tight.


Connectors / Pinout

Each edge header is a 1×14 connector carrying power and the parallel bus.

PinSignalNotes
1DATA0Parallel data bit 0 (MCU PC0)
2DATA1(PC1)
3DATA2(PC2)
4DATA3(PC3)
5DATA4(PC4)
6DATA5(PC5)
7DATA6(PC6)
8DATA7(PC7)
9CLKRising edge latch (EXTI7_0 IRQ)
10ENTile enable / latch (PDx)
11GNDGround
12GNDGround (second pin for current)
13+5VLED power
14+5VLED power (second pin for current)

Exact PDx assignments are labelled in the schematic nets; keep those in firmware defines so you can move them if the footprint changes.

  • WS2812 data → PC7 / TIM2_CH2 (remap)
  • Driven by TIM2 PWM + DMA

Protocol

Each frame is transmitted as a sequence of bytes clocked on PD2 rising edge while the slave samples D0–D7.

Frame format:

text
SOF0 SOF1 ADDR CMD LEN PAY[LEN] CRC
  • SOF0 = 0xA5
  • SOF1 = 0x5A
  • ADDR = 0–254 for unicast, 0xFF for broadcast
  • CMD = command byte
  • LEN = number of payload bytes
  • PAY = payload
  • CRC = Dallas/Maxim CRC8 (poly=0x31 reflected=0x8C, init=0x00) computed over ADDR..CMD..LEN..PAY

Commands

CMDNameLENPayload description
0x01SET_ALL_RGB3×N (75)[R,G,B] triplets for all LEDs
0x02SET_ONE_RGB4[index, R, G, B] (0–24 index)
0x03FILL_RGB3[R, G, B] fill all LEDs
0x04BOOT_TEST0Run built-in RGB test animation

Firmware (CH32V003)

  • Toolchain: WCH-RISC-V (MounRiver) or Open-source (e.g., riscv-none-elf-gcc + openocd for WCH-LinkE).
  • Peripherals used:
    • GPIO for DATA[7:0], CLK, EN, LED
    • Timer or edge-detect to sample CLK while EN=1
    • Bit-banged or timer-driven WS2812 waveform output on PAx
  • WS2812 timing: 800 kHz, 1.25 µs/bit. Use a timer and tight ISR/DMA-like loop to meet timing.

Build steps (outline):

  1. Clone repo; open /kicad/wall.kicad_pro to view hardware.
  2. Open /wall_code/ in your IDE; set your tile address in main.c.
  3. Flash with WCH-LinkE via SWIO (PD1 on CH32V003). Provide a small 3-pin tag-connector or pogo-pads on your programmer.
  4. Power at 5 V and verify the heartbeat LED.

Example Host Frame

Set all 25 LEDs to red (255,0,0):

text
A5 5A 12 01 4B  FF 00 00 FF 00 00 ... (25 triplets) ... CRC
  • 0xA5 0x5A = SOF
  • 0x12 = target address
  • 0x01 = SET_ALL_RGB
  • 0x4B = 75 payload bytes
  • Payload = 25× [FF,00,00]
  • CRC = computed over ADDR..PAYLOAD

Raspberry Pi example (Python, pseudo-code)

  1. Open host.py in your IDE.

Example Host Frame

Set all 25 LEDs to red (255,0,0):

text
A5 5A 12 01 4B  FF 00 00 FF 00 00 ... (25 triplets) ... CRC
  • 0xA5 0x5A = SOF
  • 0x12 = target address
  • 0x01 = SET_ALL_RGB
  • 0x4B = 75 payload bytes
  • Payload = 25× [FF,00,00]
  • CRC = computed over ADDR..PAYLOAD

Manufacturing notes

  • Layers: 2-layer, 1.6 mm FR-4, 1 oz Cu
  • Min track/clearance: per your fab defaults (design uses moderate widths)
  • Finish: HASL or ENIG
  • Decoupling: place 0.1 µF near the MCU VDD and each LED power rail segment
  • Mounting: corner holes + through-grid holes in the LED field (for diffusion/weight).

Bring-up checklist

  1. Power at 5 V and check +3V3 out of U3 (AMS1117-3.3).
  2. Flash firmware; confirm status LED blinks.
  3. With a logic analyzer, verify CLK edges and that DATA[7:0] are stable at each edge while EN=1.
  4. Send a Fill command to a single address → tile lights uniformly.
  5. Push a full 75-byte pixel buffer → verify 5×5 order matches your mapping.

License

  • Hardware: CC-BY-SA 4.0
  • Firmware/Host code: MIT

Credits

Designed by RMINGON.
KiCad project files: kicad/wall.* (created with KiCad 9.0.3).


Bill-of-Materials (core)

RefPartNotes
U1CH32V003F…P63.3 V RISC-V MCU
U3AMS1117-3.35 V → 3.3 V LDO
D1–D25WS2812B5 V addressable LEDs
D26, R4Status LED + 5 Ω–1 kΩ(value per brightness; schematic shows R4 5 Ω)
J1–J41×14 headersBus + Power
C1–C310 µF/0.1 µF mixRegulator & MCU decoupling

Tweak values to match your inventory and regulator stability requirements (e.g., AMS1117 likes ≥10 µF on input/output).

Parts

40
QtyValueFootprintReferences
25WS2812BLED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mmD1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +9
4CCapacitor_SMD:C_0603_1608MetricC1, C2, C3, C4
4Conn_01x14Connector_PinSocket_2.54mm:PinSocket_1x14_P2.54mm_HorizontalJ1, J2, J3, J4
2R_SmallResistor_SMD:R_0603_1608MetricR4, R5
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U3
1CH32V003FxPxPackage_SO:TSSOP-20_4.4x6.5mm_P0.65mmU1
1Conn_01x01_PinTestPoint:TestPoint_Pad_D2.0mmJ5
1LEDLED_SMD:LED_0603_1608MetricD26
1SW_PushButton_Switch_SMD:SW_SPST_FSMSMBTN1

Questions

How big is the Wall PCB?

It measures 100 × 100 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Wall use?

40 parts, built around the AMS1117-3.3 and WS2812B. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Wall KiCad files?

From the rmingon/led-wall repository on GitHub, at the commit this page was made from: the board is wall/wall.kicad_pcb and its schematic hardware/hardware.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Wall design in my own project?

Its repository states no licence, so its author keeps all rights: ask rmingon before reusing the design.

Similar boards

  • 4 layers99 × 53.3 mmPSLab, the printed circuit board in 3D

    PSLab

    fossasia/pslab-hardware

    PSLab Hardware Design and Schematics https://pslab.io

    199 parts1.7kApache-2.0
  • 4 layers67 × 98 mmSJ-201-R6, the printed circuit board in 3D

    SJ-201-R6

    MycroftAI/hardware-mycroft-mark-II

    Mycroft's Mark II Rpi mechanical, electrical and industrial designs

    235 parts113
  • 2 layers60 × 30 mmTd free, the printed circuit board in 3D

    Td free

    mawoka-myblock/td-free

    Measure the TD of your filament easily

    24 parts60EUPL-1.2
  • 2 layers148.6 × 192.2 mmBadge, the printed circuit board in 3D

    Badge

    NuttyShell/NuttyBadge

    NuttyBadge: A NuttyShell crafted multi-tool. Opensourced Hardawre and Software

    169 parts31GPL-3.0
  • 2 layersTopBoard, the printed circuit board in 3D

    TopBoard

    Libre-Talk/Wave

    Smart Speaker satellite

    184 parts22
  • 2 layers50.6 × 71.1 mmOpen ESPilot, the printed circuit board in 3D

    Open ESPilot

    Tomas-Kuchta-FPV/Open-ESPilot

    An open-source project to develop a custom ESP32-based flight controller designed primarily for use with ArduPilot. Focused on affordability, flexibility, and ease of integration with various robotic and UAV platforms.

    109 parts18CERN-OHL-W-2.0
  • 2 layers85 × 99.6 mmBadge, the printed circuit board in 3D

    Badge

    urish/aramcon-badge

    Just a badge

    93 parts18
  • 4 layers99.1 × 68.6 mmSTM32XP, the printed circuit board in 3D

    STM32XP

    MechatronixLab/STM32XP

    Development board based on the STM32F411RET6

    176 parts14