add push-push microSD connector footprint
authorBdale Garbee <bdale@gag.com>
Fri, 3 Feb 2023 19:05:44 +0000 (12:05 -0700)
committerBdale Garbee <bdale@gag.com>
Fri, 3 Feb 2023 19:05:44 +0000 (12:05 -0700)
packages/Makefile
packages/microSDpush.py [new file with mode: 0755]

index 497e7fd02ce7955eb0429d8dd84eb6df46ea20e7..e96949733259f2d08d9e9a914d82c246edb46fca 100644 (file)
@@ -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 (executable)
index 0000000..c4a4de6
--- /dev/null
@@ -0,0 +1,242 @@
+#!/usr/bin/python3
+# Copyright 2023 by Bdale Garbee <bdale@gag.com>.  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(")")