[Update_XML] Now you can check PCB and schematic parity
Related to #297
This commit is contained in:
parent
6eaa09beea
commit
58b7958899
|
|
@ -42,6 +42,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
- Render_3D: Options to disable some technical layers and control the
|
||||
silkscreen clipping. (#282)
|
||||
- Internal BoM: Now you can aggregate components using CSV files. (See #248)
|
||||
- Now you can check PCB and schematic parity using the `update_xml` preflight
|
||||
(See #297)
|
||||
|
||||
### Fixed
|
||||
- Problems to compress netlists. (#287)
|
||||
|
|
|
|||
11
README.md
11
README.md
|
|
@ -398,6 +398,8 @@ This section is used to specify tasks that will be executed before generating an
|
|||
- `text`: [string=''] Text to insert instead of the tag.
|
||||
- `run_drc`: [boolean=false] Runs the DRC (Distance Rules Check). To ensure we have a valid PCB.
|
||||
The report file name is controlled by the global output pattern (%i=drc %x=txt).
|
||||
Note that the KiCad 6 *Test for parity between PCB and schematic* option is not supported.
|
||||
If you need to check the parity use the `update_xml` preflight.
|
||||
- `run_erc`: [boolean=false] Runs the ERC (Electrical Rules Check). To ensure the schematic is electrically correct.
|
||||
The report file name is controlled by the global output pattern (%i=erc %x=txt).
|
||||
- `sch_replace`: [dict] Replaces tags in the schematic. I.e. to insert the git hash or last revision date.
|
||||
|
|
@ -437,9 +439,16 @@ This section is used to specify tasks that will be executed before generating an
|
|||
- `update_qr`: [boolean=false] Update the QR codes.
|
||||
Complements the `qr_lib` output.
|
||||
The KiCad 6 files and the KiCad 5 PCB needs manual update, generating a new library isn't enough.
|
||||
- `update_xml`: [boolean=false] Update the XML version of the BoM (Bill of Materials).
|
||||
- `update_xml`: [boolean=false|dict] Update the XML version of the BoM (Bill of Materials).
|
||||
To ensure our generated BoM is up to date.
|
||||
Note that this isn't needed when using the internal BoM generator (`bom`).
|
||||
You can compare the PCB and schematic netlists using it.
|
||||
* Valid keys:
|
||||
- **`check_pcb_parity`**: [boolean=false] Check if the PCB and Schematic are synchronized.
|
||||
This is equivalent to the *Test for parity between PCB and schematic* of the DRC dialog.
|
||||
Only available for KiCad 6.
|
||||
- `as_warnings`: [boolean=false] Inform the problems as warnings and don't stop.
|
||||
- `enabled`: [boolean=true] Enable the update. This is the replacement for the boolean value.
|
||||
|
||||
|
||||
Here is an example of a *preflight* section:
|
||||
|
|
|
|||
|
|
@ -53,6 +53,8 @@ preflight:
|
|||
after: '>'
|
||||
# [boolean=false] Runs the DRC (Distance Rules Check). To ensure we have a valid PCB.
|
||||
# The report file name is controlled by the global output pattern (%i=drc %x=txt).
|
||||
# Note that the KiCad 6 *Test for parity between PCB and schematic* option is not supported.
|
||||
# If you need to check the parity use the `update_xml` preflight.
|
||||
run_drc: true
|
||||
# [boolean=false] Runs the ERC (Electrical Rules Check). To ensure the schematic is electrically correct.
|
||||
# The report file name is controlled by the global output pattern (%i=erc %x=txt).
|
||||
|
|
@ -80,9 +82,10 @@ preflight:
|
|||
# Complements the `qr_lib` output.
|
||||
# The KiCad 6 files and the KiCad 5 PCB needs manual update, generating a new library isn't enough.
|
||||
update_qr: true
|
||||
# [boolean=false] Update the XML version of the BoM (Bill of Materials).
|
||||
# [boolean=false|dict] Update the XML version of the BoM (Bill of Materials).
|
||||
# To ensure our generated BoM is up to date.
|
||||
# Note that this isn't needed when using the internal BoM generator (`bom`).
|
||||
# You can compare the PCB and schematic netlists using it.
|
||||
update_xml: true
|
||||
|
||||
outputs:
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ KICOST_ERROR = 26
|
|||
MISSING_WKS = 27
|
||||
MISSING_FILES = 28
|
||||
DIFF_TOO_BIG = 29
|
||||
NETLIST_DIFF = 30
|
||||
error_level_to_name = ['NONE',
|
||||
'INTERNAL_ERROR',
|
||||
'WRONG_ARGUMENTS',
|
||||
|
|
@ -70,6 +71,7 @@ error_level_to_name = ['NONE',
|
|||
'MISSING_WKS',
|
||||
'MISSING_FILES',
|
||||
'DIFF_TOO_BIG',
|
||||
'NETLIST_DIFF',
|
||||
]
|
||||
KICOST_SUBMODULE = '../submodules/KiCost/src/kicost'
|
||||
EXAMPLE_CFG = 'example_template.kibot.yaml'
|
||||
|
|
@ -233,6 +235,7 @@ W_3DRESVER = '(W097) '
|
|||
W_DOWN3D = '(W098) '
|
||||
W_MISSREF = '(W099) '
|
||||
W_COPYOVER = '(W100) '
|
||||
W_PARITY = '(W101) '
|
||||
# Somehow arbitrary, the colors are real, but can be different
|
||||
PCB_MAT_COLORS = {'fr1': "937042", 'fr2': "949d70", 'fr3': "adacb4", 'fr4': "332B16", 'fr5': "6cc290"}
|
||||
PCB_FINISH_COLORS = {'hal': "8b898c", 'hasl': "8b898c", 'imag': "8b898c", 'enig': "cfb96e", 'enepig': "cfb96e",
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@ logger = get_logger(__name__)
|
|||
@pre_class
|
||||
class Run_DRC(BasePreFlight): # noqa: F821
|
||||
""" [boolean=false] Runs the DRC (Distance Rules Check). To ensure we have a valid PCB.
|
||||
The report file name is controlled by the global output pattern (%i=drc %x=txt) """
|
||||
The report file name is controlled by the global output pattern (%i=drc %x=txt).
|
||||
Note that the KiCad 6 *Test for parity between PCB and schematic* option is not supported.
|
||||
If you need to check the parity use the `update_xml` preflight """
|
||||
def __init__(self, name, value):
|
||||
super().__init__(name, value)
|
||||
if not isinstance(value, bool):
|
||||
|
|
|
|||
|
|
@ -12,32 +12,157 @@ Dependencies:
|
|||
"""
|
||||
import os
|
||||
from sys import exit
|
||||
from .macros import macros, pre_class # noqa: F401
|
||||
import xml.etree.ElementTree as ET
|
||||
from .macros import macros, document, pre_class # noqa: F401
|
||||
from .error import KiPlotConfigurationError
|
||||
from .gs import GS
|
||||
from .kiplot import exec_with_retry, add_extra_options
|
||||
from .misc import BOM_ERROR
|
||||
from .kiplot import exec_with_retry, add_extra_options, load_board
|
||||
from .misc import BOM_ERROR, NETLIST_DIFF, W_PARITY, MISSING_TOOL
|
||||
from .log import get_logger
|
||||
from .optionable import Optionable
|
||||
import pcbnew
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class Update_XMLOptions(Optionable):
|
||||
""" Reference sorting options """
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
with document:
|
||||
self.enabled = True
|
||||
""" Enable the update. This is the replacement for the boolean value """
|
||||
self.check_pcb_parity = False
|
||||
""" *Check if the PCB and Schematic are synchronized.
|
||||
This is equivalent to the *Test for parity between PCB and schematic* of the DRC dialog.
|
||||
Only available for KiCad 6 """
|
||||
self.as_warnings = False
|
||||
""" Inform the problems as warnings and don't stop """
|
||||
|
||||
|
||||
@pre_class
|
||||
class Update_XML(BasePreFlight): # noqa: F821
|
||||
""" [boolean=false] Update the XML version of the BoM (Bill of Materials).
|
||||
""" [boolean=false|dict] Update the XML version of the BoM (Bill of Materials).
|
||||
To ensure our generated BoM is up to date.
|
||||
Note that this isn't needed when using the internal BoM generator (`bom`) """
|
||||
Note that this isn't needed when using the internal BoM generator (`bom`).
|
||||
You can compare the PCB and schematic netlists using it """
|
||||
def __init__(self, name, value):
|
||||
super().__init__(name, value)
|
||||
if not isinstance(value, bool):
|
||||
raise KiPlotConfigurationError('must be boolean')
|
||||
self._enabled = value
|
||||
self._check_pcb_parity = False
|
||||
if isinstance(value, bool):
|
||||
self._enabled = value
|
||||
elif isinstance(value, dict):
|
||||
f = Update_XMLOptions()
|
||||
f.set_tree(value)
|
||||
f.config(self)
|
||||
self._enabled = f.enabled
|
||||
self._check_pcb_parity = f.check_pcb_parity
|
||||
self.options = f
|
||||
self._pcb_related = True
|
||||
self._sch_related = True
|
||||
|
||||
@classmethod
|
||||
def get_doc(cls):
|
||||
return cls.__doc__, Update_XMLOptions
|
||||
|
||||
def get_targets(self):
|
||||
""" Returns a list of targets generated by this preflight """
|
||||
return [GS.sch_no_ext+'.xml']
|
||||
|
||||
def check_components(self, comps, errors):
|
||||
found_comps = set()
|
||||
for m in GS.get_modules():
|
||||
ref = m.GetReference()
|
||||
found_comps.add(ref)
|
||||
if ref not in comps:
|
||||
errors.append('{} found in PCB, but not in schematic'.format(ref))
|
||||
continue
|
||||
sch_fp = comps[ref]
|
||||
pcb_fp = m.GetFPIDAsString()
|
||||
if sch_fp != pcb_fp:
|
||||
errors.append('{} footprint mismatch (PCB: {} vs schematic: {})'.format(ref, pcb_fp, sch_fp))
|
||||
for ref in set(comps.keys()).difference(found_comps):
|
||||
errors.append('{} found in schematic, but not in PCB'.format(ref))
|
||||
|
||||
def check_nets(self, net_names, net_nodes, errors):
|
||||
# Total count
|
||||
con = GS.board.GetConnectivity()
|
||||
pcb_net_count = con.GetNetCount()-1 # Removing the bogus net 0
|
||||
sch_net_count = len(net_names)
|
||||
if pcb_net_count != sch_net_count:
|
||||
errors.append('Net count mismatch (PCB {} vs schematic {})'.format(pcb_net_count, sch_net_count))
|
||||
net_info = GS.board.GetNetInfo()
|
||||
# Names and connection
|
||||
for n in net_info.NetsByNetcode():
|
||||
if not n:
|
||||
# Bogus net code 0
|
||||
continue
|
||||
if n not in net_names:
|
||||
errors.append('PCB net code {} not in schematic'.format(n))
|
||||
continue
|
||||
net = net_info.GetNetItem(n)
|
||||
net_name = net.GetNetname()
|
||||
sch_name = net_names[n]
|
||||
if net_name != sch_name:
|
||||
errors.append('PCB net code {} name mismatch ({} vs {})'.format(n, net_name, sch_name))
|
||||
sch_nodes = net_nodes[n]
|
||||
pcb_nodes = {pad.GetParent().GetReference()+' pin '+pad.GetNumber()
|
||||
for pad in con.GetNetItems(n, [pcbnew.PCB_PAD_T])}
|
||||
dif = pcb_nodes-sch_nodes
|
||||
if dif:
|
||||
errors.append('PCB net code {} extra connection/s: {}'.format(n, ','.join(list(dif))))
|
||||
dif = sch_nodes-pcb_nodes
|
||||
if dif:
|
||||
errors.append('PCB net code {} missing connection/s: {}'.format(n, ','.join(list(dif))))
|
||||
|
||||
def check_pcb_parity(self):
|
||||
if GS.ki5:
|
||||
logger.error('PCB vs schematic parity only available for KiCad 6')
|
||||
exit(MISSING_TOOL)
|
||||
fname = GS.sch_no_ext+'.xml'
|
||||
logger.debug('Loading XML: '+fname)
|
||||
try:
|
||||
tree = ET.parse(fname)
|
||||
except Exception as e:
|
||||
raise KiPlotConfigurationError('Errors parsing {}\n{}'.format(fname, e))
|
||||
root = tree.getroot()
|
||||
if root.tag != 'export':
|
||||
raise KiPlotConfigurationError("{} isn't a valid netlist".format(fname))
|
||||
# Check version? root.attrib.get('version')
|
||||
components = root.find('components')
|
||||
comps = {}
|
||||
if components is not None:
|
||||
for c in components.iter('comp'):
|
||||
ref = c.attrib.get('ref')
|
||||
fp = c.find('footprint')
|
||||
fp = fp.text if fp is not None else ''
|
||||
logger.debugl(2, '- {}: {}'.format(ref, fp))
|
||||
comps[ref] = fp
|
||||
netlist = root.find('nets')
|
||||
net_names = {}
|
||||
net_nodes = {}
|
||||
if netlist is not None:
|
||||
for n in netlist.iter('net'):
|
||||
code = int(n.get('code'))
|
||||
net_names[code] = n.get('name')
|
||||
net_nodes[code] = {node.get('ref')+' pin '+node.get('pin') for node in n.iter('node')}
|
||||
# Check with the PCB
|
||||
errors = []
|
||||
load_board()
|
||||
# Check components
|
||||
self.check_components(comps, errors)
|
||||
# Check the nets
|
||||
self.check_nets(net_names, net_nodes, errors)
|
||||
# Report errors
|
||||
if errors:
|
||||
if self.options.as_warnings:
|
||||
for e in errors:
|
||||
logger.warning(W_PARITY+e)
|
||||
else:
|
||||
for e in errors:
|
||||
logger.error(e)
|
||||
exit(NETLIST_DIFF)
|
||||
|
||||
def run(self):
|
||||
command = self.ensure_tool('KiAuto')
|
||||
out_dir = self.expand_dirname(GS.out_dir)
|
||||
|
|
@ -59,3 +184,5 @@ class Update_XML(BasePreFlight): # noqa: F821
|
|||
video_name = os.path.join(self.expand_dirname(GS.out_dir), 'bom_xml_eeschema_screencast.ogv')
|
||||
if os.path.isfile(video_name):
|
||||
os.remove(video_name)
|
||||
if self._check_pcb_parity:
|
||||
self.check_pcb_parity()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,231 @@
|
|||
(kicad_pcb (version 20211014) (generator pcbnew)
|
||||
|
||||
(general
|
||||
(thickness 1.6)
|
||||
)
|
||||
|
||||
(paper "A4")
|
||||
(layers
|
||||
(0 "F.Cu" signal)
|
||||
(31 "B.Cu" signal)
|
||||
(32 "B.Adhes" user "B.Adhesive")
|
||||
(33 "F.Adhes" user "F.Adhesive")
|
||||
(34 "B.Paste" user)
|
||||
(35 "F.Paste" user)
|
||||
(36 "B.SilkS" user "B.Silkscreen")
|
||||
(37 "F.SilkS" user "F.Silkscreen")
|
||||
(38 "B.Mask" user)
|
||||
(39 "F.Mask" user)
|
||||
(40 "Dwgs.User" user "User.Drawings")
|
||||
(41 "Cmts.User" user "User.Comments")
|
||||
(42 "Eco1.User" user "User.Eco1")
|
||||
(43 "Eco2.User" user "User.Eco2")
|
||||
(44 "Edge.Cuts" user)
|
||||
(45 "Margin" user)
|
||||
(46 "B.CrtYd" user "B.Courtyard")
|
||||
(47 "F.CrtYd" user "F.Courtyard")
|
||||
(48 "B.Fab" user)
|
||||
(49 "F.Fab" user)
|
||||
)
|
||||
|
||||
(setup
|
||||
(pad_to_mask_clearance 0)
|
||||
(aux_axis_origin 148.4 80.2)
|
||||
(pcbplotparams
|
||||
(layerselection 0x00010fc_ffffffff)
|
||||
(disableapertmacros false)
|
||||
(usegerberextensions false)
|
||||
(usegerberattributes false)
|
||||
(usegerberadvancedattributes false)
|
||||
(creategerberjobfile false)
|
||||
(svguseinch false)
|
||||
(svgprecision 6)
|
||||
(excludeedgelayer true)
|
||||
(plotframeref false)
|
||||
(viasonmask false)
|
||||
(mode 1)
|
||||
(useauxorigin false)
|
||||
(hpglpennumber 1)
|
||||
(hpglpenspeed 20)
|
||||
(hpglpendiameter 15.000000)
|
||||
(dxfpolygonmode true)
|
||||
(dxfimperialunits true)
|
||||
(dxfusepcbnewfont true)
|
||||
(psnegative false)
|
||||
(psa4output false)
|
||||
(plotreference true)
|
||||
(plotvalue true)
|
||||
(plotinvisibletext false)
|
||||
(sketchpadsonfab false)
|
||||
(subtractmaskfromsilk false)
|
||||
(outputformat 1)
|
||||
(mirror false)
|
||||
(drillshape 1)
|
||||
(scaleselection 1)
|
||||
(outputdirectory "")
|
||||
)
|
||||
)
|
||||
|
||||
(net 0 "")
|
||||
(net 1 "GND")
|
||||
(net 2 "Net-(C1-Pad1)")
|
||||
(net 3 "VCC")
|
||||
|
||||
(footprint "Capacitor_SMD:C_0805_2012Metric" (layer "F.Cu")
|
||||
(tedit 5B36C52B) (tstamp 00000000-0000-0000-0000-00005ebea01d)
|
||||
(at 146.3 78.6)
|
||||
(descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
|
||||
(tags "capacitor")
|
||||
(path "/00000000-0000-0000-0000-00005ebe91ac")
|
||||
(attr smd)
|
||||
(fp_text reference "C1" (at 0 -1.65) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp c974f755-f11c-4e72-9337-9b1b03ad46d6)
|
||||
)
|
||||
(fp_text value "1uF" (at 0 1.65) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 2b79ad18-d7d7-43df-ab38-e75b2da12556)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
|
||||
(effects (font (size 0.5 0.5) (thickness 0.08)))
|
||||
(tstamp 5db96da7-af8d-43d8-8dc7-a398bfc8659a)
|
||||
)
|
||||
(fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer "F.SilkS") (width 0.12) (tstamp 3076b8ca-409a-4abb-8543-19f45b2d32e7))
|
||||
(fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer "F.SilkS") (width 0.12) (tstamp a32b7c78-669e-4058-9e8f-159773d391d1))
|
||||
(fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp 5298dbf1-ff20-463f-b22f-955b234f027b))
|
||||
(fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 5ee42af7-ef65-46ec-93e1-21c0e6077de0))
|
||||
(fp_line (start 1.68 0.95) (end -1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 9aaa51e5-eb42-4e37-9164-e5b31a4cd652))
|
||||
(fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp e610961e-a821-4b86-8c7d-d4cb27796910))
|
||||
(fp_line (start -1 0.6) (end -1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 1ffd0374-60f5-4975-8863-7ed9f29dac0e))
|
||||
(fp_line (start 1 -0.6) (end 1 0.6) (layer "F.Fab") (width 0.1) (tstamp 26a053d6-55aa-4839-adb7-568fd5c066bb))
|
||||
(fp_line (start -1 -0.6) (end 1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 8367eaee-e0ca-41eb-bc30-e532a8b59fdd))
|
||||
(fp_line (start 1 0.6) (end -1 0.6) (layer "F.Fab") (width 0.1) (tstamp e3a76526-d318-4ed9-8120-844abbdc3456))
|
||||
(pad "1" smd roundrect locked (at -0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
|
||||
(net 2 "Net-(C1-Pad1)") (tstamp 34fb9d00-02b1-48b3-a790-0112e6a08449))
|
||||
(pad "2" smd roundrect locked (at 0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
|
||||
(net 1 "GND") (tstamp 0336c0d4-c4f4-4020-8380-287f839c852a))
|
||||
(model "${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.step"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu")
|
||||
(tedit 5B36C52B) (tstamp 00000000-0000-0000-0000-00005ebea02e)
|
||||
(at 146.3 81.55 180)
|
||||
(descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
|
||||
(tags "resistor")
|
||||
(path "/00000000-0000-0000-0000-00005ebe8a2e")
|
||||
(attr smd)
|
||||
(fp_text reference "R1" (at 0 -1.65) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 7ef0f81b-f6e6-4f07-b717-38c4b1e50a5e)
|
||||
)
|
||||
(fp_text value "100" (at 0 1.65) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 8cd4eec9-ceb5-4b8f-83f2-9a146ee7ddd5)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
|
||||
(effects (font (size 0.5 0.5) (thickness 0.08)))
|
||||
(tstamp 93acb41a-3723-4469-9dee-a34acc325774)
|
||||
)
|
||||
(fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer "F.SilkS") (width 0.12) (tstamp 39441d2f-6110-4320-92bb-88f09b0de90b))
|
||||
(fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer "F.SilkS") (width 0.12) (tstamp ae28541a-0239-4867-9639-a73e46808278))
|
||||
(fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 752a50bd-195a-4ad5-acdb-d18c11a301e4))
|
||||
(fp_line (start 1.68 0.95) (end -1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 757c5363-13ba-436b-9db8-e5dc02596d27))
|
||||
(fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp 91e75b42-fb6a-4a6b-be78-4013b6183b9a))
|
||||
(fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp c76bc75f-8181-4476-9973-7173e45c68ed))
|
||||
(fp_line (start -1 -0.6) (end 1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 337d7915-43e4-4835-8aab-ff527c0de866))
|
||||
(fp_line (start 1 0.6) (end -1 0.6) (layer "F.Fab") (width 0.1) (tstamp 656d7de6-1e65-4eb7-8002-7e680bef80b9))
|
||||
(fp_line (start 1 -0.6) (end 1 0.6) (layer "F.Fab") (width 0.1) (tstamp ba9a410d-1c13-461f-b6a8-eeb7c4c46e58))
|
||||
(fp_line (start -1 0.6) (end -1 -0.6) (layer "F.Fab") (width 0.1) (tstamp fe5b7a7b-9594-494a-8fe7-df5ac5e9fd07))
|
||||
(pad "1" smd roundrect locked (at -0.9375 0 180) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
|
||||
(net 3 "VCC") (tstamp ee158b8c-0101-4c4c-b5ce-76e87c497fb9))
|
||||
(pad "2" smd roundrect locked (at 0.9375 0 180) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
|
||||
(net 2 "Net-(C1-Pad1)") (tstamp b67e7460-96bc-4aa0-8593-880eb3320d89))
|
||||
(model "${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metrico.step"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu")
|
||||
(tedit 5B36C52B) (tstamp 00000000-0000-0000-0000-00005ebea03f)
|
||||
(at 150.71 78.6 180)
|
||||
(descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
|
||||
(tags "resistor")
|
||||
(path "/00000000-0000-0000-0000-00005ebe8e9e")
|
||||
(attr smd)
|
||||
(fp_text reference "R2" (at 0 -1.65) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 9d088aec-c53e-413e-8715-779a6ee7e407)
|
||||
)
|
||||
(fp_text value "200" (at 0 1.65) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp abf3504c-c638-4bb0-8898-7b38d0241a11)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
|
||||
(effects (font (size 0.5 0.5) (thickness 0.08)))
|
||||
(tstamp 730e1bed-bd81-4343-85e9-17d6a47cb046)
|
||||
)
|
||||
(fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer "F.SilkS") (width 0.12) (tstamp 7613df36-4992-4dd5-b97e-1f17e43e73c6))
|
||||
(fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer "F.SilkS") (width 0.12) (tstamp b6f74bca-cdeb-4109-905d-6a81777da69b))
|
||||
(fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp 0e6314c1-5679-49cb-898a-296f9477855a))
|
||||
(fp_line (start 1.68 0.95) (end -1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 434bf54a-a88a-45dc-a569-a0a5b81a7096))
|
||||
(fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp ea59c7f6-51a1-4630-b89e-075386e527c9))
|
||||
(fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp ee5f10ba-08e8-4cb5-8185-dae7f54c20a3))
|
||||
(fp_line (start -1 0.6) (end -1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 5c2f40eb-308c-4cc2-9669-44b6645a7910))
|
||||
(fp_line (start -1 -0.6) (end 1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 608be37a-af03-4e73-9e8e-c1bb3353eaf4))
|
||||
(fp_line (start 1 -0.6) (end 1 0.6) (layer "F.Fab") (width 0.1) (tstamp a384a468-0937-4800-9a3b-e63b6186898c))
|
||||
(fp_line (start 1 0.6) (end -1 0.6) (layer "F.Fab") (width 0.1) (tstamp dc5732f3-4764-4a19-a8e3-24308ca8b363))
|
||||
(pad "1" smd roundrect locked (at -0.9375 0 180) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
|
||||
(net 2 "Net-(C1-Pad1)") (tstamp 55440b89-8f8a-483a-9b2b-9ccc95708f75))
|
||||
(pad "2" smd roundrect locked (at 0.9375 0 180) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
|
||||
(net 1 "GND") (tstamp 3d8a4e48-dfd4-4c64-8dd3-885d6a7ed460))
|
||||
(model "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_0805_2012Metric.step"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(footprint "Fiducial:Fiducial_0.5mm_Mask1.5mm" (layer "F.Cu")
|
||||
(tedit 5C18D139) (tstamp 8f72dcc2-f1da-44e8-b5c2-75c243ce8c64)
|
||||
(at 151.49 82.61)
|
||||
(descr "Circular Fiducial, 0.5mm bare copper, 1.5mm soldermask opening")
|
||||
(tags "fiducial")
|
||||
(attr smd)
|
||||
(fp_text reference "F1" (at -2.01 0.02) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 0f744c1d-9b8e-4589-a3b9-64c4394aa382)
|
||||
)
|
||||
(fp_text value "Fiducial_0.5mm_Mask1.5mm" (at 0 1.7145) (layer "F.Fab") hide
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp d7adc8d6-5699-4906-b02c-51dcbe8f1263)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
|
||||
(effects (font (size 0.2 0.2) (thickness 0.04)))
|
||||
(tstamp fee24d08-b944-4719-940b-5f0252b08a7d)
|
||||
)
|
||||
(fp_circle (center 0 0) (end 1 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp 1e6365f0-f6d5-4748-b97b-31a779d65060))
|
||||
(fp_circle (center 0 0) (end 0.75 0) (layer "F.Fab") (width 0.1) (fill none) (tstamp 80ff894e-6850-45a2-b181-026db3f9fcee))
|
||||
(pad "" smd circle (at 0 0) (size 0.5 0.5) (layers "F.Cu" "F.Mask")
|
||||
(solder_mask_margin 0.5) (clearance 0.5) (tstamp 1dd739b1-51b1-449f-b842-9ba7b75a8664))
|
||||
)
|
||||
|
||||
(gr_line (start 153 84) (end 153 76) (layer "Edge.Cuts") (width 0.05) (tstamp 00000000-0000-0000-0000-00005ebea29b))
|
||||
(gr_line (start 144 76) (end 144 84) (layer "Edge.Cuts") (width 0.05) (tstamp bb3326cd-028c-43fb-af47-5975412a67c7))
|
||||
(gr_line (start 153 76) (end 144 76) (layer "Edge.Cuts") (width 0.05) (tstamp d534140b-6f16-4b83-8893-ef4b026f6ec9))
|
||||
(gr_line (start 144 84) (end 153 84) (layer "Edge.Cuts") (width 0.05) (tstamp ea655683-6135-4d3f-a322-1186e1a703b2))
|
||||
|
||||
(segment (start 147.2375 78.6) (end 149.7725 78.6) (width 0.25) (layer "F.Cu") (net 1) (tstamp 4ebf58f7-8428-4480-b240-bb7d3c895103))
|
||||
(segment (start 150.62249 77.57499) (end 151.161973 78.114473) (width 0.25) (layer "F.Cu") (net 2) (tstamp 4ed009e2-b8f5-47d8-ba45-e73cbf2524c2))
|
||||
(segment (start 145.3625 78.6) (end 145.3625 79.3) (width 0.25) (layer "F.Cu") (net 2) (tstamp 5505e502-12b2-42b0-9e88-71997ebbcbde))
|
||||
(segment (start 151.161973 78.114473) (end 151.6475 78.6) (width 0.25) (layer "F.Cu") (net 2) (tstamp 5e3899fa-1efc-49c7-bd03-0723e6564f66))
|
||||
(segment (start 145.3625 78.6) (end 146.38751 77.57499) (width 0.25) (layer "F.Cu") (net 2) (tstamp 88b2a9f5-ec07-44cc-be7d-6243af8d21a7))
|
||||
(segment (start 145.3625 79.3) (end 145.3625 81.55) (width 0.25) (layer "F.Cu") (net 2) (tstamp a49ce2ce-5d29-415b-a41f-07567cbabb0f))
|
||||
(segment (start 146.38751 77.57499) (end 150.62249 77.57499) (width 0.25) (layer "F.Cu") (net 2) (tstamp fd90cb38-571b-4f7c-8630-139c123989e3))
|
||||
|
||||
)
|
||||
|
|
@ -0,0 +1,515 @@
|
|||
(kicad_sch (version 20211123) (generator eeschema)
|
||||
|
||||
(uuid e6521bef-4109-48f7-8b88-4121b0468927)
|
||||
|
||||
(paper "A4")
|
||||
|
||||
(title_block
|
||||
(title "BoM Test")
|
||||
(date "13/07/2020")
|
||||
(rev "r1")
|
||||
(company "INTI-CMNB")
|
||||
)
|
||||
|
||||
(lib_symbols
|
||||
(symbol "Device:C" (pin_numbers hide) (pin_names (offset 0.254)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "C" (id 0) (at 0.635 2.54 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Value" "C" (id 1) (at 0.635 -2.54 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0.9652 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "cap capacitor" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Unpolarized capacitor" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "C_*" (id 6) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "C_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -2.032 -0.762)
|
||||
(xy 2.032 -0.762)
|
||||
)
|
||||
(stroke (width 0.508) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -2.032 0.762)
|
||||
(xy 2.032 0.762)
|
||||
)
|
||||
(stroke (width 0.508) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "C_1_1"
|
||||
(pin passive line (at 0 3.81 270) (length 2.794)
|
||||
(name "~" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 0 -3.81 90) (length 2.794)
|
||||
(name "~" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "Device:R" (pin_numbers hide) (pin_names (offset 0)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "R" (id 0) (at 2.032 0 90)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "R" (id 1) (at 0 0 90)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at -1.778 0 90)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "R res resistor" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Resistor" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "R_*" (id 6) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "R_0_1"
|
||||
(rectangle (start -1.016 -2.54) (end 1.016 2.54)
|
||||
(stroke (width 0.254) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "R_1_1"
|
||||
(pin passive line (at 0 3.81 270) (length 1.27)
|
||||
(name "~" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin passive line (at 0 -3.81 90) (length 1.27)
|
||||
(name "~" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "Mechanical:Fiducial" (in_bom yes) (on_board yes)
|
||||
(property "Reference" "FID" (id 0) (at 0 5.08 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "Fiducial" (id 1) (at 0 3.175 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "fiducial marker" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Fiducial Marker" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "Fiducial*" (id 6) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "Fiducial_0_1"
|
||||
(circle (center 0 0) (radius 1.27)
|
||||
(stroke (width 0.508) (type default) (color 0 0 0 0))
|
||||
(fill (type background))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "power:GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "#PWR" (id 0) (at 0 -6.35 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "GND" (id 1) (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "power-flag" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Power symbol creates a global label with name \"GND\" , ground" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "GND_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0)
|
||||
(xy 0 -1.27)
|
||||
(xy 1.27 -1.27)
|
||||
(xy 0 -2.54)
|
||||
(xy -1.27 -1.27)
|
||||
(xy 0 -1.27)
|
||||
)
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "GND_1_1"
|
||||
(pin power_in line (at 0 0 270) (length 0) hide
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "power:PWR_FLAG" (power) (pin_numbers hide) (pin_names (offset 0) hide) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "#FLG" (id 0) (at 0 1.905 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "PWR_FLAG" (id 1) (at 0 3.81 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "power-flag" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Special symbol for telling ERC where power comes from" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "PWR_FLAG_0_0"
|
||||
(pin power_out line (at 0 0 90) (length 0)
|
||||
(name "pwr" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
(symbol "PWR_FLAG_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0)
|
||||
(xy 0 1.27)
|
||||
(xy -1.016 1.905)
|
||||
(xy 0 2.54)
|
||||
(xy 1.016 1.905)
|
||||
(xy 0 1.27)
|
||||
)
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "power:VCC" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "#PWR" (id 0) (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "VCC" (id 1) (at 0 3.81 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "power-flag" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Power symbol creates a global label with name \"VCC\"" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "VCC_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -0.762 1.27)
|
||||
(xy 0 2.54)
|
||||
)
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0)
|
||||
(xy 0 2.54)
|
||||
)
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 2.54)
|
||||
(xy 0.762 1.27)
|
||||
)
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "VCC_1_1"
|
||||
(pin power_in line (at 0 0 90) (length 0) hide
|
||||
(name "VCC" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(junction (at 88.9 50.8) (diameter 0) (color 0 0 0 0)
|
||||
(uuid a9ec539a-d80d-40cc-803c-12b6adefe42a)
|
||||
)
|
||||
|
||||
(wire (pts (xy 114.3 74.93) (xy 114.3 77.47))
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(uuid 2bf3f24b-fd30-41a7-a274-9b519491916b)
|
||||
)
|
||||
(wire (pts (xy 81.28 49.53) (xy 81.28 50.8))
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(uuid 34871042-9d5c-4e29-abdd-a168368c3c22)
|
||||
)
|
||||
(wire (pts (xy 88.9 52.07) (xy 88.9 50.8))
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(uuid 4d609e7c-74c9-4ae9-a26d-946ff00c167d)
|
||||
)
|
||||
(wire (pts (xy 88.9 59.69) (xy 88.9 66.04))
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(uuid 6199bec7-e7eb-4ae0-b9ec-c563e157d635)
|
||||
)
|
||||
(wire (pts (xy 88.9 76.2) (xy 88.9 73.66))
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(uuid 786b6072-5772-4bc1-8eeb-6c4e19f2a91b)
|
||||
)
|
||||
(wire (pts (xy 99.06 76.2) (xy 99.06 73.66))
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(uuid 9a9f2d82-f64d-4264-8bec-c182528fc4de)
|
||||
)
|
||||
(wire (pts (xy 88.9 50.8) (xy 88.9 49.53))
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(uuid c264c438-a475-4ad4-9915-0f1e6ecf3053)
|
||||
)
|
||||
(wire (pts (xy 81.28 50.8) (xy 88.9 50.8))
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(uuid ef1b4b98-541b-4673-a04f-2043250fc40a)
|
||||
)
|
||||
(wire (pts (xy 99.06 66.04) (xy 99.06 62.23))
|
||||
(stroke (width 0) (type default) (color 0 0 0 0))
|
||||
(uuid f144a97d-c3f0-423f-b0a9-3f7dbc42478b)
|
||||
)
|
||||
|
||||
(symbol (lib_id "Device:R") (at 88.9 55.88 0) (unit 1)
|
||||
(in_bom yes) (on_board yes)
|
||||
(uuid 00000000-0000-0000-0000-00005ebe8a2e)
|
||||
(property "Reference" "R1" (id 0) (at 90.678 54.7116 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Value" "100" (id 1) (at 90.678 57.023 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (id 2) (at 87.122 55.88 90)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (id 3) (at 88.9 55.88 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(pin "1" (uuid 9dbd9e26-9782-45c4-9403-4d72b07f29de))
|
||||
(pin "2" (uuid 437250d9-eb22-42a7-a0ee-f2e6a9628e2b))
|
||||
)
|
||||
|
||||
(symbol (lib_id "Device:R") (at 88.9 69.85 0) (unit 1)
|
||||
(in_bom yes) (on_board yes)
|
||||
(uuid 00000000-0000-0000-0000-00005ebe8e9e)
|
||||
(property "Reference" "R2" (id 0) (at 90.678 68.6816 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Value" "200" (id 1) (at 90.678 70.993 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (id 2) (at 87.122 69.85 90)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (id 3) (at 88.9 69.85 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(pin "1" (uuid eda12c9f-b24f-4458-a3cc-61f318dc57fe))
|
||||
(pin "2" (uuid 004d701c-7e69-4a10-9c95-7de04fa2be20))
|
||||
)
|
||||
|
||||
(symbol (lib_id "Device:C") (at 99.06 69.85 0) (unit 1)
|
||||
(in_bom yes) (on_board yes)
|
||||
(uuid 00000000-0000-0000-0000-00005ebe91ac)
|
||||
(property "Reference" "C1" (id 0) (at 101.981 68.6816 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Value" "1uF" (id 1) (at 101.981 70.993 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Footprint" "Capacitor_SMD:C_0603_1608Metric" (id 2) (at 100.0252 73.66 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (id 3) (at 99.06 69.85 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(pin "1" (uuid a86ce70c-0b0b-4e00-81fd-fa720b16c5ec))
|
||||
(pin "2" (uuid f3fc3ce5-4efa-4006-8983-46e918c0de75))
|
||||
)
|
||||
|
||||
(symbol (lib_id "power:GND") (at 99.06 76.2 0) (unit 1)
|
||||
(in_bom yes) (on_board yes)
|
||||
(uuid 00000000-0000-0000-0000-00005ebe965a)
|
||||
(property "Reference" "#PWR03" (id 0) (at 99.06 82.55 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "GND" (id 1) (at 99.187 80.5942 0))
|
||||
(property "Footprint" "" (id 2) (at 99.06 76.2 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 99.06 76.2 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(pin "1" (uuid 607bd1dc-3a6b-4b00-8871-0e4f8cbd31b4))
|
||||
)
|
||||
|
||||
(symbol (lib_id "power:GND") (at 88.9 76.2 0) (unit 1)
|
||||
(in_bom yes) (on_board yes)
|
||||
(uuid 00000000-0000-0000-0000-00005ebe9830)
|
||||
(property "Reference" "#PWR02" (id 0) (at 88.9 82.55 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "GND" (id 1) (at 89.027 80.5942 0))
|
||||
(property "Footprint" "" (id 2) (at 88.9 76.2 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 88.9 76.2 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(pin "1" (uuid c02ea828-b111-4d1d-9474-98d811361c61))
|
||||
)
|
||||
|
||||
(symbol (lib_id "power:VCC") (at 88.9 49.53 0) (unit 1)
|
||||
(in_bom yes) (on_board yes)
|
||||
(uuid 00000000-0000-0000-0000-00005ebe99a0)
|
||||
(property "Reference" "#PWR01" (id 0) (at 88.9 53.34 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "VCC" (id 1) (at 89.3318 45.1358 0))
|
||||
(property "Footprint" "" (id 2) (at 88.9 49.53 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 88.9 49.53 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(pin "1" (uuid bc94524b-c378-44e8-acce-7c1ac0292375))
|
||||
)
|
||||
|
||||
(symbol (lib_id "power:GND") (at 114.3 77.47 0) (unit 1)
|
||||
(in_bom yes) (on_board yes)
|
||||
(uuid 00000000-0000-0000-0000-00005ec534bf)
|
||||
(property "Reference" "#PWR0101" (id 0) (at 114.3 83.82 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "GND" (id 1) (at 114.427 81.8642 0))
|
||||
(property "Footprint" "" (id 2) (at 114.3 77.47 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 114.3 77.47 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(pin "1" (uuid 5d56d28a-c4af-4430-8964-9b60bd37a4ca))
|
||||
)
|
||||
|
||||
(symbol (lib_id "power:PWR_FLAG") (at 114.3 74.93 0) (unit 1)
|
||||
(in_bom yes) (on_board yes)
|
||||
(uuid 00000000-0000-0000-0000-00005ec53a6e)
|
||||
(property "Reference" "#FLG0101" (id 0) (at 114.3 73.025 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "PWR_FLAG" (id 1) (at 114.3 70.5358 0))
|
||||
(property "Footprint" "" (id 2) (at 114.3 74.93 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (id 3) (at 114.3 74.93 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(pin "1" (uuid 3081c45f-0a62-4dc8-a706-c2b3c5e194d8))
|
||||
)
|
||||
|
||||
(symbol (lib_id "power:PWR_FLAG") (at 81.28 49.53 0) (unit 1)
|
||||
(in_bom yes) (on_board yes)
|
||||
(uuid 00000000-0000-0000-0000-00005ec53e1a)
|
||||
(property "Reference" "#FLG0102" (id 0) (at 81.28 47.625 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "PWR_FLAG" (id 1) (at 81.28 45.1358 0))
|
||||
(property "Footprint" "" (id 2) (at 81.28 49.53 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (id 3) (at 81.28 49.53 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(pin "1" (uuid 0d525ad4-3f7e-4e8e-b572-5aed774da48c))
|
||||
)
|
||||
|
||||
(symbol (lib_id "Mechanical:Fiducial") (at 114.3 58.42 0) (unit 1)
|
||||
(in_bom yes) (on_board yes) (fields_autoplaced)
|
||||
(uuid a356d368-eee7-4981-9ff4-135cb700ad3f)
|
||||
(property "Reference" "FID1" (id 0) (at 116.84 57.1499 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Value" "Fiducial" (id 1) (at 116.84 59.6899 0)
|
||||
(effects (font (size 1.27 1.27)) (justify left))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 114.3 58.42 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "~" (id 3) (at 114.3 58.42 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
)
|
||||
|
||||
(sheet_instances
|
||||
(path "/" (page "1"))
|
||||
)
|
||||
|
||||
(symbol_instances
|
||||
(path "/00000000-0000-0000-0000-00005ec53a6e"
|
||||
(reference "#FLG0101") (unit 1) (value "PWR_FLAG") (footprint "")
|
||||
)
|
||||
(path "/00000000-0000-0000-0000-00005ec53e1a"
|
||||
(reference "#FLG0102") (unit 1) (value "PWR_FLAG") (footprint "")
|
||||
)
|
||||
(path "/00000000-0000-0000-0000-00005ebe99a0"
|
||||
(reference "#PWR01") (unit 1) (value "VCC") (footprint "")
|
||||
)
|
||||
(path "/00000000-0000-0000-0000-00005ebe9830"
|
||||
(reference "#PWR02") (unit 1) (value "GND") (footprint "")
|
||||
)
|
||||
(path "/00000000-0000-0000-0000-00005ebe965a"
|
||||
(reference "#PWR03") (unit 1) (value "GND") (footprint "")
|
||||
)
|
||||
(path "/00000000-0000-0000-0000-00005ec534bf"
|
||||
(reference "#PWR0101") (unit 1) (value "GND") (footprint "")
|
||||
)
|
||||
(path "/00000000-0000-0000-0000-00005ebe91ac"
|
||||
(reference "C1") (unit 1) (value "1uF") (footprint "Capacitor_SMD:C_0603_1608Metric")
|
||||
)
|
||||
(path "/a356d368-eee7-4981-9ff4-135cb700ad3f"
|
||||
(reference "FID1") (unit 1) (value "Fiducial") (footprint "")
|
||||
)
|
||||
(path "/00000000-0000-0000-0000-00005ebe8a2e"
|
||||
(reference "R1") (unit 1) (value "100") (footprint "Resistor_SMD:R_0805_2012Metric")
|
||||
)
|
||||
(path "/00000000-0000-0000-0000-00005ebe8e9e"
|
||||
(reference "R2") (unit 1) (value "200") (footprint "Resistor_SMD:R_0805_2012Metric")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
|
@ -20,7 +20,7 @@ import os
|
|||
import re
|
||||
from subprocess import run, PIPE
|
||||
from . import context
|
||||
from kibot.misc import DRC_ERROR, ERC_ERROR, BOM_ERROR, CORRUPTED_PCB, CORRUPTED_SCH, EXIT_BAD_CONFIG
|
||||
from kibot.misc import DRC_ERROR, ERC_ERROR, BOM_ERROR, CORRUPTED_PCB, CORRUPTED_SCH, EXIT_BAD_CONFIG, NETLIST_DIFF
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
|
|
@ -173,6 +173,29 @@ def test_update_xml_1(test_dir):
|
|||
ctx.clean_up()
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
@pytest.mark.eeschema
|
||||
@pytest.mark.skipif(context.ki5(), reason="KiCad 6 implementation")
|
||||
def test_update_xml_2(test_dir):
|
||||
prj = 'pcb_parity'
|
||||
ctx = context.TestContext(test_dir, prj, 'update_xml_2', '')
|
||||
# The XML should be created where the schematic is located
|
||||
xml = os.path.abspath(os.path.join(ctx.get_board_dir(), prj+'.xml'))
|
||||
ctx.run(ret_val=NETLIST_DIFF)
|
||||
# Check all outputs are there
|
||||
# ctx.expect_out_file(prj+'.csv')
|
||||
assert os.path.isfile(xml)
|
||||
assert os.path.getsize(xml) > 0
|
||||
logging.debug(os.path.basename(xml)+' OK')
|
||||
ctx.search_err(["C1 footprint mismatch",
|
||||
"F1 found in PCB, but not in schematic",
|
||||
"FID1 found in schematic, but not in PCB",
|
||||
"Net count mismatch .PCB 3 vs schematic 4.",
|
||||
"PCB net code 2 name mismatch",
|
||||
"PCB net code 2 extra connection/s: C1 pin 1"])
|
||||
ctx.clean_up()
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
@pytest.mark.eeschema
|
||||
def test_update_xml_fail(test_dir):
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
# Example KiBot config file
|
||||
kibot:
|
||||
version: 1
|
||||
|
||||
preflight:
|
||||
update_xml:
|
||||
enabled: true
|
||||
check_pcb_parity: true
|
||||
as_warnings: false
|
||||
Loading…
Reference in New Issue