From e305caf66736a1dee66b83c1e2c34c6581147241 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Fri, 3 Feb 2023 12:05:44 -0700 Subject: [PATCH] add push-push microSD connector footprint --- packages/Makefile | 1 + packages/microSDpush.py | 242 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 243 insertions(+) create mode 100755 packages/microSDpush.py diff --git a/packages/Makefile b/packages/Makefile index 497e7fd..e969497 100644 --- a/packages/Makefile +++ b/packages/Makefile @@ -115,6 +115,7 @@ FOOTPRINTS= \ SD.fp \ microSD.fp \ microSDold.fp \ + microSDpush.fp \ v-bite.fp \ qfn16-3x3.fp \ 1051330011.fp \ diff --git a/packages/microSDpush.py b/packages/microSDpush.py new file mode 100755 index 0000000..c4a4de6 --- /dev/null +++ b/packages/microSDpush.py @@ -0,0 +1,242 @@ +#!/usr/bin/python3 +# Copyright 2023 by Bdale Garbee . GPLv3 +# +# Program to emit PCB footprint for GCT MEM2051-00-195-00-A micro SD connector +# this is a push-push style connector with normally open card detection pin +# + +# dimensions in mm from gct/mem2051.pdf +MntFWidth = 1.50 +MntFHeight = 2.00 +MntRWidth = 1.30 +MntRHeight = 1.40 +MntYR = MntRHeight/2 - 0.3 +MntYFL = MntYR + MntRHeight/2 + 11.50 + MntFHeight/2 +MntYFR = MntYR + MntRHeight/2 + 12.50 + MntFHeight/2 +MntXRL = -11.50/2 + MntRWidth/2 +MntXRR = -11.50/2 + 5.70 + MntRWidth/2 +MntXFL = -11.50/2 - MntFWidth/2 +MntXFR = 11.50/2 + MntFWidth/2 + +CDWidth = 1.00 +CDHeight = 0.95 +CDX = -11.50/2 + 1.54 + CDWidth/2 +CDY = CDHeight/2 - 0.3 + +PinWidth = 0.80 +PinHeight = 1.50 +PinSpacing = 1.10 +PinY = MntYR + MntRHeight/2 + 9.41 + PinHeight/2 +PinY2 = PinY - 0.4 +PinY46 = PinY + 0.2 + +BoxX = 14.00 +BoxYleft = 14.20 +BoxYright = 15.20 +ArcWidth = 10.80 +ArcHeight = 1.30 +ArcOffset = 1.3 +LineWidth = 1000 + +Clearance = 0.32 + +MaskAdd = 0.15 + +import sys + +# we're going to use the 1/100 of a mil fundamental unit form +def mm2mils100( mm ): + return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 ) + +print('# author: Bdale Garbee') +print('# email: bdale@gag.com') +print('# dist-license: GPL 3') +print('# use-license: unlimited') + +print('Element[0x0 "microSD" "" "" 0 0 0 0 0 100 0x0]') +print("(") + +# mounting pads +print(' Pad[',\ + mm2mils100(MntXFL), \ + mm2mils100(MntYFL - MntFHeight/2 + MntFWidth/2), \ + mm2mils100(MntXFL), \ + mm2mils100(MntYFL + MntFHeight/2 - MntFWidth/2), \ + mm2mils100(MntFWidth), \ + mm2mils100(Clearance), \ + mm2mils100(MntFWidth + MaskAdd), \ + '"10" "10" 0x0100]') + +print(' Pad[',\ + mm2mils100(MntXFR), \ + mm2mils100(MntYFR - MntFHeight/2 + MntFWidth/2), \ + mm2mils100(MntXFR), \ + mm2mils100(MntYFR + MntFHeight/2 - MntFWidth/2), \ + mm2mils100(MntFWidth), \ + mm2mils100(Clearance), \ + mm2mils100(MntFWidth + MaskAdd), \ + '"10" "10" 0x0100]') + +print(' Pad[',\ + mm2mils100(MntXRL), \ + mm2mils100(MntYR - MntRHeight/2 + MntRWidth/2), \ + mm2mils100(MntXRL), \ + mm2mils100(MntYR + MntRHeight/2 - MntRWidth/2), \ + mm2mils100(MntRWidth), \ + mm2mils100(Clearance), \ + mm2mils100(MntRWidth + MaskAdd), \ + '"10" "10" 0x0100]') + +print(' Pad[',\ + mm2mils100(MntXRR), \ + mm2mils100(MntYR - MntRHeight/2 + MntRWidth/2), \ + mm2mils100(MntXRR), \ + mm2mils100(MntYR + MntRHeight/2 - MntRWidth/2), \ + mm2mils100(MntRWidth), \ + mm2mils100(Clearance), \ + mm2mils100(MntRWidth + MaskAdd), \ + '"10" "10" 0x0100]') + +# signal pads +for pin in range (1,9): + + myPinY = PinY + if pin == 2: + myPinY = PinY2 + elif (pin == 4 or pin == 6): + myPinY = PinY46 + else: + myPinY = PinY + + print(' Pad[',\ + mm2mils100(CDX + (6-pin) * PinSpacing), \ + mm2mils100(myPinY-(PinHeight/2)+(PinWidth/2)), \ + mm2mils100(CDX + (6-pin) * PinSpacing), \ + mm2mils100(myPinY+(PinHeight/2)-(PinWidth/2)), \ + mm2mils100(PinWidth), \ + mm2mils100(Clearance), \ + mm2mils100(PinWidth + MaskAdd), \ + '"pin%i"' % (pin), '"%i"' % (pin), '0x0100]') + +# card detect pad + print(' Pad[',\ + mm2mils100(CDX - CDHeight/2 + CDWidth/2), \ + mm2mils100(CDY), \ + mm2mils100(CDX + CDHeight/2 - CDWidth/2), \ + mm2mils100(CDY), \ + mm2mils100(CDHeight), \ + mm2mils100(Clearance), \ + mm2mils100(CDHeight + MaskAdd), \ + '"9" "9" 0x0100]') + +# keepout area +print(' ElementLine[', \ + mm2mils100(CDX - 2.10/2), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 4.37), \ + mm2mils100(CDX + 2.10/2), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 4.37), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(CDX + 2.10/2), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 2.30), \ + mm2mils100(CDX + 2.10/2), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 4.37), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(CDX - 2.10/2), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 2.30), \ + mm2mils100(CDX - 2.10/2), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 4.37), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(-14.00/2 + 0.75), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 2.30), \ + mm2mils100(CDX - 2.10/2), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 2.30), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(14.00/2 - 4.55), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 2.30), \ + mm2mils100(14.00/2 - 4.55), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(-14.00/2 + 0.75), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 2.30), \ + mm2mils100(-14.00/2 + 0.75), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(CDX + 2.10/2), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 2.30), \ + mm2mils100(14.00/2 - 4.55), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37 - 2.30), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(-14.00/2 + 0.75), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37), \ + mm2mils100(14.00/2 - 4.55), \ + mm2mils100(MntYFR - MntFHeight/2 - 7.37), \ + LineWidth, ']') + + +# silkscreen box +print(' ElementLine[', \ + mm2mils100(BoxX/2), \ + mm2mils100(0), \ + mm2mils100(BoxX/2), \ + mm2mils100(BoxYright), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(-BoxX/2), \ + mm2mils100(0), \ + mm2mils100(-BoxX/2), \ + mm2mils100(BoxYleft), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(-BoxX/2), \ + mm2mils100(0), \ + mm2mils100(+BoxX/2), \ + mm2mils100(0), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(+BoxX/2-2*ArcHeight), \ + mm2mils100(BoxYleft), \ + mm2mils100(+BoxX/2-2*ArcHeight), \ + mm2mils100(BoxYright), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(+BoxX/2-5), \ + mm2mils100(BoxYleft-1), \ + mm2mils100(+BoxX/2-5), \ + mm2mils100(BoxYright), \ + LineWidth, ']') + +print(' ElementLine[', \ + mm2mils100(+BoxX/2-5), \ + mm2mils100(BoxYright), \ + mm2mils100(+BoxX/2), \ + mm2mils100(BoxYright), \ + LineWidth, ']') + +print(' ElementArc[', \ + mm2mils100(-ArcOffset), \ + mm2mils100((BoxYleft*2-3.75)-ArcHeight), \ + mm2mils100(ArcWidth), \ + mm2mils100(ArcHeight), \ + 238, \ + 64, \ + LineWidth, ']') + +print(")") -- 2.30.2