Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
038e29d
feat(hardware): add fabricatable carrier board for desk-mounted ESP32
jtruland Sep 12, 2026
f8c2d52
feat(hardware): v3 carrier board — route native USB D+/D- through J_PWR
jtruland Sep 12, 2026
6ccf6c9
docs(hardware): add BOM and CPL for the carrier board's ESP32 socket
jtruland Sep 12, 2026
06a992d
refactor(hardware): rename to compact-carrier-board; split ESP header…
jtruland Sep 12, 2026
0148df7
refactor(pcb): move to hardware/boards/, drop generated outputs
jtruland Sep 13, 2026
82d9e2d
fix(pcb): address CodeRabbit review — file naming, licensing, footpri…
jtruland Sep 13, 2026
2b28be1
feat(pcb): add missing .kicad_pro project file
jtruland Sep 13, 2026
38c9beb
fix(pcb): correct J_ESP2 drill sizes and GND zone edge clearance
jtruland Sep 13, 2026
c435996
fix(pcb): widen GND zone edge margin further, with a swept safe range
jtruland Sep 13, 2026
9cae9cf
fix(pcb): move 4 reference designators back onto the board
jtruland Sep 14, 2026
8e79c7a
fix(pcb): widen 5V net to spec, reposition board, fix stale metadata
jtruland Sep 14, 2026
ddeb0d0
Merge remote-tracking branch 'upstream/main' into upstream/carrier-bo…
jtruland Sep 14, 2026
1c819b7
carrier-board: fix mirrored ESP socket, add pin-name silkscreen
jtruland Sep 16, 2026
1832f75
carrier-board: keep the pin-side artwork as a selectable variant
jtruland Sep 16, 2026
3fec3b5
carrier-board: name every pad on silk, raise the clearance floors
jtruland Sep 16, 2026
457e5d8
Merge upstream/main into upstream/carrier-board-pcb
jtruland Sep 17, 2026
9f9b11f
REUSE: annotate the compact-carrier-board-pinside variant
jtruland Sep 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions REUSE.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,13 @@ SPDX-License-Identifier = "CERN-OHL-S-2.0"
[[annotations]]
path = "hardware/LICENSE"
SPDX-License-Identifier = "CERN-OHL-S-2.0"

[[annotations]]
path = "hardware/boards/compact-carrier-board/**"
SPDX-FileCopyrightText = "2026 Jon Truland"
SPDX-License-Identifier = "CERN-OHL-S-2.0"

[[annotations]]
path = "hardware/boards/compact-carrier-board-pinside/**"
SPDX-FileCopyrightText = "2026 Jon Truland"
SPDX-License-Identifier = "CERN-OHL-S-2.0"
71 changes: 71 additions & 0 deletions hardware/boards/compact-carrier-board-pinside/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# compact-carrier-board-pinside

**The pin-side (mirrored) revision of
[`compact-carrier-board`](../compact-carrier-board/README.md), kept because it is
what the boards in transit physically are.** Do not order it unless you
specifically want the build described below.

- **Status:** frozen — archival variant, not developed further
- **Artwork:** byte-identical to `compact-carrier-board` as of commit `ddeb0d0`
(md5 `26995498ccf56c28db661f4333d1f64c` — checksum of a public board file, secret-scan:allow), i.e. the
`carrier-fab-v3-replacement_Y5` upload JLCPCB produced and shipped
- **KiCad:** 10

## What is different

Its socket pad map is the ESP32-C3-Zero seen from the **pin side**: `J_ESP1`
(5V, GND, 3V3, GPIO0-GPIO5) sits on the OUTER row nearest the slot edge and
`J_ESP2` (GPIO21-GPIO6, D+/D- on pins 16/15) on the inner row. The corrected
board has those two rows the other way round.

A pin-side map is the correct drawing only for a socket on the **opposite
face** from the one being drawn — which is why this board mates only when
built the following way.

## How to build it

1. Solder both Kinghelm KH-2.54FH-1X9P-H3.5 female strips to the **pour face**
(B.Cu — the GND-fill side, the one with no silkscreen).
2. Run the board with that face **up**. From the pour face you see the mirror
of the F.Cu artwork, which is the module's component-side map, so a
component-side-up module mates correctly.
3. Mark pin 1 before assembly — the silkscreen ends up underneath. Pin 1 (5V)
is the square pad, at the corner of the socket array that the wide 5V trace
runs to, and that trace is visible on the pour face.
4. Plugged in 180° out, 5V lands on GPIO5.

## What that build costs

- The module's own USB-C overhangs the long edge facing the **opposite wall**
from the corrected board's intent. Unused either way — the Adafruit 5993
jack carries power and CDC, see
[`docs/hardware/interfaces.md`](../../../docs/hardware/interfaces.md).
- Silkscreen faces down, so the reference designators are unreadable after
assembly, and this artwork has no pin-name silk to lose in the first place.
- The wire-end connector positions mirror left-right, so the runs to the
PCA9685 / OLED / amp swap sides relative to the corrected board.
- The corrected board's routing fixes are absent here, measured on this file:
9mm of the 5V net sits at 0.600mm against its own ≈0.78mm IPC-2221 target
(total length 83.901mm), and the worst track-to-pad clearance is 0.270mm.

## Choosing between the two

| | `compact-carrier-board` | this variant |
| --- | --- | --- |
| Headers soldered to | silk face (F.Cu) | pour face (B.Cu) |
| Face up in the desk | silk | pour |
| Module USB-C overhangs | the 5V-bus long edge | the opposite long edge |
| Pin names on silk | yes | no |
| 5V net | 44.939mm, all 1.000mm | 83.901mm, 9mm of it 0.600mm |
| Worst track-to-pad | 0.420mm | 0.270mm |
| Use it when | ordering new boards | you have the in-transit batch in hand |

`kicad-cli pcb drc --severity-all` on this file reports 0 violations and 0
unconnected items. It is electrically sound; it is the row assignment that is
inverted, and DRC cannot see that — only handedness can.

## License

Board sources in `boards/` are [CERN-OHL-S-2.0](../../LICENSE). See
[NOTICE](../../NOTICE) for copyright, Source Location, and product notice
requirements.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading