v6 T3: Block N - ZED-F9P (U18) + low-noise LDO (U21) placed and wired

Leo generated the vendor part with easyeda2kicad (C5120257) -> Drogheda-v6.kicad_sym /
.pretty / .3dshapes, now registered in sym-lib-table and fp-lib-table.

CROSS-CHECK: the EasyEDA/LCSC symbol independently CONFIRMS the datasheet transcription -
pads 1-54 match the u-blox pin assignment function for function, and the 21 Reserved pads
are identical. Pads 55-102 are 48 extra GND pads (the ground array under the module), which
our symbol was missing; T3a2 adds them stacked on the pin-1 coordinate so one GND label
serves all. Symbol is now 102/102 pins, footprint = Drogheda-v6:LCC-LGA-102_L22.0-W17.0_FM660.

Block N as wired (verified by rebuilding connectivity from label-on-pin geometry):
  GNSS_TX      U16.16 + U18.43        GNSS_RX  U16.17 + U18.42
  DOUT_4G      U18.26 (RXD2, RTCM in - modem end lands in T4)
  USART1_RX    U16.43 + Rdfu1.1 + U18.27 (TXD2 uplink; K1.1 also on this net per the PCB)
  GNSS_RESET_N U16.53 (PC12) + U18.49 + R105 10k pull-up to 3V3_GNSS
  GNSS_TIMEPULSE  U16.23 (PA7) + U18.53
  GNSS_ANT_DETECT U16.9 (PC1) + U18.4
  GNSS_ANT_SHORT_N U16.10 (PC2) + U18.6
  GNSS_RTK_STAT   U16.11 (PC3) + U18.20  <- hardware answer to are-corrections-being-used
  3V3_GNSS = U21.5 + U18.33/34 + C120-C124 + R105; U21 fed from SW_5V (stays MCU-gated)
  V_BCKP   = U18.36 on the UNGATED 3V3 so ephemeris survives a power-cycle
  33 no-connects: the 21 reserved pads plus V_USB, USB_DM/DP, ANT_OFF, SDA, SCL, TX_READY,
  D_SEL (open = UART mode), SAFEBOOT_N, EXTINT, GEOFENCE_STAT and the LDO NC/NR pin.

T3c fixes two coordinates the generators emitted as 3.552713679e-15 (i.e. zero); KiCad is
not guaranteed to accept exponent notation. See the script header for the lesson: a first
attempt used a bare numeric regex over the whole file and corrupted 264 UUIDs, because
segments such as 895e-4153 parse as scientific notation. Reverted from backup and redone
scoped to (at ...) forms only, with a UUID-integrity guard. Verified 2298 UUIDs, 0
malformed, 0 exponent coordinates.

STILL OPEN: the PCB has no U18/U21/passive footprints yet - that is a KiCad
Update-PCB-from-Schematic. And confirm the -04B datasheet pin assignment on paper.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJ4eAB6zjQT49RVwpgfKdt
This commit is contained in:
Claude (Cowork) 2026-08-24 23:25:44 +00:00
parent 8be9f41473
commit 3494413eaf
12 changed files with 40929 additions and 4 deletions

View File

@ -964,7 +964,7 @@
(at 0 30.48 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "Drogheda:u-blox_ZED-F9P_LGA54"
(property "Footprint" "Drogheda-v6:LCC-LGA-102_L22.0-W17.0_FM660"
(at 0 -5.08 0)
(effects (font (size 1.27 1.27)))
(hide yes)
@ -974,7 +974,7 @@
(effects (font (size 1.27 1.27)))
(hide yes)
)
(property "Description" "u-blox ZED-F9P multi-band L1/L2 GNSS receiver with RTK, 54-pin LGA 22.0 x 17.0 x 2.4 mm. NO internal LNA - an active antenna is mandatory. VCC 2.7-3.6 V, VCC ramp rate <= 20 us/V (damage limit). VCC_RF = VCC-0.1 V, 50 mA typ / 300 mA abs max. RESET_N needs a 7-13 kOhm pull-up. D_SEL open/high = UART. Reserved pins: leave open. LCSC C5120257."
(property "Description" "u-blox ZED-F9P multi-band L1/L2 GNSS receiver with RTK, 54-pin LGA 22.0 x 17.0 x 2.4 mm. NO internal LNA - an active antenna is mandatory. VCC 2.7-3.6 V, VCC ramp rate <= 20 us/V (damage limit). VCC_RF = VCC-0.1 V, 50 mA typ / 300 mA abs max. RESET_N needs a 7-13 kOhm pull-up. D_SEL open/high = UART. Reserved pins: leave open. LCSC C5120257. Land pattern = LGA-102: pads 1-54 per the datasheet, pads 55-102 are an additional GND array under the module (stacked on the pin-1 coordinate in this symbol)."
(at 0 -10.16 0)
(effects (font (size 1.27 1.27)))
(hide yes)
@ -1079,7 +1079,7 @@
)
)
(pin input line
(at -33.02 3.552713679e-15 0)
(at -33.02 0 0)
(length 5.08)
(name "ANT_SHORT_N"
(effects (font (size 1.27 1.27)))
@ -1429,7 +1429,7 @@
)
)
(pin passive line
(at -3.552713679e-15 -30.48 90)
(at 0 -30.48 90)
(length 5.08)
(name "RSVD22"
(effects (font (size 1.27 1.27)))
@ -1538,6 +1538,486 @@
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "55"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "56"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "57"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "58"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "59"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "60"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "61"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "62"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "63"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "64"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "65"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "66"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "67"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "68"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "69"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "70"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "71"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "72"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "73"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "74"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "75"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "76"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "77"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "78"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "79"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "80"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "81"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "82"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "83"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "84"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "85"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "86"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "87"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "88"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "89"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "90"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "91"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "92"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "93"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "94"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "95"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "96"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "97"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "98"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "99"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "100"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "101"
(effects (font (size 1.27 1.27)))
)
)
(pin passive line
(at -33.02 -2.54 0)
(length 5.08)
(name "GND"
(effects (font (size 1.27 1.27)))
)
(number "102"
(effects (font (size 1.27 1.27)))
)
)
)
)
(symbol "LDO_SOT23-5"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,691 @@
(kicad_symbol_lib
(version 20211014)
(generator https://github.com/uPesy/easyeda2kicad.py)
(symbol "ZED-F9P-04B"
(in_bom yes)
(on_board yes)
(property
"Reference"
"U"
(id 0)
(at 0 68.58 0)
(effects (font (size 1.27 1.27) ) )
)
(property
"Value"
"ZED-F9P-04B"
(id 1)
(at 0 -68.58 0)
(effects (font (size 1.27 1.27) ) )
)
(property
"Footprint"
"Drogheda-v6:LCC-LGA-102_L22.0-W17.0_FM660"
(id 2)
(at 0 -71.12 0)
(effects (font (size 1.27 1.27) ) hide)
)
(property
"Datasheet"
"https://www.lcsc.com/datasheet/C5120257.pdf"
(id 3)
(at 0 -73.66 0)
(effects (font (size 1.27 1.27) ) hide)
)
(property
"Manufacturer"
"U-BLOX"
(id 4)
(at 0 -76.20 0)
(effects (font (size 1.27 1.27) ) hide)
)
(property
"MPN"
"ZED-F9P-04B"
(id 5)
(at 0 -78.74 0)
(effects (font (size 1.27 1.27) ) hide)
)
(property
"LCSC Part"
"C5120257"
(id 6)
(at 0 -81.28 0)
(effects (font (size 1.27 1.27) ) hide)
)
(property
"ki_keywords"
"Satellite Positioning Modules"
(id 8)
(at 0 -83.82 0)
(effects (font (size 1.27 1.27) ) hide)
)
(symbol "ZED-F9P-04B_0_1"
(rectangle
(start -25.40 66.04)
(end 22.86 -66.04)
(stroke (width 0) (type default))
(fill (type background))
)
(circle
(center -24.13 64.77)
(radius 0.38)
(stroke (width 0) (type default))
(fill (type none))
)
(pin unspecified line
(at -27.94 63.50 0)
(length 2.54)
(name "ANT_DETECT" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 60.96 0)
(length 2.54)
(name "ANT_OFF" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 58.42 0)
(length 2.54)
(name "ANT_SHORT_N" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 55.88 0)
(length 2.54)
(name "D_SEL" (effects (font (size 1.27 1.27))))
(number "47" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 53.34 0)
(length 2.54)
(name "EXTINT" (effects (font (size 1.27 1.27))))
(number "51" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 50.80 0)
(length 2.54)
(name "GEOFENCE_STAT" (effects (font (size 1.27 1.27))))
(number "19" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 48.26 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 45.72 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 43.18 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "12" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 40.64 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "14" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 38.10 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "32" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 35.56 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "37" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 33.02 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "41" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 30.48 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "48" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 27.94 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "55" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 25.40 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "56" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 22.86 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "57" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 20.32 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "58" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 17.78 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "59" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 15.24 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "60" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 12.70 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "61" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 10.16 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "62" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 7.62 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "63" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 5.08 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "64" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 2.54 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "65" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -0.00 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "66" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -2.54 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "67" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -5.08 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "68" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -7.62 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "69" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -10.16 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "70" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -12.70 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "71" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -15.24 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "72" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -17.78 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "73" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -20.32 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "74" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -22.86 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "75" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -25.40 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "76" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -27.94 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "77" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -30.48 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "78" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -33.02 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "79" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -35.56 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "80" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -38.10 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "81" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -40.64 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "82" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -43.18 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "83" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -45.72 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "84" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -48.26 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "85" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -50.80 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "86" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -53.34 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "87" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -55.88 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "88" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -58.42 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "89" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -60.96 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "90" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -27.94 -63.50 0)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "91" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -63.50 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "92" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -60.96 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "93" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -58.42 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "94" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -55.88 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "95" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -53.34 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "96" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -50.80 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "97" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -48.26 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "98" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -45.72 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "99" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -43.18 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "100" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -40.64 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "101" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -38.10 180)
(length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "102" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -35.56 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -33.02 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "9" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -30.48 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "10" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -27.94 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "11" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -25.40 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "13" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -22.86 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "15" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -20.32 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "16" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -17.78 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "17" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -15.24 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "18" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -12.70 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "21" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -10.16 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "22" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -7.62 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "23" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -5.08 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "24" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -2.54 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "25" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 -0.00 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "28" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 2.54 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "29" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 5.08 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "30" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 7.62 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "31" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 10.16 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "35" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 12.70 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "52" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 15.24 180)
(length 2.54)
(name "Reserved" (effects (font (size 1.27 1.27))))
(number "54" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 17.78 180)
(length 2.54)
(name "RESET_N" (effects (font (size 1.27 1.27))))
(number "49" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 20.32 180)
(length 2.54)
(name "RF_IN" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 22.86 180)
(length 2.54)
(name "RTK_STAT" (effects (font (size 1.27 1.27))))
(number "20" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 25.40 180)
(length 2.54)
(name "RXD/SPI_MOSI" (effects (font (size 1.27 1.27))))
(number "43" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 27.94 180)
(length 2.54)
(name "RXD2" (effects (font (size 1.27 1.27))))
(number "26" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 30.48 180)
(length 2.54)
(name "SAFEBOOT_N" (effects (font (size 1.27 1.27))))
(number "50" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 33.02 180)
(length 2.54)
(name "SCL/SPI_CLK" (effects (font (size 1.27 1.27))))
(number "45" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 35.56 180)
(length 2.54)
(name "SDA/SPI_CS_N" (effects (font (size 1.27 1.27))))
(number "44" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 38.10 180)
(length 2.54)
(name "TIMEPULSE" (effects (font (size 1.27 1.27))))
(number "53" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 40.64 180)
(length 2.54)
(name "TX_READY" (effects (font (size 1.27 1.27))))
(number "46" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 43.18 180)
(length 2.54)
(name "TXD/SPI_MISO" (effects (font (size 1.27 1.27))))
(number "42" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 45.72 180)
(length 2.54)
(name "TXD2" (effects (font (size 1.27 1.27))))
(number "27" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 48.26 180)
(length 2.54)
(name "USB_DM" (effects (font (size 1.27 1.27))))
(number "39" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 50.80 180)
(length 2.54)
(name "USB_DP" (effects (font (size 1.27 1.27))))
(number "40" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 53.34 180)
(length 2.54)
(name "V_BCKP" (effects (font (size 1.27 1.27))))
(number "36" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 55.88 180)
(length 2.54)
(name "V_USB" (effects (font (size 1.27 1.27))))
(number "38" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 58.42 180)
(length 2.54)
(name "VCC" (effects (font (size 1.27 1.27))))
(number "33" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 60.96 180)
(length 2.54)
(name "VCC" (effects (font (size 1.27 1.27))))
(number "34" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 25.40 63.50 180)
(length 2.54)
(name "VCC_RF" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
)
)
)

View File

@ -0,0 +1,131 @@
(module easyeda2kicad:LCC-LGA-102_L22.0-W17.0_FM660 (layer F.Cu) (tedit 5DC5F6A4)
(attr smd)
(fp_text reference REF** (at 0.000 -11.450) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value LCC-LGA-102_L22.0-W17.0_FM660 (at 0.000 11.450) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(property "LCSC Part" "C5120257")
(fp_line (start -11.05 8.51) (end -11.05 -8.51) (layer F.SilkS) (width 0.25))
(fp_line (start -11.05 -8.51) (end 11.05 -8.51) (layer F.SilkS) (width 0.25))
(fp_line (start 11.05 -8.51) (end 11.05 8.51) (layer F.SilkS) (width 0.25))
(fp_line (start 11.05 8.51) (end -11.05 8.51) (layer F.SilkS) (width 0.25))
(pad 102 smd rect (at -7.35 -5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 101 smd rect (at -5.25 -5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 100 smd rect (at -3.15 -5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 99 smd rect (at -1.05 -5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 98 smd rect (at 1.05 -5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 97 smd rect (at 3.15 -5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 96 smd rect (at 5.25 -5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 95 smd rect (at 7.35 -5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 87 smd rect (at 7.35 -3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 88 smd rect (at 5.25 -3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 89 smd rect (at 3.15 -3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 90 smd rect (at 1.05 -3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 91 smd rect (at -1.05 -3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 92 smd rect (at -3.15 -3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 93 smd rect (at -5.25 -3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 94 smd rect (at -7.35 -3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 86 smd rect (at -7.35 -1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 85 smd rect (at -5.25 -1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 84 smd rect (at -3.15 -1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 83 smd rect (at -1.05 -1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 82 smd rect (at 1.05 -1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 81 smd rect (at 3.15 -1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 80 smd rect (at 5.25 -1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 79 smd rect (at 7.35 -1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 71 smd rect (at 7.35 1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 72 smd rect (at 5.25 1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 73 smd rect (at 3.15 1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 74 smd rect (at 1.05 1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 75 smd rect (at -1.05 1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 76 smd rect (at -3.15 1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 77 smd rect (at -5.25 1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 78 smd rect (at -7.35 1.05 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 70 smd rect (at -7.35 3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 69 smd rect (at -5.25 3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 68 smd rect (at -3.15 3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 67 smd rect (at -1.05 3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 66 smd rect (at 1.05 3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 65 smd rect (at 3.15 3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 64 smd rect (at 5.25 3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 63 smd rect (at 7.35 3.15 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 62 smd rect (at 7.35 5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 61 smd rect (at 5.25 5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 60 smd rect (at 3.15 5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 59 smd rect (at 1.05 5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 58 smd rect (at -1.05 5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 57 smd rect (at -3.15 5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 56 smd rect (at -5.25 5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 55 smd rect (at -7.35 5.25 0.00) (size 1.100 1.100) (layers F.Cu F.Paste F.Mask))
(pad 54 smd rect (at -9.95 6.60 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 53 smd rect (at -9.95 5.50 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 52 smd rect (at -9.95 4.40 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 51 smd rect (at -9.95 3.30 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 50 smd rect (at -9.95 2.20 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 49 smd rect (at -9.95 1.10 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 48 smd rect (at -9.95 0.00 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 47 smd rect (at -9.95 -1.10 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 46 smd rect (at -9.95 -2.20 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 45 smd rect (at -9.95 -3.30 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 44 smd rect (at -9.95 -4.40 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 43 smd rect (at -9.95 -5.50 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 42 smd rect (at -9.95 -6.60 -90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 41 smd rect (at -7.15 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 40 smd rect (at -6.05 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 39 smd rect (at -4.95 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 38 smd rect (at -3.85 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 37 smd rect (at -2.75 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 36 smd rect (at -1.65 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 35 smd rect (at -0.55 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 34 smd rect (at 0.55 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 33 smd rect (at 1.65 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 32 smd rect (at 2.75 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 31 smd rect (at 3.85 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 30 smd rect (at 4.95 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 29 smd rect (at 6.05 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 28 smd rect (at 7.15 -7.45 180.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 27 smd rect (at 9.95 -6.60 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 26 smd rect (at 9.95 -5.50 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 25 smd rect (at 9.95 -4.40 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 24 smd rect (at 9.95 -3.30 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 23 smd rect (at 9.95 -2.20 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 22 smd rect (at 9.95 -1.10 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 21 smd rect (at 9.95 0.00 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 20 smd rect (at 9.95 1.10 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 19 smd rect (at 9.95 2.20 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 18 smd rect (at 9.95 3.30 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 17 smd rect (at 9.95 4.40 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 16 smd rect (at 9.95 5.50 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 15 smd rect (at 9.95 6.60 90.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 14 smd rect (at 7.15 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 13 smd rect (at 6.05 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 12 smd rect (at 4.95 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 11 smd rect (at 3.85 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 10 smd rect (at 2.75 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 9 smd rect (at 1.65 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 8 smd rect (at 0.55 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 7 smd rect (at -0.55 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at -1.65 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at -2.75 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at -3.85 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at -4.95 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -6.05 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at -7.15 7.45 0.00) (size 0.800 1.500) (layers F.Cu F.Paste F.Mask))
(fp_circle (center -11.00 8.50) (end -10.97 8.50) (layer F.SilkS) (width 0.06))
(fp_circle (center -7.38 8.51) (end -7.13 8.51) (layer Cmts.User) (width 0.50))
(fp_circle (center -7.62 9.27) (end -7.37 9.27) (layer F.SilkS) (width 0.50))
(fp_line (start -11.00 8.50) (end -11.00 -8.50) (layer F.CrtYd) (width 0.05))
(fp_line (start -11.00 -8.50) (end 11.00 -8.50) (layer F.CrtYd) (width 0.05))
(fp_line (start 11.00 -8.50) (end 11.00 8.50) (layer F.CrtYd) (width 0.05))
(fp_line (start 11.00 8.50) (end -11.00 8.50) (layer F.CrtYd) (width 0.05))
(model "/Users/leo/Documents/Claude/Projects/Drogheda/03-Architecture-Hardware/kicad/Drogheda-v6.3dshapes/LCC-LGA-102_L22.0-W17.0_FM660.wrl"
(offset (xyz 0.000 0.000 0.000))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@ -1,4 +1,5 @@
(fp_lib_table
(version 7)
(lib (name "Drogheda")(type "KiCad")(uri "${KIPRJMOD}/Drogheda.pretty")(options "")(descr "Project footprints incl. E-J1 reverse-numbered socket"))
(lib (name "Drogheda-v6")(type "KiCad")(uri "${KIPRJMOD}/Drogheda-v6.pretty")(options "")(descr "easyeda2kicad footprints from LCSC - vendor land patterns for JLCPCB assembly"))
)

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,5 @@
(sym_lib_table
(version 7)
(lib (name "Drogheda-sym")(type "KiCad")(uri "/Users/leo/Documents/Claude/Projects/Drogheda/03-Architecture-Hardware/kicad/Drogheda-sym.kicad_sym")(options "")(descr ""))
(lib (name "Drogheda-v6")(type "KiCad")(uri "${KIPRJMOD}/Drogheda-v6.kicad_sym")(options "")(descr "easyeda2kicad imports from LCSC (C5120257 ZED-F9P-04B, ...)"))
)

View File

@ -0,0 +1,78 @@
#!/usr/bin/env python3
"""v6 T3a2 - patch Drogheda-sym:ZED-F9P for the REAL LGA-102 land pattern.
Cross-check performed 2026-08-24 against the EasyEDA/LCSC part C5120257 generated by
easyeda2kicad (Drogheda-v6.kicad_sym + Drogheda-v6.pretty):
* pads 1-54 map EXACTLY to the u-blox datasheet pin assignment - every function matched
(GND set, RF_IN 2, ANT_DETECT 4, ANT_OFF 5, ANT_SHORT_N 6, VCC_RF 7, GEOFENCE_STAT 19,
RTK_STAT 20, RXD2 26, TXD2 27, VCC 33/34, V_BCKP 36, V_USB 38, USB_DM/DP 39/40,
TXD 42, RXD 43, SDA 44, SCL 45, TX_READY 46, D_SEL 47, RESET_N 49, SAFEBOOT_N 50,
EXTINT 51, TIMEPULSE 53, and the identical 21 Reserved pads).
* pads 55-102 are 48 ADDITIONAL GND pads - the ground/thermal array under the module.
So the datasheet transcription is independently confirmed, and the only thing missing from
our symbol is the ground array. This patch adds pads 55-102 as GND, stacked on the pin-1
coordinate so a single GND label connects them all, and points Footprint at the real land
pattern.
Usage: python3 2026-08-24_v6_T3a2_f9p_ground_array.py [--apply]
"""
import os, sys, shutil, re
KI = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '03-Architecture-Hardware', 'kicad')
LIB = os.path.join(KI, 'Drogheda-sym.kicad_sym')
APPLY = '--apply' in sys.argv
FP = 'Drogheda-v6:LCC-LGA-102_L22.0-W17.0_FM660'
src = open(LIB, encoding='utf-8').read()
i = src.find(' (symbol "ZED-F9P"\n')
if i < 0: sys.exit('ZED-F9P symbol not found')
j = src.find(' (symbol "LDO_SOT23-5"\n')
blk = src[i:j]
if '(number "102"' in blk: sys.exit('REFUSING: ground array already present')
# pin 1 (GND) coordinate, to stack the array on
m = re.search(r'\(pin power_in line\s*\n\s*\(at ([-\d.]+) ([-\d.]+) (\d+)\)(?:(?!\(pin ).)*?\(number "1"', blk, re.S)
if not m: sys.exit('could not locate pin 1')
x, y, rot = m.group(1), m.group(2), m.group(3)
print('stacking pads 55-102 on pin 1 at (%s, %s) rot %s' % (x, y, rot))
extra = ''
for n in range(55, 103):
extra += (' (pin passive line\n (at %s %s %s)\n (length 5.08)\n'
' (name "GND"\n (effects (font (size 1.27 1.27)))\n )\n'
' (number "%d"\n (effects (font (size 1.27 1.27)))\n )\n )\n'
) % (x, y, rot, n)
k = blk.rindex(' )\n )\n') # close of the _1_1 sub-symbol
newblk = blk[:k] + extra + blk[k:]
newblk = newblk.replace('(property "Footprint" "Drogheda:u-blox_ZED-F9P_LGA54"',
'(property "Footprint" "%s"' % FP, 1)
newblk = newblk.replace('LCSC C5120257.',
'LCSC C5120257. Land pattern = LGA-102: pads 1-54 per the datasheet, pads 55-102 are an '
'additional GND array under the module (stacked on the pin-1 coordinate in this symbol).', 1)
new = src[:i] + newblk + src[j:]
nums = re.findall(r'\(number "(\d+)"', newblk)
print('pin numbers now: %d, unique %d, missing %s'
% (len(nums), len(set(nums)), sorted(set(range(1,103)) - set(int(n) for n in nums)) or 'none'))
print('footprint property ->', FP)
def bal(t):
d=0; instr=False; esc=False
for ch in t:
if esc: esc=False; continue
if ch=='\\': esc=True; continue
if ch=='"': instr = not instr; continue
if instr: continue
if ch=='(': d+=1
elif ch==')': d-=1
return d
print('paren balance:', bal(new))
if not APPLY:
print('\nDRY RUN - nothing written. Re-run with --apply.'); sys.exit(0)
if bal(new) != 0: sys.exit('REFUSING: paren imbalance')
shutil.copy2(LIB, LIB + '.T3a2bak')
open(LIB, 'w', encoding='utf-8').write(new)
print('\nAPPLIED. Backup: Drogheda-sym.kicad_sym.T3a2bak')

View File

@ -54,6 +54,7 @@ def pin(n, x, y, rot):
' (number "%d"\n (effects (font (size 1.27 1.27)))\n )\n )\n'
) % (TYPE[n], fmt(x), fmt(y), rot, disp(n), n)
def fmt(v):
v = 0.0 if abs(v) < 1e-9 else v # never emit 3.55e-15 - KiCad may reject exponents
return ('%.10g' % v)
body = []

View File

@ -0,0 +1,190 @@
#!/usr/bin/env python3
"""v6 T3b - Block N: place U18 (ZED-F9P) + U21 (LDO) and wire the GNSS island.
The schematic is label-only (zero wires), so "wiring" = placing labels on pin coordinates.
Sheet coords: x = X + px , y = Y - py (py is the symbol-internal Y, which points up).
Usage: python3 2026-08-24_v6_T3b_block_n.py [--apply]
"""
import os, sys, shutil, uuid, re
KI = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '03-Architecture-Hardware', 'kicad')
SCH = os.path.join(KI, 'hbox-watchdog-v6.kicad_sch')
LIB = os.path.join(KI, 'Drogheda-sym.kicad_sym')
APPLY = '--apply' in sys.argv
ROOT = '/561403b3-895e-4153-a7be-3876ae930d43'
U18X, U18Y = 470.0, 120.0 # ZED-F9P
U21X, U21Y = 390.0, 110.0 # LDO
P = 2.54
LEFT = [33,34,36,38,7,2,4,5,6,1,3,12,14,32,37,41,48]
RIGHT = [42,43,26,27,44,45,39,40,46,47,49,50,51,53,19,20]
RSVD = [8,9,10,11,13,15,16,17,18,21,22,23,24,25,28,29,30,31,35,52,54]
NC = '<NC>'
NET_L = {33:'3V3_GNSS', 34:'3V3_GNSS', 36:'3V3', 38:NC, 7:'VCC_RF_GNSS', 2:'RF_GNSS',
4:'GNSS_ANT_DETECT', 5:NC, 6:'GNSS_ANT_SHORT_N',
1:'GND', 3:'GND', 12:'GND', 14:'GND', 32:'GND', 37:'GND', 41:'GND', 48:'GND'}
NET_R = {42:'GNSS_RX', 43:'GNSS_TX', 26:'DOUT_4G', 27:'USART1_RX',
44:NC, 45:NC, 39:NC, 40:NC, 46:NC, 47:NC,
49:'GNSS_RESET_N', 50:NC, 51:NC, 53:'GNSS_TIMEPULSE', 19:NC, 20:'GNSS_RTK_STAT'}
# MCU-side labels: (net, x, y, rot, justify)
MCU = [('GNSS_ANT_DETECT', 482.6, 419.10, 180, 'right bottom'), # PC1
('GNSS_ANT_SHORT_N', 482.6, 421.64, 180, 'right bottom'), # PC2
('GNSS_RTK_STAT', 482.6, 424.18, 180, 'right bottom'), # PC3
('GNSS_RESET_N', 482.6, 447.04, 180, 'right bottom'), # PC12
('GNSS_TIMEPULSE', 518.16, 411.48, 0, 'left bottom')] # PA7
# passives: ref, value, x, y, pin1 net, pin2 net, footprint, lib
PASSIVES = [
('C119','10uF', 365.0, 110.0, 'SW_5V', 'GND', 'Capacitor_SMD:C_0805_2012Metric','Device:C'),
('C120','10uF', 415.0, 110.0, '3V3_GNSS', 'GND', 'Capacitor_SMD:C_0805_2012Metric','Device:C'),
('C121','100nF', 425.0, 110.0, '3V3_GNSS', 'GND', 'Capacitor_SMD:C_0402_1005Metric','Device:C'),
('C122','100nF', 365.0, 130.0, '3V3_GNSS', 'GND', 'Capacitor_SMD:C_0402_1005Metric','Device:C'),
('C123','100nF', 375.0, 130.0, '3V3_GNSS', 'GND', 'Capacitor_SMD:C_0402_1005Metric','Device:C'),
('C124','10uF', 355.0, 130.0, '3V3_GNSS', 'GND', 'Capacitor_SMD:C_0805_2012Metric','Device:C'),
('R105','10k', 415.0, 130.0, '3V3_GNSS', 'GNSS_RESET_N', 'Resistor_SMD:R_0603_1608Metric', 'Device:R'),
]
def f(v):
v = 0.0 if abs(v) < 1e-9 else v
return '%.10g' % v
def mklabel(name, x, y, rot, just):
return ('\n\t(label "%s"\n\t\t(at %s %s %d)\n\t\t(effects\n\t\t\t(font\n\t\t\t\t(size 1.27 1.27)\n'
'\t\t\t)\n\t\t\t(justify %s)\n\t\t)\n\t\t(uuid "%s")\n\t)') % (name, f(x), f(y), rot, just, uuid.uuid4())
def mknc(x, y):
return '\n\t(no_connect\n\t\t(at %s %s)\n\t\t(uuid "%s")\n\t)' % (f(x), f(y), uuid.uuid4())
def mksym(lib_id, ref, val, x, y, fp, pins, extra=''):
props = [('Reference', ref, x-3, y-3, ''), ('Value', val, x+3, y-3, ''),
('Footprint', fp, x, y, '\n\t\t\t(hide yes)'), ('Datasheet', '~', x, y, '\n\t\t\t(hide yes)'),
('Description', '', x, y, '\n\t\t\t(hide yes)')]
if extra: props.append(('LCSC', extra, x, y, '\n\t\t\t(hide yes)'))
p = ''
for nm, v, px, py, hide in props:
p += ('\t\t(property "%s" "%s"\n\t\t\t(at %s %s 0)%s\n\t\t\t(show_name no)\n\t\t\t(do_not_autoplace no)\n'
'\t\t\t(effects\n\t\t\t\t(font\n\t\t\t\t\t(size 1.27 1.27)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n'
) % (nm, v, f(px), f(py), hide)
pn = ''.join('\t\t(pin "%s"\n\t\t\t(uuid "%s")\n\t\t)\n' % (n, uuid.uuid4()) for n in pins)
return ('\n\t(symbol\n\t\t(lib_id "%s")\n\t\t(at %s %s 0)\n\t\t(unit 1)\n\t\t(body_style 1)\n'
'\t\t(exclude_from_sim no)\n\t\t(in_bom yes)\n\t\t(on_board yes)\n\t\t(in_pos_files yes)\n'
'\t\t(dnp no)\n\t\t(uuid "%s")\n%s%s\t\t(instances\n\t\t\t(project "hbox-watchdog-v6"\n'
'\t\t\t\t(path "%s"\n\t\t\t\t\t(reference "%s")\n\t\t\t\t\t(unit 1)\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t)'
) % (lib_id, f(x), f(y), uuid.uuid4(), p, pn, ROOT, ref)
sch = open(SCH, encoding='utf-8').read()
libsrc = open(LIB, encoding='utf-8').read()
# ---- A. copy the two symbol definitions into the schematic's lib_symbols cache ----
def grab(name):
i = libsrc.find(' (symbol "%s"\n' % name)
if i < 0: sys.exit('symbol %s not found in %s' % (name, LIB))
d = 0; instr = False; esc = False; j = libsrc.index('(', i)
k = j
while k < len(libsrc):
ch = libsrc[k]
if esc: esc = False
elif ch == '\\': esc = True
elif ch == '"': instr = not instr
elif not instr:
if ch == '(': d += 1
elif ch == ')':
d -= 1
if d == 0: break
k += 1
blk = libsrc[j:k+1]
return blk.replace('(symbol "%s"' % name, '(symbol "Drogheda-sym:%s"' % name, 1)
added_defs = ''
for nm in ('ZED-F9P', 'LDO_SOT23-5'):
if '(symbol "Drogheda-sym:%s"' % nm in sch:
sys.exit('REFUSING: %s already cached in the schematic' % nm)
added_defs += '\n\t\t' + grab(nm)
m = re.search(r'\n\t\(lib_symbols\n', sch)
if not m: sys.exit('lib_symbols block not found')
d = 0; instr = False; esc = False; k = sch.index('(', m.start())
start = k
while k < len(sch):
ch = sch[k]
if esc: esc = False
elif ch == '\\': esc = True
elif ch == '"': instr = not instr
elif not instr:
if ch == '(': d += 1
elif ch == ')':
d -= 1
if d == 0: break
k += 1
sch = sch[:k] + added_defs + '\n\t' + sch[k:]
# ---- B. symbols ----
add = ''
add += mksym('Drogheda-sym:ZED-F9P', 'U18', 'ZED-F9P-04B', U18X, U18Y,
'Drogheda-v6:LCC-LGA-102_L22.0-W17.0_FM660', [str(n) for n in range(1, 103)], 'C5120257')
add += mksym('Drogheda-sym:LDO_SOT23-5', 'U21', 'AP2112K-3.3', U21X, U21Y,
'Package_TO_SOT_SMD:SOT-23-5', ['1','2','3','4','5'], 'C51118')
for ref, val, x, y, n1, n2, fp, lb in PASSIVES:
add += mksym(lb, ref, val, x, y, fp, ['1','2'])
# ---- C. labels + no-connects ----
nlab = nnc = 0
def put(net, x, y, rot, just):
global add, nlab, nnc
if net == NC:
add += mknc(x, y); nnc += 1
else:
add += mklabel(net, x, y, rot, just); nlab += 1
y = U18Y - (len(LEFT)-1)*P/2
for n in LEFT:
put(NET_L[n], U18X-33.02, y, 180, 'right bottom'); y += P
y = U18Y - (len(RIGHT)-1)*P/2
for n in RIGHT:
put(NET_R[n], U18X+33.02, y, 0, 'left bottom'); y += P
x = U18X - (len(RSVD)-1)*P/2
for n in RSVD:
put(NC, x, U18Y+30.48, 0, 'left bottom'); x += P
# U21 pins: 1 VIN(-12.7,0) 3 EN(-12.7,-2.54) 5 VOUT(12.7,0) 4 NC(12.7,-2.54) 2 GND(0,-10.16)
put('SW_5V', U21X-12.7, U21Y, 180, 'right bottom')
put('SW_5V', U21X-12.7, U21Y+2.54, 180, 'right bottom')
put('3V3_GNSS', U21X+12.7, U21Y, 0, 'left bottom')
put(NC, U21X+12.7, U21Y+2.54, 0, 'left bottom')
put('GND', U21X, U21Y+10.16, 90, 'left bottom')
for ref, val, x, y, n1, n2, fp, lb in PASSIVES:
put(n1, x, y-3.81, 90, 'left bottom')
put(n2, x, y+3.81, 90, 'left bottom')
for net, x, y, rot, just in MCU:
put(net, x, y, rot, just)
end = sch.rstrip()
assert end.endswith(')')
sch = end[:-1].rstrip('\n') + add + '\n)\n'
print('U18 ZED-F9P @ (%s, %s) U21 LDO @ (%s, %s)' % (U18X, U18Y, U21X, U21Y))
print('symbols added : U18, U21, ' + ', '.join(p[0] for p in PASSIVES))
print('labels added : %d no_connects added: %d (21 reserved + %d unused)' % (nlab, nnc, nnc-21))
def bal(t):
d=0; instr=False; esc=False
for ch in t:
if esc: esc=False; continue
if ch=='\\': esc=True; continue
if ch=='"': instr = not instr; continue
if instr: continue
if ch=='(': d+=1
elif ch==')': d-=1
return d
print('paren balance :', bal(sch))
if not APPLY:
print('\nDRY RUN - nothing written. Re-run with --apply.'); sys.exit(0)
if bal(sch) != 0: sys.exit('REFUSING: paren imbalance')
shutil.copy2(SCH, SCH + '.T3bbak')
open(SCH, 'w', encoding='utf-8').write(sch)
print('\nAPPLIED. Backup: hbox-watchdog-v6.kicad_sch.T3bbak')

View File

@ -0,0 +1,50 @@
#!/usr/bin/env python3
"""v6 T3c - replace scientific-notation COORDINATES with exact 0.
Float accumulation in the T3a/T3b generators emitted coordinates like 3.552713679e-15
(i.e. zero). KiCad's s-expression parser is not guaranteed to accept exponent notation.
!! LESSON (2026-08-24): a first attempt used a bare numeric regex over the whole file and
corrupted 264 UUIDs - segments such as "895e-4153" parse as scientific notation.
This version ONLY touches tokens inside an (at ...) form, only when the token is a
complete float in exponent form, and only when |value| < 1e-9. It also refuses to run
if any UUID would change.
Usage: python3 2026-08-24_v6_T3c_fix_sci_notation.py [--apply]
"""
import re, sys, os, shutil
KI = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '03-Architecture-Hardware', 'kicad')
FILES = [os.path.join(KI, 'Drogheda-sym.kicad_sym'), os.path.join(KI, 'hbox-watchdog-v6.kicad_sch')]
APPLY = '--apply' in sys.argv
AT = re.compile(r'\(at ([^()]*)\)')
NUM = re.compile(r'^[+-]?(?:\d+\.?\d*|\.\d+)[eE][+-]?\d+$')
UUID = re.compile(r'\(uuid "([^"]*)"\)')
total = 0
for f in FILES:
src = open(f, encoding='utf-8').read()
changed = []
def fix(m):
toks = m.group(1).split()
out = []
for t in toks:
if NUM.fullmatch(t):
v = float(t)
if abs(v) >= 1e-9:
sys.exit('REFUSING: non-negligible exponent coordinate %s' % t)
changed.append((m.group(0), t)); out.append('0')
else:
out.append(t)
return '(at ' + ' '.join(out) + ')'
new = AT.sub(fix, src)
if UUID.findall(new) != UUID.findall(src):
sys.exit('REFUSING: a UUID would change - aborting')
print('%-30s %d coordinate(s) fixed' % (os.path.basename(f), len(changed)))
for before, tok in changed:
print(' %s (token %s -> 0)' % (before, tok))
total += len(changed)
if APPLY and changed:
shutil.copy2(f, f + '.T3cbak'); open(f, 'w', encoding='utf-8').write(new)
print('total: %d' % total)
print('APPLIED' if APPLY else '\nDRY RUN - nothing written. Re-run with --apply.')