BrickInterface is a modern USB-C board that bridges vintage LEGO® electronics where no official solution exists. As of now, it supports the LEGO Interface A and LEGO Power Functions.
The host talks to the board with a framed binary protocol over USB-CDC, and the board appears as a standard serial port.
While this repo contains everything you need to manufacture or build your own BrickInterface, there are a limited number of pre-built boards available:
firmware/BrickInterface/ CH552T firmware (ch55xduino / SDCC)
*.ino, *.c, *.h dispatcher, Interface A, IR engine, packet parser
tests/ host-side unit tests (g++)
kicad/ KiCad hardware design (schematic, PCB, gerbers, BOM)
upload.sh flash helper (wchisp)
- MCU: CH552T (TSSOP-20), internal 24 MHz RC oscillator (no crystal)
- USB: USB-C, native full-speed device. Enumerates as USB CDC ACM
- Interface A: 20-pin IDC to the 9750
- IR: Two IR LEDs in parallel with different beam angles: a narrow TSAL6100 (±10°) for range and a wider TSAL6200 (±17°) for off-axis coverage
Built with ch55xduino (SDCC toolchain, C). Open firmware/BrickInterface/BrickInterface.ino in the Arduino IDE with the CH552 board package installed, select USB Settings > Default CDC, and compile.
The board exposes the WCH ROM bootloader (USB VID:PID 4348:55E0) for flashing.
To enter the bootloader, send the ENTER_BOOTLOADER command over the serial port, or power-cycle while holding the BOOT button (SW1) to pull D+ high.
(Note: On board revisions v1.0.4 or lower, SW1 was incorrectly wired to the 5V rail instead of 3.3V. Resistor R9 needs to be removed to pull D+ down, however this breaks SW1. To enter BOOT, bridge R9's location (ie. with tweezers)).
Pure-logic and protocol-encoder code is unit-tested on the host (no CH552 required):
cd firmware/BrickInterface/tests
make runThe host drives the board with a framed binary protocol on the USB-CDC serial port.
0xAA | LEN | SEQ | CMD | PAYLOAD… | CHK
Two commands, shown as hex on the wire:
AA 05 10 10 05 FF FF 00 # Interface A: outputs 0 & 2 full on
AA 06 20 20 00 01 17 00 10 # Power Functions: channel 1, output B, forward full
The board enumerates with the ch55xduino CDC identity (VID 0x1209, PID 0xC550). Use the GET_CAPABILITIES handshake to verify which hardware is supported (BrickInterface v1.0.5 and below reports 0x0037).
See PROTOCOL.md for the full wire protocol: frame format, commands, replies, error codes, and worked examples.
- Interface A (6 PWM outputs, 2 counting inputs) — Working
- Power Functions IR — Working
- Legacy IR / RCX IR — Early implementation, however it's proven unreliable. Not recommended for use yet.
This project is dual-licensed by component:
- Software (the firmware in
firmware/) is licensed under the Apache License, Version 2.0. SeeLICENSE. - Hardware (the KiCad design, gerbers, and BOM in
kicad/) is licensed under the CERN Open Hardware Licence Version 2 – Permissive (CERN-OHL-P v2). Seekicad/LICENSE.
Both are permissive licenses with a patent grant. Copyright 2024–2026 Nathan Kellenicki.
LEGO® and Mindstorms are trademarks of the LEGO Group of companies, which does not sponsor, authorize, or endorse this project.
BrickInterface is an independent, unofficial project. All product names, logos, and brands referenced in this project are the property of their respective owners. Use of these names is for identification and compatibility purposes only and does not imply any endorsement.