

USB CDC
A bare-metal thermal printer controller that receives data over USB-CDC, processes it using a custom serial protocol (TSIP), and prints text and images on an RP203 thermal printer.
- Size
- 55 × 54 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 35
- Nets
- 55
- Pads
- 149
- Tracks, vias
- 272, 17
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 17 Jun 2026
- Updated
- 21 Aug 2026
Overview
USB CDC is an open-source printed circuit board by addy123d, from the addy123d/USB-CDC repository on GitHub. It is a 2-layer board of 55 × 54 mm with 35 parts on 55 nets, routed with 272 tracks and 17 vias.
It is built around the LM1117DT-3.3. Its parts include 12 capacitors, 7 resistors, 6 connectors, 2 ICs and 2 diodes. It belongs with the STM32 boards of this library.
Main components
1README
Readme.mdUSB-PRINTER — Bare-Metal Thermal Printer Controller
Author: Aditya Chaudhary
Date: July 2026
Status: ✅ Complete
Overview
A bare-metal thermal printer controller that receives data over USB-CDC, processes it using a custom serial protocol (TSIP), and prints text and images on an RP203 thermal printer. Built from scratch on an STM32F103C8T6, with no HAL, no middleware.
Features
- ✅ USB-CDC communication with PC (bare-metal)
- ✅ Custom TSIP protocol (Thermal Serial Interface Protocol)
- ✅ Text and image printing on RP203 thermal printer
- ✅ UART bridge between USB and printer
- ✅ Custom PCB design (KiCad)
- ✅ Bare-metal firmware (no HAL, no libraries)
Hardware
| Component | Role |
|---|---|
| STM32F103C8T6 (Blue Pill) | Main MCU |
| RP203 Thermal Printer | Physical output |
| USB Port | PC communication (CDC) |
| UART | Printer communication |
Firmware Highlights
- USB enumeration from scratch (bare-metal)
- CDC (Communication Device Class) implementation
- TSIP protocol design and implementation
- Image processing for thermal printing
- Ring buffer for UART RX (reusable standard)
Gallery
[Add your project images here]
Acknowledgments
To the datasheets, the logic analyzer, and the late-night debugging sessions. And to the friends who kept asking, "What does this printer even do?"
License
This project is open for learning and reference. Use it, break it, improve it.
Parts
35| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 104,0603 | Capacitor_SMD:C_0603_1608Metric | C1, C9, C10, C13, C14, C15 |
| 3 | 10k | Resistor_SMD:R_0603_1608Metric | R4, R5, R7 |
| 2 | 10u,0603 | Capacitor_SMD:C_0603_1608Metric | C2, C11 |
| 2 | 20p,0603 | Capacitor_SMD:C_0603_1608Metric | C5, C6 |
| 2 | 510R,THT | Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P2.54mm_Vertical | R2, R3 |
| 2 | LED | LED_SMD:LED_0805_2012Metric | D1, D2 |
| 1 | 1k5 | Resistor_SMD:R_0603_1608Metric | R6 |
| 1 | 1u | Capacitor_SMD:C_0603_1608Metric | C7 |
| 1 | 22k | Resistor_SMD:R_0603_1608Metric | R8 |
| 1 | 22uf,THT | Capacitor_THT:C_Radial_D6.3mm_H5.0mm_P2.50mm | C12 |
| 1 | Crystal_GND24 | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm_HandSoldering | Y1 |
| 1 | DEBUG UART | Connector:FanPinHeader_1x04_P2.54mm_Vertical | J3 |
| 1 | GPIO | Connector:FanPinHeader_1x04_P2.54mm_Vertical | J6 |
| 1 | LM1117DT-3.3 | Package_TO_SOT_SMD:TO-252-3_TabPin2 | U2 |
| 1 | LOGO | LOGO | G*** |
| 1 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H2 |
| 1 | PRINTER UART | Connector:FanPinHeader_1x04_P2.54mm_Vertical | J4 |
| 1 | PR_TX | MountingHole:MountingHole_2.2mm_M2_DIN965_Pad | H1 |
| 1 | STM32F103C8Tx | Package_QFP:LQFP-48_7x7mm_P0.5mm | U1 |
| 1 | SWD | Connector:FanPinHeader_1x04_P2.54mm_Vertical | J2 |
| 1 | SW_Push | Button_Switch_THT:SW_PUSH-12mm | SW1 |
| 1 | Screw_Terminal_01x02 | TerminalBlock:TerminalBlock_Xinya_XY308-2.54-2P_1x02_P2.54mm_Horizontal | J5 |
| 1 | SolderJumper_2_Open | Jumper:SolderJumper-2_P1.3mm_Open_Pad1.0x1.5mm | JP1 |
| 1 | USB_B_Micro | Connector_USB:USB_Micro-B_Amphenol_10118194_Horizontal | J1 |
Questions
How big is the USB CDC PCB?
It measures 55 × 54 mm and has 2 copper layers, 1.6 mm thick.
What parts does the USB CDC use?
35 parts, built around the LM1117DT-3.3. 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 USB CDC KiCad files?
From the addy123d/USB-CDC repository on GitHub, at the commit this page was made from: the board is pcb/main/main.kicad_pcb and its schematic pcb/main/main.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the USB CDC design in my own project?
Its repository states no licence, so its author keeps all rights: ask addy123d before reusing the design.
Similar boards
- 2 layers78 × 84 mm

- 2 layers55 × 55 mm

ControlBoard
Deni90/singleDigitNixieClock
A small project that combines ESP32 with a vintage Soviet Nixie tube from the 70’ to create an artistic clock. Originally developed on ESP8266/Arduino, now evolved to ESP32 with ESP-IDF for greater performance and…
39 parts5MIT - 2 layers139.7 × 114.3 mm

Self balancing robot
K0nradG/self-balancing-robot
Self-balancing robot powered by nRF52840 and Zephyr RTOS, with BLE control, OTA updates, and a Raspberry Pi camera interface designed for future autonomous navigation.
36 parts4Apache-2.0 - 2 layers99.8 × 60.2 mm

Irrigation IoT
VictorRavani/Irrigation_IoT
This project covers the complete development of Hardware and Firmware for IoT-based supervisory control. It offers all the necessary information and resources so that anyone can set up the system independently.
79 parts4MIT - 4 layers70 × 70 mm

Inverter KiCAD
AresEnsea/2425_Projet2A_AresCFR
Ce repository GitHub regroupe l'ensemble des projets & documents réalisés par l'association Ares pour la Coupe de France de Robotique 2025
104 parts3 - 2 layers87.6 × 63.2 mm

- 4 layers100 × 40 mm

- 4 layers60 × 60 mm
