diff --git a/PORT_STATUS.md b/PORT_STATUS.md index eca8cfb..3b0b0f2 100644 --- a/PORT_STATUS.md +++ b/PORT_STATUS.md @@ -7,23 +7,28 @@ ## ▶ RESUME HERE (session handoff, 2026-07-01) **State:** branch `port/strip-phase`. Sheets in `carrier/`: root `CM5IO`, `CM5_GPIO`, -`CM5_HighSpeed` (reference, stripped), `M2_Ekey` (E-key, done), `Power` (**stages 1–4 done — -power sheet complete**). Baseline anchor: `analysis/baseline/carrier_stripped.json`. +`CM5_HighSpeed` (reference, stripped), `M2_Ekey`, `Power` (stages 1–4), `GPS_PPS`. **ALL +rev-A circuit blocks are now captured.** Baseline anchor: `analysis/baseline/carrier_stripped.json`. -**Done:** strip phase (microSD/HDMI/MIPI/PCIe-M2); M.2 E-key sheet (PCIe ×1 to CM5); Power -stage 1 (LM74700 ideal-diode input protection → `VIN_PROT`); Power stage 2 (LM61460-Q1 -15→`+5v` 5 A, SPICE 5.02 V); Power stage 3 (LM61460-Q1 15→`+3V3_RF` 4 A, SPICE 3.32 V; EN ← -CM5 `PCIE_PWR_EN`/106 + 100k pull-down); Power stage 4 (TPS54202 15→`+3V3_AUX` ~1 A, SPICE -3.315 V; UVLO divider start 10.1 V / stop 8.6 V). Current whole-design **ERC = 133** (all -pre-existing types; a good edit adds **zero new**). +**Done:** strip phase (microSD/HDMI/MIPI/PCIe-M2); M.2 E-key sheet (PCIe ×1); Power stage 1 +(LM74700 → `VIN_PROT`), stage 2 (LM61460-Q1 → `+5v` 5 A, SPICE 5.02 V), stage 3 (LM61460-Q1 → +`+3V3_RF` 4 A, SPICE 3.32 V, EN ← `PCIE_PWR_EN`), stage 4 (TPS54202 → `+3V3_AUX` ~1 A, SPICE +3.315 V); **GPS + PPS sheet** (`carrier/GPS_PPS.kicad_sch` via `tools/build_gps.py`: J_GPS +5-pin per Pinout_BOM §6, PPS → PESD3V3 TVS → 74LVC1G17 @ +3V3_AUX → `PPS_CLEAN` → Rs 33Ω → +`SYNC_OUT` (CM5 pin 18 + J2.6) + J_PPS1/J_PPS2 taps; NMEA on **UART2 GPIO4/GPIO5** per +correction C2 — netlist: GPIO4 = Module1.54+J8.7+J_GPS.3, GPIO5 = Module1.34+J8.29+J_GPS.2). +The `SYNC_OUT`/`GPIO4`/`GPIO5` local labels on CM5_GPIO were converted to **global** labels +(names unchanged, nothing else used them) to reach the new sheet without root plumbing. +Current whole-design **ERC = 133** (all pre-existing types; a good edit adds **zero new**). -**NEXT ACTION → GPS + PPS distribution sheet** (last new block, see step 5 below): GPS -connector (PPS + UART + 3V3 + GND, powered from `+3V3_AUX`); PPS → TVS → Schmitt buffer -(LVC1G17 @ 3.3 V) → fan-out: CM5 `Ethernet_SYNC_OUT` (J2 pin-6 net, no translator) + 2 header -taps. Reuse the build_*.py generator pattern (new `tools/build_gps.py` or extend build_power). -UART: decide which CM5 UART pins to use (check `CM5_GPIO` — reserve/label; datasheet is the -authority). After that: whole-power-tree budget review, then hygiene pass (title blocks, refdes -numbering — note generated refs like `J_E`/`J_PWR` trip kicad-cli's "annotation errors" warning). +**NEXT ACTION → design-review + close-out passes** (no new blocks): +1. **Power-budget review** of the whole tree (loads vs ratings; the kicad skill's power-tree + check) + re-read PORT_STATUS "Confirm vs datasheet" leftovers (stage-1 C_VCAP/FET pick, + stage-2/3 L saturation ≥ Ipk, RT freq). +2. **Hygiene pass** (checklist in kicad-port skill): refdes numbering (un-numbered generated + refs `J_E`/`J_PWR`/`U_BUCK5`… trip kicad-cli "annotation errors" — decide whether to number + them), title blocks, netlist-vs-BOM sanity, design notes. +3. Then merge `port/strip-phase` → main and start layout prep (DF40 placement copy from ref). **How to build/verify (every change):** - Sheets are generated wholesale — edit `tools/build_ekey.py` / `tools/build_power.py`, then @@ -135,8 +140,18 @@ Notes that bit us (don't re-learn the hard way): - **Stage 2 — U_BUCK5 15→`+5v` 5A ✅ DONE.** `LM61460-Q1` (6A, 42V absmax sync; **custom symbol built from the datasheet** → `carrier/CM5IO.kicad_sym` as `CM5IO:LM61460-Q1`, fp `Package_SO:Texas_HTSSOP-14-1EP…ThermalVias`). VREF=1.0V → FB divider R_FBT5 40.2k / R_FBB5 10.0k = **5.02V (SPICE-confirmed vfb=1.0V)**. L5 4.7µH, Cout 2×47µF/16V, Cin 2×10µF/50V, Cboot 100n+Rboot 4.7Ω, RT 31.6k(~400kHz), BIAS→+5v, EN→VIN_PROT, PGOOD 100k→+5v. **`+5v` kept HIERARCHICAL** (pre-existing carrier net; global would collide `same_local_global_label`) — Power sheet exposes a `+5v` sheet pin, tied into the root `+5v` net; netlist-verified it drives Module1 + GPIO + USB. ERC 133→133 (zero new); analyzer +32 added **0 regressions**; SPICE 12/13 pass, 1 benign warn (L5/Cboot mis-detected as LC filter). **Confirm vs datasheet:** RT freq, L sat ≥7A, EP=pad15, optional EN UVLO divider. - **Stage 3 — U_BUCK33R 15→`+3V3_RF` 4A ✅ DONE.** Second `LM61460-Q1` (shared BOM with stage 2: L 4.7µH/7A ripple ~1.3A=33%, Cin 2×10µ/50V, Cout 2×47µ/16V, RT 31.6k ~420kHz, Cboot 100n+Rboot 4.7). FB divider R_FBT33 23.2k / R_FBB33 10.0k = **3.32V (SPICE: vfb 0.994V, inrush settles 3.32V)**. BIAS→`+3V3_RF` (datasheet: valid ≥3.1V, auto-falls back to VIN below). **EN ← CM5 `PCIE_PWR_EN`** (Module1 pin 106: NC swapped for a global label on `CM5_HighSpeed`) + **R_EN33 100k pull-down** (mirrors reference R14 — netlist-verified `Module1.106 + U_BUCK33R.7 + R_EN33.1`) so the Wi-Fi rail is OFF until the CM5 asserts it. **E-key temp `#FLG33RF` PWR_FLAG removed** (build_ekey); the buck's PWR_FLAG on L33.2 is now the sole `+3V3_RF` driver — netlist shows buck + all 4 J_E power pins + pull-ups + decoupling on one net. Verify: ERC 133→133 zero new; analyzer +49 added **0 regressions**; SPICE 17 pass / 2 benign warn (the L/C_BOOT "LC filter" mis-detect, once per buck) / 0 fail. (Note: `kicad-cli` netlist export prints a pre-existing "annotation errors" warning — un-numbered generated refdeses like `J_E`/`J_PWR`; present at fd627f5 too, cosmetic.) - **Stage 4 — U_BUCK33A 15→`+3V3_AUX` ~1A ✅ DONE (power sheet complete).** `TPS54202` (SOT-23-6, sync, fixed 500kHz, VFB=0.596V). **Abs-max gate PASSED but thin:** VIN abs-max **30V** vs SMBJ18A clamp ≤29.2V at full rated 600W surge → 0.8V transient margin (operating max 28V is not the surge number). Custom symbol `CM5IO:TPS54202` (the KiCad lib symbol `extends TPS54302` — no own pins, can't embed standalone) + bare copy in `carrier/CM5IO.kicad_sym`. FB per TI's 3.3V table row: **100k/22.1k + Cff 56pF → 3.29V (SPICE: vfb 0.597V, inrush settles 3.315V)**. L 10µH/2.5A (ΔI~0.52A), Cout 2×22µF/16V, Cboot 100n, Cin 10µF/50V+100n. **EN abs-max is only 7V → NO direct VIN tie** (unlike LM61460): UVLO divider **866k/110k** (solved from Ip=0.7µA/Ih=1.55µA, VEN 1.21/1.19V) → **start 10.13V / stop 8.61V**, EN ~1.9V at 15V in (~3.5V at 29V clamp — safe). FB+EN pins typed `passive` (divider-only nets). Verify: ERC 133→133 zero new; analyzer +65/−0 zero regressions (warn/error set identical to stage 3); SPICE 23 pass / 2 benign warn / 0 fail / 0 skip. **New tooling gap found:** `simulate_subcircuits.py` lowercases refdeses into SPICE names — `C_IN33A` vs stage-3 `C_IN33a` collided ("device already exists") and silently SKIPPED the whole VIN_PROT decoupling group → renamed to `C_IN33Aa`. Rule: **never create refdeses differing only by case.** -5. **GPS + PPS distribution**: GPS connector (PPS+UART+3V3+GND); PPS → TVS → Schmitt (LVC1G17) → - fan-out: CM5 `Ethernet_SYNC_OUT` (J2 pin-6 net, 3.3V, no translator) + 2 header taps. SPICE/timing check. +5. **GPS + PPS distribution ✅ DONE** (`carrier/GPS_PPS.kicad_sch`, generated by `tools/build_gps.py`). + Per Pinout_BOM §6 (the authority — it CORRECTS the design doc): J_GPS 5-pin (1=PPS, 2=NMEA_RX←GPS TX, + 3=NMEA_TX→GPS RX, 4=+3V3_AUX, 5=GND); `GPS_PPS_RAW` → TVS_PPS `PESD3V3L1BA` → U_PPS `74LVC1G17` + (SOT-23-5, +3V3_AUX, pin 1 true-NC) → `PPS_CLEAN` → R_PPS 33Ω → `SYNC_OUT` + J_PPS1 (UWB) / J_PPS2 + (scope), 2-pin taps. **NMEA = UART2 on GPIO4/GPIO5** (correction C2; UART0/GPIO14-15 stays debug). + Cross-sheet wiring: converted the 6 local labels (`SYNC_OUT`×2, `GPIO4`×2, `GPIO5`×2 on CM5_GPIO) to + **global** labels — net names unchanged so no multi-label (LB-001) findings, ERC-neutral (133→133); + GPS sheet uses the same global names, root sheet-symbol has NO pins. J_GPS pins 1/2 re-typed `output` + (GPS module drives PPS + TX) so the analyzer's no_driver gate passes — same trick as the E-key socket. + **Verify:** ERC 133→133 zero new; analyzer +73/−0 **0 regressions** (only the pre-existing MPN-coverage + counter moved 50→57 parts); netlist confirms all 6 cross-sheet nets (SYNC_OUT = Module1.18+J2.6+R_PPS.2); + SPICE 24 pass / 2 benign warn / 0 fail / 0 skip. ## Out-of-repo notes diff --git a/carrier/CM5IO.kicad_pro b/carrier/CM5IO.kicad_pro index b6a9527..28031b9 100644 --- a/carrier/CM5IO.kicad_pro +++ b/carrier/CM5IO.kicad_pro @@ -841,6 +841,10 @@ [ "9c7ccf72-dd3e-5ed3-bb43-2939833eb069", "Power" + ], + [ + "5efffb63-edbb-5986-86d3-84ead412bc65", + "GPS_PPS" ] ], "text_variables": {} diff --git a/carrier/CM5IO.kicad_sch b/carrier/CM5IO.kicad_sch index 3154767..6bdcfdc 100644 --- a/carrier/CM5IO.kicad_sch +++ b/carrier/CM5IO.kicad_sch @@ -3489,6 +3489,16 @@ (effects (font (size 1.27 1.27)) (justify left)) (uuid "f1109a7e-4bfb-54f4-a32e-e6719bad4ba8") ) + (sheet + (at 205 90) + (size 30 20) + (stroke (width 0.1524) (type solid) (color 132 0 132 1)) + (fill (color 255 255 255 0.0000)) + (uuid "5efffb63-edbb-5986-86d3-84ead412bc65") + (property "Sheetname" "GPS_PPS" (at 205 86.18 0) (effects (font (size 1.27 1.27)) (justify left bottom))) + (property "Sheetfile" "GPS_PPS.kicad_sch" (at 205 87.45 0) (effects (font (size 1.27 1.27)) (justify left top))) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55" (page "6")))) + ) (sheet_instances (path "/" (page "1") diff --git a/carrier/CM5_GPIO.kicad_sch b/carrier/CM5_GPIO.kicad_sch index b596853..89a7cdf 100644 --- a/carrier/CM5_GPIO.kicad_sch +++ b/carrier/CM5_GPIO.kicad_sch @@ -13645,7 +13645,8 @@ ) (uuid "05c1c0ae-f846-4942-b9ca-9f0f8f62492d") ) - (label "GPIO5" + (global_label "GPIO5" + (shape bidirectional) (at 24.13 62.23 0) (fields_autoplaced yes) (effects @@ -13964,7 +13965,8 @@ ) (uuid "2e95b89a-d151-4ceb-8ea1-75ed88f1541e") ) - (label "GPIO4" + (global_label "GPIO4" + (shape bidirectional) (at 24.13 87.63 0) (fields_autoplaced yes) (effects @@ -14316,7 +14318,8 @@ ) (uuid "6fa8342e-2989-40ca-b0ae-b207f17ca831") ) - (label "SYNC_OUT" + (global_label "SYNC_OUT" + (shape bidirectional) (at 54.61 175.26 180) (fields_autoplaced yes) (effects @@ -14459,7 +14462,8 @@ ) (uuid "88ce3174-a8b3-4149-886a-872ed4746e98") ) - (label "SYNC_OUT" + (global_label "SYNC_OUT" + (shape bidirectional) (at 24.13 41.91 0) (fields_autoplaced yes) (effects @@ -14525,7 +14529,8 @@ ) (uuid "91fb974e-99de-4e0c-bee5-7a6f88905951") ) - (label "GPIO5" + (global_label "GPIO5" + (shape bidirectional) (at 147.32 59.69 180) (fields_autoplaced yes) (effects @@ -15053,7 +15058,8 @@ ) (uuid "f6429ab2-213c-4030-a705-9f073170a98c") ) - (label "GPIO4" + (global_label "GPIO4" + (shape bidirectional) (at 147.32 31.75 180) (fields_autoplaced yes) (effects diff --git a/carrier/GPS_PPS.kicad_sch b/carrier/GPS_PPS.kicad_sch new file mode 100644 index 0000000..0ac9d3d --- /dev/null +++ b/carrier/GPS_PPS.kicad_sch @@ -0,0 +1,1453 @@ +(kicad_sch + (version 20231120) + (generator "eeschema") + (generator_version "8.0") + (uuid "271743c9-a477-5c0b-8588-e5a06137596b") + (paper "A4") + (title_block + (title "CM5 Carrier - GPS + PPS distribution") + (rev "A") + (comment 1 "GPS conn (PPS+UART2+3V3_AUX) -> TVS -> LVC1G17 -> CM5 SYNC + 2 taps; PPS sink only") + ) + (lib_symbols +(symbol "Device:R" + (pin_numbers hide) + (pin_names + (offset 0) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "R" + (at 2.032 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "R" + (at 0 0 90) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at -1.778 0 90) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Resistor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "R res resistor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "R_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "R_0_1" + (rectangle + (start -1.016 -2.54) + (end 1.016 2.54) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "R_1_1" + (pin passive line + (at 0 3.81 270) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -3.81 90) + (length 1.27) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) +(symbol "Device:C" + (pin_numbers hide) + (pin_names + (offset 0.254) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "C" + (at 0.635 2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "C" + (at 0.635 -2.54 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at 0.9652 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "~" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Unpolarized capacitor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "cap capacitor" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "C_*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "C_0_1" + (polyline + (pts + (xy -2.032 -0.762) (xy 2.032 -0.762) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy -2.032 0.762) (xy 2.032 0.762) + ) + (stroke + (width 0.508) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "C_1_1" + (pin passive line + (at 0 3.81 270) + (length 2.794) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 0 -3.81 90) + (length 2.794) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) +(symbol "power:GND" + (power) + (pin_numbers hide) + (pin_names + (offset 0) hide) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "#PWR" + (at 0 -6.35 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Value" "GND" + (at 0 -3.81 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Power symbol creates a global label with name \"GND\" , ground" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_keywords" "global power" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "GND_0_1" + (polyline + (pts + (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "GND_1_1" + (pin power_in line + (at 0 0 270) + (length 0) + (name "~" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) +(symbol "Device:D_TVS" + (pin_numbers + (hide yes) + ) + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (in_pos_files yes) + (duplicate_pin_numbers_are_jumpers no) + (property "Reference" "D" + (at 0 2.54 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "D_TVS" + (at 0 -2.54 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Bidirectional transient-voltage-suppression diode" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "diode TVS thyrector" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_fp_filters" "TO-???* *_Diode_* *SingleDiode* D_*" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (symbol "D_TVS_0_1" + (polyline + (pts + (xy -2.54 1.27) (xy -2.54 -1.27) (xy 2.54 1.27) (xy 2.54 -1.27) (xy -2.54 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 0.508 1.27) (xy 0 1.27) (xy 0 -1.27) (xy -0.508 -1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type none) + ) + ) + (polyline + (pts + (xy 1.27 0) (xy -1.27 0) + ) + (stroke + (width 0) + (type default) + ) + (fill + (type none) + ) + ) + ) + (symbol "D_TVS_1_1" + (pin passive line + (at -3.81 0 0) + (length 2.54) + (name "A1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 3.81 0 180) + (length 2.54) + (name "A2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) +(symbol "Connector_Generic:Conn_01x05" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (in_pos_files yes) + (duplicate_pin_numbers_are_jumpers no) + (property "Reference" "J" + (at 0 7.62 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x05" + (at 0 -7.62 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (symbol "Conn_01x05_1_1" + (rectangle + (start -1.27 6.35) + (end 1.27 -6.35) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start -1.27 5.207) + (end 0 4.953) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 2.667) + (end 0 2.413) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -4.953) + (end 0 -5.207) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin output line + (at -5.08 5.08 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at -5.08 2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -5.08 0) + (length 3.81) + (name "Pin_5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) +(symbol "Connector_Generic:Conn_01x02" + (pin_names + (offset 1.016) + (hide yes) + ) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (in_pos_files yes) + (duplicate_pin_numbers_are_jumpers no) + (property "Reference" "J" + (at 0 2.54 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Conn_01x02" + (at 0 -5.08 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Description" "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "connector" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (symbol "Conn_01x02_1_1" + (rectangle + (start -1.27 1.27) + (end 1.27 -3.81) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (rectangle + (start -1.27 0.127) + (end 0 -0.127) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (rectangle + (start -1.27 -2.413) + (end 0 -2.667) + (stroke + (width 0.1524) + (type default) + ) + (fill + (type none) + ) + ) + (pin passive line + (at -5.08 0 0) + (length 3.81) + (name "Pin_1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -2.54 0) + (length 3.81) + (name "Pin_2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) +(symbol "74xGxx:74LVC1G17" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (in_pos_files yes) + (duplicate_pin_numbers_are_jumpers no) + (property "Reference" "U" + (at 0 3.81 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "74LVC1G17" + (at 0 -3.81 0) + (show_name no) + (do_not_autoplace no) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "" + (at -2.54 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Datasheet" "https://www.ti.com/lit/ds/symlink/sn74lvc1g17.pdf" + (at 0 -6.35 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Description" "Single Schmitt Buffer Gate, Low-Voltage CMOS" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_keywords" "Single Gate Buff Schmitt LVC CMOS" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "ki_fp_filters" "SOT?23* SOT?553* Texas?R-PDSO-G5?DCK* Texas?R-PDSO-N5?DRL* Texas?X2SON*0.8x0.8mm*P0.48mm*" + (at 0 0 0) + (show_name no) + (do_not_autoplace no) + (hide yes) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (symbol "74LVC1G17_0_1" + (polyline + (pts + (xy -7.62 6.35) (xy -7.62 -6.35) (xy 5.08 0) (xy -7.62 6.35) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy -3.81 -1.27) (xy -2.54 -1.27) (xy -2.54 1.27) (xy -1.27 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (polyline + (pts + (xy -2.54 -1.27) (xy -1.27 -1.27) (xy -1.27 1.27) (xy 0 1.27) + ) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + ) + (symbol "74LVC1G17_1_1" + (pin no_connect line + (at -7.62 5.08 180) + (length 5.08) + (hide yes) + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -12.7 0 0) + (length 5.08) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 -10.16 90) + (length 5.08) + (name "GND" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 10.16 0 180) + (length 5.08) + (name "" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 10.16 270) + (length 5.08) + (name "VCC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + (embedded_fonts no) + ) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x05") + (at 59.69 80.01 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "7a076bd1-3589-5316-897d-6ab0d06183ba") + (property "Reference" "J_GPS" (at 62.23 79.01 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Value" "GPS_5pin_PPS_UART" (at 62.23 81.01 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical" (at 59.69 80.01 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 59.69 80.01 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Description" "" (at 59.69 80.01 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "2800b758-4e63-5406-9dc3-186319d34c26")) + (pin "2" (uuid "8629d0b8-e972-5f9e-a4bf-9c4d77598d49")) + (pin "3" (uuid "eb14636c-36ea-5f12-9638-ab5dbf1e88dc")) + (pin "4" (uuid "adc66aba-f702-5a90-ba64-00edf9d37c0f")) + (pin "5" (uuid "de9497d8-1db5-5818-ad9f-17088ecfc768")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "J_GPS") (unit 1)))) + ) + (label "GPS_PPS_RAW" + (at 54.61 74.93 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "e7aa6a9d-eb6b-5208-acec-1bc4c0bf2a95") + ) + (global_label "GPIO5" + (shape input) + (at 54.61 77.47 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "63716f7d-d0db-50c3-84f3-59b876fc736e") + ) + (global_label "GPIO4" + (shape input) + (at 54.61 80.01 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "85f684d3-5dba-5452-a4d3-a7794b2c2dea") + ) + (global_label "+3V3_AUX" + (shape input) + (at 54.61 82.55 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "edf7cfab-9055-5cbe-9eee-6e835d2fcfc1") + ) + (symbol + (lib_id "power:GND") + (at 54.61 85.09 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "01e18e05-a999-5bec-930e-f710b0678f9c") + (property "Reference" "#PWRJ_GPS5" (at 54.61 88.09 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Value" "GND" (at 54.61 87.09 0) (effects (font (size 1.27 1.27)))) + (property "Footprint" "" (at 54.61 85.09 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 54.61 85.09 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "6f24e473-b057-5455-a8f6-b9f8c95bd2e0")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "#PWRJ_GPS5") (unit 1)))) + ) + (symbol + (lib_id "Device:D_TVS") + (at 85.09 95.25 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "9e9aee7c-1576-5761-afbb-0e9ea077ab86") + (property "Reference" "TVS_PPS" (at 87.63000000000001 94.25 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Value" "PESD3V3L1BA" (at 87.63000000000001 96.25 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Footprint" "Diode_SMD:D_SOD-323" (at 85.09 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 85.09 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Description" "" (at 85.09 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "0bbe2ed0-ed29-5580-a5aa-d33761afc0a3")) + (pin "2" (uuid "d76dcdde-6b02-55f1-bd71-0bcaf3d2b329")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "TVS_PPS") (unit 1)))) + ) + (label "GPS_PPS_RAW" + (at 81.28 95.25 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "6720173f-2657-5cea-b19a-b08f5c85e428") + ) + (symbol + (lib_id "power:GND") + (at 88.9 95.25 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "0c7c62b4-f16d-5844-82d2-fb1373bab471") + (property "Reference" "#PWRTVS_PPS2" (at 88.9 98.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Value" "GND" (at 88.9 97.25 0) (effects (font (size 1.27 1.27)))) + (property "Footprint" "" (at 88.9 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 88.9 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "70ebf9ed-18f8-5f65-9320-3ca48ac752fb")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "#PWRTVS_PPS2") (unit 1)))) + ) + (symbol + (lib_id "74xGxx:74LVC1G17") + (at 110.49 80.01 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "b9a5c7d5-1d79-5486-9853-8569ecb1c277") + (property "Reference" "U_PPS" (at 113.03 79.01 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Value" "74LVC1G17" (at 113.03 81.01 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Footprint" "Package_TO_SOT_SMD:SOT-23-5" (at 110.49 80.01 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 110.49 80.01 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Description" "" (at 110.49 80.01 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "1a1a2182-9411-5c6b-8833-bf2529edb275")) + (pin "2" (uuid "242d5819-8cf5-58ce-bd6d-0c2a2de6979b")) + (pin "3" (uuid "2cb9ef1c-5101-5f27-a2df-081cff8ac0a6")) + (pin "4" (uuid "6b04d93d-0dda-5fc4-b7f9-7cc4a4e96f59")) + (pin "5" (uuid "8a47cd9f-b4a4-5e36-ac7f-11c086d08151")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "U_PPS") (unit 1)))) + ) + (label "GPS_PPS_RAW" + (at 97.79 80.01 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "36c0628b-43d1-5424-8e10-f7e48394af28") + ) + (label "PPS_CLEAN" + (at 120.65 80.01 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "2998a9b6-fc67-563b-ac4c-3491ba9b5088") + ) + (global_label "+3V3_AUX" + (shape input) + (at 105.41 69.85 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "d403546c-9b63-5bf6-a5b4-92207c007f5d") + ) + (symbol + (lib_id "power:GND") + (at 105.41 90.17 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "150b7c14-ad6b-5275-86ea-8a7681618fe1") + (property "Reference" "#PWRU_PPS3" (at 105.41 93.17 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Value" "GND" (at 105.41 92.17 0) (effects (font (size 1.27 1.27)))) + (property "Footprint" "" (at 105.41 90.17 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 105.41 90.17 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "9e7034db-c1af-5d71-b106-8f708c4fd18e")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "#PWRU_PPS3") (unit 1)))) + ) + (no_connect (at 102.87 74.93) (uuid "f7cb859a-b2a2-52fc-8bf4-fbb0ad6f5c33")) + (symbol + (lib_id "Device:C") + (at 100.33 95.25 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "0ee7ad07-7dd3-527f-b230-1f11a45b867e") + (property "Reference" "C_PPS" (at 102.87 94.25 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Value" "100n" (at 102.87 96.25 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Footprint" "Capacitor_SMD:C_0402_1005Metric" (at 100.33 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 100.33 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Description" "" (at 100.33 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "32b3a373-61a6-563b-a411-19c849e1ae47")) + (pin "2" (uuid "f9561ed0-6227-5d01-8a2e-9ce824637de9")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "C_PPS") (unit 1)))) + ) + (global_label "+3V3_AUX" + (shape input) + (at 100.33 91.44 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "5cd3079f-333c-5051-8f83-852b7bf5d85b") + ) + (symbol + (lib_id "power:GND") + (at 100.33 99.06 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "422ec18f-9697-5423-a10f-0e04a697658e") + (property "Reference" "#PWRC_PPS2" (at 100.33 102.06 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Value" "GND" (at 100.33 101.06 0) (effects (font (size 1.27 1.27)))) + (property "Footprint" "" (at 100.33 99.06 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 100.33 99.06 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "2a23c7de-328c-5fc7-8008-4f91a4374ca6")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "#PWRC_PPS2") (unit 1)))) + ) + (symbol + (lib_id "Device:C") + (at 69.85 95.25 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "f69070b4-27bb-5123-995b-1bcd40a2ac1f") + (property "Reference" "C_GPS" (at 72.39 94.25 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Value" "10u" (at 72.39 96.25 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Footprint" "Capacitor_SMD:C_0603_1608Metric" (at 69.85 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 69.85 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Description" "" (at 69.85 95.25 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "bd0e3c17-a76b-5372-badd-1b2f9e849915")) + (pin "2" (uuid "a8c446db-7686-5485-b6bd-ceb0a29e779c")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "C_GPS") (unit 1)))) + ) + (global_label "+3V3_AUX" + (shape input) + (at 69.85 91.44 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "ab58bfa2-a9d9-5414-993a-6fd5aaf6218a") + ) + (symbol + (lib_id "power:GND") + (at 69.85 99.06 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "4f1bc8a1-6fed-5585-99e9-762c65b4838f") + (property "Reference" "#PWRC_GPS2" (at 69.85 102.06 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Value" "GND" (at 69.85 101.06 0) (effects (font (size 1.27 1.27)))) + (property "Footprint" "" (at 69.85 99.06 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 69.85 99.06 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "a71f135c-ae41-5218-aa40-00fcf83a461f")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "#PWRC_GPS2") (unit 1)))) + ) + (symbol + (lib_id "Device:R") + (at 139.7 80.01 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "249ff202-abac-547f-bce5-9b1af41e5ce6") + (property "Reference" "R_PPS" (at 142.23999999999998 79.01 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Value" "33" (at 142.23999999999998 81.01 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Footprint" "Resistor_SMD:R_0402_1005Metric" (at 139.7 80.01 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 139.7 80.01 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Description" "" (at 139.7 80.01 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "7bb99321-fcc6-5c6a-980b-49f4c1a8b53c")) + (pin "2" (uuid "1be0babc-6c15-5a07-bfb9-01f0fc283e8b")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "R_PPS") (unit 1)))) + ) + (label "PPS_CLEAN" + (at 139.7 76.2 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "786de885-8592-5bc4-b433-18e1f446c835") + ) + (global_label "SYNC_OUT" + (shape input) + (at 139.7 83.82 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "4a24c9e0-9fb6-5321-8787-6d8effa2b992") + ) + (symbol + (lib_id "Connector_Generic:Conn_01x02") + (at 170.18 74.93 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "33a1c6f2-b3c6-5ea1-bd56-e80289fa59d9") + (property "Reference" "J_PPS1" (at 172.72 73.93 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Value" "PPS_tap_UWB" (at 172.72 75.93 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" (at 170.18 74.93 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 170.18 74.93 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Description" "" (at 170.18 74.93 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "3768e981-1d1d-5ded-ab23-1679745916db")) + (pin "2" (uuid "684982a3-7873-5e6a-b695-a6935354ff2b")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "J_PPS1") (unit 1)))) + ) + (label "PPS_CLEAN" + (at 165.1 74.93 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "fe60af27-5505-5d53-8d8a-70ac6e710fa5") + ) + (symbol + (lib_id "power:GND") + (at 165.1 77.47 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "132d501c-0959-591c-8fde-5c570e4eed1b") + (property "Reference" "#PWRJ_PPS12" (at 165.1 80.47 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Value" "GND" (at 165.1 79.47 0) (effects (font (size 1.27 1.27)))) + (property "Footprint" "" (at 165.1 77.47 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 165.1 77.47 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "13197402-e8f1-5350-ac79-c6df42a63630")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "#PWRJ_PPS12") (unit 1)))) + ) + (symbol + (lib_id "Connector_Generic:Conn_01x02") + (at 170.18 90.17 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "3139dfd8-45cc-5d23-9267-1690860aef1d") + (property "Reference" "J_PPS2" (at 172.72 89.17 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Value" "PPS_tap_scope" (at 172.72 91.17 0) (effects (font (size 1.27 1.27)) (justify left))) + (property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" (at 170.18 90.17 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 170.18 90.17 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Description" "" (at 170.18 90.17 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "4b9fd1a1-742a-5e6c-a940-8247ed9843ad")) + (pin "2" (uuid "2fa66511-bd79-5dc8-9721-c11cc9e610c4")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "J_PPS2") (unit 1)))) + ) + (label "PPS_CLEAN" + (at 165.1 90.17 0) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid "883f9a6b-fc3b-5042-8915-45a5b2b27c9e") + ) + (symbol + (lib_id "power:GND") + (at 165.1 92.71 0) + (unit 1) + (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) + (uuid "fcf251ff-d387-5fca-9725-9d4ba93544a2") + (property "Reference" "#PWRJ_PPS22" (at 165.1 95.71 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Value" "GND" (at 165.1 94.71 0) (effects (font (size 1.27 1.27)))) + (property "Footprint" "" (at 165.1 92.71 0) (effects (font (size 1.27 1.27)) (hide yes))) + (property "Datasheet" "" (at 165.1 92.71 0) (effects (font (size 1.27 1.27)) (hide yes))) + (pin "1" (uuid "0a7181d0-5843-5e80-a044-bc6126797b29")) + (instances (project "CM5IO" (path "/e63e39d7-6ac0-4ffd-8aa3-1841a4541b55/5efffb63-edbb-5986-86d3-84ead412bc65" (reference "#PWRJ_PPS22") (unit 1)))) + ) + (sheet_instances + (path "/" + (page "6") + ) + ) +) diff --git a/tools/build_gps.py b/tools/build_gps.py new file mode 100644 index 0000000..28af3b0 --- /dev/null +++ b/tools/build_gps.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python3 +"""build_gps.py — generate the CM5-carrier GPS + PPS distribution sheet. + +Same connectivity model as build_power.py: every pin gets a coincident named +label / GND symbol / no_connect; nets form by name (grid-snapped 1.27mm). + +Frozen spec (CM5_Carrier_Pinout_BOM.md §6, CM5_Carrier_Design.md §5a): + J_GPS(5-pin): 1=PPS 2=NMEA_RX(GPS TX -> CM5 GPIO5/UART2 RX) + 3=NMEA_TX(CM5 GPIO4/UART2 TX -> GPS RX) 4=+3V3_AUX 5=GND + GPS_PPS_RAW -> TVS -> 74LVC1G17 Schmitt (3V3) -> PPS_CLEAN + -> Rs 33R -> SYNC_OUT (CM5 pin 18, Ethernet_SYNC_OUT, 3.3V bidi, cfg input) + -> J_PPS1 (UWB tap) / J_PPS2 (scope tap), 2-pin each + Board is always a PPS SINK (GPS-sourced). + +Cross-sheet nets are GLOBAL: +3V3_AUX (Power sheet flag drives it), and +GPIO4/GPIO5/SYNC_OUT (their CM5_GPIO local labels were converted to global — +net names unchanged; nothing else in the design used those names). +J_GPS pins 1/2 are re-typed 'output' (the GPS module drives PPS and TX into +the board) so the analyzer's no_driver gate sees real drivers (E-key lesson). +""" +import re, sys, os, uuid as uuidlib + +ROOT_UUID = "e63e39d7-6ac0-4ffd-8aa3-1841a4541b55" +PROJECT = "CM5IO" +KSS = "/Applications/KiCad/KiCad.app/Contents/SharedSupport/symbols" +HERE = os.path.dirname(os.path.abspath(__file__)) +CARRIER = os.path.join(HERE, "..", "carrier") + +def U(label): return str(uuidlib.uuid5(uuidlib.NAMESPACE_DNS, "cm5carrier-gps-" + label)) +SHEET_SYMBOL_UUID = U("sheet-symbol") +SHEET_FILE_UUID = U("sheet-file") + +def g(v): return round(round(v / 1.27) * 1.27, 2) + +def paren_end(t, s): + d = 0 + for i in range(s, len(t)): + if t[i] == '(': d += 1 + elif t[i] == ')': + d -= 1 + if d == 0: return i + 1 + raise ValueError("unbalanced") + +def get_symbol(text, name): + m = re.search(r'\(symbol\s+"' + re.escape(name) + r'"', text) + return text[m.start():paren_end(text, m.start())] if m else None + +def lib_pins(seg): + out = {} + for pm in re.finditer(r'\(pin\b', seg): + s = pm.start(); ps = seg[s:paren_end(seg, s)] + at = re.search(r'\(at\s+([\d.-]+)\s+([\d.-]+)\s+([\d.-]+)\)', ps) + nu = re.search(r'\(number\s+"([^"]+)"', ps) + if at and nu: + out.setdefault(nu.group(1), (float(at.group(1)), float(at.group(2)), float(at.group(3)))) + return out + +def set_pin_type(seg, number, newtype): + for pm in re.finditer(r'\(pin\s+(\w+)\s+(\w+)', seg): + s = pm.start(); blk = seg[s:paren_end(seg, s)] + if re.search(r'\(number\s+"' + re.escape(number) + r'"', blk): + head = re.match(r'\(pin\s+\w+', blk).group(0) + return seg[:s] + blk.replace(head, f'(pin {newtype}', 1) + seg[s + len(blk):] + return seg + +# ---- lib_symbol sources ----------------------------------------------------------- +carrier_hs = open(os.path.join(CARRIER, "CM5_HighSpeed.kicad_sch")).read() +LIBS = {} +def add_from(lib_id, srctext, srcname=None, retype=None): + srcname = srcname or lib_id.split(':')[-1] + blk = get_symbol(srctext, lib_id) or get_symbol(srctext, srcname) + if not blk: sys.exit("missing lib_symbol " + lib_id) + if ('"' + lib_id + '"') not in blk[:60]: + blk = blk.replace('(symbol "' + srcname + '"', '(symbol "' + lib_id + '"', 1) + for num, ty in (retype or {}).items(): + blk = set_pin_type(blk, num, ty) + LIBS[lib_id] = (blk, lib_pins(blk)) + +for lid in ["Device:R", "Device:C", "power:GND"]: + add_from(lid, carrier_hs) +add_from("Device:D_TVS", open(f"{KSS}/Device.kicad_sym").read(), "D_TVS") +# GPS module DRIVES pins 1 (PPS) and 2 (its TX) -> 'output' for driver-aware checks +add_from("Connector_Generic:Conn_01x05", open(f"{KSS}/Connector_Generic.kicad_sym").read(), + "Conn_01x05", retype={'1': 'output', '2': 'output'}) +add_from("Connector_Generic:Conn_01x02", open(f"{KSS}/Connector_Generic.kicad_sym").read(), "Conn_01x02") +add_from("74xGxx:74LVC1G17", open(f"{KSS}/74xGxx.kicad_sym").read(), "74LVC1G17") + +GLOBAL_NETS = {"+3V3_AUX", "GPIO4", "GPIO5", "SYNC_OUT"} +HIER_NETS = set() + +# ---- placement engine (same as build_power.py, + ('nc',) pins) -------------------- +body = [] +def emit_label(net, x, y, ang=0): + body.append(f'\t(label "{net}"\n\t\t(at {x} {y} {ang})\n' + f'\t\t(effects (font (size 1.27 1.27)) (justify left))\n\t\t(uuid "{U("l-"+net+f"-{x}-{y}")}")\n\t)\n') +def emit_glabel(net, x, y, ang=0): + body.append(f'\t(global_label "{net}"\n\t\t(shape input)\n\t\t(at {x} {y} {ang})\n' + f'\t\t(effects (font (size 1.27 1.27)) (justify left))\n\t\t(uuid "{U("gl-"+net+f"-{x}-{y}")}")\n\t)\n') +def emit_nc(x, y, tag): + body.append(f'\t(no_connect (at {x} {y}) (uuid "{U("nc-"+tag)}"))\n') +def emit_gnd(x, y, tag): + body.append(f'\t(symbol\n\t\t(lib_id "power:GND")\n\t\t(at {x} {y} 0)\n\t\t(unit 1)\n' + f'\t\t(exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no)\n\t\t(uuid "{U("gnd-"+tag)}")\n' + f'\t\t(property "Reference" "#PWR{tag}" (at {x} {y+3} 0) (effects (font (size 1.27 1.27)) (hide yes)))\n' + f'\t\t(property "Value" "GND" (at {x} {y+2} 0) (effects (font (size 1.27 1.27))))\n' + f'\t\t(property "Footprint" "" (at {x} {y} 0) (effects (font (size 1.27 1.27)) (hide yes)))\n' + f'\t\t(property "Datasheet" "" (at {x} {y} 0) (effects (font (size 1.27 1.27)) (hide yes)))\n' + f'\t\t(pin "1" (uuid "{U("gp-"+tag)}"))\n' + f'\t\t(instances (project "{PROJECT}" (path "/{ROOT_UUID}/{SHEET_SYMBOL_UUID}" (reference "#PWR{tag}") (unit 1))))\n\t)\n') + +def place(lib_id, ref, value, footprint, ox, oy, pin_nets): + ox, oy = g(ox), g(oy) + _, pins = LIBS[lib_id] + extra = ('\t\t(property "Description" "" (at %g %g 0) (effects (font (size 1.27 1.27)) (hide yes)))\n' % (ox, oy)) + sym = (f'\t(symbol\n\t\t(lib_id "{lib_id}")\n\t\t(at {ox} {oy} 0)\n\t\t(unit 1)\n' + f'\t\t(exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no)\n\t\t(uuid "{U("sym-"+ref)}")\n' + f'\t\t(property "Reference" "{ref}" (at {ox+2.54} {oy-1} 0) (effects (font (size 1.27 1.27)) (justify left)))\n' + f'\t\t(property "Value" "{value}" (at {ox+2.54} {oy+1} 0) (effects (font (size 1.27 1.27)) (justify left)))\n' + f'\t\t(property "Footprint" "{footprint}" (at {ox} {oy} 0) (effects (font (size 1.27 1.27)) (hide yes)))\n' + f'\t\t(property "Datasheet" "" (at {ox} {oy} 0) (effects (font (size 1.27 1.27)) (hide yes)))\n' + extra) + for num in sorted(pins, key=lambda n: int(re.sub(r'\D', '', n) or 0)): + sym += f'\t\t(pin "{num}" (uuid "{U("p-"+ref+"-"+num)}"))\n' + sym += f'\t\t(instances (project "{PROJECT}" (path "/{ROOT_UUID}/{SHEET_SYMBOL_UUID}" (reference "{ref}") (unit 1))))\n\t)\n' + body.append(sym) + for num, net in pin_nets.items(): + lx, ly, _ = pins[num]; px, py = round(ox + lx, 2), round(oy - ly, 2) + if net == ('gnd',): emit_gnd(px, py, ref + num) + elif net == ('nc',): emit_nc(px, py, ref + num) + elif isinstance(net, tuple) and net[0] == 'global': emit_glabel(net[1], px, py) + elif net in GLOBAL_NETS: emit_glabel(net, px, py) + else: emit_label(net, px, py) + return ox, oy + +GND = ('gnd',); NC = ('nc',) + +# ---- the GPS + PPS block ---------------------------------------------------------- +place("Connector_Generic:Conn_01x05", "J_GPS", "GPS_5pin_PPS_UART", "Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical", + 60, 80, {'1': 'GPS_PPS_RAW', '2': 'GPIO5', '3': 'GPIO4', '4': '+3V3_AUX', '5': GND}) +place("Device:D_TVS", "TVS_PPS", "PESD3V3L1BA", "Diode_SMD:D_SOD-323", 85, 95, {'1': 'GPS_PPS_RAW', '2': GND}) +# 74LVC1G17: 1=NC 2=A 3=GND 4=Y 5=VCC (KiCad lib types: input/power_in/output/power_in) +place("74xGxx:74LVC1G17", "U_PPS", "74LVC1G17", "Package_TO_SOT_SMD:SOT-23-5", + 110, 80, {'2': 'GPS_PPS_RAW', '4': 'PPS_CLEAN', '5': '+3V3_AUX', '3': GND, '1': NC}) +place("Device:C", "C_PPS", "100n", "Capacitor_SMD:C_0402_1005Metric", 100, 95, {'1': '+3V3_AUX', '2': GND}) +place("Device:C", "C_GPS", "10u", "Capacitor_SMD:C_0603_1608Metric", 70, 95, {'1': '+3V3_AUX', '2': GND}) +# series R guards the LVC1G17 output against a driver fight (CM5 pin 18 is bidi; +# board policy configures it as input — spec Rs 33-100R, pick 33R) +place("Device:R", "R_PPS", "33", "Resistor_SMD:R_0402_1005Metric", 140, 80, {'1': 'PPS_CLEAN', '2': 'SYNC_OUT'}) +place("Connector_Generic:Conn_01x02", "J_PPS1", "PPS_tap_UWB", "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical", + 170, 75, {'1': 'PPS_CLEAN', '2': GND}) +place("Connector_Generic:Conn_01x02", "J_PPS2", "PPS_tap_scope", "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical", + 170, 90, {'1': 'PPS_CLEAN', '2': GND}) + +# ---- file scaffold ---------------------------------------------------------------- +libsyms = "\n".join(blk for blk, _ in LIBS.values()) +sheet = ('(kicad_sch\n\t(version 20231120)\n\t(generator "eeschema")\n\t(generator_version "8.0")\n' + f'\t(uuid "{SHEET_FILE_UUID}")\n\t(paper "A4")\n' + '\t(title_block\n\t\t(title "CM5 Carrier - GPS + PPS distribution")\n\t\t(rev "A")\n' + '\t\t(comment 1 "GPS conn (PPS+UART2+3V3_AUX) -> TVS -> LVC1G17 -> CM5 SYNC + 2 taps; PPS sink only")\n\t)\n' + '\t(lib_symbols\n' + libsyms + '\n\t)\n' + "".join(body) + + '\t(sheet_instances\n\t\t(path "/"\n\t\t\t(page "6")\n\t\t)\n\t)\n)\n') +assert sheet.count('(') == sheet.count(')'), f"UNBALANCED {sheet.count('(')} vs {sheet.count(')')}" +print("sheet-symbol uuid:", SHEET_SYMBOL_UUID) +print("parens balanced:", sheet.count('(')) +out = os.path.join(CARRIER, "GPS_PPS.kicad_sch") +if '--apply' in sys.argv: open(out, 'w').write(sheet); print("WROTE " + out) +else: print("DRY RUN (--apply to write)")