832b52b2fc109471927d648284804359a59c0c83
[hw/altusmetrum] / packages / RGZ0048A.py
1 #!/usr/bin/python2
2 # Copyright 2021 by Bdale Garbee <bdale@gag.com>.  GPLv3
3 #
4 # Emit PCB footprint for RGZ0048A package used by TI CC1310 with RGZT suffix 
5 #
6
7 # dimensions in mm from the ti/cc1310/cc1310.pdf datasheet
8
9 PinWidth = 0.24         
10 PinResist = 0.38                # width of gap in solder resist over pad
11 PinHeight = 0.6
12 PinSpacing = 0.50
13 Overall = 6.80
14 GndSquare = 5.15
15 GndSquareMask = 5.41
16 PasteSquare = 1.06              # paste spots over ground tab
17 PasteGrid = 1.26
18 ViaDrill = 0.254                # mfg spec is 0.2, >= 10 mil AC standard spec
19 ViaPadSize = 0.5
20 CoreViaSpacing = 1.26
21 SideViaSpacing = 1.065
22
23 import sys
24
25 # we're going to use the 1/100 of a mil fundamental unit form
26 def mm2mils100( mm ):
27         return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
28
29 print '# author: Bdale Garbee'
30 print '# email: bdale@gag.com'
31 print '# dist-license: GPL 3'
32 print '# use-license: unlimited'
33
34 print 'Element[0x0 "QFN48" "" "" 0 0 0 0 0 100 0x0]'
35 print "("
36
37 # pad under the chip, must be grounded
38 print '   Pad[',\
39         mm2mils100(0), \
40         mm2mils100(0), \
41         mm2mils100(0), \
42         mm2mils100(0), \
43         mm2mils100(GndSquare), \
44         0, \
45         mm2mils100(GndSquareMask), \
46         '"pin49" "49" "square,nopaste"]'
47
48 # vias in the ground pad under the chip
49 for viarow in range (-1,2):
50   # outer rows
51   print '   Pin[',\
52         mm2mils100(-CoreViaSpacing - SideViaSpacing), \
53         mm2mils100(viarow * CoreViaSpacing), \
54         mm2mils100(ViaPadSize), \
55         mm2mils100(ViaPadSize), \
56         0, \
57         mm2mils100(ViaDrill), \
58         '"pin49" "49" 0x0002]'
59
60   print '   Pin[',\
61         mm2mils100(CoreViaSpacing + SideViaSpacing), \
62         mm2mils100(viarow * CoreViaSpacing), \
63         mm2mils100(ViaPadSize), \
64         mm2mils100(ViaPadSize), \
65         0, \
66         mm2mils100(ViaDrill), \
67         '"pin49" "49" 0x0002]'
68
69   print '   Pin[',\
70         mm2mils100(viarow * CoreViaSpacing), \
71         mm2mils100(-CoreViaSpacing - SideViaSpacing), \
72         mm2mils100(ViaPadSize), \
73         mm2mils100(ViaPadSize), \
74         0, \
75         mm2mils100(ViaDrill), \
76         '"pin49" "49" 0x0002]'
77
78   print '   Pin[',\
79         mm2mils100(viarow * CoreViaSpacing), \
80         mm2mils100(CoreViaSpacing + SideViaSpacing), \
81         mm2mils100(ViaPadSize), \
82         mm2mils100(ViaPadSize), \
83         0, \
84         mm2mils100(ViaDrill), \
85         '"pin49" "49" 0x0002]'
86
87   # center array
88   for viacol in range (-1,2):
89     print '   Pin[',\
90         mm2mils100(viacol * CoreViaSpacing), \
91         mm2mils100(viarow * CoreViaSpacing), \
92         mm2mils100(ViaPadSize), \
93         mm2mils100(ViaPadSize), \
94         0, \
95         mm2mils100(ViaDrill), \
96         '"pin49" "49" 0x0002]'
97
98 # solder paste squares in a grid on central ground pad
99 for pasterow in range (-2, 2):
100   for pastecol in range (-2, 2):
101     print '   Pad[',\
102         mm2mils100(pastecol * PasteGrid + PasteGrid/2), \
103         mm2mils100(pasterow * PasteGrid + PasteGrid/2), \
104         mm2mils100(pastecol * PasteGrid + PasteGrid/2), \
105         mm2mils100(pasterow * PasteGrid + PasteGrid/2), \
106         mm2mils100((PasteSquare)), \
107         0, \
108         mm2mils100((PasteSquare)), \
109         '"pin49" "49" "square"]'
110
111 # pins
112 for pin in range (1,13):
113     print '   Pad[',\
114         mm2mils100(-3.25 + pin * PinSpacing), \
115         mm2mils100(-Overall/2 - PinHeight/2 + PinWidth/2), \
116         mm2mils100(-3.25 + pin * PinSpacing), \
117         mm2mils100(-Overall/2 + PinHeight/2 - PinWidth/2), \
118         mm2mils100(PinWidth), \
119         mm2mils100(PinSpacing - PinWidth), \
120         mm2mils100(PinResist), \
121         '"pin%i"' % (37-pin), '"%i"' % (37-pin), '"square"]'
122
123     print '   Pad[',\
124         mm2mils100(-3.25 + pin * PinSpacing), \
125         mm2mils100(+Overall/2 - PinHeight/2 + PinWidth/2), \
126         mm2mils100(-3.25 + pin * PinSpacing), \
127         mm2mils100(+Overall/2 + PinHeight/2 - PinWidth/2), \
128         mm2mils100(PinWidth), \
129         mm2mils100(PinSpacing - PinWidth), \
130         mm2mils100(PinResist), \
131         '"pin%i"' % pin, '"%i"' % pin, '"square"]'
132
133     print '   Pad[',\
134         mm2mils100(Overall/2 - PinHeight/2 + PinWidth/2), \
135         mm2mils100(-3.25 + pin * PinSpacing), \
136         mm2mils100(Overall/2 + PinHeight/2 - PinWidth/2), \
137         mm2mils100(-3.25 + pin * PinSpacing), \
138         mm2mils100(PinWidth), \
139         mm2mils100(PinSpacing - PinWidth), \
140         mm2mils100(PinResist), \
141         '"pin%i"' % (25-pin), '"%i"' % (25-pin), '"square"]'
142
143     print '   Pad[',\
144         mm2mils100(-Overall/2 - PinHeight/2 + PinWidth/2), \
145         mm2mils100(-3.25 + pin * PinSpacing), \
146         mm2mils100(-Overall/2 + PinHeight/2 - PinWidth/2), \
147         mm2mils100(-3.25 + pin * PinSpacing), \
148         mm2mils100(PinWidth), \
149         mm2mils100(PinSpacing - PinWidth), \
150         mm2mils100(PinResist), \
151         '"pin%i"' % (36+pin), '"%i"' % (36+pin), '"square"]'
152
153 print '   ElementArc[',\
154         mm2mils100(-3.6), \
155         mm2mils100(3.6), \
156         '500 500 0 360 1000 ]'
157 print ")"