5b61bf14c56326b04b15f1bf478411aca2e0c5dd
[hw/bdale] / pkg / newlib / hirose / ZX62-B-5PA.py
1 #!/usr/bin/python
2 # Copyright 2011 by Bdale Garbee <bdale@gag.com>.  GPLv2
3 #
4 # Program to emit PCB footprint for
5 #   Hirose Micro USB B SMD R/A connector ZX62-B-5PA(11), DigiKey H11634CT-ND
6 #
7
8 # dimensions in mm from e24200011.pdf page 4
9 PinWidth = 0.4
10 PinHeight = 1.35
11 PinSpacing = 0.65
12
13 TabWidth = 2.1
14 TabHeight = 1.6
15 TabInner = 2.05
16
17 PadWidth = 1.9
18 PadHeight = 1.9
19 PadInner = 0.25
20 PadCenter = 3.35
21
22 WingWidth = 1.8
23 WingHeight = 1.9
24 WingInner = 3.1
25
26 # draw a box around the actual connector, and a line a the PCB edge
27 # connector is 7.9mm wide and 5.6mm deep overall, but wants to stick over
28 # the board edge due to flare around opening.  The flare should be only 0.6mm
29 # deep, but the recommendation is that the connector face be 1.3mm out...
30 BoxHeight = 6.1
31 BoxWidth = 7.9
32 EdgeHeight = 4.8
33 EdgeWidth = 2 * (WingInner + WingWidth)
34
35 import sys
36
37 # we're going to use the 1/100 of a mil fundamental unit form
38 def mm2mils100( mm ):
39         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
40
41 print '# author: Bdale Garbee'
42 print '# email: bdale@gag.com'
43 print '# dist-license: GPL 2'
44 print '# use-license: unlimited'
45
46 print 'Element[0x0 "USBmicroB" "" "" 0 0 -10161 -12011 0 100 0x0]'
47 print "("
48 print '   Pad[', \
49         mm2mils100(0), \
50         mm2mils100(PinWidth/2), \
51         mm2mils100(0), \
52         mm2mils100(PinHeight - PinWidth/2), \
53         mm2mils100(PinWidth), \
54         mm2mils100(PinSpacing - PinWidth), \
55         mm2mils100(PinWidth + 0.2), \
56         '"D+" "3" 0x0100]'
57
58 print '   Pad[', \
59         mm2mils100(-PinSpacing), \
60         mm2mils100(PinWidth/2), \
61         mm2mils100(-PinSpacing), \
62         mm2mils100(PinHeight - PinWidth/2), \
63         mm2mils100(PinWidth), \
64         mm2mils100(PinSpacing - PinWidth), \
65         mm2mils100(PinWidth + 0.2), \
66         '"D-" "2" 0x0100]'
67
68 print '   Pad[', \
69         mm2mils100(PinSpacing), \
70         mm2mils100(PinWidth/2), \
71         mm2mils100(PinSpacing), \
72         mm2mils100(PinHeight - PinWidth/2), \
73         mm2mils100(PinWidth), \
74         mm2mils100(PinSpacing - PinWidth), \
75         mm2mils100(PinWidth + 0.2), \
76         '"HS" "4" 0x0100]'
77
78 print '   Pad[', \
79         mm2mils100(-PinSpacing*2), \
80         mm2mils100(PinWidth/2), \
81         mm2mils100(-PinSpacing*2), \
82         mm2mils100(PinHeight - PinWidth/2), \
83         mm2mils100(PinWidth), \
84         mm2mils100(PinSpacing - PinWidth), \
85         mm2mils100(PinWidth + 0.2), \
86         '"VBUS" "1" 0x0100]'
87
88 print '   Pad[', \
89         mm2mils100(PinSpacing*2), \
90         mm2mils100(PinWidth/2), \
91         mm2mils100(PinSpacing*2), \
92         mm2mils100(PinHeight - PinWidth/2), \
93         mm2mils100(PinWidth), \
94         mm2mils100(PinSpacing - PinWidth), \
95         mm2mils100(PinWidth + 0.2), \
96         '"GND" "5" 0x0100]'
97
98 # the two ground / mounting tabs in line with signal pins
99
100 print '   Pad[', \
101         mm2mils100(TabInner + TabHeight/2), \
102         mm2mils100(TabHeight/2), \
103         mm2mils100(TabInner + TabWidth - TabHeight/2), \
104         mm2mils100(TabHeight/2), \
105         mm2mils100(TabHeight), \
106         mm2mils100(PinSpacing - PinWidth), \
107         mm2mils100(TabHeight + 0.2), \
108         '"tab1" "G" 0x0100]'
109
110 print '   Pad[', \
111         mm2mils100(-TabInner - TabHeight/2), \
112         mm2mils100(TabHeight/2), \
113         mm2mils100(-TabInner - TabWidth + TabHeight/2), \
114         mm2mils100(TabHeight/2), \
115         mm2mils100(TabHeight), \
116         mm2mils100(PinSpacing - PinWidth), \
117         mm2mils100(TabHeight + 0.2), \
118         '"tab2" "G" 0x0100]'
119
120 # the two ground / mounting tabs near the center of area
121
122 print '   Pad[', \
123         mm2mils100(PadInner + PadHeight/2), \
124         mm2mils100(PadCenter), \
125         mm2mils100(PadInner + PadWidth - PadHeight/2), \
126         mm2mils100(PadCenter), \
127         mm2mils100(PadHeight), \
128         mm2mils100(PinSpacing - PinWidth), \
129         mm2mils100(PadHeight + 0.2), \
130         '"tab3" "G" 0x0100]'
131
132 print '   Pad[', \
133         mm2mils100(-PadInner - PadHeight/2), \
134         mm2mils100(PadCenter), \
135         mm2mils100(-PadInner - PadWidth + PadHeight/2), \
136         mm2mils100(PadCenter), \
137         mm2mils100(PadHeight), \
138         mm2mils100(PinSpacing - PinWidth), \
139         mm2mils100(PadHeight + 0.2), \
140         '"tab4" "G" 0x0100]'
141
142 # the two "wing tab" ground / mounting pads on the sides
143
144 print '   Pad[', \
145         mm2mils100(WingInner + WingWidth/2), \
146         mm2mils100(PadCenter - WingHeight/2 + WingWidth/2), \
147         mm2mils100(WingInner + WingWidth/2), \
148         mm2mils100(PadCenter + WingHeight/2 - WingWidth/2), \
149         mm2mils100(WingWidth), \
150         mm2mils100(PinSpacing - PinWidth), \
151         mm2mils100(WingWidth + 0.2), \
152         '"tab5" "G" 0x0100]'
153
154 print '   Pad[', \
155         mm2mils100(-WingInner - WingWidth/2), \
156         mm2mils100(PadCenter - WingHeight/2 + WingWidth/2), \
157         mm2mils100(-WingInner - WingWidth/2), \
158         mm2mils100(PadCenter + WingHeight/2 - WingWidth/2), \
159         mm2mils100(WingWidth), \
160         mm2mils100(PinSpacing - PinWidth), \
161         mm2mils100(WingWidth + 0.2), \
162         '"tab6" "G" 0x0100]'
163
164 # box around actual connector size, with line at PCB edge
165
166 print '   ElementLine[',\
167         mm2mils100(-BoxWidth/2), \
168         mm2mils100(0), \
169         mm2mils100(-BoxWidth/2), \
170         mm2mils100(BoxHeight), \
171         '1000 ]'
172
173 print '   ElementLine[',\
174         mm2mils100(BoxWidth/2), \
175         mm2mils100(0), \
176         mm2mils100(BoxWidth/2), \
177         mm2mils100(BoxHeight), \
178         '1000 ]'
179
180 print '   ElementLine[',\
181         mm2mils100(-BoxWidth/2), \
182         mm2mils100(0), \
183         mm2mils100(BoxWidth/2), \
184         mm2mils100(0), \
185         '1000 ]'
186
187 print '   ElementLine[',\
188         mm2mils100(-BoxWidth/2), \
189         mm2mils100(BoxHeight), \
190         mm2mils100(BoxWidth/2), \
191         mm2mils100(BoxHeight), \
192         '1000 ]'
193
194 print '   ElementLine[',\
195         mm2mils100(-EdgeWidth/2), \
196         mm2mils100(EdgeHeight), \
197         mm2mils100(-BoxWidth/2), \
198         mm2mils100(EdgeHeight), \
199         '1000 ]'
200
201 print '   ElementLine[',\
202         mm2mils100(BoxWidth/2), \
203         mm2mils100(EdgeHeight), \
204         mm2mils100(EdgeWidth/2), \
205         mm2mils100(EdgeHeight), \
206         '1000 ]'
207
208 print ")"