From: Keith Packard Date: Fri, 28 Dec 2012 00:50:00 +0000 (-0800) Subject: Fix STM footprint to include TI-style pad with vias X-Git-Tag: fab-v0.1~19 X-Git-Url: https://git.gag.com/?p=hw%2Ftelegps;a=commitdiff_plain;h=575c88736837b769d00fdaf3130ab0ca4b95d387 Fix STM footprint to include TI-style pad with vias Signed-off-by: Keith Packard --- diff --git a/packages/footprint.5c b/packages/footprint.5c index 7d6fdcb..885c21a 100644 --- a/packages/footprint.5c +++ b/packages/footprint.5c @@ -41,13 +41,59 @@ namespace Footprint { printf (")\n"); } - public void pad_mm_clear(real center_x, - real center_y, - real width, - real height, - real clearance, - string name, - string num) + public void pad_mm_clear_mask_options(real center_x, + real center_y, + real width, + real height, + real clearance, + real mask, + string name, + string num, + string options) + { + real x1 = 0; + real y1 = 0; + real x2 = 0; + real y2 = 0; + real thickness = 0; + + if (width > height) { + thickness = height; + y1 = center_y; + x1 = center_x - (width - height) / 2; + y2 = center_y; + x2 = center_x + (width - height) / 2; + } else { + thickness = width; + x1 = center_x; + y1 = center_y - (height - width) / 2; + x2 = center_x; + y2 = center_y + (height - width) / 2; + } + + + printf (" Pad["); + printf (" %6d %6d %6d %6d", + mm2mils100(x1), + mm2mils100(y1), + mm2mils100(x2), + mm2mils100(y2)); + printf (" %6d %6d %6d", + mm2mils100(thickness), + mm2mils100(clearance), + mm2mils100(mask)); + printf (" \"%s\" \"%s\" \"square%s%s\"]\n", + name, num, options == "" ? "" : ",", options); + } + + public void pad_mm_clear_options(real center_x, + real center_y, + real width, + real height, + real clearance, + string name, + string num, + string options) { real x1 = 0; real y1 = 0; @@ -81,8 +127,26 @@ namespace Footprint { mm2mils100(thickness), mm2mils100(clearance), mm2mils100(mask)); - printf (" \"%s\" \"%s\" \"square\"]\n", - name, num); + printf (" \"%s\" \"%s\" \"square%s%s\"]\n", + name, num, options == "" ? "" : ",", options); + } + + public void pad_mm_clear(real center_x, + real center_y, + real width, + real height, + real clearance, + string name, + string num) + { + pad_mm_clear_options(center_x, + center_y, + width, + height, + clearance, + name, + num, + ""); } public void pad_mm(real center_x, @@ -122,6 +186,26 @@ namespace Footprint { } + public void pin_mm_clear_mask(real x, real y, + real drill, real copper, real clearance, real mask, + string name, string number) + { + real thickness = drill + copper * 2; + printf(" Pin["); + printf(" %6d %6d", + mm2mils100(x), + mm2mils100(y)); + printf(" %6d %6d %6d %6d", + mm2mils100(thickness), + mm2mils100(clearance), + mm2mils100(mask), + mm2mils100(drill)); + printf (" \"%s\" \"%s\"", + name, number); + printf (" \"\"]\n"); + + } + public void pin_mm(real x, real y, real drill, real copper, string name, string number) diff --git a/packages/ufqfpn48.5c b/packages/ufqfpn48.5c index 8657dd0..082bfd0 100644 --- a/packages/ufqfpn48.5c +++ b/packages/ufqfpn48.5c @@ -21,6 +21,7 @@ import Footprint; real pad_width = 0.55; real pad_height = 0.30; real pad_spacing = 0.50; +real pad_clearance = 8 / 1000 * 25.4; /* 2 mil gap for solder mask */ real pad_x_off = 6.20 / 2; real pad_y_off = 6.20 / 2; @@ -61,42 +62,83 @@ line(-package_width/2 + dot_off, -package_height/2 + dot_off, for (pad = 0; pad < num_pad; pad++) { /* left side (1-12) */ - pad_mm(-pad_x_off - pad_width / 2, - pad_off(pad), - pad_width, - pad_height, - sprintf("%d", pad + 1), - sprintf("%d", pad + 1)); + pad_mm_clear(-pad_x_off - pad_width / 2, + pad_off(pad), + pad_width, + pad_height, + pad_clearance, + sprintf("%d", pad + 1), + sprintf("%d", pad + 1)); /* bottom (13-24) */ - pad_mm(pad_off(pad), - pad_y_off + pad_width / 2, - pad_height, - pad_width, - sprintf("%d", pad + 13), - sprintf("%d", pad + 13)); + pad_mm_clear(pad_off(pad), + pad_y_off + pad_width / 2, + pad_height, + pad_width, + pad_clearance, + sprintf("%d", pad + 13), + sprintf("%d", pad + 13)); /* right side (25-36) */ - pad_mm(pad_x_off + pad_width / 2, - -pad_off(pad), - pad_width, - pad_height, - sprintf("%d", pad + 25), - sprintf("%d", pad + 25)); + pad_mm_clear(pad_x_off + pad_width / 2, + -pad_off(pad), + pad_width, + pad_height, + pad_clearance, + sprintf("%d", pad + 25), + sprintf("%d", pad + 25)); /* top (37-48) */ - pad_mm(-pad_off(pad), - -pad_y_off - pad_width / 2, - pad_height, - pad_width, - sprintf("%d", pad + 37), - sprintf("%d", pad + 37)); + pad_mm_clear(-pad_off(pad), + -pad_y_off - pad_width / 2, + pad_height, + pad_width, + pad_clearance, + sprintf("%d", pad + 37), + sprintf("%d", pad + 37)); } -pad_mm(0, 0, center_width, center_height, "GND", "GND"); +int pad_blocks = 3; + +real block_width = center_width / pad_blocks; +real block_height = center_height / pad_blocks; + +real block_x(int x) = (x - (pad_blocks - 1)/2) * block_width; +real block_y(int y) = (y - (pad_blocks - 1)/2) * block_height; + +bool via_block(int x, int y) { + return (x & 1) == 0 && (y & 1) == 0; +} + +real via_hole = 15/1000 * 25.4; /* 15 mil drill */ +real via_copper = 3.5/1000 * 25.4; /* 7 mil anulus */ + +for (int pad_y = 0; pad_y < pad_blocks; pad_y++) { + for (int pad_x = 0; pad_x < pad_blocks; pad_x++) + if (via_block(pad_x, pad_y)) { + pin_mm_clear_mask(block_x(pad_x), block_y(pad_y), + via_hole, via_copper * 2, pad_clearance, 0, + "GND", "GND"); + pad_mm_clear_mask_options(block_x(pad_x), block_y(pad_y), + block_width, block_height, + pad_clearance, 0, + "GND", "GND","nopaste"); + } else { + /* full square of metal */ + pad_mm_clear_options(block_x(pad_x), block_y(pad_y), + block_width, block_height, + 0, + "GND", "GND","nopaste"); + /* 1/4 full of solder paste */ + pad_mm_clear_options(block_x(pad_x), block_y(pad_y), + block_width/2, block_height/2, + 0, + "GND", "GND",""); + } +} element_end(); diff --git a/packages/ufqfpn48.fp b/packages/ufqfpn48.fp index 73d6a1d..678d927 100644 --- a/packages/ufqfpn48.fp +++ b/packages/ufqfpn48.fp @@ -13,53 +13,70 @@ Element ["" "ufqfpn-48" "" "" 0 0 0 0 0 100 ""] ElementLine[ 13780 13780 12205 13780 1000] ElementLine[ 13780 13780 13780 12205 1000] ElementLine[ -12598 -12598 -12598 -12598 1000] - Pad[ -13780 -10827 -12795 -10827 1181 2362 2362 "1" "1" "square"] - Pad[ -10827 12795 -10827 13780 1181 2362 2362 "13" "13" "square"] - Pad[ 12795 10827 13780 10827 1181 2362 2362 "25" "25" "square"] - Pad[ 10827 -13780 10827 -12795 1181 2362 2362 "37" "37" "square"] - Pad[ -13780 -8858 -12795 -8858 1181 2362 2362 "2" "2" "square"] - Pad[ -8858 12795 -8858 13780 1181 2362 2362 "14" "14" "square"] - Pad[ 12795 8858 13780 8858 1181 2362 2362 "26" "26" "square"] - Pad[ 8858 -13780 8858 -12795 1181 2362 2362 "38" "38" "square"] - Pad[ -13780 -6890 -12795 -6890 1181 2362 2362 "3" "3" "square"] - Pad[ -6890 12795 -6890 13780 1181 2362 2362 "15" "15" "square"] - Pad[ 12795 6890 13780 6890 1181 2362 2362 "27" "27" "square"] - Pad[ 6890 -13780 6890 -12795 1181 2362 2362 "39" "39" "square"] - Pad[ -13780 -4921 -12795 -4921 1181 2362 2362 "4" "4" "square"] - Pad[ -4921 12795 -4921 13780 1181 2362 2362 "16" "16" "square"] - Pad[ 12795 4921 13780 4921 1181 2362 2362 "28" "28" "square"] - Pad[ 4921 -13780 4921 -12795 1181 2362 2362 "40" "40" "square"] - Pad[ -13780 -2953 -12795 -2953 1181 2362 2362 "5" "5" "square"] - Pad[ -2953 12795 -2953 13780 1181 2362 2362 "17" "17" "square"] - Pad[ 12795 2953 13780 2953 1181 2362 2362 "29" "29" "square"] - Pad[ 2953 -13780 2953 -12795 1181 2362 2362 "41" "41" "square"] - Pad[ -13780 -984 -12795 -984 1181 2362 2362 "6" "6" "square"] - Pad[ -984 12795 -984 13780 1181 2362 2362 "18" "18" "square"] - Pad[ 12795 984 13780 984 1181 2362 2362 "30" "30" "square"] - Pad[ 984 -13780 984 -12795 1181 2362 2362 "42" "42" "square"] - Pad[ -13780 984 -12795 984 1181 2362 2362 "7" "7" "square"] - Pad[ 984 12795 984 13780 1181 2362 2362 "19" "19" "square"] - Pad[ 12795 -984 13780 -984 1181 2362 2362 "31" "31" "square"] - Pad[ -984 -13780 -984 -12795 1181 2362 2362 "43" "43" "square"] - Pad[ -13780 2953 -12795 2953 1181 2362 2362 "8" "8" "square"] - Pad[ 2953 12795 2953 13780 1181 2362 2362 "20" "20" "square"] - Pad[ 12795 -2953 13780 -2953 1181 2362 2362 "32" "32" "square"] - Pad[ -2953 -13780 -2953 -12795 1181 2362 2362 "44" "44" "square"] - Pad[ -13780 4921 -12795 4921 1181 2362 2362 "9" "9" "square"] - Pad[ 4921 12795 4921 13780 1181 2362 2362 "21" "21" "square"] - Pad[ 12795 -4921 13780 -4921 1181 2362 2362 "33" "33" "square"] - Pad[ -4921 -13780 -4921 -12795 1181 2362 2362 "45" "45" "square"] - Pad[ -13780 6890 -12795 6890 1181 2362 2362 "10" "10" "square"] - Pad[ 6890 12795 6890 13780 1181 2362 2362 "22" "22" "square"] - Pad[ 12795 -6890 13780 -6890 1181 2362 2362 "34" "34" "square"] - Pad[ -6890 -13780 -6890 -12795 1181 2362 2362 "46" "46" "square"] - Pad[ -13780 8858 -12795 8858 1181 2362 2362 "11" "11" "square"] - Pad[ 8858 12795 8858 13780 1181 2362 2362 "23" "23" "square"] - Pad[ 12795 -8858 13780 -8858 1181 2362 2362 "35" "35" "square"] - Pad[ -8858 -13780 -8858 -12795 1181 2362 2362 "47" "47" "square"] - Pad[ -13780 10827 -12795 10827 1181 2362 2362 "12" "12" "square"] - Pad[ 10827 12795 10827 13780 1181 2362 2362 "24" "24" "square"] - Pad[ 12795 -10827 13780 -10827 1181 2362 2362 "36" "36" "square"] - Pad[ -10827 -13780 -10827 -12795 1181 2362 2362 "48" "48" "square"] - Pad[ 0 0 0 0 22047 2362 23228 "GND" "GND" "square"] + Pad[ -13780 -10827 -12795 -10827 1181 800 1581 "1" "1" "square"] + Pad[ -10827 12795 -10827 13780 1181 800 1581 "13" "13" "square"] + Pad[ 12795 10827 13780 10827 1181 800 1581 "25" "25" "square"] + Pad[ 10827 -13780 10827 -12795 1181 800 1581 "37" "37" "square"] + Pad[ -13780 -8858 -12795 -8858 1181 800 1581 "2" "2" "square"] + Pad[ -8858 12795 -8858 13780 1181 800 1581 "14" "14" "square"] + Pad[ 12795 8858 13780 8858 1181 800 1581 "26" "26" "square"] + Pad[ 8858 -13780 8858 -12795 1181 800 1581 "38" "38" "square"] + Pad[ -13780 -6890 -12795 -6890 1181 800 1581 "3" "3" "square"] + Pad[ -6890 12795 -6890 13780 1181 800 1581 "15" "15" "square"] + Pad[ 12795 6890 13780 6890 1181 800 1581 "27" "27" "square"] + Pad[ 6890 -13780 6890 -12795 1181 800 1581 "39" "39" "square"] + Pad[ -13780 -4921 -12795 -4921 1181 800 1581 "4" "4" "square"] + Pad[ -4921 12795 -4921 13780 1181 800 1581 "16" "16" "square"] + Pad[ 12795 4921 13780 4921 1181 800 1581 "28" "28" "square"] + Pad[ 4921 -13780 4921 -12795 1181 800 1581 "40" "40" "square"] + Pad[ -13780 -2953 -12795 -2953 1181 800 1581 "5" "5" "square"] + Pad[ -2953 12795 -2953 13780 1181 800 1581 "17" "17" "square"] + Pad[ 12795 2953 13780 2953 1181 800 1581 "29" "29" "square"] + Pad[ 2953 -13780 2953 -12795 1181 800 1581 "41" "41" "square"] + Pad[ -13780 -984 -12795 -984 1181 800 1581 "6" "6" "square"] + Pad[ -984 12795 -984 13780 1181 800 1581 "18" "18" "square"] + Pad[ 12795 984 13780 984 1181 800 1581 "30" "30" "square"] + Pad[ 984 -13780 984 -12795 1181 800 1581 "42" "42" "square"] + Pad[ -13780 984 -12795 984 1181 800 1581 "7" "7" "square"] + Pad[ 984 12795 984 13780 1181 800 1581 "19" "19" "square"] + Pad[ 12795 -984 13780 -984 1181 800 1581 "31" "31" "square"] + Pad[ -984 -13780 -984 -12795 1181 800 1581 "43" "43" "square"] + Pad[ -13780 2953 -12795 2953 1181 800 1581 "8" "8" "square"] + Pad[ 2953 12795 2953 13780 1181 800 1581 "20" "20" "square"] + Pad[ 12795 -2953 13780 -2953 1181 800 1581 "32" "32" "square"] + Pad[ -2953 -13780 -2953 -12795 1181 800 1581 "44" "44" "square"] + Pad[ -13780 4921 -12795 4921 1181 800 1581 "9" "9" "square"] + Pad[ 4921 12795 4921 13780 1181 800 1581 "21" "21" "square"] + Pad[ 12795 -4921 13780 -4921 1181 800 1581 "33" "33" "square"] + Pad[ -4921 -13780 -4921 -12795 1181 800 1581 "45" "45" "square"] + Pad[ -13780 6890 -12795 6890 1181 800 1581 "10" "10" "square"] + Pad[ 6890 12795 6890 13780 1181 800 1581 "22" "22" "square"] + Pad[ 12795 -6890 13780 -6890 1181 800 1581 "34" "34" "square"] + Pad[ -6890 -13780 -6890 -12795 1181 800 1581 "46" "46" "square"] + Pad[ -13780 8858 -12795 8858 1181 800 1581 "11" "11" "square"] + Pad[ 8858 12795 8858 13780 1181 800 1581 "23" "23" "square"] + Pad[ 12795 -8858 13780 -8858 1181 800 1581 "35" "35" "square"] + Pad[ -8858 -13780 -8858 -12795 1181 800 1581 "47" "47" "square"] + Pad[ -13780 10827 -12795 10827 1181 800 1581 "12" "12" "square"] + Pad[ 10827 12795 10827 13780 1181 800 1581 "24" "24" "square"] + Pad[ 12795 -10827 13780 -10827 1181 800 1581 "36" "36" "square"] + Pad[ -10827 -13780 -10827 -12795 1181 800 1581 "48" "48" "square"] + Pin[ -7349 -7349 2900 800 0 1500 "GND" "GND" ""] + Pad[ -7349 -7349 -7349 -7349 7349 800 0 "GND" "GND" "square,nopaste"] + Pad[ 0 -7349 0 -7349 7349 0 7349 "GND" "GND" "square,nopaste"] + Pad[ 0 -7349 0 -7349 3675 0 3675 "GND" "GND" "square"] + Pin[ 7349 -7349 2900 800 0 1500 "GND" "GND" ""] + Pad[ 7349 -7349 7349 -7349 7349 800 0 "GND" "GND" "square,nopaste"] + Pad[ -7349 0 -7349 0 7349 0 7349 "GND" "GND" "square,nopaste"] + Pad[ -7349 0 -7349 0 3675 0 3675 "GND" "GND" "square"] + Pad[ 0 0 0 0 7349 0 7349 "GND" "GND" "square,nopaste"] + Pad[ 0 0 0 0 3675 0 3675 "GND" "GND" "square"] + Pad[ 7349 0 7349 0 7349 0 7349 "GND" "GND" "square,nopaste"] + Pad[ 7349 0 7349 0 3675 0 3675 "GND" "GND" "square"] + Pin[ -7349 7349 2900 800 0 1500 "GND" "GND" ""] + Pad[ -7349 7349 -7349 7349 7349 800 0 "GND" "GND" "square,nopaste"] + Pad[ 0 7349 0 7349 7349 0 7349 "GND" "GND" "square,nopaste"] + Pad[ 0 7349 0 7349 3675 0 3675 "GND" "GND" "square"] + Pin[ 7349 7349 2900 800 0 1500 "GND" "GND" ""] + Pad[ 7349 7349 7349 7349 7349 800 0 "GND" "GND" "square,nopaste"] ) diff --git a/symbols/STM32L151-48.sym b/symbols/STM32L151-48.sym index 6fbbe7f..cca5186 100644 --- a/symbols/STM32L151-48.sym +++ b/symbols/STM32L151-48.sym @@ -16,9 +16,9 @@ description=STM32L151CBT T -6400 -1300 8 10 0 0 0 0 1 numslots=1 T -6400 -1600 8 10 0 0 0 0 1 -device=STM32L151CBT -T 2750 17450 9 30 1 0 0 0 1 -STM32L151CBT +device=IC +T 2750 17450 9 30 1 1 0 0 1 +value=STM32L151CBT T -6400 -1000 8 10 0 0 0 0 1 slot=1 T 400 20100 8 10 1 1 0 0 1 @@ -540,3 +540,14 @@ pinseq=21 T 4400 20400 5 10 0 1 270 2 1 pintype=pwr } +P 5000 0 5000 400 1 0 0 +{ +T 5000 0 5 10 0 0 0 0 1 +pintype=unknown +T 5000 455 5 10 1 1 90 0 1 +pinlabel=GND +T 4950 405 5 10 1 1 90 6 1 +pinnumber=GND +T 5000 0 5 10 0 0 0 0 1 +pinseq=0 +}