

Cable tester
design.py is the single source of truth: parts, footprints, pin-to-net map and positions. Everything else is generated from it.
- Size
- 135 × 90 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 66
- Nets
- 193
- Pads
- 494
- Tracks, vias
- 1,476, 235
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 29 Sep 2026
- Updated
- 29 Sep 2026
Overview
Cable tester is an open-source printed circuit board by Mykola2, from the Mykola2/uart-cable-tester repository on GitHub. It is a 2-layer board of 135 × 90 mm with 66 parts on 193 nets, routed with 1,476 tracks and 235 vias.
It is built around the 74AHCT1G125SE, MCP23017-E/SO and WS2812B, with the 1N4148W and MMBT3904 among its other parts. Its parts include 17 capacitors, 11 diodes, 5 resistors, 5 ICs and 5 connectors. It belongs with the RP2040 boards of this library.
Main components
574AHCT1G125SE
SOT-353-40℃~+125℃ 1 1 4.5V~5.5V 4.7ns@5V,50pF 40uA 74AHCT 8mA 8mA Schmitt trigger Tri-State Unidirectional SOT-353 Buffers, Drivers, Receivers, Transceivers ROHSDiodes IncorporatedBuffers, Drivers, Receivers, TransceiversMCP23017-E/SO
SOIC-28-300mil-40℃~+85℃ 1.7MHz 1.8V~5.5V 16 1uA 600mV 8 8mA I2C Interrupt Output Reset function、Cascade and address expansion SOIC-28-300mil I/O Expanders ROHSMicrochip TechnologyI/O ExpandersWS2812B
5mm X 5mm Surface Mount RGB LED with Intelligent ControlWorldsemiUncategorised1N4148W
SOD-123150mA 1A 1V@50mA 1uA@75V 400mW 4ns 75V Independent SOD-123 Switching Diodes ROHSSTMicroelectronicsSwitching DiodesMMBT3904
SOT-23-55℃~+150℃ 1 NPN 100 100nA 200mA 200mW 300MHz 300mV 40V 6V NPN SOT-23 Bipolar (BJT) ROHSJiangsu Changjing Electronics Technology (CJ)Bipolar (BJT)
README
hardware/README.mdCable tester PCB (KiCad 9)
design.py is the single source of truth: parts, footprints, pin-to-net map and positions.
Everything else is generated from it.
| File | What it is |
|---|---|
cable_tester.kicad_sch | Schematic. Every pin is connected by a net label; opens normally in KiCad. |
cable_tester.kicad_pcb | Board, 135×90 mm, 2 layers. Routed with Freerouting, GND pours on both layers. DRC is clean apart from silkscreen warnings. |
BOM.csv | Grouped BOM with MPNs. fab/BOM_JLC.csv has the verified LCSC numbers. |
fab/ | JLCPCB files (Gerber zip, BOM, CPL), regenerated by make_jlc.py. |
move_decoupling.py | One-off fix already applied to the routed board: moved C1–C4 next to the MCP23017 VDD pins. |
cable_tester_schematic.pdf, render_top.png, render_bottom.png | Previews of the schematic and the board. |
Regenerate
python gen_schematic.py
"C:/Program Files/KiCad/9.0/bin/kicad-cli.exe" sch erc cable_tester.kicad_sch
"C:/Program Files/KiCad/9.0/bin/kicad-cli.exe" sch export netlist --format kicadsexpr -o cable_tester.net cable_tester.kicad_sch
python check_design.py
"C:/Program Files/KiCad/9.0/bin/python.exe" gen_pcb.pycheck_design.py checks the exported netlist against firmware/hwmap.py:
- each of the 58 test lines runs connector pin → 220 Ω → the MCP23017 pin the firmware expects
- the address straps are correct
- no DUT pin touches a power net
The board is routed, so don't run gen_pcb.py again, because it overwrites the board.
After that, make changes in the schematic (or design.py followed by gen_schematic.py), then use Tools → Update PCB from Schematic (F8).
Circuit summary
- A1: Raspberry Pi Pico or a WeAct RP2040 (USB-C, same pinout).
- USB supplies VBUS (+5 V), which powers the LEDs and buzzer.
- The module's 3V3 output powers the MCP23017s.
- Pins used: GP4 SDA, GP5 SCL, GP14 buzzer, GP15 button, GP16 LED data.
- U1–U4: MCP23017 at I²C addresses 0x20–0x23. Every DUT contact goes to its own expander pin through one resistor in RN1–RN15 (4×220 Ω arrays).
- U1: H1–16. U2: H17–32. U3: GPA = H33–40, GPB0–5 = TELEM1.
- U4: GPA0–5 = TELEM2, GPB0–5 = TELEM3.
- Spare lines: U3 GPB6–7, U4 GPA6–7, U4 GPB6–7.
- J1: the 40-pin header. None of its pins touch GND, 3V3 or 5V. Each one is an isolated test line, which is why any future pinout can be tested with a config change only.
- D1–D10: WS2812B, driven through U5 (74AHCT1G125) to shift the data line from 3.3 V to 5 V.
- D1–D9 are the wire LEDs: TX / RX / GND for each TELEM connector.
- D10 is the PASS/FAIL status LED.
- BZ1: 5 V active buzzer, switched by Q1 with flyback diode D11.
- SW1: START / LEARN button.
- J5: optional SSD1306 OLED header. The firmware doesn't drive it yet.
Before ordering
- Route it. Freerouting works well:
- export with File → Export → Specctra DSN, route in Freerouting, then import the
.sesfile - press B to fill the GND pours
- run DRC
- export with File → Export → Specctra DSN, route in Freerouting, then import the
- Check JST orientation in the 3D viewer (Alt+3). The TELEM connectors must open toward the bottom board edge.
- Check the header orientation. It copies a Pi seen from above: pin 1 is bottom-left on the silkscreen, and the even-pin row is along the board edge. The cable must plug in exactly as it does on the Pi.
- Check the module footprint. If you use a Pico clone, confirm it matches
RaspberryPi_Pico_SMD_HandSolder. - JST-GH receptacles are consumables. They are rated for only ~50 mating cycles. Order spares and replace them with hot air when mating gets loose.
Parts
66| Qty | Value | Footprint | References |
|---|---|---|---|
| 15 | 100n | Capacitor_SMD:C_0603_1608Metric | C1, C2, C3, C4, C5, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17 |
| 15 | 4x220 | Resistor_SMD:R_Array_Convex_4x0603 | RN1, RN2, RN3, RN4, RN5, RN6, RN7, RN8, RN9, RN10, RN11, RN12, RN13, RN14, RN15 |
| 10 | WS2812B | LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm | D1, D2, D3, D4, D5, D6, D7, D8, D9, D10 |
| 4 | M3 | MountingHole:MountingHole_3.2mm_M3 | MH1, MH2, MH3, MH4 |
| 4 | MCP23017-E/SO | Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm | U1, U2, U3, U4 |
| 2 | 10u | Capacitor_SMD:C_0805_2012Metric | C6, C7 |
| 2 | 4k7 | Resistor_SMD:R_0603_1608Metric | R2, R3 |
| 1 | 10k | Resistor_SMD:R_0603_1608Metric | R5 |
| 1 | 1N4148W | Diode_SMD:D_SOD-123 | D11 |
| 1 | 1k | Resistor_SMD:R_0603_1608Metric | R4 |
| 1 | 330 | Resistor_SMD:R_0603_1608Metric | R1 |
| 1 | 5V active buzzer | Buzzer_Beeper:Buzzer_12x9.5RM7.6 | BZ1 |
| 1 | 74AHCT1G125 | Package_TO_SOT_SMD:SOT-23-5 | U5 |
| 1 | MMBT3904 | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | OLED (opt.) | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J5 |
| 1 | Pico / WeAct RP2040 (USB-C) | Module:RaspberryPi_Pico_SMD_HandSolder | A1 |
| 1 | RPi 40-pin (DUT) | Connector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_Vertical | J1 |
| 1 | START / LEARN | Button_Switch_THT:SW_PUSH_6mm_H5mm | SW1 |
| 1 | TELEM1 (DUT) | Connector_JST:JST_GH_SM06B-GHS-TB_1x06-1MP_P1.25mm_Horizontal | J2 |
| 1 | TELEM2 (DUT) | Connector_JST:JST_GH_SM06B-GHS-TB_1x06-1MP_P1.25mm_Horizontal | J3 |
| 1 | TELEM3 (DUT) | Connector_JST:JST_GH_SM06B-GHS-TB_1x06-1MP_P1.25mm_Horizontal | J4 |
Similar boards
- 2 layers134.8 × 132 mm

- 2 layers250.2 × 84.2 mm

Gemini panel
thanoslabs/keyboards
Schematics, pcbs, layout files for all my keyboard projects
151 parts - 2 layers99 × 65.5 mm

Vik playground
sadekbaroudi/vik
This is a VIK module designed to mount a PER56 scroll ring, with a 35mm Cirque Trackpad and optional WS2812B LEDs.
40 parts220CERN-OHL-P-2.0 - 2 layers162 × 82 mm

Ahm panel placed
kimaernoudt/custom-ahm-wallpanel
One board that replaces the hand wiring: the 4 encoders, the 4 scene buttons, all 48 ring LEDs, 4 button LEDs and the MCP23017 sit on it. One 10-wire UEXT cable and one 2-wire 5 V cable go to the Olimex ESP32-POE.
78 parts - 4 layers241.2 × 327.2 mm

- 2 layers100 × 102 mm

- 2 layers147.3 × 154.4 mm

- 4 layers138 × 114 mm

Glitchwave567
jdg511/567Terror
Software simulation of the Glitchwave 567 (LM567 glitch pedal) — JUCE Standalone + VST3
299 partsMIT
Questions
How big is the Cable tester PCB?
It measures 135 × 90 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Cable tester use?
66 parts, built around the 74AHCT1G125SE, MCP23017-E/SO, WS2812B and 1N4148W. 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 Cable tester KiCad files?
From the Mykola2/uart-cable-tester repository on GitHub, at the commit this page was made from: the board is hardware/cable_tester.kicad_pcb and its schematic hardware/cable_tester.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Cable tester design in my own project?
Its repository states no licence, so its author keeps all rights: ask Mykola2 before reusing the design.