2 # Copyright 2008 by Bdale Garbee <bdale@gag.com>. GPLv2
4 # Program to emit PCB footprint for QFN36 package used by TI CC1111
7 # dimensions in mm from the TI cc1111f32.pdf datasheet
9 PinResist = 0.381 # width of gap in solder resist over pad
14 CoreSquare = 3.7592 # resist gaps and paste spots over ground tab
19 # we're going to use the 1/100 of a mil fundamental unit form
21 return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 )
23 print('# author: Bdale Garbee')
24 print('# email: bdale@gag.com')
25 print('# dist-license: GPL 3')
26 print('# use-license: unlimited')
28 print('Element[0x0 "QFN36" "" "" 0 0 0 0 0 100 0x0]')
31 # pad under the chip, must be grounded
37 mm2mils100(GndSquare), \
40 '"pin37" "37" "square,nopaste"]')
42 # vias in the ground pad under the chip
43 for viarow in range (-1,2):
44 for viacol in range (-1,2):
46 mm2mils100(2 * viacol * CoreSquare / 5), \
47 mm2mils100(2 * viarow * CoreSquare / 5), \
52 '"pin37" "37" 0x0002]')
54 # break pad under chip into a grid to control the resist and paste masks
55 for viarow in range (-2, 3):
56 for viacol in range (-2, 3):
57 if (viarow in (-2, 0, 2)) and (viacol in (-2, 0, 2)):
58 # copper sub-square with resist over vias
60 mm2mils100(viacol * CoreSquare / 5), \
61 mm2mils100(viarow * CoreSquare / 5), \
62 mm2mils100(viacol * CoreSquare / 5), \
63 mm2mils100(viarow * CoreSquare / 5), \
64 mm2mils100((CoreSquare)/5), \
67 '"pin37" "37" "square,nopaste"]')
69 # copper sub-square without resist
71 mm2mils100(viacol * CoreSquare / 5), \
72 mm2mils100(viarow * CoreSquare / 5), \
73 mm2mils100(viacol * CoreSquare / 5), \
74 mm2mils100(viarow * CoreSquare / 5), \
75 mm2mils100((CoreSquare)/5), \
77 mm2mils100((CoreSquare)/5), \
78 '"pin37" "37" "square,nopaste"]')
79 # copper spot to control paste mask generation
81 mm2mils100(viacol * CoreSquare / 5), \
82 mm2mils100(viarow * CoreSquare / 5), \
83 mm2mils100(viacol * CoreSquare / 5), \
84 mm2mils100(viarow * CoreSquare / 5), \
87 mm2mils100((CoreSquare)/5), \
88 '"pin37" "37" "square"]')
91 for pin in range (1,10):
93 mm2mils100(-2.5 + pin * PinSpacing), \
94 mm2mils100(-Overall/2 + PinWidth/2), \
95 mm2mils100(-2.5 + pin * PinSpacing), \
96 mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \
97 mm2mils100(PinWidth), \
98 mm2mils100(PinSpacing - PinWidth), \
99 mm2mils100(PinResist), \
100 '"pin%i"' % (28-pin), '"%i"' % (28-pin), '"square"]')
103 mm2mils100(-2.5 + pin * PinSpacing), \
104 mm2mils100(+Overall/2 - PinHeight + PinWidth/2), \
105 mm2mils100(-2.5 + pin * PinSpacing), \
106 mm2mils100(+Overall/2 - PinWidth/2), \
107 mm2mils100(PinWidth), \
108 mm2mils100(PinSpacing - PinWidth), \
109 mm2mils100(PinResist), \
110 '"pin%i"' % pin, '"%i"' % pin, '"square"]')
113 mm2mils100(Overall/2 - PinHeight + PinWidth/2), \
114 mm2mils100(-2.5 + pin * PinSpacing), \
115 mm2mils100(Overall/2 - PinWidth/2), \
116 mm2mils100(-2.5 + pin * PinSpacing), \
117 mm2mils100(PinWidth), \
118 mm2mils100(PinSpacing - PinWidth), \
119 mm2mils100(PinResist), \
120 '"pin%i"' % (19-pin), '"%i"' % (19-pin), '"square"]')
123 mm2mils100(-Overall/2 + PinWidth/2), \
124 mm2mils100(-2.5 + pin * PinSpacing), \
125 mm2mils100(-Overall/2 + PinHeight - PinWidth/2), \
126 mm2mils100(-2.5 + pin * PinSpacing), \
127 mm2mils100(PinWidth), \
128 mm2mils100(PinSpacing - PinWidth), \
129 mm2mils100(PinResist), \
130 '"pin%i"' % (27+pin), '"%i"' % (27+pin), '"square"]')
132 print(' ElementArc[',\
135 '500 500 0 360 1000 ]')