Skip to the content
PCBKitNew board
2 layers40 × 100 mmPicoDCC, the printed circuit board in 3D

DCC command station firmware for the Raspberry Pi Pico 2 — PIO-generated track signal, partial DCC-EX protocol for JMRI, LVGL touchscreen UI

Size
40 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
28
Nets
42
Pads
168
Tracks, vias
272, 16
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
19 Aug 2026
Updated
28 Sep 2026

Overview

PicoDCC is an open-source printed circuit board by bazauto, from the bazauto/PicoDCC repository on GitHub, published under the MIT licence. It is a 2-layer board of 40 × 100 mm with 28 parts on 42 nets, routed with 272 tracks and 16 vias.

Its parts include 8 resistors, 3 connectors, 2 capacitors, 2 ICs and 2 diodes. It belongs with the RP2040 and RP2350 boards of this library.

README

hardware/README.md

PicoDCC carrier board

The carrier PCB the firmware runs on: a Raspberry Pi Pico 2 soldered down, two BTS7960 H-bridge modules (main and programming track), their fault LEDs, and headers for the display and debug. KiCad project, BOM and the Gerbers as sent to fab.

It was designed in KiCad 9.0.1 in April 2025, before this repo had any design review, and it is imported as it was built. Nothing in the KiCad files has been changed on the way in. The concerns found while importing it are listed below rather than fixed, because the boards in use are this revision.

Files

FileWhat it is
PicoDCC.kicad_pro, .kicad_sch, .kicad_pcbThe KiCad project. Keep them together
ProjectSymbols.kicad_sym + sym-lib-tableThe one project symbol, the BTS7960 module. Everything else comes from the stock KiCad libraries
bom.csvBill of materials, as exported from the schematic
fab/rev-1.0/Gerbers, drill files, Gerber job file and the zipped set, as plotted on 2025-04-26 for the boards in use. A historical record: never regenerate it in place
LICENSECERN-OHL-P-2.0, covering everything in this folder

The title block carries no revision, so "1.0" is a name given on import for the only revision there has been. A board change that goes to fab gets a new fab/rev-X.Y/ folder.

KiCad plots into Gerber/ by default, which is git-ignored so that a fresh plot is never mistaken for the fab record. Opening the project in KiCad 10 and saving it upgrades the file format; do that deliberately, in its own commit.

Connections

A1 is the Pico 2. Pin numbers are the Pico's.

PicoNetGoes to
GP0–GP15one net eachJ1 pins 1–16 (GPn on pin n+1). J1 carries the display, touch and UART, plus the spare GP12–GP15
GP0, GP1UART0also J2 pins 3, 4
GP16main fault LEDD1 cathode; anode through R5 (330R) to GND — see concern 1
GP17main DCC signalU1 RPWM, TP1; inverted by Q1 (BC108, R1 base, R2 pull-up to VSYS) into U1 LPWM
GP18main enableU1 R_EN and L_EN, TP2
GP19prog fault LEDD2 cathode; anode through R6 (330R) to GND
GP20prog DCC signalU2 RPWM, TP4; inverted by Q2 (R3, R4) into U2 LPWM
GP21prog enableU2 R_EN and L_EN, TP5
GP26 / ADC0main currentU1 R_IS and L_IS tied, TP3, R7 (1k) to GND
GP27 / ADC1prog currentU2 R_IS and L_IS tied, TP6, R8 (1k) to GND
SWCLK, SWDIOdebugJ2 pins 6, 5
VSYS5 V inJ4 pin 2, J2 pin 2, TP7, U1/U2 VCC
GNDJ4 pin 1, J2 pin 1, TP8, U1/U2 GND

Not connected: 3V3, 3V3_EN, RUN, VBUS, ADC_VREF, AGND, GP22, GP28.

J2 (debug): 1 GND, 2 VSYS, 3 GP0, 4 GP1, 5 SWDIO, 6 SWCLK. J4 (power): 1 GND, 2 VSYS.

Verification

Run on import with KiCad 10.0.5 (kicad-cli), against the files in this folder:

text
sch erc --severity-all                4 violations, all lib_symbol_mismatch (BC108 x2, LED_Small x2)
sch erc --severity-error              0
pcb drc --schematic-parity            0 unconnected items, 0 schematic parity issues
pcb drc, all severities               28: 27 lib_footprint_mismatch, 1 starved_thermal (error)

The mismatches are library drift: the design embeds the KiCad 9 copies of stock symbols and footprints, and KiCad 10's libraries have moved on. They are not connection problems. The starved thermal is concern 4.

The schematic was last saved in August 2025, four months after the board. The zero parity result shows the board still matches it.

fab/rev-1.0/ was checked against the board by replotting the Gerbers and drill files with kicad-cli and comparing what each file draws, using the geometry comparison from bazauto/block-detection's scripts/check_fab_outputs.py. All 12 files match. The only textual difference is that KiCad 10 numbers the three custom pad-shape aperture macros in a different order from 9.0.1.

Known concerns with revision 1.0

1. The fault LEDs are drawn reverse-biased. GP16 drives D1's cathode and the anode returns to GND through R5, so driving GP16 high — what the firmware does on a trip — reverse-biases the LED. D2 on GP19 is the same. Check how the LEDs were actually fitted before relying on them: if they light, they are in the other way round from the footprint.

2. 3V3 is not broken out. J1 carries GP0–GP15 only; neither J1 nor J2 has a 3V3 pin. Anything that needs a 3.3 V supply from the board — the block detector used for programming-track ACK, for one — has to take it from the Pico's 3V3 pin (pin 36) directly.

3. Current sense resolution, and a possible overvoltage on the ADC pins. The BTS7960's IS output is a current proportional to load, at a ratio of roughly 8500:1, turned into a voltage by the 1k to ground. At that ratio 60 mA — a decoder's service-mode ACK — is about 7 µA, about 7 mV, about 9 ADC counts, which is below the sense offset the part is specified with at low current. That is why ADC-based ACK detection never worked, and why ACK detection is moving to the block detector. Separately, the BTS7960 datasheet describes the IS pin sourcing a fixed current of a few milliamps when the chip latches a fault; if that is ~4.5 mA, 1k turns it into ~4.5 V on GP26/GP27, and the RP2350's ADC-capable pins are not 5 V tolerant. Unverified — check the datasheet figure before relying on the ADC pins surviving a driver fault.

4. One starved thermal relief. J2 pin 1 (GND) connects to the B.Cu ground zone with one spoke where the zone asks for two. Harmless electrically; worth fixing in any next revision.

Licence

Copyright © 2025–2026 Paul Barrett.

The design in this folder — schematic, board, project symbol library, BOM, Gerbers and drill files — is licensed under the CERN Open Hardware Licence Version 2 – Permissive (LICENSE), the same licence as bazauto/block-detection. The firmware in the rest of the repository stays MIT.

Symbols and footprints from the stock KiCad libraries are embedded in the schematic and board, as KiCad always does. The KiCad libraries are CC-BY-SA 4.0 with an exception that a design using them is not bound by that licence, so this folder carries no obligation from them. 3D models are referenced by path, not included. See THIRD_PARTY_NOTICES.md.

Parts

28
QtyValueFootprintReferences
61KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2, R3, R4, R7, R8
20.1uFCapacitor_THT:CP_Radial_D4.0mm_P2.00mmC1, C2
2330Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR5, R6
2BC108Package_TO_SOT_THT:TO-18-3Q1, Q2
2TP_M_ENConnector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_VerticalTP2, TP5
2TP_M_ISConnector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_VerticalTP3, TP6
2TP_M_PWMConnector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_VerticalTP1, TP4
2~Connector_PinHeader_2.54mm:PinHeader_2x04_P2.54mm_VerticalU1, U2
15v PWRTerminalBlock_RND:TerminalBlock_RND_205-00012_1x02_P5.00mm_HorizontalJ4
1Conn_01x16Connector_PinHeader_2.54mm:PinHeader_1x16_P2.54mm_VerticalJ1
1DebugConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ2
1Main_BreakLED_THT:LED_D3.0mm_ClearD1
1Prog_BreakLED_THT:LED_D3.0mm_ClearD2
1RaspberryPi_PicoModule:RaspberryPi_Pico_SMD_HandSolderA1
1TP_GNDConnector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_VerticalTP8
1TP_VCCConnector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_VerticalTP7

Questions

How big is the PicoDCC PCB?

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

What parts does the PicoDCC use?

28 parts. 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 PicoDCC KiCad files?

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

Can I use the PicoDCC design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers44.5 × 72.7 mmOSO SWAT C1-jig, the printed circuit board in 3D

    OSO SWAT C1-jig

    joeycastillo/Sensor-Watch

    A board replacement for the classic Casio F-91W wristwatch

    28 parts2.1k
  • 2 layers95 × 54 mmEinkPDA screen, the printed circuit board in 3D

    EinkPDA screen

    TalismanDesign/PocketMage_PDA

    An E-Ink PDA device using the ESP32 S3.

    28 parts2kApache-2.0
  • 2 layers45 × 45 mmSmartbuttons, the printed circuit board in 3D

    Smartbuttons

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    28 parts915
  • 2 layers24.1 × 36.2 mmEsp32miniBT, the printed circuit board in 3D

    Esp32miniBT

    asterics/esp32_mouse_keyboard

    ESP32 implementation for HID over GATT Keyboard and Mouse (Bluetooth Low Energy). Including serial API for external modules (similar to Adafruit EZKey HID)

    28 parts911GPL-3.0
  • 2 layers34.8 × 12.2 mmInfnoise goldfingers, the printed circuit board in 3D

    Infnoise goldfingers

    waywardgeek/infnoise

    The world's easiest TRNG to get right

    28 parts854CC0-1.0
  • 2 layers55.9 × 99.1 mmStm32f0 disco Luos shield, the printed circuit board in 3D

    Stm32f0 disco Luos shield

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    28 parts546MIT
  • 2 layers88 × 25 mmEleLab v2 Frontpanel a, the printed circuit board in 3D

    EleLab v2 Frontpanel a

    Chrismettal/EleLab_v2

    Cheap DIY lab system for hobbyists and the tinkering folk

    28 parts531GPL-3.0