// // file: QFN_HVQFN_32 // // date: 4-Feb-2012 Originally written for the CB_FAN card // // 15-Aug-2012 Copied from CB_FAN to CMX and make comsetic changes // // 22-Dec-2015 Bring over to the Hub design for the 320 MHz Clock Fanout // // 24-Jul-2016 Move to the new one file format for QFN files. // // 13-Sep-2016 Move the backside metal for the center thermal/gnd // pad from Breakout_2 to Sheet_Dielectric_1. // Handling of the backside metal is described in // the Hub trace routing details file. // // 10-Dec-2016 To the Pin/Pad Stack for the Center Thermal Pad Via // geometry add a 0.28 mm diameter flash on PREPREG_5 // to indicate the location of a Via that needs to be // Plugged from the Top. This works because in the Hub // design the QFN-32 package is only instanced on the // top side of the card. // // 13-Mar-2017 Change the Thermal/Ground via/pins so that // the SolderMask is relieved on the Bottom side // of the card. Recall that this Thermal via/pins // are Plugged from the Top side of the card. // // 21-Aug-2023 Bring this geometry from the Hub design to the // Disco design. Recall that this geometry makes // significant use of special layers. This use of // special layers is described in the "Hub trace // routing details file". Bring these notes over // to the Disco design. On Disco this geometry is // used for the Emergency Rescue uProcessor // LPC845M301JHI33 in the HVQFN33 package // which is 5 x 5 and has 32 (33) pins. // // // // Disco-Kraken Module HVQFN33 for the NXP LPC845M301JHI33 // // // This Geometry started out on the CB_Fan board. Then it was // slightly modified and used on the CMX board. // // Then this geometry was used on the Hub Module // for the MC100LVEP111 LVECL Fanout chip. // // Now a modified version of this geometry will be used // on the Disco Module for the LPC845 uprocessor. // // Detailed dimensions will be changed to match the // NXP HVQFN33 recommendations. // // See also: NXP AN-1902 "QFN SON Package Guidelines" // // Basic Design to fit the recommendations shown in the // LPC845M301JHI33 datasheet. // // // // From NXP LPC845 datasheet pages 85 & 92: // ------------------------------------------- // // The external dimensions of the Package are // 4.9 mm square minimum to 5.1 mm square maximum. // // Pad pitch is 0.5 mm // // PCB Pad Land recommendataion 0.27 mm x 0.85 mm // // Inner Edge to Inner Edge the pads are 4.25 mm apart // // Outer Edge to Outer Edge the pads are 5.95 mm apart // // ----> pad center to pad center is 5.10 mm // // // The Package Center pad aka Thermal pad is // 3.45 mm square minimum to 3.75 mm square maximum // // The PCB Center pad aka Thermal pad is 3.75 mm square // // The NXP layout has 4 thermal vias that are I believe // a 0.30 mm drill with perhaps a 0.60 plane relief. // The NXP layout does not give the XY coordinates // for these drills. // // The NXP layout shows 9 paste windows but does not // give dimensions or a percent of window opening. // // ----> From the above note that for the NXP layout // that the Inner Edge of the PCB Pin Pads is 0.25 mm // from the perimeter of the PCB Center Pad - rather tight. // // // // Thermal Pad Design in this Geometry: // ------------------------------------ // // The PCB Thermal Pad is 3.60 mm x 3.60 mm // // This is the middle of the range of the size of the // thermal pad on the package - not the maximum size // as NXP recommends. I'm making this reduction to get // more signal pad to thermal pad clearance on the pcb. // Other versions of the QFN-32 geometry and other // manufacturer recommendations use an even smaller // pcb thermal pad. // // There are 4 Thermal Vias spaced 0.70 mm in X and Y from 0,0 // // Other versions of the QFN-32 geom have used 9 thermal // vias but those goems were for much higher power parts. // NXP recommends 4 thermal vias, that's enough for this // low power part, and it provides the required good // electrical ground to the center thermal pad on the device. // // The 4 Thermal Vias are component pins: 33:36 // // The Solder Mask will be 3.70 mm x 3.70 mm centered on 0,0 // i.e. the Solder Mask is 0.05 mm bigger on all edges // // All of the Copper Breakout, Solder Mask, and Solder Stencil // (aka Paste Mask) information for the Thermal Pad is just // carried in the body of the geometry, i.e. it is not // associated with a given pin. // // The solder paste stencil has 9 windows: // // Each window is 0.90 mm x 0.90 mm ---> 0.81 mm sq // Thus the total window opening is 7.29 mm sq // The 3.60 mm x 3.60 mm thermal pad is 12.96 mm sq // // Thus the area of the window opening is 56% of the pcb pad area. // // The edge of the windows is relieved back 0.23 mm // from the edges of the pcb thermal pad. // // The solid bar between windows is 0.22 mm wide. // // // // Signal Pad Design in this Geometry: // ----------------------------------- // // The pcb signal pads are 0.28 mm x 0.86 mm // // The pad center to pad center spacing is 5.11 mm // // The 0.86 mm pad length with the 5.11 mm // pad center to pad center spacing results // in the NXP specified 4.25 mm distance // between the inner edges of the pads on // the opposite sides of the device. // // The Solder Mask opening is 0.38 mm x 0.98 mm centered on the pad // i.e. 0.05mm greater on all edges // // The Solder Stencil opening is 0.24 mm x 0.80 mm centered on the pad // --> 80% of the area of the pcb pad land // // // This HVQFN-32 Geometry has Pin #1 in the top lefthand corner. // // // // Special Considerations for Using this Geometry: // ----------------------------------------------- // // This geometry is only for use on the Top side of the pcb. // // This geometry uses a number of special layers: // // PrePreg_5 uses a 0.28 mm flash to indicate a Via // that is plugged from the Top side of the pcb. // // BREAKOUT_1 is used for the metal on the Top side // of the center Thermal pad. // // SHEET_DIELECTRIC_1 is used for the metal on the Bottom // side of the center Thermal pad. // // Solder_Masks separate solder_masks are used on the Top // and Bottom sides of the center Thermal pad. // // // // //---------------------------------------------------------------------------- // $abort_enable = @false; $$lock_windows(@on) ; $$snap_diagonal(@off) ; $$snap_orthogonal(@off) ; // //---------------------------------------------------------------------------- // // Pads with a long Vertical axis. $$lock_windows(@on); $$create_pin("HVQFN_32_Vert_Pad", @replace); $$page(0.0,0.0,0.0, @mm, 0.0, 0.0, [0.0, 0.0, 'PI$HVQFN_32_Vert_Pad']); $$point_mode(@vertex); $$polygon( "PAD_1", , [ 0.14, 0.43, -0.14, 0.43, -0.14, -0.43, 0.14, -0.43 ] ); $$polygon( "SOLDER_MASK_1", , [ 0.19, 0.48, -0.19, 0.48, -0.19, -0.48, 0.19, -0.48 ] ); $$polygon( "PASTE_MASK_1", , [ 0.12, 0.40, -0.12, 0.40, -0.12, -0.40, 0.12, -0.40 ] ); $$attribute( "TERMINAL_SURFACE_DEFINITION", ""); //---------------------------------------------------------------------------- // Pads with a long Horizontal axis. $$lock_windows(@on); $$create_pin("HVQFN_32_Horz_Pad", @replace); $$page(0.0,0.0,0.0, @mm, 0.0, 0.0, [0.0, 0.0, 'PI$HVQFN_32_Horz_Pad']); $$point_mode(@vertex); $$polygon( "PAD_1", , [ 0.43, 0.14, -0.43, 0.14, -0.43, -0.14, 0.43, -0.14 ] ); $$polygon( "SOLDER_MASK_1", , [ 0.48, 0.19, -0.48, 0.19, -0.48, -0.19, 0.48, -0.19 ] ); $$polygon( "PASTE_MASK_1", , [ 0.40, 0.12, -0.40, 0.12, -0.40, -0.12, 0.40, -0.12 ] ); $$attribute( "TERMINAL_SURFACE_DEFINITION", ""); //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // Through Hole Pin/Pad Stack for the 4 "Thermal Vias" // These are component pins 33 through 36. // // 0.30 mm finished hole diameter // 0.60 mm land pad // 0.85 mm plane relief // 0.28 mm PrePreg_5 flash to indicate a // via that is plugged from the Top // 0.55 mm SolderMask Relief on Side 2 // (the whole area where these via/pins // are used is relieved on Side 1) // // --> 0.275 mm clearance from edge of drill hole to Planes // // --> for 1.40 mm spacing there is a 0.55 mm wide neck // in the Ground web between drills // $$lock_windows(@on); $$create_pin( "hvqfn_32_thd_pin" ); $$page(0.0, 0.0, 0.0, @mm, 0.0, 0.0, [ 0.0, 0.0, 'PI$hvqfn_32_thd_pin' ] ); $$point_mode(@vertex); $$attribute( "TERMINAL_THRUHOLE_DEFINITION", ""); $$attribute( "TERMINAL_DRILL_SIZE", "", , @scale , , [ 0.30, 0.0 ]); $$circle( "SIGNAL", 0.0, 0.0, 0.60, 0.0 ); $$circle( "POWER", 0.0, 0.0, 0.85, 0.0 ); $$circle( "SOLDER_MASK_2", 0.0, 0.0, 0.55, 0.0 ); $$circle( "PREPREG_5", 0.0, 0.0, 0.28, 0.0 ); //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- $$lock_windows(@on) ; $$create_component("HVQFN_32", @replace); $$page( 0.0, 0.0, 0.0, @mm, 0.0, 0.0, [ 0.0, 0.0, 'CO$HVQFN_32' ]); $$point_mode(@vertex); $$attribute( "COMPONENT_LAYOUT_SURFACE", "both"); $$attribute( "COMPONENT_HEIGHT", "1.20", , @scale , , [0.0, 0.0] ); // // Component Placement Outline for the HVQFN-32 // $$initial([ -3.10, -3.10 ], , @nosnap ); $$terminal([ -3.10, 3.10 ] ); $$terminal([ 3.10, 3.10 ] ); $$terminal([ 3.10, -3.10 ] ); $$attribute( "COMPONENT_PLACEMENT_OUTLINE", "", @mark, @scale ); // Silkscreen: Horz Bot, Vert Right, Horz Top, Diag, Vert Left $$path( "SILKSCREEN", 0.20 , , [ -3.35, -3.35, 3.35, -3.35 ] ); $$path( "SILKSCREEN", 0.20 , , [ -3.35, 3.35, 3.35, 3.35 ] ); $$path( "SILKSCREEN", 0.20 , , [ -3.35, -3.35, -3.35, 3.35 ] ); $$path( "SILKSCREEN", 0.20 , , [ 3.35, -3.35, 3.35, 3.35 ] ); // Pin #1 Indicator: $$circle( "SILKSCREEN_1", -3.9, 3.9, 0.5, 0.20 ); $$circle( "SILKSCREEN_1", -3.9, 3.9, 1.0, 0.20 ); // // End of Silkscreen // // Reference Designator $$text( "SILKSCREEN", "^$ref", 0.0, 5.1, 2.0, @CC, 0, 0.7, 0.20, "std", "None", 0.0, 0.0 ); // Setup the Local Fiducial Marks //$$circle( "PAD_1", 0.00, 4.50, 1.0, 0.0); //$$circle( "SOLDER_MASK_1", 0.00, 4.50, 1.3, 0.0); //$$circle( "PAD_1", 0.00, -4.50, 1.0, 0.0); //$$circle( "SOLDER_MASK_1", 0.00, -4.50, 1.3, 0.0); // // Now place the center Thermal Pad // // - Copper on Breakout 1 on the Top Side // // - Copper on SHEET_DIELECTRIC_1 on the Bottom Side // // - Solder Mask Relief for this Thermal Pad // is used only on the Top Side // // - Paste Mask openings // $$polygon( "BREAKOUT_1", , [ -1.80, -1.80, 1.80, -1.80, 1.80, 1.80, -1.80, 1.80 ] ); $$polygon( "SOLDER_MASK_1", , [ -1.85, -1.85, 1.85, -1.85, 1.85, 1.85, -1.85, 1.85 ] ); $$polygon( "PASTE_MASK_1", , [ -1.57, 0.67, -0.67, 0.67, -0.67, 1.57, -1.57, 1.57 ] ); $$polygon( "PASTE_MASK_1", , [ -0.45, 0.67, 0.45, 0.67, 0.45, 1.57, -0.45, 1.57 ] ); $$polygon( "PASTE_MASK_1", , [ 0.67, 0.67, 1.57, 0.67, 1.57, 1.57, 0.67, 1.57 ] ); $$polygon( "PASTE_MASK_1", , [ -1.57, -0.45, -0.67, -0.45, -0.67, 0.45, -1.57, 0.45 ] ); $$polygon( "PASTE_MASK_1", , [ -0.45, -0.45, 0.45, -0.45, 0.45, 0.45, -0.45, 0.45 ] ); $$polygon( "PASTE_MASK_1", , [ 0.67, -0.45, 1.57, -0.45, 1.57, 0.45, 0.67, 0.45 ] ); $$polygon( "PASTE_MASK_1", , [ -1.57, -1.57, -0.67, -1.57, -0.67, -0.67, -1.57, -0.67 ] ); $$polygon( "PASTE_MASK_1", , [ -0.45, -1.57, 0.45, -1.57, 0.45, -0.67, -0.45, -0.67 ] ); $$polygon( "PASTE_MASK_1", , [ 0.67, -1.57, 1.57, -1.57, 1.57, -0.67, 0.67, -0.67 ] ); $$polygon( "SHEET_DIELECTRIC_1", , [ -1.10, -1.10, 1.10, -1.10, 1.10, 1.10, -1.10, 1.10 ] ); // Define the pins // Pads Along the Left-Hand Edge $$attribute( "COMPONENT_PIN_DEFINITION", "1", , @scale , , [ -2.555, 1.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "1, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "2", , @scale , , [ -2.555, 1.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "2, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "3", , @scale , , [ -2.555, 0.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "3, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "4", , @scale , , [ -2.555, 0.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "4, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "5", , @scale , , [ -2.555, -0.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "5, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "6", , @scale , , [ -2.555, -0.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "6, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "7", , @scale , , [ -2.555, -1.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "7, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "8", , @scale , , [ -2.555, -1.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "8, HVQFN_32_Horz_Pad"); // Pads Along the Bottom Edge $$attribute( "COMPONENT_PIN_DEFINITION", "9", , @scale , , [ -1.75, -2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "9, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "10", , @scale , , [ -1.25, -2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "10, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "11", , @scale , , [ -0.75, -2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "11, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "12", , @scale , , [ -0.25, -2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "12, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "13", , @scale , , [ 0.25, -2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "13, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "14", , @scale , , [ 0.75, -2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "14, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "15", , @scale , , [ 1.25, -2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "15, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "16", , @scale , , [ 1.75, -2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "16, HVQFN_32_Vert_Pad"); // Pads Along the Right-Hand Edge $$attribute( "COMPONENT_PIN_DEFINITION", "17", , @scale , , [ 2.555, -1.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "17, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "18", , @scale , , [ 2.555, -1.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "18, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "19", , @scale , , [ 2.555, -0.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "19, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "20", , @scale , , [ 2.555, -0.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "20, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "21", , @scale , , [ 2.555, 0.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "21, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "22", , @scale , , [ 2.555, 0.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "22, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "23", , @scale , , [ 2.555, 1.25 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "23, HVQFN_32_Horz_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "24", , @scale , , [ 2.555, 1.75 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "24, HVQFN_32_Horz_Pad"); // Pads Along the Top Edge $$attribute( "COMPONENT_PIN_DEFINITION", "25", , @scale , , [ 1.75, 2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "25, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "26", , @scale , , [ 1.25, 2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "26, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "27", , @scale , , [ 0.75, 2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "27, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "28", , @scale , , [ 0.25, 2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "28, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "29", , @scale , , [ -0.25, 2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "29, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "30", , @scale , , [ -0.75, 2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "30, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "31", , @scale , , [ -1.25, 2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "31, HVQFN_32_Vert_Pad"); $$attribute( "COMPONENT_PIN_DEFINITION", "32", , @scale , , [ -1.75, 2.555 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "32, HVQFN_32_Vert_Pad"); // Center Pad Array Thermal Pad Ground Connection $$attribute( "COMPONENT_PIN_DEFINITION", "33", , @scale , , [ -0.70, 0.70 ]); $$attribute( "COMPONENT_PIN_DEFINITION", "34", , @scale , , [ -0.70, -0.70 ]); $$attribute( "COMPONENT_PIN_DEFINITION", "35", , @scale , , [ 0.70, -0.70 ]); $$attribute( "COMPONENT_PIN_DEFINITION", "36", , @scale , , [ 0.70, 0.70 ]); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "33, hvqfn_32_thd_pin" ); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "34, hvqfn_32_thd_pin" ); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "35, hvqfn_32_thd_pin" ); $$attribute( "COMPONENT_PADSTACK_OVERRIDE", "36, hvqfn_32_thd_pin" ); //----------------------------------------------------------------------------