From 98d931f6770b1aa7783482c2cffead9570328a49 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Thu, 23 Jan 2025 00:21:56 -0800 Subject: [PATCH 01/29] well see if this works --- edg/electronics_model/DigitalPorts.py | 95 +++++---------------------- 1 file changed, 17 insertions(+), 78 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 5f58e84e9..627dbe349 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -1,6 +1,9 @@ from __future__ import annotations from typing import Optional, Tuple + +from deprecated import deprecated + from ..core import * from .CircuitBlock import CircuitLink, CircuitPortBridge, CircuitPortAdapter from .GroundPort import GroundLink @@ -12,33 +15,26 @@ class DigitalLink(CircuitLink): """A link for digital IOs. Because of the wide variations on digital IOs, this is kind of a beast. Overall, this means a port that deals with signals that can be driven to two levels, high or low. + Directionality is modeled as signal dataflow. The types of ports are: - - Source: can drive both high or low, but not read. - - Single source: can drive either high or low, but not the other, and cannot read. - Example: open-drain outputs, pull-up resistors. + - Source: can drive high and/or low (including push-pull, pull-up, and open-drain), but can't read. - Sink: cannot drive, but can read. - Bidir: can drive both high and low, and can read. - Single sources are complex, since they require a complementary weak signal driver (pull-up). - Pull-ups can either be explicit (discrete resistor) or part of a Bidir (configurable pull-ups - are common on many microcontroller pins). - - Weak signal drivers (pull up resistors) do not need a complementary single source, since they - may simply be used to provide a default. + Sources can be modeled as high and/or low-side drivers. If not push-pull, an opposite-polarity pull is required. + Pulls do not need a complementary driver and can be used to provide a default state. + Sources and bidir are modeled as being pull-capable. """ # can't subclass VoltageLink because the constraint behavior is slightly different with presence of Bidir def __init__(self) -> None: super().__init__() - self.source = self.Port(DigitalSource(), optional=True) - self.single_sources = self.Port(Vector(DigitalSingleSource()), optional=True) + self.source = self.Port(Vector(DigitalSource()), optional=True) self.sinks = self.Port(Vector(DigitalSink()), optional=True) self.bidirs = self.Port(Vector(DigitalBidir()), optional=True) - # TODO RangeBuilder initializer for voltage self.voltage = self.Parameter(RangeExpr()) - self.voltage_limits = self.Parameter(RangeExpr()) self.current_drawn = self.Parameter(RangeExpr()) @@ -440,51 +436,11 @@ def __init__(self, *, voltage_limits: RangeLike = RangeExpr.ALL, self.pullup_capable: BoolExpr = self.Parameter(BoolExpr(pullup_capable)) self.pulldown_capable: BoolExpr = self.Parameter(BoolExpr(pulldown_capable)) - def as_open_drain(self) -> DigitalSingleSource: - """Adapts this DigitalBidir to a DigitalSingleSource open-drain (low-side-only) driver. - Not that not all digital ports can be driven in open-drain mode, check your particular IO's capabilities.""" - return self._convert(DigitalBidirAdapterOpenDrain()) - - -class DigitalSingleSourceBridge(CircuitPortBridge): - def __init__(self) -> None: - super().__init__() - - self.outer_port = self.Port(DigitalSingleSource( - voltage_out=RangeExpr(), - output_thresholds=RangeExpr(), - pulldown_capable=False, - pullup_capable=False, - low_signal_driver=BoolExpr(), - high_signal_driver=BoolExpr(), - )) - - self.inner_link = self.Port(DigitalBidir( - voltage_out=RangeExpr.EMPTY, # don't contribute to the link voltage - voltage_limits=RangeExpr.ALL, - current_draw=RangeExpr.ZERO, # single source does not draw any current - input_thresholds=RangeExpr.EMPTY, - output_thresholds=RangeExpr.ALL, # don't contribute to the link thresholds - pulldown_capable=True, pullup_capable=True # ideal port, checked at upper link - )) - - def contents(self) -> None: - super().contents() - - self.assign(self.outer_port.voltage_out, self.inner_link.link().voltage) - self.assign(self.outer_port.output_thresholds, self.inner_link.link().output_thresholds) - self.assign(self.outer_port.low_signal_driver, self.inner_link.link()._only_low_single_source_driver) - self.assign(self.outer_port.high_signal_driver, self.inner_link.link()._only_high_single_source_driver) - self.require(self.outer_port.low_signal_driver | self.outer_port.high_signal_driver & - ~(self.outer_port.low_signal_driver & self.outer_port.high_signal_driver), - "must have either (exclusive or) high or low signal drivers internally") - - -class DigitalSingleSource(DigitalBase): - bridge_type = DigitalSingleSourceBridge +class DigitalSingleSourceFake: @staticmethod - def low_from_supply(neg: Port[VoltageLink], is_pulldown: bool = False) -> DigitalSingleSource: + @deprecated("use DigitalSource.sink_from_supply") + def low_from_supply(neg: Port[VoltageLink], is_pulldown: bool = False) -> DigitalSource: return DigitalSingleSource( voltage_out=neg.link().voltage, output_thresholds=(neg.link().voltage.upper(), float('inf')), @@ -493,7 +449,8 @@ def low_from_supply(neg: Port[VoltageLink], is_pulldown: bool = False) -> Digita ) @staticmethod - def high_from_supply(pos: Port[VoltageLink], is_pullup: bool = False) -> DigitalSingleSource: + @deprecated("use DigitalSource.source_from_supply") + def high_from_supply(pos: Port[VoltageLink], is_pullup: bool = False) -> DigitalSource: return DigitalSingleSource( voltage_out=pos.link().voltage, output_thresholds=(-float('inf'), pos.link().voltage.lower()), @@ -501,14 +458,12 @@ def high_from_supply(pos: Port[VoltageLink], is_pullup: bool = False) -> Digital high_signal_driver=not is_pullup ) - def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, + def __call__(self, voltage_out: RangeLike = RangeExpr.ZERO, output_thresholds: RangeLike = RangeExpr.ALL, *, pullup_capable: BoolLike = False, pulldown_capable: BoolLike = False, low_signal_driver: BoolLike = False, - high_signal_driver: BoolLike = False) -> None: - super().__init__() - + high_signal_driver: BoolLike = False) -> DigitalSource: self.voltage_out: RangeExpr = self.Parameter(RangeExpr(voltage_out)) self.output_thresholds: RangeExpr = self.Parameter(RangeExpr(output_thresholds)) @@ -519,20 +474,4 @@ def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, self.high_signal_driver = self.Parameter(BoolExpr(high_signal_driver)) -class DigitalBidirAdapterOpenDrain(CircuitPortAdapter[DigitalSingleSource]): - """Adapter where a DigitalBidir is run as an open-drain (low-side single source) port.""" - @init_in_parent - def __init__(self): - super().__init__() - self.src = self.Port(DigitalBidir( # otherwise ideal - voltage_out=RangeExpr(), - current_draw=RangeExpr() - )) - self.dst = self.Port(DigitalSingleSource( - voltage_out=(0, 0)*Volt, # TODO should propagate from src voltage lower, but creates a circular dependency - output_thresholds=(self.src.link().output_thresholds.lower(), float('inf')), - pulldown_capable=False, - low_signal_driver=True - )) - self.assign(self.src.voltage_out, self.dst.link().voltage) - self.assign(self.src.current_draw, self.dst.link().current_drawn) +DigitalSingleSource = DigitalSingleSourceFake() From 544784384efcabfb508bf11f1765286455463e46 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 14:18:20 -0800 Subject: [PATCH 02/29] refactoring link code --- edg/electronics_model/DebugPorts.py | 4 +- edg/electronics_model/DigitalPorts.py | 91 ++++++++++----------------- edg/electronics_model/__init__.py | 2 +- 3 files changed, 37 insertions(+), 60 deletions(-) diff --git a/edg/electronics_model/DebugPorts.py b/edg/electronics_model/DebugPorts.py index bfc335f77..0101b293b 100644 --- a/edg/electronics_model/DebugPorts.py +++ b/edg/electronics_model/DebugPorts.py @@ -46,9 +46,9 @@ def __init__(self, model: Optional[DigitalBidir] = None) -> None: class SwdPullPort(Bundle[SwdLink]): link_type = SwdLink - def __init__(self, model: Optional[DigitalSingleSource] = None) -> None: + def __init__(self, model: Optional[DigitalSource] = None) -> None: super().__init__() if model is None: - model = DigitalSingleSource() # ideal by default + model = DigitalSource() # ideal by default self.swdio = self.Port(model) self.swclk = self.Port(model) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 627dbe349..b74020d2d 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -30,7 +30,7 @@ class DigitalLink(CircuitLink): def __init__(self) -> None: super().__init__() - self.source = self.Port(Vector(DigitalSource()), optional=True) + self.sources = self.Port(Vector(DigitalSource()), optional=True) self.sinks = self.Port(Vector(DigitalSink()), optional=True) self.bidirs = self.Port(Vector(DigitalBidir()), optional=True) @@ -66,17 +66,10 @@ def contents(self): "\noutput thresholds: ", DescriptionString.FormatUnits(self.output_thresholds, "V"), ", input thresholds: ", DescriptionString.FormatUnits(self.input_thresholds, "V")) - self.require(self.source.is_connected() | (self.single_sources.length() > 0) | (self.bidirs.length() > 0), - "DigitalLink must have some kind of source") - # TODO clean this up, massively, like, this needs new constructs to simplify this pattern voltage_hull = self.bidirs.hull(lambda x: x.voltage_out) - voltage_hull = self.single_sources.any_connected().then_else( - voltage_hull.hull(self.single_sources.hull(lambda x: x.voltage_out)), - voltage_hull - ) - voltage_hull = self.source.is_connected().then_else( - voltage_hull.hull(self.source.voltage_out), + voltage_hull = self.sources.any_connected().then_else( + voltage_hull.hull(self.sources.hull(lambda x: x.voltage_out)), voltage_hull ) self.assign(self.voltage, voltage_hull) @@ -90,67 +83,50 @@ def contents(self): self.sinks.sum(lambda x: x.current_draw) + self.bidirs.sum(lambda x: x.current_draw) ) self.assign(self.current_limits, - self.source.is_connected().then_else( - self.source.current_limits, + self.sources.any_connected().then_else( + self.sources.intersection(lambda x: x.current_limits), RangeExpr._to_expr_type(RangeExpr.ALL)) .intersect(self.bidirs.intersection(lambda x: x.current_limits))) self.require(self.current_limits.contains(self.current_drawn), "overcurrent") - source_output_thresholds = self.source.is_connected().then_else( # TODO: clean up - self.source.output_thresholds, + sources_output_thresholds = self.sources.any_connected().then_else( + self.sources.intersection(lambda x: x.output_thresholds), RangeExpr.ALL * Volt ) bidirs_output_thresholds = self.bidirs.any_connected().then_else( self.bidirs.intersection(lambda x: x.output_thresholds), RangeExpr.ALL * Volt ) - single_output_thresholds = self.single_sources.any_connected().then_else( - self.single_sources.intersection(lambda x: x.output_thresholds), - RangeExpr.ALL * Volt - ) self.assign(self.output_thresholds, - source_output_thresholds.intersect( - bidirs_output_thresholds.intersect( - single_output_thresholds))) + sources_output_thresholds.intersect(bidirs_output_thresholds)) self.assign(self.input_thresholds, self.sinks.hull(lambda x: x.input_thresholds).hull(self.bidirs.hull(lambda x: x.input_thresholds)), ) self.require(self.output_thresholds.contains(self.input_thresholds), "incompatible digital thresholds") + self.require(self.sources.any_connected() | (self.bidirs.length() > 0), + "requires connected source or bidir") + + # ensure both digital levels can be driven self.assign(self.pullup_capable, self.bidirs.any(lambda x: x.pullup_capable) | - self.source.is_connected().then_else(self.source.pullup_capable, - BoolExpr._to_expr_type(False)) | - self.single_sources.any(lambda x: x.pullup_capable)) + self.sources.any(lambda x: x.pullup_capable)) self.assign(self.pulldown_capable, self.bidirs.any(lambda x: x.pulldown_capable) | - self.source.is_connected().then_else(self.source.pulldown_capable, - BoolExpr._to_expr_type(False)) | - self.single_sources.any(lambda x: x.pulldown_capable)) - self.assign(self._has_low_signal_driver, - self.single_sources.any_connected().then_else( - self.single_sources.any(lambda x: x.low_signal_driver), - BoolExpr._to_expr_type(False) - )) + self.sources.any(lambda x: x.pulldown_capable)) + self.assign(self._has_low_signal_driver, # assumed bidirs are true directional drivers + self.bidirs.any_connected() | self.sources.any(lambda x: x.low_signal_driver)) self.assign(self._has_high_signal_driver, - self.single_sources.any_connected().then_else( - self.single_sources.any(lambda x: x.high_signal_driver), - BoolExpr._to_expr_type(False) - )) - self.require(self._has_low_signal_driver.implies(self.pullup_capable), "requires pullup capable connection") - self.require(self._has_high_signal_driver.implies(self.pulldown_capable), "requires pulldown capable connection") - - only_single_source_driver = ~self.source.is_connected() & (self.bidirs.length() == 1) & \ - (self.single_sources.length() > 0) - self.assign(self._only_high_single_source_driver, - only_single_source_driver & - self.single_sources.all(lambda x: x.high_signal_driver) & - ~self.single_sources.all(lambda x: x.low_signal_driver)) - self.assign(self._only_low_single_source_driver, - only_single_source_driver & - ~self.single_sources.all(lambda x: x.high_signal_driver) & - self.single_sources.all(lambda x: x.low_signal_driver)) + self.bidirs.any_connected() | self.sources.any(lambda x: x.high_signal_driver)) + self.require((~self._has_low_signal_driver).implies(self.pulldown_capable), "requires low driver or pulldown") + self.require((~self._has_high_signal_driver).implies(self.pullup_capable), "requires high driver or pullup") + + # when multiple sources, ensure they all drive only one signal direction (eg, open drain) + self.require((self.sources.length() > 1).implies( + (self.sources.all(lambda x: x.low_signal_driver) and ~self.sources.any(lambda x: x.high_signal_driver)) + or (self.sources.all(lambda x: x.high_signal_driver) and ~self.sources.any(lambda x: x.low_signal_driver))), + "conflicting source drivers") class DigitalBase(CircuitPort[DigitalLink]): @@ -300,7 +276,9 @@ def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, current_limits: RangeLike = RangeExpr.ALL, *, output_thresholds: RangeLike = RangeExpr.ALL, pullup_capable: BoolLike = False, - pulldown_capable: BoolLike = False) -> None: + pulldown_capable: BoolLike = False, + high_driver: BoolLike = True, + low_driver: BoolLike = True) -> None: super().__init__() self.voltage_out: RangeExpr = self.Parameter(RangeExpr(voltage_out)) self.current_limits: RangeExpr = self.Parameter(RangeExpr(current_limits)) @@ -308,6 +286,8 @@ def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, self.pullup_capable: BoolExpr = self.Parameter(BoolExpr(pullup_capable)) self.pulldown_capable: BoolExpr = self.Parameter(BoolExpr(pulldown_capable)) + self.high_driver: BoolExpr = self.Parameter(BoolExpr(high_driver)) + self.low_driver: BoolExpr = self.Parameter(BoolExpr(low_driver)) def as_voltage_source(self) -> VoltageSource: return self._convert(DigitalSourceAdapterVoltageSource()) @@ -464,14 +444,11 @@ def __call__(self, voltage_out: RangeLike = RangeExpr.ZERO, pulldown_capable: BoolLike = False, low_signal_driver: BoolLike = False, high_signal_driver: BoolLike = False) -> DigitalSource: - self.voltage_out: RangeExpr = self.Parameter(RangeExpr(voltage_out)) - self.output_thresholds: RangeExpr = self.Parameter(RangeExpr(output_thresholds)) - - self.pullup_capable = self.Parameter(BoolExpr(pullup_capable)) - self.pulldown_capable = self.Parameter(BoolExpr(pulldown_capable)) + raise NotImplementedError # TODO IMPLEMENT ME + return DigitalSource.empty() - self.low_signal_driver = self.Parameter(BoolExpr(low_signal_driver)) - self.high_signal_driver = self.Parameter(BoolExpr(high_signal_driver)) + def empty(self): + return DigitalSource.empty() DigitalSingleSource = DigitalSingleSourceFake() diff --git a/edg/electronics_model/__init__.py b/edg/electronics_model/__init__.py index 3a26681ca..a0c1d5e16 100644 --- a/edg/electronics_model/__init__.py +++ b/edg/electronics_model/__init__.py @@ -14,7 +14,7 @@ from .GroundPort import Ground, GroundSource, GroundReference, GroundLink, Common from .VoltagePorts import VoltageSource, VoltageSink, Power, VoltageLink from .DigitalPorts import DigitalSource, DigitalSink, DigitalBidir, DigitalSingleSource, DigitalLink -from .DigitalPorts import DigitalBidirAdapterOpenDrain, DigitalBidirNotConnected +from .DigitalPorts import DigitalBidirNotConnected from .AnalogPort import AnalogSource, AnalogSink, AnalogLink from .TouchPort import TouchDriver, TouchPadPort from .UartPort import UartPort, UartLink From 77189eb37c3f9a41f7a19b677576185010a9efdf Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 14:28:17 -0800 Subject: [PATCH 03/29] mypy clean --- edg/electronics_model/DigitalPorts.py | 8 ++++---- edg/electronics_model/PassivePort.py | 17 ----------------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index b74020d2d..49c890581 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -116,16 +116,16 @@ def contents(self): self.bidirs.any(lambda x: x.pulldown_capable) | self.sources.any(lambda x: x.pulldown_capable)) self.assign(self._has_low_signal_driver, # assumed bidirs are true directional drivers - self.bidirs.any_connected() | self.sources.any(lambda x: x.low_signal_driver)) + self.bidirs.any_connected() | self.sources.any(lambda x: x.low_driver)) self.assign(self._has_high_signal_driver, - self.bidirs.any_connected() | self.sources.any(lambda x: x.high_signal_driver)) + self.bidirs.any_connected() | self.sources.any(lambda x: x.high_driver)) self.require((~self._has_low_signal_driver).implies(self.pulldown_capable), "requires low driver or pulldown") self.require((~self._has_high_signal_driver).implies(self.pullup_capable), "requires high driver or pullup") # when multiple sources, ensure they all drive only one signal direction (eg, open drain) self.require((self.sources.length() > 1).implies( - (self.sources.all(lambda x: x.low_signal_driver) and ~self.sources.any(lambda x: x.high_signal_driver)) - or (self.sources.all(lambda x: x.high_signal_driver) and ~self.sources.any(lambda x: x.low_signal_driver))), + (self.sources.all(lambda x: x.low_driver) and ~self.sources.any(lambda x: x.high_driver)) + or (self.sources.all(lambda x: x.high_driver) and ~self.sources.any(lambda x: x.low_driver))), "conflicting source drivers") diff --git a/edg/electronics_model/PassivePort.py b/edg/electronics_model/PassivePort.py index 0be74fb13..de07c86b9 100644 --- a/edg/electronics_model/PassivePort.py +++ b/edg/electronics_model/PassivePort.py @@ -92,22 +92,6 @@ def __init__(self, voltage_limits: RangeLike = RangeExpr.ALL, pullup_capable=pullup_capable, pulldown_capable=pulldown_capable)) -class PassiveAdapterDigitalSingleSource(CircuitPortAdapter[DigitalSingleSource]): - # TODO we can't use **kwargs b/c init_in_parent needs the initializer list - @init_in_parent - def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, - output_thresholds: RangeLike = RangeExpr.ALL, *, - pullup_capable: BoolLike = False, - pulldown_capable: BoolLike = False, - low_signal_driver: BoolLike = False, - high_signal_driver: BoolLike = False): - super().__init__() - self.src = self.Port(Passive()) - self.dst = self.Port(DigitalSingleSource(voltage_out=voltage_out, output_thresholds=output_thresholds, - pullup_capable=pullup_capable, pulldown_capable=pulldown_capable, - low_signal_driver=low_signal_driver, high_signal_driver=high_signal_driver)) - - class PassiveAdapterAnalogSource(CircuitPortAdapter[AnalogSource]): # TODO we can't use **kwargs b/c init_in_parent needs the initializer list @init_in_parent @@ -146,7 +130,6 @@ class Passive(CircuitPort[PassiveLink]): VoltageSink: PassiveAdapterVoltageSink, DigitalSink: PassiveAdapterDigitalSink, DigitalSource: PassiveAdapterDigitalSource, - DigitalSingleSource: PassiveAdapterDigitalSingleSource, DigitalBidir: PassiveAdapterDigitalBidir, AnalogSink: PassiveAdapterAnalogSink, AnalogSource: PassiveAdapterAnalogSource From 408847377b2d01bb59e3491bd155d0be386823ef Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 14:33:20 -0800 Subject: [PATCH 04/29] cleaner towards basicblinky --- edg/electronics_model/DigitalPorts.py | 14 ++++++++++---- edg/electronics_model/PassivePort.py | 7 +++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 49c890581..51ac46ce0 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -124,8 +124,8 @@ def contents(self): # when multiple sources, ensure they all drive only one signal direction (eg, open drain) self.require((self.sources.length() > 1).implies( - (self.sources.all(lambda x: x.low_driver) and ~self.sources.any(lambda x: x.high_driver)) - or (self.sources.all(lambda x: x.high_driver) and ~self.sources.any(lambda x: x.low_driver))), + (self.sources.all(lambda x: x.low_driver) & ~self.sources.any(lambda x: x.high_driver)) + | (self.sources.all(lambda x: x.high_driver) & ~self.sources.any(lambda x: x.low_driver))), "conflicting source drivers") @@ -444,8 +444,14 @@ def __call__(self, voltage_out: RangeLike = RangeExpr.ZERO, pulldown_capable: BoolLike = False, low_signal_driver: BoolLike = False, high_signal_driver: BoolLike = False) -> DigitalSource: - raise NotImplementedError # TODO IMPLEMENT ME - return DigitalSource.empty() + return DigitalSource( + voltage_out=voltage_out, + output_thresholds=output_thresholds, + pullup_capable=pullup_capable, + pulldown_capable=pulldown_capable, + low_driver=low_signal_driver, + high_driver=high_signal_driver + ) def empty(self): return DigitalSource.empty() diff --git a/edg/electronics_model/PassivePort.py b/edg/electronics_model/PassivePort.py index de07c86b9..09884ee0f 100644 --- a/edg/electronics_model/PassivePort.py +++ b/edg/electronics_model/PassivePort.py @@ -52,12 +52,15 @@ def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, current_limits: RangeLike = RangeExpr.ALL, output_thresholds: RangeLike = RangeExpr.ALL, pullup_capable: BoolLike = False, - pulldown_capable: BoolLike = False): + pulldown_capable: BoolLike = False, + high_driver: BoolLike = True, + low_driver: BoolLike = True): super().__init__() self.src = self.Port(Passive()) self.dst = self.Port(DigitalSource(voltage_out=voltage_out, current_limits=current_limits, output_thresholds=output_thresholds, - pullup_capable=pullup_capable, pulldown_capable=pulldown_capable)) + pullup_capable=pullup_capable, pulldown_capable=pulldown_capable, + high_driver=high_driver, low_driver=low_driver)) class PassiveAdapterDigitalSink(CircuitPortAdapter[DigitalSink]): From 9645ba0b8ca6cac1f025d19e034164baffcce3e5 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 15:12:21 -0800 Subject: [PATCH 05/29] improve errors --- edg/core/Blocks.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/edg/core/Blocks.py b/edg/core/Blocks.py index 8a23dc024..bba542c91 100644 --- a/edg/core/Blocks.py +++ b/edg/core/Blocks.py @@ -87,8 +87,10 @@ def add_ports(self, ports: Iterable[BasePort]): is_export = self._is_export() if is_export: (ext_port, int_port) = is_export - if ext_port._get_initializers([]): - raise UnconnectableError(f"Connected boundary port {ext_port._name_from(self.parent, allow_unknown=True)} may not have initializers") + initializers = ext_port._get_initializers([]) + if initializers: + raise UnconnectableError(f"Connected boundary port {ext_port._name_from(self.parent, allow_unknown=True)} may not have initializers, " + f"got {', '.join(['.'.join(path) + '=' + str(value) for _, path, value in initializers])}") return # is an export, not a connection # otherwise, is a link-mediated connection From f6f19bd100ff78cb6d75835d1367987ef0d8ae5d Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 15:19:01 -0800 Subject: [PATCH 06/29] basicblinky clean --- edg/electronics_model/DigitalPorts.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 51ac46ce0..9e4da6ea8 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -269,8 +269,12 @@ def from_supply(neg: Port[GroundLink], pos: Port[VoltageLink], @staticmethod def from_bidir(model: DigitalBidir) -> DigitalSource: - return DigitalSource(model.voltage_out, model.current_limits, output_thresholds=model.output_thresholds, - pullup_capable=model.pullup_capable, pulldown_capable=model.pulldown_capable) + model_is_empty = not model._get_initializers([]) + if not model_is_empty: # DigitalSource has additional high_driver and low_driver fields + return DigitalSource(model.voltage_out, model.current_limits, output_thresholds=model.output_thresholds, + pullup_capable=model.pullup_capable, pulldown_capable=model.pulldown_capable) + else: + return DigitalSource.empty() def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, current_limits: RangeLike = RangeExpr.ALL, *, From c832aa72377d631c121ce112d6003583b085e5c5 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 15:29:29 -0800 Subject: [PATCH 07/29] Update developing.md --- developing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developing.md b/developing.md index b2913e9c7..d520cbd0f 100644 --- a/developing.md +++ b/developing.md @@ -38,7 +38,7 @@ python -m unittest discover Or, to run tests for a specific package (eg, `edg_core` in this command): ``` -python -m unittest discover -s edg_core -t . +python -m unittest discover -s edg.core -t . ``` Or, to run one specific test: From 73fcfd2d8ce4dcfdb284c1c30d743ec1297303ba Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 15:50:50 -0800 Subject: [PATCH 08/29] temporary hack --- edg/electronics_model/DigitalPorts.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 9e4da6ea8..2abfbf9f7 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -123,10 +123,10 @@ def contents(self): self.require((~self._has_high_signal_driver).implies(self.pullup_capable), "requires high driver or pullup") # when multiple sources, ensure they all drive only one signal direction (eg, open drain) - self.require((self.sources.length() > 1).implies( - (self.sources.all(lambda x: x.low_driver) & ~self.sources.any(lambda x: x.high_driver)) - | (self.sources.all(lambda x: x.high_driver) & ~self.sources.any(lambda x: x.low_driver))), - "conflicting source drivers") + # TODO IMPLEMENT ME WITH COUNT OPERATION + # self.require((self.sources.length() > 1).implies( + # ~self.sources.any(lambda x: x.high_driver) | ~self.sources.any(lambda x: x.low_driver)), + # "conflicting source drivers") class DigitalBase(CircuitPort[DigitalLink]): @@ -425,21 +425,25 @@ class DigitalSingleSourceFake: @staticmethod @deprecated("use DigitalSource.sink_from_supply") def low_from_supply(neg: Port[VoltageLink], is_pulldown: bool = False) -> DigitalSource: - return DigitalSingleSource( + return DigitalSource( voltage_out=neg.link().voltage, output_thresholds=(neg.link().voltage.upper(), float('inf')), pulldown_capable=is_pulldown, - low_signal_driver=not is_pulldown + low_driver=not is_pulldown, + pullup_capable=False, + high_driver=False ) @staticmethod @deprecated("use DigitalSource.source_from_supply") def high_from_supply(pos: Port[VoltageLink], is_pullup: bool = False) -> DigitalSource: - return DigitalSingleSource( + return DigitalSource( voltage_out=pos.link().voltage, output_thresholds=(-float('inf'), pos.link().voltage.lower()), pullup_capable=is_pullup, - high_signal_driver=not is_pullup + high_driver=not is_pullup, + pulldown_capable=False, + low_driver=False ) def __call__(self, voltage_out: RangeLike = RangeExpr.ZERO, From 2ca5d2dee853a10ea28d304b3885f2b7d88c0e82 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 21:48:03 -0800 Subject: [PATCH 09/29] _bridged_internal --- edg/electronics_model/DigitalPorts.py | 94 ++++++++++++++++++++------- 1 file changed, 69 insertions(+), 25 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 2abfbf9f7..366bb776e 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -119,8 +119,10 @@ def contents(self): self.bidirs.any_connected() | self.sources.any(lambda x: x.low_driver)) self.assign(self._has_high_signal_driver, self.bidirs.any_connected() | self.sources.any(lambda x: x.high_driver)) - self.require((~self._has_low_signal_driver).implies(self.pulldown_capable), "requires low driver or pulldown") - self.require((~self._has_high_signal_driver).implies(self.pullup_capable), "requires high driver or pullup") + self.require(self.sinks.any(lambda x: x._bridged_internal) | + (~self._has_low_signal_driver).implies(self.pulldown_capable), "requires low driver or pulldown") + self.require(self.sinks.any(lambda x: x._bridged_internal) | + (~self._has_high_signal_driver).implies(self.pullup_capable), "requires high driver or pullup") # when multiple sources, ensure they all drive only one signal direction (eg, open drain) # TODO IMPLEMENT ME WITH COUNT OPERATION @@ -199,12 +201,17 @@ def from_bidir(model: DigitalBidir) -> DigitalSink: def __init__(self, voltage_limits: RangeLike = RangeExpr.ALL, current_draw: RangeLike = RangeExpr.ZERO, *, - input_thresholds: RangeLike = RangeExpr.EMPTY) -> None: + input_thresholds: RangeLike = RangeExpr.EMPTY, + _bridged_internal: BoolLike = False) -> None: super().__init__() self.voltage_limits: RangeExpr = self.Parameter(RangeExpr(voltage_limits)) self.current_draw: RangeExpr = self.Parameter(RangeExpr(current_draw)) self.input_thresholds: RangeExpr = self.Parameter(RangeExpr(input_thresholds)) + # internal subcircuits are not necessarily fully valid, e.g. may have open-drain inputs with pull-up + # so this marks this as a bridged port and to relax some checks that should be delegated to the top-level + self._bridged_internal = self.Parameter(BoolExpr(_bridged_internal)) + class DigitalSourceBridge(CircuitPortBridge): def __init__(self) -> None: @@ -220,7 +227,8 @@ def __init__(self) -> None: # TODO: or maybe current_limits / voltage_limits shouldn't be a port, but rather a block property? self.inner_link = self.Port(DigitalSink(voltage_limits=RangeExpr.ALL, current_draw=RangeExpr(), - input_thresholds=RangeExpr.EMPTY)) + input_thresholds=RangeExpr.EMPTY, + _bridged_internal=True)) def contents(self) -> None: super().contents() @@ -279,19 +287,63 @@ def from_bidir(model: DigitalBidir) -> DigitalSource: def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, current_limits: RangeLike = RangeExpr.ALL, *, output_thresholds: RangeLike = RangeExpr.ALL, - pullup_capable: BoolLike = False, - pulldown_capable: BoolLike = False, high_driver: BoolLike = True, - low_driver: BoolLike = True) -> None: + low_driver: BoolLike = True, + pullup_capable: BoolLike = False, + pulldown_capable: BoolLike = False) -> None: super().__init__() self.voltage_out: RangeExpr = self.Parameter(RangeExpr(voltage_out)) self.current_limits: RangeExpr = self.Parameter(RangeExpr(current_limits)) self.output_thresholds: RangeExpr = self.Parameter(RangeExpr(output_thresholds)) - self.pullup_capable: BoolExpr = self.Parameter(BoolExpr(pullup_capable)) - self.pulldown_capable: BoolExpr = self.Parameter(BoolExpr(pulldown_capable)) self.high_driver: BoolExpr = self.Parameter(BoolExpr(high_driver)) self.low_driver: BoolExpr = self.Parameter(BoolExpr(low_driver)) + self.pullup_capable: BoolExpr = self.Parameter(BoolExpr(pullup_capable)) + self.pulldown_capable: BoolExpr = self.Parameter(BoolExpr(pulldown_capable)) + + @staticmethod + def low_from_supply(neg: Port[VoltageLink]) -> DigitalSource: + return DigitalSource( + voltage_out=neg.link().voltage, + output_thresholds=(neg.link().voltage.upper(), float('inf')), + high_driver=False, + low_driver=True, + pullup_capable=False, + pulldown_capable=False + ) + + @staticmethod + def high_from_supply(pos: Port[VoltageLink]) -> DigitalSource: + return DigitalSource( + voltage_out=pos.link().voltage, + output_thresholds=(-float('inf'), pos.link().voltage.lower()), + high_driver=True, + low_driver=False, + pullup_capable=False, + pulldown_capable=False + ) + + @staticmethod + def pulldown_from_supply(neg: Port[VoltageLink]) -> DigitalSource: + return DigitalSource( + voltage_out=neg.link().voltage, + output_thresholds=(neg.link().voltage.upper(), float('inf')), + high_driver=False, + low_driver=False, + pullup_capable=False, + pulldown_capable=True + ) + + @staticmethod + def pullup_from_supply(pos: Port[VoltageLink]) -> DigitalSource: + return DigitalSource( + voltage_out=pos.link().voltage, + output_thresholds=(-float('inf'), pos.link().voltage.lower()), + high_driver=False, + low_driver=False, + pullup_capable=True, + pulldown_capable=False + ) def as_voltage_source(self) -> VoltageSource: return self._convert(DigitalSourceAdapterVoltageSource()) @@ -425,26 +477,18 @@ class DigitalSingleSourceFake: @staticmethod @deprecated("use DigitalSource.sink_from_supply") def low_from_supply(neg: Port[VoltageLink], is_pulldown: bool = False) -> DigitalSource: - return DigitalSource( - voltage_out=neg.link().voltage, - output_thresholds=(neg.link().voltage.upper(), float('inf')), - pulldown_capable=is_pulldown, - low_driver=not is_pulldown, - pullup_capable=False, - high_driver=False - ) + if not is_pulldown: + return DigitalSource.low_from_supply(neg) + else: + return DigitalSource.pulldown_from_supply(neg) @staticmethod @deprecated("use DigitalSource.source_from_supply") def high_from_supply(pos: Port[VoltageLink], is_pullup: bool = False) -> DigitalSource: - return DigitalSource( - voltage_out=pos.link().voltage, - output_thresholds=(-float('inf'), pos.link().voltage.lower()), - pullup_capable=is_pullup, - high_driver=not is_pullup, - pulldown_capable=False, - low_driver=False - ) + if not is_pullup: + return DigitalSource.high_from_supply(pos) + else: + return DigitalSource.pullup_from_supply(pos) def __call__(self, voltage_out: RangeLike = RangeExpr.ZERO, output_thresholds: RangeLike = RangeExpr.ALL, *, From 5fc9aaaa13ab3d7bb9069ddab80007049fda0ac9 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 21:51:02 -0800 Subject: [PATCH 10/29] the emptiness strikes again --- edg/electronics_model/DigitalPorts.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 366bb776e..cf92afd7d 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -197,7 +197,11 @@ def from_supply(neg: Port[GroundLink], pos: Port[VoltageLink], *, @staticmethod def from_bidir(model: DigitalBidir) -> DigitalSink: - return DigitalSink(model.voltage_limits, model.current_draw, input_thresholds=model.input_thresholds) + model_is_empty = not model._get_initializers([]) + if not model_is_empty: + return DigitalSink(model.voltage_limits, model.current_draw, input_thresholds=model.input_thresholds) + else: + return DigitalSink.empty() def __init__(self, voltage_limits: RangeLike = RangeExpr.ALL, current_draw: RangeLike = RangeExpr.ZERO, *, From 1212e001ba0569116edefb67f773732e8ed8c354 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 21:52:13 -0800 Subject: [PATCH 11/29] moles being whacked --- edg/electronics_model/PassivePort.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/edg/electronics_model/PassivePort.py b/edg/electronics_model/PassivePort.py index 09884ee0f..6d90245d9 100644 --- a/edg/electronics_model/PassivePort.py +++ b/edg/electronics_model/PassivePort.py @@ -68,11 +68,13 @@ class PassiveAdapterDigitalSink(CircuitPortAdapter[DigitalSink]): @init_in_parent def __init__(self, voltage_limits: RangeLike = RangeExpr.ALL, current_draw: RangeLike = RangeExpr.ZERO, - input_thresholds: RangeLike = RangeExpr.EMPTY): + input_thresholds: RangeLike = RangeExpr.EMPTY, + _bridged_internal: BoolLike = False): super().__init__() self.src = self.Port(Passive()) self.dst = self.Port(DigitalSink(voltage_limits=voltage_limits, current_draw=current_draw, - input_thresholds=input_thresholds)) + input_thresholds=input_thresholds, + _bridged_internal=_bridged_internal)) class PassiveAdapterDigitalBidir(CircuitPortAdapter[DigitalBidir]): From 2305e8d7a1c2baa0e07d3adf49cbbee0948f94c6 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 22:06:35 -0800 Subject: [PATCH 12/29] allow pull only --- edg/electronics_model/DigitalPorts.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index cf92afd7d..9d244f1fd 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -18,8 +18,9 @@ class DigitalLink(CircuitLink): Directionality is modeled as signal dataflow. The types of ports are: - Source: can drive high and/or low (including push-pull, pull-up, and open-drain), but can't read. + Push-pull sources assumed not able to tri-state and cannot share the line with other push-pull drivers. - Sink: cannot drive, but can read. - - Bidir: can drive both high and low, and can read. + - Bidir: can drive both high and low, and can read. Can tri-state, and assumed ports are configured to not conflict. Sources can be modeled as high and/or low-side drivers. If not push-pull, an opposite-polarity pull is required. Pulls do not need a complementary driver and can be used to provide a default state. @@ -108,7 +109,7 @@ def contents(self): self.require(self.sources.any_connected() | (self.bidirs.length() > 0), "requires connected source or bidir") - # ensure both digital levels can be driven + # ensure both digital levels can be driven (but pull-up or -down only connections are allowed) self.assign(self.pullup_capable, self.bidirs.any(lambda x: x.pullup_capable) | self.sources.any(lambda x: x.pullup_capable)) @@ -119,10 +120,11 @@ def contents(self): self.bidirs.any_connected() | self.sources.any(lambda x: x.low_driver)) self.assign(self._has_high_signal_driver, self.bidirs.any_connected() | self.sources.any(lambda x: x.high_driver)) + self.require(self.sinks.any(lambda x: x._bridged_internal) | - (~self._has_low_signal_driver).implies(self.pulldown_capable), "requires low driver or pulldown") + self._has_high_signal_driver.implies(self._has_low_signal_driver | self.pulldown_capable), "requires low driver or pulldown") self.require(self.sinks.any(lambda x: x._bridged_internal) | - (~self._has_high_signal_driver).implies(self.pullup_capable), "requires high driver or pullup") + self._has_low_signal_driver.implies(self._has_high_signal_driver | self.pullup_capable), "requires high driver or pullup") # when multiple sources, ensure they all drive only one signal direction (eg, open drain) # TODO IMPLEMENT ME WITH COUNT OPERATION From a316f99cd8297034b56bfe562bda1c970bdd104e Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 22:47:29 -0800 Subject: [PATCH 13/29] progress --- edg/electronics_model/DigitalPorts.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 9d244f1fd..8ac800317 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -145,19 +145,16 @@ def __init__(self) -> None: current_draw=RangeExpr(), input_thresholds=RangeExpr())) - # TODO can we actually define something here? as a pseudoport, this doesn't have limits - self.inner_link = self.Port(DigitalSource(current_limits=RangeExpr.ALL, - voltage_out=RangeExpr(), - output_thresholds=RangeExpr())) + self.inner_link = self.Port(DigitalSource(current_limits=RangeExpr.ALL, # magical port + voltage_out=RangeExpr.EMPTY, + output_thresholds=RangeExpr.ALL, + pullup_capable=True, pulldown_capable=True)) def contents(self) -> None: super().contents() self.assign(self.outer_port.voltage_limits, self.inner_link.link().voltage_limits) self.assign(self.outer_port.current_draw, self.inner_link.link().current_drawn) - self.assign(self.inner_link.voltage_out, self.outer_port.link().voltage) - - self.assign(self.inner_link.output_thresholds, self.outer_port.link().output_thresholds) self.assign(self.outer_port.input_thresholds, self.inner_link.link().input_thresholds) From 6aa75d8c6eebb30fe4966dde21df009ba374bb76 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 22:57:17 -0800 Subject: [PATCH 14/29] update netlists --- examples/EspLora/EspLora.net | 4 +- examples/EspLora/EspLora.ref.net | 4 +- examples/Fcml/Fcml.net | 4 +- examples/Fcml/Fcml.ref.net | 4 +- examples/IotDisplay/IotDisplay.net | 4 +- examples/IotDisplay/IotDisplay.ref.net | 4 +- examples/TestBlinkyArray/TestBlinkyArray.net | 411 ++++++++++++++++ .../TestBlinkyArray/TestBlinkyArray.ref.net | 411 ++++++++++++++++ .../TestBlinkyComplete/TestBlinkyComplete.net | 334 +++++++++++++ .../TestBlinkyComplete.ref.net | 334 +++++++++++++ examples/TestBlinkyEmpty/TestBlinkyEmpty.net | 4 + .../TestBlinkyEmpty/TestBlinkyEmpty.ref.net | 4 + .../TestBlinkyExpanded/TestBlinkyExpanded.net | 436 +++++++++++++++++ .../TestBlinkyExpanded.ref.net | 436 +++++++++++++++++ .../TestBlinkyImplicit/TestBlinkyImplicit.net | 436 +++++++++++++++++ .../TestBlinkyImplicit.ref.net | 436 +++++++++++++++++ examples/TestBlinkyMicro/TestBlinkyMicro.net | 411 ++++++++++++++++ .../TestBlinkyMicro/TestBlinkyMicro.ref.net | 411 ++++++++++++++++ .../TestBlinkyPacked/TestBlinkyPacked.net | 378 +++++++++++++++ .../TestBlinkyPacked/TestBlinkyPacked.ref.net | 378 +++++++++++++++ .../TestBlinkyWithLibrary.net | 440 +++++++++++++++++ .../TestBlinkyWithLibrary.ref.net | 440 +++++++++++++++++ .../TestBlinkyWithLibraryExport.net | 440 +++++++++++++++++ .../TestBlinkyWithLibraryExport.ref.net | 440 +++++++++++++++++ .../TestBlinkyWithModeledSchematicImport.net | 370 +++++++------- ...stBlinkyWithModeledSchematicImport.ref.net | 453 ++++++++++++++++++ .../TestBlinkyWithSchematicImport.net | 370 +++++++------- .../TestBlinkyWithSchematicImport.ref.net | 453 ++++++++++++++++++ examples/test_blinky.py | 22 +- 29 files changed, 7879 insertions(+), 393 deletions(-) create mode 100644 examples/TestBlinkyArray/TestBlinkyArray.net create mode 100644 examples/TestBlinkyArray/TestBlinkyArray.ref.net create mode 100644 examples/TestBlinkyComplete/TestBlinkyComplete.net create mode 100644 examples/TestBlinkyComplete/TestBlinkyComplete.ref.net create mode 100644 examples/TestBlinkyEmpty/TestBlinkyEmpty.net create mode 100644 examples/TestBlinkyEmpty/TestBlinkyEmpty.ref.net create mode 100644 examples/TestBlinkyExpanded/TestBlinkyExpanded.net create mode 100644 examples/TestBlinkyExpanded/TestBlinkyExpanded.ref.net create mode 100644 examples/TestBlinkyImplicit/TestBlinkyImplicit.net create mode 100644 examples/TestBlinkyImplicit/TestBlinkyImplicit.ref.net create mode 100644 examples/TestBlinkyMicro/TestBlinkyMicro.net create mode 100644 examples/TestBlinkyMicro/TestBlinkyMicro.ref.net create mode 100644 examples/TestBlinkyPacked/TestBlinkyPacked.net create mode 100644 examples/TestBlinkyPacked/TestBlinkyPacked.ref.net create mode 100644 examples/TestBlinkyWithLibrary/TestBlinkyWithLibrary.net create mode 100644 examples/TestBlinkyWithLibrary/TestBlinkyWithLibrary.ref.net create mode 100644 examples/TestBlinkyWithLibraryExport/TestBlinkyWithLibraryExport.net create mode 100644 examples/TestBlinkyWithLibraryExport/TestBlinkyWithLibraryExport.ref.net create mode 100644 examples/TestBlinkyWithModeledSchematicImport/TestBlinkyWithModeledSchematicImport.ref.net create mode 100644 examples/TestBlinkyWithSchematicImport/TestBlinkyWithSchematicImport.ref.net diff --git a/examples/EspLora/EspLora.net b/examples/EspLora/EspLora.net index 24e6b624f..3a9f74fed 100644 --- a/examples/EspLora/EspLora.net +++ b/examples/EspLora/EspLora.net @@ -1397,8 +1397,8 @@ (node (ref mcu.en_pull.c) (pin 1))) (net (code 32) (name "Lmcu.program_boot_node") (node (ref mcu.ic) (pin 27)) - (node (ref mcu.prog) (pin 2)) - (node (ref mcu.boot) (pin 1))) + (node (ref mcu.boot) (pin 1)) + (node (ref mcu.prog) (pin 2))) (net (code 33) (name "Lledr.res.a") (node (ref ledr.res) (pin 1)) (node (ref ledr.package) (pin 1))) diff --git a/examples/EspLora/EspLora.ref.net b/examples/EspLora/EspLora.ref.net index 4974fe247..29e3f1ce0 100644 --- a/examples/EspLora/EspLora.ref.net +++ b/examples/EspLora/EspLora.ref.net @@ -1397,8 +1397,8 @@ (node (ref LC5) (pin 1))) (net (code 32) (name "Lmcu.program_boot_node") (node (ref LU2) (pin 27)) - (node (ref LJ2) (pin 2)) - (node (ref LSW1) (pin 1))) + (node (ref LSW1) (pin 1)) + (node (ref LJ2) (pin 2))) (net (code 33) (name "Lledr.res.a") (node (ref LR4) (pin 1)) (node (ref LD2) (pin 1))) diff --git a/examples/Fcml/Fcml.net b/examples/Fcml/Fcml.net index 701c36ff2..77cba9926 100644 --- a/examples/Fcml/Fcml.net +++ b/examples/Fcml/Fcml.net @@ -2465,8 +2465,8 @@ (node (ref conv.sw[2].low_fet) (pin 4))) (net (code 78) (name "fpga.ic.creset_b") (node (ref fpga.ic) (pin 8)) - (node (ref fpga.prog) (pin 10)) - (node (ref fpga.reset_pu) (pin 2))) + (node (ref fpga.reset_pu) (pin 2)) + (node (ref fpga.prog) (pin 10))) (net (code 79) (name "fpga.ic.spi_config.sck") (node (ref fpga.ic) (pin 15)) (node (ref fpga.mem.ic) (pin 6)) diff --git a/examples/Fcml/Fcml.ref.net b/examples/Fcml/Fcml.ref.net index 9720c2962..8b4642112 100644 --- a/examples/Fcml/Fcml.ref.net +++ b/examples/Fcml/Fcml.ref.net @@ -2465,8 +2465,8 @@ (node (ref Q6) (pin 4))) (net (code 78) (name "fpga.ic.creset_b") (node (ref U10) (pin 8)) - (node (ref J5) (pin 10)) - (node (ref R13) (pin 2))) + (node (ref R13) (pin 2)) + (node (ref J5) (pin 10))) (net (code 79) (name "fpga.ic.spi_config.sck") (node (ref U10) (pin 15)) (node (ref U12) (pin 6)) diff --git a/examples/IotDisplay/IotDisplay.net b/examples/IotDisplay/IotDisplay.net index af352dd85..e4e873dea 100644 --- a/examples/IotDisplay/IotDisplay.net +++ b/examples/IotDisplay/IotDisplay.net @@ -1044,8 +1044,8 @@ (node (ref mcu.en_pull.c) (pin 1))) (net (code 43) (name "mcu.program_boot_node") (node (ref mcu.ic) (pin 27)) - (node (ref mcu.prog) (pin 2)) - (node (ref mcu.boot) (pin 1))) + (node (ref mcu.boot) (pin 1)) + (node (ref mcu.prog) (pin 2))) (net (code 44) (name "ledr.res.a") (node (ref ledr.res) (pin 1)) (node (ref ledr.package) (pin 1))) diff --git a/examples/IotDisplay/IotDisplay.ref.net b/examples/IotDisplay/IotDisplay.ref.net index ed3ffb103..868f5ce28 100644 --- a/examples/IotDisplay/IotDisplay.ref.net +++ b/examples/IotDisplay/IotDisplay.ref.net @@ -1044,8 +1044,8 @@ (node (ref C7) (pin 1))) (net (code 43) (name "mcu.program_boot_node") (node (ref U2) (pin 27)) - (node (ref J3) (pin 2)) - (node (ref SW1) (pin 1))) + (node (ref SW1) (pin 1)) + (node (ref J3) (pin 2))) (net (code 44) (name "ledr.res.a") (node (ref R6) (pin 1)) (node (ref D1) (pin 1))) diff --git a/examples/TestBlinkyArray/TestBlinkyArray.net b/examples/TestBlinkyArray/TestBlinkyArray.net new file mode 100644 index 000000000..fa14fb3dd --- /dev/null +++ b/examples/TestBlinkyArray/TestBlinkyArray.net @@ -0,0 +1,411 @@ +(export (version D) +(components +(comp (ref "usb.conn") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "usb.cc_pull.cc1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "usb.cc_pull.cc2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "reg.ic") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "reg.fb.top_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "reg.fb.bottom_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "reg.hf_in_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "reg.vbst_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "reg.power_path.inductor") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "reg.power_path.in_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "reg.power_path.out_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "mcu.ic") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "mcu.vcc_cap0") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "mcu.vcc_cap1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "mcu.prog") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "mcu.boot") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "mcu.en_pull.r") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "mcu.en_pull.c") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "sw") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW2")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "led.led[0].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[0].package")) + (property (name "edg_short_path") (value "led.led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/led[0]/") (tstamps "/02750136/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "led.led[0].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[0].res")) + (property (name "edg_short_path") (value "led.led[0].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led/led[0]/") (tstamps "/02750136/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "led.led[1].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[1].package")) + (property (name "edg_short_path") (value "led.led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/led[1]/") (tstamps "/02750136/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "led.led[1].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[1].res")) + (property (name "edg_short_path") (value "led.led[1].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led/led[1]/") (tstamps "/02750136/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "led.led[2].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[2].package")) + (property (name "edg_short_path") (value "led.led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/led[2]/") (tstamps "/02750136/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "led.led[2].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[2].res")) + (property (name "edg_short_path") (value "led.led[2].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led/led[2]/") (tstamps "/02750136/07e90220/")) + (tstamps "0296014b")) +(comp (ref "led.led[3].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[3].package")) + (property (name "edg_short_path") (value "led.led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/led[3]/") (tstamps "/02750136/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "led.led[3].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[3].res")) + (property (name "edg_short_path") (value "led.led[3].res")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led/led[3]/") (tstamps "/02750136/07eb0221/")) + (tstamps "0296014b"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref usb.conn) (pin A1)) + (node (ref usb.conn) (pin B12)) + (node (ref usb.conn) (pin B1)) + (node (ref usb.conn) (pin A12)) + (node (ref reg.ic) (pin 1)) + (node (ref mcu.ic) (pin 1)) + (node (ref mcu.ic) (pin 15)) + (node (ref mcu.ic) (pin 38)) + (node (ref mcu.ic) (pin 39)) + (node (ref sw) (pin 2)) + (node (ref usb.conn) (pin S1)) + (node (ref reg.hf_in_cap) (pin 2)) + (node (ref mcu.vcc_cap0) (pin 2)) + (node (ref mcu.vcc_cap1) (pin 2)) + (node (ref mcu.prog) (pin 4)) + (node (ref mcu.boot) (pin 2)) + (node (ref led.led[0].res) (pin 2)) + (node (ref led.led[1].res) (pin 2)) + (node (ref led.led[2].res) (pin 2)) + (node (ref led.led[3].res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 2)) + (node (ref mcu.en_pull.c) (pin 2)) + (node (ref usb.cc_pull.cc1) (pin 1)) + (node (ref usb.cc_pull.cc2) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref usb.conn) (pin A4)) + (node (ref usb.conn) (pin B9)) + (node (ref usb.conn) (pin B4)) + (node (ref usb.conn) (pin A9)) + (node (ref reg.ic) (pin 3)) + (node (ref reg.ic) (pin 5)) + (node (ref reg.hf_in_cap) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref mcu.ic) (pin 2)) + (node (ref reg.fb.top_res) (pin 1)) + (node (ref mcu.vcc_cap0) (pin 1)) + (node (ref mcu.vcc_cap1) (pin 1)) + (node (ref mcu.prog) (pin 1)) + (node (ref mcu.en_pull.r) (pin 1)) + (node (ref reg.power_path.inductor) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref mcu.ic) (pin 8)) + (node (ref sw) (pin 1))) +(net (code 5) (name "mcu.gpio.led_0") + (node (ref mcu.ic) (pin 26)) + (node (ref led.led[0].package) (pin 2))) +(net (code 6) (name "mcu.gpio.led_1") + (node (ref mcu.ic) (pin 27)) + (node (ref led.led[1].package) (pin 2))) +(net (code 7) (name "mcu.gpio.led_2") + (node (ref mcu.ic) (pin 28)) + (node (ref led.led[2].package) (pin 2))) +(net (code 8) (name "mcu.gpio.led_3") + (node (ref mcu.ic) (pin 29)) + (node (ref led.led[3].package) (pin 2))) +(net (code 9) (name "usb.usb.dp") + (node (ref usb.conn) (pin A6)) + (node (ref usb.conn) (pin B6))) +(net (code 10) (name "usb.usb.dm") + (node (ref usb.conn) (pin A7)) + (node (ref usb.conn) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref usb.conn) (pin A5)) + (node (ref usb.cc_pull.cc1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref usb.conn) (pin B5)) + (node (ref usb.cc_pull.cc2) (pin 2))) +(net (code 13) (name "reg.fb.output") + (node (ref reg.ic) (pin 4)) + (node (ref reg.fb.top_res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 1))) +(net (code 14) (name "reg.vbst_cap.neg") + (node (ref reg.vbst_cap) (pin 2)) + (node (ref reg.ic) (pin 2)) + (node (ref reg.power_path.inductor) (pin 1))) +(net (code 15) (name "reg.vbst_cap.pos") + (node (ref reg.vbst_cap) (pin 1)) + (node (ref reg.ic) (pin 6))) +(net (code 16) (name "mcu.program_uart_node.a_tx") + (node (ref mcu.ic) (pin 35)) + (node (ref mcu.prog) (pin 2))) +(net (code 17) (name "mcu.program_uart_node.b_tx") + (node (ref mcu.ic) (pin 34)) + (node (ref mcu.prog) (pin 3))) +(net (code 18) (name "mcu.program_en_node") + (node (ref mcu.ic) (pin 3)) + (node (ref mcu.en_pull.r) (pin 2)) + (node (ref mcu.en_pull.c) (pin 1))) +(net (code 19) (name "mcu.program_boot_node") + (node (ref mcu.ic) (pin 25)) + (node (ref mcu.boot) (pin 1))) +(net (code 20) (name "mcu.ic.io2") + (node (ref mcu.ic) (pin 24))) +(net (code 21) (name "led.led[0].res.a") + (node (ref led.led[0].res) (pin 1)) + (node (ref led.led[0].package) (pin 1))) +(net (code 22) (name "led.led[1].res.a") + (node (ref led.led[1].res) (pin 1)) + (node (ref led.led[1].package) (pin 1))) +(net (code 23) (name "led.led[2].res.a") + (node (ref led.led[2].res) (pin 1)) + (node (ref led.led[2].package) (pin 1))) +(net (code 24) (name "led.led[3].res.a") + (node (ref led.led[3].res) (pin 1)) + (node (ref led.led[3].package) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyArray/TestBlinkyArray.ref.net b/examples/TestBlinkyArray/TestBlinkyArray.ref.net new file mode 100644 index 000000000..7c041f5db --- /dev/null +++ b/examples/TestBlinkyArray/TestBlinkyArray.ref.net @@ -0,0 +1,411 @@ +(export (version D) +(components +(comp (ref "J1") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "U1") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "R3") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "R4") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "C1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "C2") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "L1") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "C3") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "C4") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "U2") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "C5") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "C6") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "J2") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "SW1") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "R5") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "C7") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "SW2") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW2")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "D1") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[0].package")) + (property (name "edg_short_path") (value "led.led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/led[0]/") (tstamps "/02750136/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "R6") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[0].res")) + (property (name "edg_short_path") (value "led.led[0].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led/led[0]/") (tstamps "/02750136/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "D2") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[1].package")) + (property (name "edg_short_path") (value "led.led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/led[1]/") (tstamps "/02750136/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "R7") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[1].res")) + (property (name "edg_short_path") (value "led.led[1].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led/led[1]/") (tstamps "/02750136/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "D3") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[2].package")) + (property (name "edg_short_path") (value "led.led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/led[2]/") (tstamps "/02750136/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "R8") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[2].res")) + (property (name "edg_short_path") (value "led.led[2].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led/led[2]/") (tstamps "/02750136/07e90220/")) + (tstamps "0296014b")) +(comp (ref "D4") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[3].package")) + (property (name "edg_short_path") (value "led.led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/led[3]/") (tstamps "/02750136/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "R9") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.led[3].res")) + (property (name "edg_short_path") (value "led.led[3].res")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led/led[3]/") (tstamps "/02750136/07eb0221/")) + (tstamps "0296014b"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref J1) (pin A1)) + (node (ref J1) (pin B12)) + (node (ref J1) (pin B1)) + (node (ref J1) (pin A12)) + (node (ref U1) (pin 1)) + (node (ref U2) (pin 1)) + (node (ref U2) (pin 15)) + (node (ref U2) (pin 38)) + (node (ref U2) (pin 39)) + (node (ref SW2) (pin 2)) + (node (ref J1) (pin S1)) + (node (ref C1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref J2) (pin 4)) + (node (ref SW1) (pin 2)) + (node (ref R6) (pin 2)) + (node (ref R7) (pin 2)) + (node (ref R8) (pin 2)) + (node (ref R9) (pin 2)) + (node (ref R4) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref R1) (pin 1)) + (node (ref R2) (pin 1)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref J1) (pin A4)) + (node (ref J1) (pin B9)) + (node (ref J1) (pin B4)) + (node (ref J1) (pin A9)) + (node (ref U1) (pin 3)) + (node (ref U1) (pin 5)) + (node (ref C1) (pin 1)) + (node (ref C3) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref U2) (pin 2)) + (node (ref R3) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref R5) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C4) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref U2) (pin 8)) + (node (ref SW2) (pin 1))) +(net (code 5) (name "mcu.gpio.led_0") + (node (ref U2) (pin 26)) + (node (ref D1) (pin 2))) +(net (code 6) (name "mcu.gpio.led_1") + (node (ref U2) (pin 27)) + (node (ref D2) (pin 2))) +(net (code 7) (name "mcu.gpio.led_2") + (node (ref U2) (pin 28)) + (node (ref D3) (pin 2))) +(net (code 8) (name "mcu.gpio.led_3") + (node (ref U2) (pin 29)) + (node (ref D4) (pin 2))) +(net (code 9) (name "usb.usb.dp") + (node (ref J1) (pin A6)) + (node (ref J1) (pin B6))) +(net (code 10) (name "usb.usb.dm") + (node (ref J1) (pin A7)) + (node (ref J1) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref J1) (pin A5)) + (node (ref R1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref J1) (pin B5)) + (node (ref R2) (pin 2))) +(net (code 13) (name "reg.fb.output") + (node (ref U1) (pin 4)) + (node (ref R3) (pin 2)) + (node (ref R4) (pin 1))) +(net (code 14) (name "reg.vbst_cap.neg") + (node (ref C2) (pin 2)) + (node (ref U1) (pin 2)) + (node (ref L1) (pin 1))) +(net (code 15) (name "reg.vbst_cap.pos") + (node (ref C2) (pin 1)) + (node (ref U1) (pin 6))) +(net (code 16) (name "mcu.program_uart_node.a_tx") + (node (ref U2) (pin 35)) + (node (ref J2) (pin 2))) +(net (code 17) (name "mcu.program_uart_node.b_tx") + (node (ref U2) (pin 34)) + (node (ref J2) (pin 3))) +(net (code 18) (name "mcu.program_en_node") + (node (ref U2) (pin 3)) + (node (ref R5) (pin 2)) + (node (ref C7) (pin 1))) +(net (code 19) (name "mcu.program_boot_node") + (node (ref U2) (pin 25)) + (node (ref SW1) (pin 1))) +(net (code 20) (name "mcu.ic.io2") + (node (ref U2) (pin 24))) +(net (code 21) (name "led.led[0].res.a") + (node (ref R6) (pin 1)) + (node (ref D1) (pin 1))) +(net (code 22) (name "led.led[1].res.a") + (node (ref R7) (pin 1)) + (node (ref D2) (pin 1))) +(net (code 23) (name "led.led[2].res.a") + (node (ref R8) (pin 1)) + (node (ref D3) (pin 1))) +(net (code 24) (name "led.led[3].res.a") + (node (ref R9) (pin 1)) + (node (ref D4) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyComplete/TestBlinkyComplete.net b/examples/TestBlinkyComplete/TestBlinkyComplete.net new file mode 100644 index 000000000..e1c544453 --- /dev/null +++ b/examples/TestBlinkyComplete/TestBlinkyComplete.net @@ -0,0 +1,334 @@ +(export (version D) +(components +(comp (ref "usb.conn") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "usb.cc_pull.cc1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "usb.cc_pull.cc2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "reg.ic") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "reg.fb.top_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "reg.fb.bottom_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "reg.hf_in_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "reg.vbst_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "reg.power_path.inductor") + (value "220mA 15uH ±20% 900mΩ 0603 Inductors (SMD) ROHS") + (footprint "Inductor_SMD:L_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "MGFL1608F150MT-LF (microgate)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "reg.power_path.in_cap") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "reg.power_path.out_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "mcu.swd") + (value "PinHeader1.27 Shrouded 2x5") + (footprint "Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMD") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.swd.conn")) + (property (name "edg_short_path") (value "mcu.swd")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader1.27 Shrouded 2x5 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "02ae014f")) +(comp (ref "mcu.ic") + (value "STM32F103xxT6") + (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "STM32F103xxT6 (STMicroelectronics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "mcu.pwr_cap[0]") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[0].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[0]")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168703d5")) +(comp (ref "mcu.pwr_cap[1]") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[1].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[1]")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168903d6")) +(comp (ref "mcu.pwr_cap[2]") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[2].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[2]")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168b03d7")) +(comp (ref "mcu.pwr_cap[3]") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[3].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[3]")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168d03d8")) +(comp (ref "mcu.vdda_cap_0") + (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_0.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_0")) + (property (name "edg_refdes") (value "C9")) + (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dc03c2")) +(comp (ref "mcu.vdda_cap_1") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_1.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_1")) + (property (name "edg_refdes") (value "C10")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dd03c3")) +(comp (ref "led.package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.package")) + (property (name "edg_short_path") (value "led.package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "0b4e02cd")) +(comp (ref "led.res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.res")) + (property (name "edg_short_path") (value "led.res")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "0296014b"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref usb.conn) (pin A1)) + (node (ref usb.conn) (pin B12)) + (node (ref usb.conn) (pin B1)) + (node (ref usb.conn) (pin A12)) + (node (ref reg.ic) (pin 1)) + (node (ref mcu.ic) (pin 8)) + (node (ref mcu.ic) (pin 23)) + (node (ref mcu.ic) (pin 35)) + (node (ref mcu.ic) (pin 47)) + (node (ref mcu.ic) (pin 44)) + (node (ref led.res) (pin 2)) + (node (ref usb.conn) (pin S1)) + (node (ref reg.hf_in_cap) (pin 2)) + (node (ref mcu.pwr_cap[0]) (pin 2)) + (node (ref mcu.pwr_cap[1]) (pin 2)) + (node (ref mcu.pwr_cap[2]) (pin 2)) + (node (ref mcu.pwr_cap[3]) (pin 2)) + (node (ref mcu.vdda_cap_0) (pin 2)) + (node (ref mcu.vdda_cap_1) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 2)) + (node (ref usb.cc_pull.cc1) (pin 1)) + (node (ref usb.cc_pull.cc2) (pin 1)) + (node (ref mcu.swd) (pin 3)) + (node (ref mcu.swd) (pin 5)) + (node (ref mcu.swd) (pin 9)) + (node (ref reg.power_path.in_cap) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref usb.conn) (pin A4)) + (node (ref usb.conn) (pin B9)) + (node (ref usb.conn) (pin B4)) + (node (ref usb.conn) (pin A9)) + (node (ref reg.ic) (pin 3)) + (node (ref reg.ic) (pin 5)) + (node (ref reg.hf_in_cap) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref mcu.ic) (pin 1)) + (node (ref mcu.ic) (pin 9)) + (node (ref mcu.ic) (pin 24)) + (node (ref mcu.ic) (pin 36)) + (node (ref mcu.ic) (pin 48)) + (node (ref reg.fb.top_res) (pin 1)) + (node (ref mcu.swd) (pin 1)) + (node (ref mcu.pwr_cap[0]) (pin 1)) + (node (ref mcu.pwr_cap[1]) (pin 1)) + (node (ref mcu.pwr_cap[2]) (pin 1)) + (node (ref mcu.pwr_cap[3]) (pin 1)) + (node (ref mcu.vdda_cap_0) (pin 1)) + (node (ref mcu.vdda_cap_1) (pin 1)) + (node (ref reg.power_path.inductor) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 1))) +(net (code 4) (name "led.signal") + (node (ref mcu.ic) (pin 10)) + (node (ref led.package) (pin 2))) +(net (code 5) (name "usb.usb.dp") + (node (ref usb.conn) (pin A6)) + (node (ref usb.conn) (pin B6))) +(net (code 6) (name "usb.usb.dm") + (node (ref usb.conn) (pin A7)) + (node (ref usb.conn) (pin B7))) +(net (code 7) (name "usb.conn.cc.cc1") + (node (ref usb.conn) (pin A5)) + (node (ref usb.cc_pull.cc1) (pin 2))) +(net (code 8) (name "usb.conn.cc.cc2") + (node (ref usb.conn) (pin B5)) + (node (ref usb.cc_pull.cc2) (pin 2))) +(net (code 9) (name "reg.fb.output") + (node (ref reg.ic) (pin 4)) + (node (ref reg.fb.top_res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 1))) +(net (code 10) (name "reg.vbst_cap.neg") + (node (ref reg.vbst_cap) (pin 2)) + (node (ref reg.ic) (pin 2)) + (node (ref reg.power_path.inductor) (pin 1))) +(net (code 11) (name "reg.vbst_cap.pos") + (node (ref reg.vbst_cap) (pin 1)) + (node (ref reg.ic) (pin 6))) +(net (code 12) (name "mcu.swd_node.swdio") + (node (ref mcu.ic) (pin 34)) + (node (ref mcu.swd) (pin 2))) +(net (code 13) (name "mcu.swd_node.swclk") + (node (ref mcu.ic) (pin 37)) + (node (ref mcu.swd) (pin 4))) +(net (code 14) (name "mcu.reset_node") + (node (ref mcu.ic) (pin 7)) + (node (ref mcu.swd) (pin 10))) +(net (code 15) (name "mcu.swd.swo") + (node (ref mcu.swd) (pin 6))) +(net (code 16) (name "mcu.swd.tdi") + (node (ref mcu.swd) (pin 8))) +(net (code 17) (name "mcu.ic.osc.xtal_in") + (node (ref mcu.ic) (pin 5))) +(net (code 18) (name "mcu.ic.osc.xtal_out") + (node (ref mcu.ic) (pin 6))) +(net (code 19) (name "led.res.a") + (node (ref led.res) (pin 1)) + (node (ref led.package) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyComplete/TestBlinkyComplete.ref.net b/examples/TestBlinkyComplete/TestBlinkyComplete.ref.net new file mode 100644 index 000000000..7db6f0466 --- /dev/null +++ b/examples/TestBlinkyComplete/TestBlinkyComplete.ref.net @@ -0,0 +1,334 @@ +(export (version D) +(components +(comp (ref "J1") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "U1") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "R3") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "R4") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "C1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "C2") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "L1") + (value "220mA 15uH ±20% 900mΩ 0603 Inductors (SMD) ROHS") + (footprint "Inductor_SMD:L_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "MGFL1608F150MT-LF (microgate)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "C3") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "C4") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "J2") + (value "PinHeader1.27 Shrouded 2x5") + (footprint "Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMD") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.swd.conn")) + (property (name "edg_short_path") (value "mcu.swd")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader1.27 Shrouded 2x5 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "02ae014f")) +(comp (ref "U2") + (value "STM32F103xxT6") + (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "STM32F103xxT6 (STMicroelectronics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "C5") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[0].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[0]")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168703d5")) +(comp (ref "C6") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[1].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[1]")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168903d6")) +(comp (ref "C7") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[2].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[2]")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168b03d7")) +(comp (ref "C8") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[3].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[3]")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168d03d8")) +(comp (ref "C9") + (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_0.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_0")) + (property (name "edg_refdes") (value "C9")) + (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dc03c2")) +(comp (ref "C10") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_1.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_1")) + (property (name "edg_refdes") (value "C10")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dd03c3")) +(comp (ref "D1") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.package")) + (property (name "edg_short_path") (value "led.package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "0b4e02cd")) +(comp (ref "R5") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led.res")) + (property (name "edg_short_path") (value "led.res")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "0296014b"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref J1) (pin A1)) + (node (ref J1) (pin B12)) + (node (ref J1) (pin B1)) + (node (ref J1) (pin A12)) + (node (ref U1) (pin 1)) + (node (ref U2) (pin 8)) + (node (ref U2) (pin 23)) + (node (ref U2) (pin 35)) + (node (ref U2) (pin 47)) + (node (ref U2) (pin 44)) + (node (ref R5) (pin 2)) + (node (ref J1) (pin S1)) + (node (ref C1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref C8) (pin 2)) + (node (ref C9) (pin 2)) + (node (ref C10) (pin 2)) + (node (ref R4) (pin 2)) + (node (ref R1) (pin 1)) + (node (ref R2) (pin 1)) + (node (ref J2) (pin 3)) + (node (ref J2) (pin 5)) + (node (ref J2) (pin 9)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref J1) (pin A4)) + (node (ref J1) (pin B9)) + (node (ref J1) (pin B4)) + (node (ref J1) (pin A9)) + (node (ref U1) (pin 3)) + (node (ref U1) (pin 5)) + (node (ref C1) (pin 1)) + (node (ref C3) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref U2) (pin 1)) + (node (ref U2) (pin 9)) + (node (ref U2) (pin 24)) + (node (ref U2) (pin 36)) + (node (ref U2) (pin 48)) + (node (ref R3) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref C7) (pin 1)) + (node (ref C8) (pin 1)) + (node (ref C9) (pin 1)) + (node (ref C10) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C4) (pin 1))) +(net (code 4) (name "led.signal") + (node (ref U2) (pin 10)) + (node (ref D1) (pin 2))) +(net (code 5) (name "usb.usb.dp") + (node (ref J1) (pin A6)) + (node (ref J1) (pin B6))) +(net (code 6) (name "usb.usb.dm") + (node (ref J1) (pin A7)) + (node (ref J1) (pin B7))) +(net (code 7) (name "usb.conn.cc.cc1") + (node (ref J1) (pin A5)) + (node (ref R1) (pin 2))) +(net (code 8) (name "usb.conn.cc.cc2") + (node (ref J1) (pin B5)) + (node (ref R2) (pin 2))) +(net (code 9) (name "reg.fb.output") + (node (ref U1) (pin 4)) + (node (ref R3) (pin 2)) + (node (ref R4) (pin 1))) +(net (code 10) (name "reg.vbst_cap.neg") + (node (ref C2) (pin 2)) + (node (ref U1) (pin 2)) + (node (ref L1) (pin 1))) +(net (code 11) (name "reg.vbst_cap.pos") + (node (ref C2) (pin 1)) + (node (ref U1) (pin 6))) +(net (code 12) (name "mcu.swd_node.swdio") + (node (ref U2) (pin 34)) + (node (ref J2) (pin 2))) +(net (code 13) (name "mcu.swd_node.swclk") + (node (ref U2) (pin 37)) + (node (ref J2) (pin 4))) +(net (code 14) (name "mcu.reset_node") + (node (ref U2) (pin 7)) + (node (ref J2) (pin 10))) +(net (code 15) (name "mcu.swd.swo") + (node (ref J2) (pin 6))) +(net (code 16) (name "mcu.swd.tdi") + (node (ref J2) (pin 8))) +(net (code 17) (name "mcu.ic.osc.xtal_in") + (node (ref U2) (pin 5))) +(net (code 18) (name "mcu.ic.osc.xtal_out") + (node (ref U2) (pin 6))) +(net (code 19) (name "led.res.a") + (node (ref R5) (pin 1)) + (node (ref D1) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyEmpty/TestBlinkyEmpty.net b/examples/TestBlinkyEmpty/TestBlinkyEmpty.net new file mode 100644 index 000000000..24f76ded1 --- /dev/null +++ b/examples/TestBlinkyEmpty/TestBlinkyEmpty.net @@ -0,0 +1,4 @@ +(export (version D) +(components) +(nets) +) \ No newline at end of file diff --git a/examples/TestBlinkyEmpty/TestBlinkyEmpty.ref.net b/examples/TestBlinkyEmpty/TestBlinkyEmpty.ref.net new file mode 100644 index 000000000..24f76ded1 --- /dev/null +++ b/examples/TestBlinkyEmpty/TestBlinkyEmpty.ref.net @@ -0,0 +1,4 @@ +(export (version D) +(components) +(nets) +) \ No newline at end of file diff --git a/examples/TestBlinkyExpanded/TestBlinkyExpanded.net b/examples/TestBlinkyExpanded/TestBlinkyExpanded.net new file mode 100644 index 000000000..dfdceca54 --- /dev/null +++ b/examples/TestBlinkyExpanded/TestBlinkyExpanded.net @@ -0,0 +1,436 @@ +(export (version D) +(components +(comp (ref "usb.conn") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "usb.cc_pull.cc1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "usb.cc_pull.cc2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "reg.ic") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "reg.fb.top_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "reg.fb.bottom_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "reg.hf_in_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "reg.vbst_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "reg.power_path.inductor") + (value "220mA 15uH ±20% 900mΩ 0603 Inductors (SMD) ROHS") + (footprint "Inductor_SMD:L_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "MGFL1608F150MT-LF (microgate)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "reg.power_path.in_cap") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "reg.power_path.out_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "mcu.swd") + (value "PinHeader1.27 Shrouded 2x5") + (footprint "Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMD") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.swd.conn")) + (property (name "edg_short_path") (value "mcu.swd")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader1.27 Shrouded 2x5 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "02ae014f")) +(comp (ref "mcu.ic") + (value "STM32F103xxT6") + (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "STM32F103xxT6 (STMicroelectronics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "mcu.pwr_cap[0]") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[0].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[0]")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168703d5")) +(comp (ref "mcu.pwr_cap[1]") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[1].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[1]")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168903d6")) +(comp (ref "mcu.pwr_cap[2]") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[2].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[2]")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168b03d7")) +(comp (ref "mcu.pwr_cap[3]") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[3].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[3]")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168d03d8")) +(comp (ref "mcu.vdda_cap_0") + (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_0.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_0")) + (property (name "edg_refdes") (value "C9")) + (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dc03c2")) +(comp (ref "mcu.vdda_cap_1") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_1.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_1")) + (property (name "edg_refdes") (value "C10")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dd03c3")) +(comp (ref "sw") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "led[0].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].package")) + (property (name "edg_short_path") (value "led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "led[0].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].res")) + (property (name "edg_short_path") (value "led[0].res")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "led[1].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].package")) + (property (name "edg_short_path") (value "led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "led[1].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].res")) + (property (name "edg_short_path") (value "led[1].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "led[2].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].package")) + (property (name "edg_short_path") (value "led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "led[2].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].res")) + (property (name "edg_short_path") (value "led[2].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0296014b")) +(comp (ref "led[3].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].package")) + (property (name "edg_short_path") (value "led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "led[3].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].res")) + (property (name "edg_short_path") (value "led[3].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0296014b"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref usb.conn) (pin A1)) + (node (ref usb.conn) (pin B12)) + (node (ref usb.conn) (pin B1)) + (node (ref usb.conn) (pin A12)) + (node (ref reg.ic) (pin 1)) + (node (ref mcu.ic) (pin 8)) + (node (ref mcu.ic) (pin 23)) + (node (ref mcu.ic) (pin 35)) + (node (ref mcu.ic) (pin 47)) + (node (ref mcu.ic) (pin 44)) + (node (ref sw) (pin 2)) + (node (ref led[0].res) (pin 2)) + (node (ref led[1].res) (pin 2)) + (node (ref led[2].res) (pin 2)) + (node (ref led[3].res) (pin 2)) + (node (ref usb.conn) (pin S1)) + (node (ref reg.hf_in_cap) (pin 2)) + (node (ref mcu.pwr_cap[0]) (pin 2)) + (node (ref mcu.pwr_cap[1]) (pin 2)) + (node (ref mcu.pwr_cap[2]) (pin 2)) + (node (ref mcu.pwr_cap[3]) (pin 2)) + (node (ref mcu.vdda_cap_0) (pin 2)) + (node (ref mcu.vdda_cap_1) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 2)) + (node (ref usb.cc_pull.cc1) (pin 1)) + (node (ref usb.cc_pull.cc2) (pin 1)) + (node (ref mcu.swd) (pin 3)) + (node (ref mcu.swd) (pin 5)) + (node (ref mcu.swd) (pin 9)) + (node (ref reg.power_path.in_cap) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref usb.conn) (pin A4)) + (node (ref usb.conn) (pin B9)) + (node (ref usb.conn) (pin B4)) + (node (ref usb.conn) (pin A9)) + (node (ref reg.ic) (pin 3)) + (node (ref reg.ic) (pin 5)) + (node (ref reg.hf_in_cap) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref mcu.ic) (pin 1)) + (node (ref mcu.ic) (pin 9)) + (node (ref mcu.ic) (pin 24)) + (node (ref mcu.ic) (pin 36)) + (node (ref mcu.ic) (pin 48)) + (node (ref reg.fb.top_res) (pin 1)) + (node (ref mcu.swd) (pin 1)) + (node (ref mcu.pwr_cap[0]) (pin 1)) + (node (ref mcu.pwr_cap[1]) (pin 1)) + (node (ref mcu.pwr_cap[2]) (pin 1)) + (node (ref mcu.pwr_cap[3]) (pin 1)) + (node (ref mcu.vdda_cap_0) (pin 1)) + (node (ref mcu.vdda_cap_1) (pin 1)) + (node (ref reg.power_path.inductor) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref mcu.ic) (pin 10)) + (node (ref sw) (pin 1))) +(net (code 5) (name "led[0].signal") + (node (ref mcu.ic) (pin 11)) + (node (ref led[0].package) (pin 2))) +(net (code 6) (name "led[1].signal") + (node (ref mcu.ic) (pin 12)) + (node (ref led[1].package) (pin 2))) +(net (code 7) (name "led[2].signal") + (node (ref mcu.ic) (pin 13)) + (node (ref led[2].package) (pin 2))) +(net (code 8) (name "led[3].signal") + (node (ref mcu.ic) (pin 14)) + (node (ref led[3].package) (pin 2))) +(net (code 9) (name "usb.usb.dp") + (node (ref usb.conn) (pin A6)) + (node (ref usb.conn) (pin B6))) +(net (code 10) (name "usb.usb.dm") + (node (ref usb.conn) (pin A7)) + (node (ref usb.conn) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref usb.conn) (pin A5)) + (node (ref usb.cc_pull.cc1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref usb.conn) (pin B5)) + (node (ref usb.cc_pull.cc2) (pin 2))) +(net (code 13) (name "reg.fb.output") + (node (ref reg.ic) (pin 4)) + (node (ref reg.fb.top_res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 1))) +(net (code 14) (name "reg.vbst_cap.neg") + (node (ref reg.vbst_cap) (pin 2)) + (node (ref reg.ic) (pin 2)) + (node (ref reg.power_path.inductor) (pin 1))) +(net (code 15) (name "reg.vbst_cap.pos") + (node (ref reg.vbst_cap) (pin 1)) + (node (ref reg.ic) (pin 6))) +(net (code 16) (name "mcu.swd_node.swdio") + (node (ref mcu.ic) (pin 34)) + (node (ref mcu.swd) (pin 2))) +(net (code 17) (name "mcu.swd_node.swclk") + (node (ref mcu.ic) (pin 37)) + (node (ref mcu.swd) (pin 4))) +(net (code 18) (name "mcu.reset_node") + (node (ref mcu.ic) (pin 7)) + (node (ref mcu.swd) (pin 10))) +(net (code 19) (name "mcu.swd.swo") + (node (ref mcu.swd) (pin 6))) +(net (code 20) (name "mcu.swd.tdi") + (node (ref mcu.swd) (pin 8))) +(net (code 21) (name "mcu.ic.osc.xtal_in") + (node (ref mcu.ic) (pin 5))) +(net (code 22) (name "mcu.ic.osc.xtal_out") + (node (ref mcu.ic) (pin 6))) +(net (code 23) (name "led[0].res.a") + (node (ref led[0].res) (pin 1)) + (node (ref led[0].package) (pin 1))) +(net (code 24) (name "led[1].res.a") + (node (ref led[1].res) (pin 1)) + (node (ref led[1].package) (pin 1))) +(net (code 25) (name "led[2].res.a") + (node (ref led[2].res) (pin 1)) + (node (ref led[2].package) (pin 1))) +(net (code 26) (name "led[3].res.a") + (node (ref led[3].res) (pin 1)) + (node (ref led[3].package) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyExpanded/TestBlinkyExpanded.ref.net b/examples/TestBlinkyExpanded/TestBlinkyExpanded.ref.net new file mode 100644 index 000000000..3210ad798 --- /dev/null +++ b/examples/TestBlinkyExpanded/TestBlinkyExpanded.ref.net @@ -0,0 +1,436 @@ +(export (version D) +(components +(comp (ref "J1") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "U1") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "R3") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "R4") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "C1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "C2") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "L1") + (value "220mA 15uH ±20% 900mΩ 0603 Inductors (SMD) ROHS") + (footprint "Inductor_SMD:L_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "MGFL1608F150MT-LF (microgate)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "C3") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "C4") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "J2") + (value "PinHeader1.27 Shrouded 2x5") + (footprint "Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMD") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.swd.conn")) + (property (name "edg_short_path") (value "mcu.swd")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader1.27 Shrouded 2x5 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "02ae014f")) +(comp (ref "U2") + (value "STM32F103xxT6") + (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "STM32F103xxT6 (STMicroelectronics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "C5") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[0].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[0]")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168703d5")) +(comp (ref "C6") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[1].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[1]")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168903d6")) +(comp (ref "C7") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[2].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[2]")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168b03d7")) +(comp (ref "C8") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[3].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[3]")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168d03d8")) +(comp (ref "C9") + (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_0.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_0")) + (property (name "edg_refdes") (value "C9")) + (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dc03c2")) +(comp (ref "C10") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_1.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_1")) + (property (name "edg_refdes") (value "C10")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dd03c3")) +(comp (ref "SW1") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "D1") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].package")) + (property (name "edg_short_path") (value "led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "R5") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].res")) + (property (name "edg_short_path") (value "led[0].res")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "D2") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].package")) + (property (name "edg_short_path") (value "led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "R6") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].res")) + (property (name "edg_short_path") (value "led[1].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "D3") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].package")) + (property (name "edg_short_path") (value "led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "R7") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].res")) + (property (name "edg_short_path") (value "led[2].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0296014b")) +(comp (ref "D4") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].package")) + (property (name "edg_short_path") (value "led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "R8") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].res")) + (property (name "edg_short_path") (value "led[3].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0296014b"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref J1) (pin A1)) + (node (ref J1) (pin B12)) + (node (ref J1) (pin B1)) + (node (ref J1) (pin A12)) + (node (ref U1) (pin 1)) + (node (ref U2) (pin 8)) + (node (ref U2) (pin 23)) + (node (ref U2) (pin 35)) + (node (ref U2) (pin 47)) + (node (ref U2) (pin 44)) + (node (ref SW1) (pin 2)) + (node (ref R5) (pin 2)) + (node (ref R6) (pin 2)) + (node (ref R7) (pin 2)) + (node (ref R8) (pin 2)) + (node (ref J1) (pin S1)) + (node (ref C1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref C8) (pin 2)) + (node (ref C9) (pin 2)) + (node (ref C10) (pin 2)) + (node (ref R4) (pin 2)) + (node (ref R1) (pin 1)) + (node (ref R2) (pin 1)) + (node (ref J2) (pin 3)) + (node (ref J2) (pin 5)) + (node (ref J2) (pin 9)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref J1) (pin A4)) + (node (ref J1) (pin B9)) + (node (ref J1) (pin B4)) + (node (ref J1) (pin A9)) + (node (ref U1) (pin 3)) + (node (ref U1) (pin 5)) + (node (ref C1) (pin 1)) + (node (ref C3) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref U2) (pin 1)) + (node (ref U2) (pin 9)) + (node (ref U2) (pin 24)) + (node (ref U2) (pin 36)) + (node (ref U2) (pin 48)) + (node (ref R3) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref C7) (pin 1)) + (node (ref C8) (pin 1)) + (node (ref C9) (pin 1)) + (node (ref C10) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C4) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref U2) (pin 10)) + (node (ref SW1) (pin 1))) +(net (code 5) (name "led[0].signal") + (node (ref U2) (pin 11)) + (node (ref D1) (pin 2))) +(net (code 6) (name "led[1].signal") + (node (ref U2) (pin 12)) + (node (ref D2) (pin 2))) +(net (code 7) (name "led[2].signal") + (node (ref U2) (pin 13)) + (node (ref D3) (pin 2))) +(net (code 8) (name "led[3].signal") + (node (ref U2) (pin 14)) + (node (ref D4) (pin 2))) +(net (code 9) (name "usb.usb.dp") + (node (ref J1) (pin A6)) + (node (ref J1) (pin B6))) +(net (code 10) (name "usb.usb.dm") + (node (ref J1) (pin A7)) + (node (ref J1) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref J1) (pin A5)) + (node (ref R1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref J1) (pin B5)) + (node (ref R2) (pin 2))) +(net (code 13) (name "reg.fb.output") + (node (ref U1) (pin 4)) + (node (ref R3) (pin 2)) + (node (ref R4) (pin 1))) +(net (code 14) (name "reg.vbst_cap.neg") + (node (ref C2) (pin 2)) + (node (ref U1) (pin 2)) + (node (ref L1) (pin 1))) +(net (code 15) (name "reg.vbst_cap.pos") + (node (ref C2) (pin 1)) + (node (ref U1) (pin 6))) +(net (code 16) (name "mcu.swd_node.swdio") + (node (ref U2) (pin 34)) + (node (ref J2) (pin 2))) +(net (code 17) (name "mcu.swd_node.swclk") + (node (ref U2) (pin 37)) + (node (ref J2) (pin 4))) +(net (code 18) (name "mcu.reset_node") + (node (ref U2) (pin 7)) + (node (ref J2) (pin 10))) +(net (code 19) (name "mcu.swd.swo") + (node (ref J2) (pin 6))) +(net (code 20) (name "mcu.swd.tdi") + (node (ref J2) (pin 8))) +(net (code 21) (name "mcu.ic.osc.xtal_in") + (node (ref U2) (pin 5))) +(net (code 22) (name "mcu.ic.osc.xtal_out") + (node (ref U2) (pin 6))) +(net (code 23) (name "led[0].res.a") + (node (ref R5) (pin 1)) + (node (ref D1) (pin 1))) +(net (code 24) (name "led[1].res.a") + (node (ref R6) (pin 1)) + (node (ref D2) (pin 1))) +(net (code 25) (name "led[2].res.a") + (node (ref R7) (pin 1)) + (node (ref D3) (pin 1))) +(net (code 26) (name "led[3].res.a") + (node (ref R8) (pin 1)) + (node (ref D4) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyImplicit/TestBlinkyImplicit.net b/examples/TestBlinkyImplicit/TestBlinkyImplicit.net new file mode 100644 index 000000000..dfdceca54 --- /dev/null +++ b/examples/TestBlinkyImplicit/TestBlinkyImplicit.net @@ -0,0 +1,436 @@ +(export (version D) +(components +(comp (ref "usb.conn") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "usb.cc_pull.cc1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "usb.cc_pull.cc2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "reg.ic") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "reg.fb.top_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "reg.fb.bottom_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "reg.hf_in_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "reg.vbst_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "reg.power_path.inductor") + (value "220mA 15uH ±20% 900mΩ 0603 Inductors (SMD) ROHS") + (footprint "Inductor_SMD:L_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "MGFL1608F150MT-LF (microgate)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "reg.power_path.in_cap") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "reg.power_path.out_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "mcu.swd") + (value "PinHeader1.27 Shrouded 2x5") + (footprint "Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMD") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.swd.conn")) + (property (name "edg_short_path") (value "mcu.swd")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader1.27 Shrouded 2x5 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "02ae014f")) +(comp (ref "mcu.ic") + (value "STM32F103xxT6") + (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "STM32F103xxT6 (STMicroelectronics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "mcu.pwr_cap[0]") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[0].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[0]")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168703d5")) +(comp (ref "mcu.pwr_cap[1]") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[1].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[1]")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168903d6")) +(comp (ref "mcu.pwr_cap[2]") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[2].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[2]")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168b03d7")) +(comp (ref "mcu.pwr_cap[3]") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[3].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[3]")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168d03d8")) +(comp (ref "mcu.vdda_cap_0") + (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_0.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_0")) + (property (name "edg_refdes") (value "C9")) + (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dc03c2")) +(comp (ref "mcu.vdda_cap_1") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_1.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_1")) + (property (name "edg_refdes") (value "C10")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dd03c3")) +(comp (ref "sw") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "led[0].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].package")) + (property (name "edg_short_path") (value "led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "led[0].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].res")) + (property (name "edg_short_path") (value "led[0].res")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "led[1].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].package")) + (property (name "edg_short_path") (value "led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "led[1].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].res")) + (property (name "edg_short_path") (value "led[1].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "led[2].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].package")) + (property (name "edg_short_path") (value "led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "led[2].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].res")) + (property (name "edg_short_path") (value "led[2].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0296014b")) +(comp (ref "led[3].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].package")) + (property (name "edg_short_path") (value "led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "led[3].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].res")) + (property (name "edg_short_path") (value "led[3].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0296014b"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref usb.conn) (pin A1)) + (node (ref usb.conn) (pin B12)) + (node (ref usb.conn) (pin B1)) + (node (ref usb.conn) (pin A12)) + (node (ref reg.ic) (pin 1)) + (node (ref mcu.ic) (pin 8)) + (node (ref mcu.ic) (pin 23)) + (node (ref mcu.ic) (pin 35)) + (node (ref mcu.ic) (pin 47)) + (node (ref mcu.ic) (pin 44)) + (node (ref sw) (pin 2)) + (node (ref led[0].res) (pin 2)) + (node (ref led[1].res) (pin 2)) + (node (ref led[2].res) (pin 2)) + (node (ref led[3].res) (pin 2)) + (node (ref usb.conn) (pin S1)) + (node (ref reg.hf_in_cap) (pin 2)) + (node (ref mcu.pwr_cap[0]) (pin 2)) + (node (ref mcu.pwr_cap[1]) (pin 2)) + (node (ref mcu.pwr_cap[2]) (pin 2)) + (node (ref mcu.pwr_cap[3]) (pin 2)) + (node (ref mcu.vdda_cap_0) (pin 2)) + (node (ref mcu.vdda_cap_1) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 2)) + (node (ref usb.cc_pull.cc1) (pin 1)) + (node (ref usb.cc_pull.cc2) (pin 1)) + (node (ref mcu.swd) (pin 3)) + (node (ref mcu.swd) (pin 5)) + (node (ref mcu.swd) (pin 9)) + (node (ref reg.power_path.in_cap) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref usb.conn) (pin A4)) + (node (ref usb.conn) (pin B9)) + (node (ref usb.conn) (pin B4)) + (node (ref usb.conn) (pin A9)) + (node (ref reg.ic) (pin 3)) + (node (ref reg.ic) (pin 5)) + (node (ref reg.hf_in_cap) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref mcu.ic) (pin 1)) + (node (ref mcu.ic) (pin 9)) + (node (ref mcu.ic) (pin 24)) + (node (ref mcu.ic) (pin 36)) + (node (ref mcu.ic) (pin 48)) + (node (ref reg.fb.top_res) (pin 1)) + (node (ref mcu.swd) (pin 1)) + (node (ref mcu.pwr_cap[0]) (pin 1)) + (node (ref mcu.pwr_cap[1]) (pin 1)) + (node (ref mcu.pwr_cap[2]) (pin 1)) + (node (ref mcu.pwr_cap[3]) (pin 1)) + (node (ref mcu.vdda_cap_0) (pin 1)) + (node (ref mcu.vdda_cap_1) (pin 1)) + (node (ref reg.power_path.inductor) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref mcu.ic) (pin 10)) + (node (ref sw) (pin 1))) +(net (code 5) (name "led[0].signal") + (node (ref mcu.ic) (pin 11)) + (node (ref led[0].package) (pin 2))) +(net (code 6) (name "led[1].signal") + (node (ref mcu.ic) (pin 12)) + (node (ref led[1].package) (pin 2))) +(net (code 7) (name "led[2].signal") + (node (ref mcu.ic) (pin 13)) + (node (ref led[2].package) (pin 2))) +(net (code 8) (name "led[3].signal") + (node (ref mcu.ic) (pin 14)) + (node (ref led[3].package) (pin 2))) +(net (code 9) (name "usb.usb.dp") + (node (ref usb.conn) (pin A6)) + (node (ref usb.conn) (pin B6))) +(net (code 10) (name "usb.usb.dm") + (node (ref usb.conn) (pin A7)) + (node (ref usb.conn) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref usb.conn) (pin A5)) + (node (ref usb.cc_pull.cc1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref usb.conn) (pin B5)) + (node (ref usb.cc_pull.cc2) (pin 2))) +(net (code 13) (name "reg.fb.output") + (node (ref reg.ic) (pin 4)) + (node (ref reg.fb.top_res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 1))) +(net (code 14) (name "reg.vbst_cap.neg") + (node (ref reg.vbst_cap) (pin 2)) + (node (ref reg.ic) (pin 2)) + (node (ref reg.power_path.inductor) (pin 1))) +(net (code 15) (name "reg.vbst_cap.pos") + (node (ref reg.vbst_cap) (pin 1)) + (node (ref reg.ic) (pin 6))) +(net (code 16) (name "mcu.swd_node.swdio") + (node (ref mcu.ic) (pin 34)) + (node (ref mcu.swd) (pin 2))) +(net (code 17) (name "mcu.swd_node.swclk") + (node (ref mcu.ic) (pin 37)) + (node (ref mcu.swd) (pin 4))) +(net (code 18) (name "mcu.reset_node") + (node (ref mcu.ic) (pin 7)) + (node (ref mcu.swd) (pin 10))) +(net (code 19) (name "mcu.swd.swo") + (node (ref mcu.swd) (pin 6))) +(net (code 20) (name "mcu.swd.tdi") + (node (ref mcu.swd) (pin 8))) +(net (code 21) (name "mcu.ic.osc.xtal_in") + (node (ref mcu.ic) (pin 5))) +(net (code 22) (name "mcu.ic.osc.xtal_out") + (node (ref mcu.ic) (pin 6))) +(net (code 23) (name "led[0].res.a") + (node (ref led[0].res) (pin 1)) + (node (ref led[0].package) (pin 1))) +(net (code 24) (name "led[1].res.a") + (node (ref led[1].res) (pin 1)) + (node (ref led[1].package) (pin 1))) +(net (code 25) (name "led[2].res.a") + (node (ref led[2].res) (pin 1)) + (node (ref led[2].package) (pin 1))) +(net (code 26) (name "led[3].res.a") + (node (ref led[3].res) (pin 1)) + (node (ref led[3].package) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyImplicit/TestBlinkyImplicit.ref.net b/examples/TestBlinkyImplicit/TestBlinkyImplicit.ref.net new file mode 100644 index 000000000..3210ad798 --- /dev/null +++ b/examples/TestBlinkyImplicit/TestBlinkyImplicit.ref.net @@ -0,0 +1,436 @@ +(export (version D) +(components +(comp (ref "J1") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "U1") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "R3") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "R4") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "C1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "C2") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "L1") + (value "220mA 15uH ±20% 900mΩ 0603 Inductors (SMD) ROHS") + (footprint "Inductor_SMD:L_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "MGFL1608F150MT-LF (microgate)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "C3") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "C4") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "J2") + (value "PinHeader1.27 Shrouded 2x5") + (footprint "Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMD") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.swd.conn")) + (property (name "edg_short_path") (value "mcu.swd")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader1.27 Shrouded 2x5 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "02ae014f")) +(comp (ref "U2") + (value "STM32F103xxT6") + (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "STM32F103xxT6 (STMicroelectronics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "C5") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[0].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[0]")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168703d5")) +(comp (ref "C6") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[1].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[1]")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168903d6")) +(comp (ref "C7") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[2].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[2]")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168b03d7")) +(comp (ref "C8") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.pwr_cap[3].cap")) + (property (name "edg_short_path") (value "mcu.pwr_cap[3]")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "168d03d8")) +(comp (ref "C9") + (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_0.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_0")) + (property (name "edg_refdes") (value "C9")) + (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dc03c2")) +(comp (ref "C10") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Stm32f103.Stm32f103_48")) + (property (name "edg_path") (value "mcu.vdda_cap_1.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap_1")) + (property (name "edg_refdes") (value "C10")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15dd03c3")) +(comp (ref "SW1") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "D1") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].package")) + (property (name "edg_short_path") (value "led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "R5") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].res")) + (property (name "edg_short_path") (value "led[0].res")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "D2") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].package")) + (property (name "edg_short_path") (value "led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "R6") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].res")) + (property (name "edg_short_path") (value "led[1].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "D3") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].package")) + (property (name "edg_short_path") (value "led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "R7") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].res")) + (property (name "edg_short_path") (value "led[2].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0296014b")) +(comp (ref "D4") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].package")) + (property (name "edg_short_path") (value "led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "R8") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].res")) + (property (name "edg_short_path") (value "led[3].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0296014b"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref J1) (pin A1)) + (node (ref J1) (pin B12)) + (node (ref J1) (pin B1)) + (node (ref J1) (pin A12)) + (node (ref U1) (pin 1)) + (node (ref U2) (pin 8)) + (node (ref U2) (pin 23)) + (node (ref U2) (pin 35)) + (node (ref U2) (pin 47)) + (node (ref U2) (pin 44)) + (node (ref SW1) (pin 2)) + (node (ref R5) (pin 2)) + (node (ref R6) (pin 2)) + (node (ref R7) (pin 2)) + (node (ref R8) (pin 2)) + (node (ref J1) (pin S1)) + (node (ref C1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref C8) (pin 2)) + (node (ref C9) (pin 2)) + (node (ref C10) (pin 2)) + (node (ref R4) (pin 2)) + (node (ref R1) (pin 1)) + (node (ref R2) (pin 1)) + (node (ref J2) (pin 3)) + (node (ref J2) (pin 5)) + (node (ref J2) (pin 9)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref J1) (pin A4)) + (node (ref J1) (pin B9)) + (node (ref J1) (pin B4)) + (node (ref J1) (pin A9)) + (node (ref U1) (pin 3)) + (node (ref U1) (pin 5)) + (node (ref C1) (pin 1)) + (node (ref C3) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref U2) (pin 1)) + (node (ref U2) (pin 9)) + (node (ref U2) (pin 24)) + (node (ref U2) (pin 36)) + (node (ref U2) (pin 48)) + (node (ref R3) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref C7) (pin 1)) + (node (ref C8) (pin 1)) + (node (ref C9) (pin 1)) + (node (ref C10) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C4) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref U2) (pin 10)) + (node (ref SW1) (pin 1))) +(net (code 5) (name "led[0].signal") + (node (ref U2) (pin 11)) + (node (ref D1) (pin 2))) +(net (code 6) (name "led[1].signal") + (node (ref U2) (pin 12)) + (node (ref D2) (pin 2))) +(net (code 7) (name "led[2].signal") + (node (ref U2) (pin 13)) + (node (ref D3) (pin 2))) +(net (code 8) (name "led[3].signal") + (node (ref U2) (pin 14)) + (node (ref D4) (pin 2))) +(net (code 9) (name "usb.usb.dp") + (node (ref J1) (pin A6)) + (node (ref J1) (pin B6))) +(net (code 10) (name "usb.usb.dm") + (node (ref J1) (pin A7)) + (node (ref J1) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref J1) (pin A5)) + (node (ref R1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref J1) (pin B5)) + (node (ref R2) (pin 2))) +(net (code 13) (name "reg.fb.output") + (node (ref U1) (pin 4)) + (node (ref R3) (pin 2)) + (node (ref R4) (pin 1))) +(net (code 14) (name "reg.vbst_cap.neg") + (node (ref C2) (pin 2)) + (node (ref U1) (pin 2)) + (node (ref L1) (pin 1))) +(net (code 15) (name "reg.vbst_cap.pos") + (node (ref C2) (pin 1)) + (node (ref U1) (pin 6))) +(net (code 16) (name "mcu.swd_node.swdio") + (node (ref U2) (pin 34)) + (node (ref J2) (pin 2))) +(net (code 17) (name "mcu.swd_node.swclk") + (node (ref U2) (pin 37)) + (node (ref J2) (pin 4))) +(net (code 18) (name "mcu.reset_node") + (node (ref U2) (pin 7)) + (node (ref J2) (pin 10))) +(net (code 19) (name "mcu.swd.swo") + (node (ref J2) (pin 6))) +(net (code 20) (name "mcu.swd.tdi") + (node (ref J2) (pin 8))) +(net (code 21) (name "mcu.ic.osc.xtal_in") + (node (ref U2) (pin 5))) +(net (code 22) (name "mcu.ic.osc.xtal_out") + (node (ref U2) (pin 6))) +(net (code 23) (name "led[0].res.a") + (node (ref R5) (pin 1)) + (node (ref D1) (pin 1))) +(net (code 24) (name "led[1].res.a") + (node (ref R6) (pin 1)) + (node (ref D2) (pin 1))) +(net (code 25) (name "led[2].res.a") + (node (ref R7) (pin 1)) + (node (ref D3) (pin 1))) +(net (code 26) (name "led[3].res.a") + (node (ref R8) (pin 1)) + (node (ref D4) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyMicro/TestBlinkyMicro.net b/examples/TestBlinkyMicro/TestBlinkyMicro.net new file mode 100644 index 000000000..7ae1c53a9 --- /dev/null +++ b/examples/TestBlinkyMicro/TestBlinkyMicro.net @@ -0,0 +1,411 @@ +(export (version D) +(components +(comp (ref "usb.conn") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "usb.cc_pull.cc1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "usb.cc_pull.cc2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "reg.ic") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "reg.fb.top_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "reg.fb.bottom_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "reg.hf_in_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "reg.vbst_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "reg.power_path.inductor") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "reg.power_path.in_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "reg.power_path.out_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "mcu.ic") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "mcu.vcc_cap0") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "mcu.vcc_cap1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "mcu.prog") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "mcu.boot") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "mcu.en_pull.r") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "mcu.en_pull.c") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "sw") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW2")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "led[0].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].package")) + (property (name "edg_short_path") (value "led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "led[0].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].res")) + (property (name "edg_short_path") (value "led[0].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "led[1].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].package")) + (property (name "edg_short_path") (value "led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "led[1].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].res")) + (property (name "edg_short_path") (value "led[1].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "led[2].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].package")) + (property (name "edg_short_path") (value "led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "led[2].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].res")) + (property (name "edg_short_path") (value "led[2].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0296014b")) +(comp (ref "led[3].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].package")) + (property (name "edg_short_path") (value "led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "led[3].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].res")) + (property (name "edg_short_path") (value "led[3].res")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0296014b"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref usb.conn) (pin A1)) + (node (ref usb.conn) (pin B12)) + (node (ref usb.conn) (pin B1)) + (node (ref usb.conn) (pin A12)) + (node (ref reg.ic) (pin 1)) + (node (ref mcu.ic) (pin 1)) + (node (ref mcu.ic) (pin 15)) + (node (ref mcu.ic) (pin 38)) + (node (ref mcu.ic) (pin 39)) + (node (ref sw) (pin 2)) + (node (ref led[0].res) (pin 2)) + (node (ref led[1].res) (pin 2)) + (node (ref led[2].res) (pin 2)) + (node (ref led[3].res) (pin 2)) + (node (ref usb.conn) (pin S1)) + (node (ref reg.hf_in_cap) (pin 2)) + (node (ref mcu.vcc_cap0) (pin 2)) + (node (ref mcu.vcc_cap1) (pin 2)) + (node (ref mcu.prog) (pin 4)) + (node (ref mcu.boot) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 2)) + (node (ref mcu.en_pull.c) (pin 2)) + (node (ref usb.cc_pull.cc1) (pin 1)) + (node (ref usb.cc_pull.cc2) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref usb.conn) (pin A4)) + (node (ref usb.conn) (pin B9)) + (node (ref usb.conn) (pin B4)) + (node (ref usb.conn) (pin A9)) + (node (ref reg.ic) (pin 3)) + (node (ref reg.ic) (pin 5)) + (node (ref reg.hf_in_cap) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref mcu.ic) (pin 2)) + (node (ref reg.fb.top_res) (pin 1)) + (node (ref mcu.vcc_cap0) (pin 1)) + (node (ref mcu.vcc_cap1) (pin 1)) + (node (ref mcu.prog) (pin 1)) + (node (ref mcu.en_pull.r) (pin 1)) + (node (ref reg.power_path.inductor) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref mcu.ic) (pin 8)) + (node (ref sw) (pin 1))) +(net (code 5) (name "led[0].signal") + (node (ref mcu.ic) (pin 26)) + (node (ref led[0].package) (pin 2))) +(net (code 6) (name "led[1].signal") + (node (ref mcu.ic) (pin 27)) + (node (ref led[1].package) (pin 2))) +(net (code 7) (name "led[2].signal") + (node (ref mcu.ic) (pin 28)) + (node (ref led[2].package) (pin 2))) +(net (code 8) (name "led[3].signal") + (node (ref mcu.ic) (pin 29)) + (node (ref led[3].package) (pin 2))) +(net (code 9) (name "usb.usb.dp") + (node (ref usb.conn) (pin A6)) + (node (ref usb.conn) (pin B6))) +(net (code 10) (name "usb.usb.dm") + (node (ref usb.conn) (pin A7)) + (node (ref usb.conn) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref usb.conn) (pin A5)) + (node (ref usb.cc_pull.cc1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref usb.conn) (pin B5)) + (node (ref usb.cc_pull.cc2) (pin 2))) +(net (code 13) (name "reg.fb.output") + (node (ref reg.ic) (pin 4)) + (node (ref reg.fb.top_res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 1))) +(net (code 14) (name "reg.vbst_cap.neg") + (node (ref reg.vbst_cap) (pin 2)) + (node (ref reg.ic) (pin 2)) + (node (ref reg.power_path.inductor) (pin 1))) +(net (code 15) (name "reg.vbst_cap.pos") + (node (ref reg.vbst_cap) (pin 1)) + (node (ref reg.ic) (pin 6))) +(net (code 16) (name "mcu.program_uart_node.a_tx") + (node (ref mcu.ic) (pin 35)) + (node (ref mcu.prog) (pin 2))) +(net (code 17) (name "mcu.program_uart_node.b_tx") + (node (ref mcu.ic) (pin 34)) + (node (ref mcu.prog) (pin 3))) +(net (code 18) (name "mcu.program_en_node") + (node (ref mcu.ic) (pin 3)) + (node (ref mcu.en_pull.r) (pin 2)) + (node (ref mcu.en_pull.c) (pin 1))) +(net (code 19) (name "mcu.program_boot_node") + (node (ref mcu.ic) (pin 25)) + (node (ref mcu.boot) (pin 1))) +(net (code 20) (name "mcu.ic.io2") + (node (ref mcu.ic) (pin 24))) +(net (code 21) (name "led[0].res.a") + (node (ref led[0].res) (pin 1)) + (node (ref led[0].package) (pin 1))) +(net (code 22) (name "led[1].res.a") + (node (ref led[1].res) (pin 1)) + (node (ref led[1].package) (pin 1))) +(net (code 23) (name "led[2].res.a") + (node (ref led[2].res) (pin 1)) + (node (ref led[2].package) (pin 1))) +(net (code 24) (name "led[3].res.a") + (node (ref led[3].res) (pin 1)) + (node (ref led[3].package) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyMicro/TestBlinkyMicro.ref.net b/examples/TestBlinkyMicro/TestBlinkyMicro.ref.net new file mode 100644 index 000000000..12cd39f86 --- /dev/null +++ b/examples/TestBlinkyMicro/TestBlinkyMicro.ref.net @@ -0,0 +1,411 @@ +(export (version D) +(components +(comp (ref "J1") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "U1") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "R3") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "R4") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "C1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "C2") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "L1") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "C3") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "C4") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "U2") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "C5") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "C6") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "J2") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "SW1") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "R5") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "C7") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "SW2") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW2")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "D1") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].package")) + (property (name "edg_short_path") (value "led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "R6") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].res")) + (property (name "edg_short_path") (value "led[0].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "D2") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].package")) + (property (name "edg_short_path") (value "led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "R7") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].res")) + (property (name "edg_short_path") (value "led[1].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "D3") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].package")) + (property (name "edg_short_path") (value "led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "R8") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].res")) + (property (name "edg_short_path") (value "led[2].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0296014b")) +(comp (ref "D4") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].package")) + (property (name "edg_short_path") (value "led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "R9") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].res")) + (property (name "edg_short_path") (value "led[3].res")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0296014b"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref J1) (pin A1)) + (node (ref J1) (pin B12)) + (node (ref J1) (pin B1)) + (node (ref J1) (pin A12)) + (node (ref U1) (pin 1)) + (node (ref U2) (pin 1)) + (node (ref U2) (pin 15)) + (node (ref U2) (pin 38)) + (node (ref U2) (pin 39)) + (node (ref SW2) (pin 2)) + (node (ref R6) (pin 2)) + (node (ref R7) (pin 2)) + (node (ref R8) (pin 2)) + (node (ref R9) (pin 2)) + (node (ref J1) (pin S1)) + (node (ref C1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref J2) (pin 4)) + (node (ref SW1) (pin 2)) + (node (ref R4) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref R1) (pin 1)) + (node (ref R2) (pin 1)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref J1) (pin A4)) + (node (ref J1) (pin B9)) + (node (ref J1) (pin B4)) + (node (ref J1) (pin A9)) + (node (ref U1) (pin 3)) + (node (ref U1) (pin 5)) + (node (ref C1) (pin 1)) + (node (ref C3) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref U2) (pin 2)) + (node (ref R3) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref R5) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C4) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref U2) (pin 8)) + (node (ref SW2) (pin 1))) +(net (code 5) (name "led[0].signal") + (node (ref U2) (pin 26)) + (node (ref D1) (pin 2))) +(net (code 6) (name "led[1].signal") + (node (ref U2) (pin 27)) + (node (ref D2) (pin 2))) +(net (code 7) (name "led[2].signal") + (node (ref U2) (pin 28)) + (node (ref D3) (pin 2))) +(net (code 8) (name "led[3].signal") + (node (ref U2) (pin 29)) + (node (ref D4) (pin 2))) +(net (code 9) (name "usb.usb.dp") + (node (ref J1) (pin A6)) + (node (ref J1) (pin B6))) +(net (code 10) (name "usb.usb.dm") + (node (ref J1) (pin A7)) + (node (ref J1) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref J1) (pin A5)) + (node (ref R1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref J1) (pin B5)) + (node (ref R2) (pin 2))) +(net (code 13) (name "reg.fb.output") + (node (ref U1) (pin 4)) + (node (ref R3) (pin 2)) + (node (ref R4) (pin 1))) +(net (code 14) (name "reg.vbst_cap.neg") + (node (ref C2) (pin 2)) + (node (ref U1) (pin 2)) + (node (ref L1) (pin 1))) +(net (code 15) (name "reg.vbst_cap.pos") + (node (ref C2) (pin 1)) + (node (ref U1) (pin 6))) +(net (code 16) (name "mcu.program_uart_node.a_tx") + (node (ref U2) (pin 35)) + (node (ref J2) (pin 2))) +(net (code 17) (name "mcu.program_uart_node.b_tx") + (node (ref U2) (pin 34)) + (node (ref J2) (pin 3))) +(net (code 18) (name "mcu.program_en_node") + (node (ref U2) (pin 3)) + (node (ref R5) (pin 2)) + (node (ref C7) (pin 1))) +(net (code 19) (name "mcu.program_boot_node") + (node (ref U2) (pin 25)) + (node (ref SW1) (pin 1))) +(net (code 20) (name "mcu.ic.io2") + (node (ref U2) (pin 24))) +(net (code 21) (name "led[0].res.a") + (node (ref R6) (pin 1)) + (node (ref D1) (pin 1))) +(net (code 22) (name "led[1].res.a") + (node (ref R7) (pin 1)) + (node (ref D2) (pin 1))) +(net (code 23) (name "led[2].res.a") + (node (ref R8) (pin 1)) + (node (ref D3) (pin 1))) +(net (code 24) (name "led[3].res.a") + (node (ref R9) (pin 1)) + (node (ref D4) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyPacked/TestBlinkyPacked.net b/examples/TestBlinkyPacked/TestBlinkyPacked.net new file mode 100644 index 000000000..7a739b77b --- /dev/null +++ b/examples/TestBlinkyPacked/TestBlinkyPacked.net @@ -0,0 +1,378 @@ +(export (version D) +(components +(comp (ref "usb.conn") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "usb.cc_pull.cc1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "usb.cc_pull.cc2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "reg.ic") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "reg.fb.top_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "reg.fb.bottom_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "reg.hf_in_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "reg.vbst_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "reg.power_path.inductor") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "reg.power_path.in_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "reg.power_path.out_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "mcu.ic") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "mcu.vcc_cap0") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "mcu.vcc_cap1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "mcu.prog") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "mcu.boot") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "mcu.en_pull.r") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "mcu.en_pull.c") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "sw") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW2")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "led.led[0]") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "examples.test_blinky.LedArray")) + (property (name "edg_path") (value "led.led[0].package")) + (property (name "edg_short_path") (value "led.led[0]")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "07e5021e")) +(comp (ref "led.led[1]") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "examples.test_blinky.LedArray")) + (property (name "edg_path") (value "led.led[1].package")) + (property (name "edg_short_path") (value "led.led[1]")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "07e7021f")) +(comp (ref "led.led[2]") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "examples.test_blinky.LedArray")) + (property (name "edg_path") (value "led.led[2].package")) + (property (name "edg_short_path") (value "led.led[2]")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "07e90220")) +(comp (ref "led.led[3]") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "examples.test_blinky.LedArray")) + (property (name "edg_path") (value "led.led[3].package")) + (property (name "edg_short_path") (value "led.led[3]")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "07eb0221")) +(comp (ref "res_pack") + (value "4 ±5% 8 1kΩ 1/16W ±200ppm/℃ 1206 Resistor Networks & Arrays ROHS") + (footprint "Resistor_SMD:R_Array_Concave_4x0603") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "res_pack")) + (property (name "edg_short_path") (value "res_pack")) + (property (name "edg_refdes") (value "RN1")) + (property (name "edg_part") (value "4D03WGJ0102T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "0efc0349"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref usb.conn) (pin A1)) + (node (ref usb.conn) (pin B12)) + (node (ref usb.conn) (pin B1)) + (node (ref usb.conn) (pin A12)) + (node (ref reg.ic) (pin 1)) + (node (ref mcu.ic) (pin 1)) + (node (ref mcu.ic) (pin 15)) + (node (ref mcu.ic) (pin 38)) + (node (ref mcu.ic) (pin 39)) + (node (ref sw) (pin 2)) + (node (ref usb.conn) (pin S1)) + (node (ref reg.hf_in_cap) (pin 2)) + (node (ref mcu.vcc_cap0) (pin 2)) + (node (ref mcu.vcc_cap1) (pin 2)) + (node (ref mcu.prog) (pin 4)) + (node (ref mcu.boot) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 2)) + (node (ref mcu.en_pull.c) (pin 2)) + (node (ref res_pack) (pin 8)) + (node (ref res_pack) (pin 7)) + (node (ref res_pack) (pin 6)) + (node (ref res_pack) (pin 5)) + (node (ref usb.cc_pull.cc1) (pin 1)) + (node (ref usb.cc_pull.cc2) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref usb.conn) (pin A4)) + (node (ref usb.conn) (pin B9)) + (node (ref usb.conn) (pin B4)) + (node (ref usb.conn) (pin A9)) + (node (ref reg.ic) (pin 3)) + (node (ref reg.ic) (pin 5)) + (node (ref reg.hf_in_cap) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref mcu.ic) (pin 2)) + (node (ref reg.fb.top_res) (pin 1)) + (node (ref mcu.vcc_cap0) (pin 1)) + (node (ref mcu.vcc_cap1) (pin 1)) + (node (ref mcu.prog) (pin 1)) + (node (ref mcu.en_pull.r) (pin 1)) + (node (ref reg.power_path.inductor) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref mcu.ic) (pin 8)) + (node (ref sw) (pin 1))) +(net (code 5) (name "mcu.gpio.led_0") + (node (ref mcu.ic) (pin 26)) + (node (ref led.led[0]) (pin 2))) +(net (code 6) (name "mcu.gpio.led_1") + (node (ref mcu.ic) (pin 27)) + (node (ref led.led[1]) (pin 2))) +(net (code 7) (name "mcu.gpio.led_2") + (node (ref mcu.ic) (pin 28)) + (node (ref led.led[2]) (pin 2))) +(net (code 8) (name "mcu.gpio.led_3") + (node (ref mcu.ic) (pin 29)) + (node (ref led.led[3]) (pin 2))) +(net (code 9) (name "res_pack.a.0") + (node (ref res_pack) (pin 1)) + (node (ref led.led[0]) (pin 1))) +(net (code 10) (name "res_pack.a.1") + (node (ref res_pack) (pin 2)) + (node (ref led.led[1]) (pin 1))) +(net (code 11) (name "res_pack.a.2") + (node (ref res_pack) (pin 3)) + (node (ref led.led[2]) (pin 1))) +(net (code 12) (name "res_pack.a.3") + (node (ref res_pack) (pin 4)) + (node (ref led.led[3]) (pin 1))) +(net (code 13) (name "usb.usb.dp") + (node (ref usb.conn) (pin A6)) + (node (ref usb.conn) (pin B6))) +(net (code 14) (name "usb.usb.dm") + (node (ref usb.conn) (pin A7)) + (node (ref usb.conn) (pin B7))) +(net (code 15) (name "usb.conn.cc.cc1") + (node (ref usb.conn) (pin A5)) + (node (ref usb.cc_pull.cc1) (pin 2))) +(net (code 16) (name "usb.conn.cc.cc2") + (node (ref usb.conn) (pin B5)) + (node (ref usb.cc_pull.cc2) (pin 2))) +(net (code 17) (name "reg.fb.output") + (node (ref reg.ic) (pin 4)) + (node (ref reg.fb.top_res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 1))) +(net (code 18) (name "reg.vbst_cap.neg") + (node (ref reg.vbst_cap) (pin 2)) + (node (ref reg.ic) (pin 2)) + (node (ref reg.power_path.inductor) (pin 1))) +(net (code 19) (name "reg.vbst_cap.pos") + (node (ref reg.vbst_cap) (pin 1)) + (node (ref reg.ic) (pin 6))) +(net (code 20) (name "mcu.program_uart_node.a_tx") + (node (ref mcu.ic) (pin 35)) + (node (ref mcu.prog) (pin 2))) +(net (code 21) (name "mcu.program_uart_node.b_tx") + (node (ref mcu.ic) (pin 34)) + (node (ref mcu.prog) (pin 3))) +(net (code 22) (name "mcu.program_en_node") + (node (ref mcu.ic) (pin 3)) + (node (ref mcu.en_pull.r) (pin 2)) + (node (ref mcu.en_pull.c) (pin 1))) +(net (code 23) (name "mcu.program_boot_node") + (node (ref mcu.ic) (pin 25)) + (node (ref mcu.boot) (pin 1))) +(net (code 24) (name "mcu.ic.io2") + (node (ref mcu.ic) (pin 24)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyPacked/TestBlinkyPacked.ref.net b/examples/TestBlinkyPacked/TestBlinkyPacked.ref.net new file mode 100644 index 000000000..0167b4147 --- /dev/null +++ b/examples/TestBlinkyPacked/TestBlinkyPacked.ref.net @@ -0,0 +1,378 @@ +(export (version D) +(components +(comp (ref "J1") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "U1") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "R3") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "R4") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "C1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "C2") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "L1") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "C3") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "C4") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "U2") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "C5") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "C6") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "J2") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "SW1") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "R5") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "C7") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "SW2") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW2")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "D1") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "examples.test_blinky.LedArray")) + (property (name "edg_path") (value "led.led[0].package")) + (property (name "edg_short_path") (value "led.led[0]")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "07e5021e")) +(comp (ref "D2") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "examples.test_blinky.LedArray")) + (property (name "edg_path") (value "led.led[1].package")) + (property (name "edg_short_path") (value "led.led[1]")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "07e7021f")) +(comp (ref "D3") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "examples.test_blinky.LedArray")) + (property (name "edg_path") (value "led.led[2].package")) + (property (name "edg_short_path") (value "led.led[2]")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "07e90220")) +(comp (ref "D4") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led")) + (property (name "Sheetfile") (value "examples.test_blinky.LedArray")) + (property (name "edg_path") (value "led.led[3].package")) + (property (name "edg_short_path") (value "led.led[3]")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led/") (tstamps "/02750136/")) + (tstamps "07eb0221")) +(comp (ref "RN1") + (value "4 ±5% 8 1kΩ 1/16W ±200ppm/℃ 1206 Resistor Networks & Arrays ROHS") + (footprint "Resistor_SMD:R_Array_Concave_4x0603") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "res_pack")) + (property (name "edg_short_path") (value "res_pack")) + (property (name "edg_refdes") (value "RN1")) + (property (name "edg_part") (value "4D03WGJ0102T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "0efc0349"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref J1) (pin A1)) + (node (ref J1) (pin B12)) + (node (ref J1) (pin B1)) + (node (ref J1) (pin A12)) + (node (ref U1) (pin 1)) + (node (ref U2) (pin 1)) + (node (ref U2) (pin 15)) + (node (ref U2) (pin 38)) + (node (ref U2) (pin 39)) + (node (ref SW2) (pin 2)) + (node (ref J1) (pin S1)) + (node (ref C1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref J2) (pin 4)) + (node (ref SW1) (pin 2)) + (node (ref R4) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref RN1) (pin 8)) + (node (ref RN1) (pin 7)) + (node (ref RN1) (pin 6)) + (node (ref RN1) (pin 5)) + (node (ref R1) (pin 1)) + (node (ref R2) (pin 1)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref J1) (pin A4)) + (node (ref J1) (pin B9)) + (node (ref J1) (pin B4)) + (node (ref J1) (pin A9)) + (node (ref U1) (pin 3)) + (node (ref U1) (pin 5)) + (node (ref C1) (pin 1)) + (node (ref C3) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref U2) (pin 2)) + (node (ref R3) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref R5) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C4) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref U2) (pin 8)) + (node (ref SW2) (pin 1))) +(net (code 5) (name "mcu.gpio.led_0") + (node (ref U2) (pin 26)) + (node (ref D1) (pin 2))) +(net (code 6) (name "mcu.gpio.led_1") + (node (ref U2) (pin 27)) + (node (ref D2) (pin 2))) +(net (code 7) (name "mcu.gpio.led_2") + (node (ref U2) (pin 28)) + (node (ref D3) (pin 2))) +(net (code 8) (name "mcu.gpio.led_3") + (node (ref U2) (pin 29)) + (node (ref D4) (pin 2))) +(net (code 9) (name "res_pack.a.0") + (node (ref RN1) (pin 1)) + (node (ref D1) (pin 1))) +(net (code 10) (name "res_pack.a.1") + (node (ref RN1) (pin 2)) + (node (ref D2) (pin 1))) +(net (code 11) (name "res_pack.a.2") + (node (ref RN1) (pin 3)) + (node (ref D3) (pin 1))) +(net (code 12) (name "res_pack.a.3") + (node (ref RN1) (pin 4)) + (node (ref D4) (pin 1))) +(net (code 13) (name "usb.usb.dp") + (node (ref J1) (pin A6)) + (node (ref J1) (pin B6))) +(net (code 14) (name "usb.usb.dm") + (node (ref J1) (pin A7)) + (node (ref J1) (pin B7))) +(net (code 15) (name "usb.conn.cc.cc1") + (node (ref J1) (pin A5)) + (node (ref R1) (pin 2))) +(net (code 16) (name "usb.conn.cc.cc2") + (node (ref J1) (pin B5)) + (node (ref R2) (pin 2))) +(net (code 17) (name "reg.fb.output") + (node (ref U1) (pin 4)) + (node (ref R3) (pin 2)) + (node (ref R4) (pin 1))) +(net (code 18) (name "reg.vbst_cap.neg") + (node (ref C2) (pin 2)) + (node (ref U1) (pin 2)) + (node (ref L1) (pin 1))) +(net (code 19) (name "reg.vbst_cap.pos") + (node (ref C2) (pin 1)) + (node (ref U1) (pin 6))) +(net (code 20) (name "mcu.program_uart_node.a_tx") + (node (ref U2) (pin 35)) + (node (ref J2) (pin 2))) +(net (code 21) (name "mcu.program_uart_node.b_tx") + (node (ref U2) (pin 34)) + (node (ref J2) (pin 3))) +(net (code 22) (name "mcu.program_en_node") + (node (ref U2) (pin 3)) + (node (ref R5) (pin 2)) + (node (ref C7) (pin 1))) +(net (code 23) (name "mcu.program_boot_node") + (node (ref U2) (pin 25)) + (node (ref SW1) (pin 1))) +(net (code 24) (name "mcu.ic.io2") + (node (ref U2) (pin 24)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyWithLibrary/TestBlinkyWithLibrary.net b/examples/TestBlinkyWithLibrary/TestBlinkyWithLibrary.net new file mode 100644 index 000000000..bf2eeef31 --- /dev/null +++ b/examples/TestBlinkyWithLibrary/TestBlinkyWithLibrary.net @@ -0,0 +1,440 @@ +(export (version D) +(components +(comp (ref "usb.conn") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "usb.cc_pull.cc1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "usb.cc_pull.cc2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "reg.ic") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "reg.fb.top_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "reg.fb.bottom_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "reg.hf_in_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "reg.vbst_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "reg.power_path.inductor") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "reg.power_path.in_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "reg.power_path.out_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "mcu.ic") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "mcu.vcc_cap0") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "mcu.vcc_cap1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "mcu.prog") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "mcu.boot") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "mcu.en_pull.r") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "mcu.en_pull.c") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "sw") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW2")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "led[0].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].package")) + (property (name "edg_short_path") (value "led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "led[0].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].res")) + (property (name "edg_short_path") (value "led[0].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "led[1].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].package")) + (property (name "edg_short_path") (value "led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "led[1].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].res")) + (property (name "edg_short_path") (value "led[1].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "led[2].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].package")) + (property (name "edg_short_path") (value "led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "led[2].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].res")) + (property (name "edg_short_path") (value "led[2].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0296014b")) +(comp (ref "led[3].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].package")) + (property (name "edg_short_path") (value "led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "led[3].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].res")) + (property (name "edg_short_path") (value "led[3].res")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0296014b")) +(comp (ref "mag.ic") + (value "LF21215TMR") + (footprint "Package_TO_SOT_SMD:SOT-23") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "examples.test_blinky.Lf21215tmr")) + (property (name "edg_path") (value "mag.ic")) + (property (name "edg_short_path") (value "mag.ic")) + (property (name "edg_refdes") (value "U3")) + (property (name "edg_part") (value "LF21215TMR (Littelfuse)")) + (sheetpath (names "/mag/") (tstamps "/02730136/")) + (tstamps "013700cd")) +(comp (ref "mag.cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "examples.test_blinky.Lf21215tmr")) + (property (name "edg_path") (value "mag.cap.cap")) + (property (name "edg_short_path") (value "mag.cap")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mag/") (tstamps "/02730136/")) + (tstamps "025e0135"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref usb.conn) (pin A1)) + (node (ref usb.conn) (pin B12)) + (node (ref usb.conn) (pin B1)) + (node (ref usb.conn) (pin A12)) + (node (ref reg.ic) (pin 1)) + (node (ref mcu.ic) (pin 1)) + (node (ref mcu.ic) (pin 15)) + (node (ref mcu.ic) (pin 38)) + (node (ref mcu.ic) (pin 39)) + (node (ref sw) (pin 2)) + (node (ref led[0].res) (pin 2)) + (node (ref led[1].res) (pin 2)) + (node (ref led[2].res) (pin 2)) + (node (ref led[3].res) (pin 2)) + (node (ref mag.ic) (pin 3)) + (node (ref usb.conn) (pin S1)) + (node (ref reg.hf_in_cap) (pin 2)) + (node (ref mcu.vcc_cap0) (pin 2)) + (node (ref mcu.vcc_cap1) (pin 2)) + (node (ref mcu.prog) (pin 4)) + (node (ref mcu.boot) (pin 2)) + (node (ref mag.cap) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 2)) + (node (ref mcu.en_pull.c) (pin 2)) + (node (ref usb.cc_pull.cc1) (pin 1)) + (node (ref usb.cc_pull.cc2) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref usb.conn) (pin A4)) + (node (ref usb.conn) (pin B9)) + (node (ref usb.conn) (pin B4)) + (node (ref usb.conn) (pin A9)) + (node (ref reg.ic) (pin 3)) + (node (ref reg.ic) (pin 5)) + (node (ref reg.hf_in_cap) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref mcu.ic) (pin 2)) + (node (ref mag.ic) (pin 1)) + (node (ref reg.fb.top_res) (pin 1)) + (node (ref mcu.vcc_cap0) (pin 1)) + (node (ref mcu.vcc_cap1) (pin 1)) + (node (ref mcu.prog) (pin 1)) + (node (ref mag.cap) (pin 1)) + (node (ref mcu.en_pull.r) (pin 1)) + (node (ref reg.power_path.inductor) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref mcu.ic) (pin 8)) + (node (ref sw) (pin 1))) +(net (code 5) (name "led[0].signal") + (node (ref mcu.ic) (pin 26)) + (node (ref led[0].package) (pin 2))) +(net (code 6) (name "led[1].signal") + (node (ref mcu.ic) (pin 27)) + (node (ref led[1].package) (pin 2))) +(net (code 7) (name "led[2].signal") + (node (ref mcu.ic) (pin 28)) + (node (ref led[2].package) (pin 2))) +(net (code 8) (name "led[3].signal") + (node (ref mcu.ic) (pin 29)) + (node (ref led[3].package) (pin 2))) +(net (code 9) (name "mag.out") + (node (ref mcu.ic) (pin 9)) + (node (ref mag.ic) (pin 2))) +(net (code 10) (name "usb.usb.dp") + (node (ref usb.conn) (pin A6)) + (node (ref usb.conn) (pin B6))) +(net (code 11) (name "usb.usb.dm") + (node (ref usb.conn) (pin A7)) + (node (ref usb.conn) (pin B7))) +(net (code 12) (name "usb.conn.cc.cc1") + (node (ref usb.conn) (pin A5)) + (node (ref usb.cc_pull.cc1) (pin 2))) +(net (code 13) (name "usb.conn.cc.cc2") + (node (ref usb.conn) (pin B5)) + (node (ref usb.cc_pull.cc2) (pin 2))) +(net (code 14) (name "reg.fb.output") + (node (ref reg.ic) (pin 4)) + (node (ref reg.fb.top_res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 1))) +(net (code 15) (name "reg.vbst_cap.neg") + (node (ref reg.vbst_cap) (pin 2)) + (node (ref reg.ic) (pin 2)) + (node (ref reg.power_path.inductor) (pin 1))) +(net (code 16) (name "reg.vbst_cap.pos") + (node (ref reg.vbst_cap) (pin 1)) + (node (ref reg.ic) (pin 6))) +(net (code 17) (name "mcu.program_uart_node.a_tx") + (node (ref mcu.ic) (pin 35)) + (node (ref mcu.prog) (pin 2))) +(net (code 18) (name "mcu.program_uart_node.b_tx") + (node (ref mcu.ic) (pin 34)) + (node (ref mcu.prog) (pin 3))) +(net (code 19) (name "mcu.program_en_node") + (node (ref mcu.ic) (pin 3)) + (node (ref mcu.en_pull.r) (pin 2)) + (node (ref mcu.en_pull.c) (pin 1))) +(net (code 20) (name "mcu.program_boot_node") + (node (ref mcu.ic) (pin 25)) + (node (ref mcu.boot) (pin 1))) +(net (code 21) (name "mcu.ic.io2") + (node (ref mcu.ic) (pin 24))) +(net (code 22) (name "led[0].res.a") + (node (ref led[0].res) (pin 1)) + (node (ref led[0].package) (pin 1))) +(net (code 23) (name "led[1].res.a") + (node (ref led[1].res) (pin 1)) + (node (ref led[1].package) (pin 1))) +(net (code 24) (name "led[2].res.a") + (node (ref led[2].res) (pin 1)) + (node (ref led[2].package) (pin 1))) +(net (code 25) (name "led[3].res.a") + (node (ref led[3].res) (pin 1)) + (node (ref led[3].package) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyWithLibrary/TestBlinkyWithLibrary.ref.net b/examples/TestBlinkyWithLibrary/TestBlinkyWithLibrary.ref.net new file mode 100644 index 000000000..457c36bb6 --- /dev/null +++ b/examples/TestBlinkyWithLibrary/TestBlinkyWithLibrary.ref.net @@ -0,0 +1,440 @@ +(export (version D) +(components +(comp (ref "J1") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "U1") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "R3") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "R4") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "C1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "C2") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "L1") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "C3") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "C4") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "U2") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "C5") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "C6") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "J2") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "SW1") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "R5") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "C7") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "SW2") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW2")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "D1") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].package")) + (property (name "edg_short_path") (value "led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "R6") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].res")) + (property (name "edg_short_path") (value "led[0].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "D2") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].package")) + (property (name "edg_short_path") (value "led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "R7") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].res")) + (property (name "edg_short_path") (value "led[1].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "D3") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].package")) + (property (name "edg_short_path") (value "led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "R8") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].res")) + (property (name "edg_short_path") (value "led[2].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0296014b")) +(comp (ref "D4") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].package")) + (property (name "edg_short_path") (value "led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "R9") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].res")) + (property (name "edg_short_path") (value "led[3].res")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0296014b")) +(comp (ref "U3") + (value "LF21215TMR") + (footprint "Package_TO_SOT_SMD:SOT-23") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "examples.test_blinky.Lf21215tmr")) + (property (name "edg_path") (value "mag.ic")) + (property (name "edg_short_path") (value "mag.ic")) + (property (name "edg_refdes") (value "U3")) + (property (name "edg_part") (value "LF21215TMR (Littelfuse)")) + (sheetpath (names "/mag/") (tstamps "/02730136/")) + (tstamps "013700cd")) +(comp (ref "C8") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "examples.test_blinky.Lf21215tmr")) + (property (name "edg_path") (value "mag.cap.cap")) + (property (name "edg_short_path") (value "mag.cap")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mag/") (tstamps "/02730136/")) + (tstamps "025e0135"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref J1) (pin A1)) + (node (ref J1) (pin B12)) + (node (ref J1) (pin B1)) + (node (ref J1) (pin A12)) + (node (ref U1) (pin 1)) + (node (ref U2) (pin 1)) + (node (ref U2) (pin 15)) + (node (ref U2) (pin 38)) + (node (ref U2) (pin 39)) + (node (ref SW2) (pin 2)) + (node (ref R6) (pin 2)) + (node (ref R7) (pin 2)) + (node (ref R8) (pin 2)) + (node (ref R9) (pin 2)) + (node (ref U3) (pin 3)) + (node (ref J1) (pin S1)) + (node (ref C1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref J2) (pin 4)) + (node (ref SW1) (pin 2)) + (node (ref C8) (pin 2)) + (node (ref R4) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref R1) (pin 1)) + (node (ref R2) (pin 1)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref J1) (pin A4)) + (node (ref J1) (pin B9)) + (node (ref J1) (pin B4)) + (node (ref J1) (pin A9)) + (node (ref U1) (pin 3)) + (node (ref U1) (pin 5)) + (node (ref C1) (pin 1)) + (node (ref C3) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref U2) (pin 2)) + (node (ref U3) (pin 1)) + (node (ref R3) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref C8) (pin 1)) + (node (ref R5) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C4) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref U2) (pin 8)) + (node (ref SW2) (pin 1))) +(net (code 5) (name "led[0].signal") + (node (ref U2) (pin 26)) + (node (ref D1) (pin 2))) +(net (code 6) (name "led[1].signal") + (node (ref U2) (pin 27)) + (node (ref D2) (pin 2))) +(net (code 7) (name "led[2].signal") + (node (ref U2) (pin 28)) + (node (ref D3) (pin 2))) +(net (code 8) (name "led[3].signal") + (node (ref U2) (pin 29)) + (node (ref D4) (pin 2))) +(net (code 9) (name "mag.out") + (node (ref U2) (pin 9)) + (node (ref U3) (pin 2))) +(net (code 10) (name "usb.usb.dp") + (node (ref J1) (pin A6)) + (node (ref J1) (pin B6))) +(net (code 11) (name "usb.usb.dm") + (node (ref J1) (pin A7)) + (node (ref J1) (pin B7))) +(net (code 12) (name "usb.conn.cc.cc1") + (node (ref J1) (pin A5)) + (node (ref R1) (pin 2))) +(net (code 13) (name "usb.conn.cc.cc2") + (node (ref J1) (pin B5)) + (node (ref R2) (pin 2))) +(net (code 14) (name "reg.fb.output") + (node (ref U1) (pin 4)) + (node (ref R3) (pin 2)) + (node (ref R4) (pin 1))) +(net (code 15) (name "reg.vbst_cap.neg") + (node (ref C2) (pin 2)) + (node (ref U1) (pin 2)) + (node (ref L1) (pin 1))) +(net (code 16) (name "reg.vbst_cap.pos") + (node (ref C2) (pin 1)) + (node (ref U1) (pin 6))) +(net (code 17) (name "mcu.program_uart_node.a_tx") + (node (ref U2) (pin 35)) + (node (ref J2) (pin 2))) +(net (code 18) (name "mcu.program_uart_node.b_tx") + (node (ref U2) (pin 34)) + (node (ref J2) (pin 3))) +(net (code 19) (name "mcu.program_en_node") + (node (ref U2) (pin 3)) + (node (ref R5) (pin 2)) + (node (ref C7) (pin 1))) +(net (code 20) (name "mcu.program_boot_node") + (node (ref U2) (pin 25)) + (node (ref SW1) (pin 1))) +(net (code 21) (name "mcu.ic.io2") + (node (ref U2) (pin 24))) +(net (code 22) (name "led[0].res.a") + (node (ref R6) (pin 1)) + (node (ref D1) (pin 1))) +(net (code 23) (name "led[1].res.a") + (node (ref R7) (pin 1)) + (node (ref D2) (pin 1))) +(net (code 24) (name "led[2].res.a") + (node (ref R8) (pin 1)) + (node (ref D3) (pin 1))) +(net (code 25) (name "led[3].res.a") + (node (ref R9) (pin 1)) + (node (ref D4) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyWithLibraryExport/TestBlinkyWithLibraryExport.net b/examples/TestBlinkyWithLibraryExport/TestBlinkyWithLibraryExport.net new file mode 100644 index 000000000..f53dc1d23 --- /dev/null +++ b/examples/TestBlinkyWithLibraryExport/TestBlinkyWithLibraryExport.net @@ -0,0 +1,440 @@ +(export (version D) +(components +(comp (ref "usb.conn") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "usb.cc_pull.cc1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "usb.cc_pull.cc2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "reg.ic") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "reg.fb.top_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "reg.fb.bottom_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "reg.hf_in_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "reg.vbst_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "reg.power_path.inductor") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "reg.power_path.in_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "reg.power_path.out_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "mcu.ic") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "mcu.vcc_cap0") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "mcu.vcc_cap1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "mcu.prog") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "mcu.boot") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "mcu.en_pull.r") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "mcu.en_pull.c") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "sw") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW2")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "led[0].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].package")) + (property (name "edg_short_path") (value "led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "led[0].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].res")) + (property (name "edg_short_path") (value "led[0].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "led[1].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].package")) + (property (name "edg_short_path") (value "led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "led[1].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].res")) + (property (name "edg_short_path") (value "led[1].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "led[2].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].package")) + (property (name "edg_short_path") (value "led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "led[2].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].res")) + (property (name "edg_short_path") (value "led[2].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0296014b")) +(comp (ref "led[3].package") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].package")) + (property (name "edg_short_path") (value "led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "led[3].res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].res")) + (property (name "edg_short_path") (value "led[3].res")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0296014b")) +(comp (ref "mag.ic") + (value "LF21215TMR") + (footprint "Package_TO_SOT_SMD:SOT-23") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "examples.test_blinky.Lf21215tmr_Export")) + (property (name "edg_path") (value "mag.ic")) + (property (name "edg_short_path") (value "mag.ic")) + (property (name "edg_refdes") (value "U3")) + (property (name "edg_part") (value "LF21215TMR (Littelfuse)")) + (sheetpath (names "/mag/") (tstamps "/02730136/")) + (tstamps "013700cd")) +(comp (ref "mag.cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "examples.test_blinky.Lf21215tmr_Export")) + (property (name "edg_path") (value "mag.cap.cap")) + (property (name "edg_short_path") (value "mag.cap")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mag/") (tstamps "/02730136/")) + (tstamps "025e0135"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref usb.conn) (pin A1)) + (node (ref usb.conn) (pin B12)) + (node (ref usb.conn) (pin B1)) + (node (ref usb.conn) (pin A12)) + (node (ref reg.ic) (pin 1)) + (node (ref mcu.ic) (pin 1)) + (node (ref mcu.ic) (pin 15)) + (node (ref mcu.ic) (pin 38)) + (node (ref mcu.ic) (pin 39)) + (node (ref sw) (pin 2)) + (node (ref led[0].res) (pin 2)) + (node (ref led[1].res) (pin 2)) + (node (ref led[2].res) (pin 2)) + (node (ref led[3].res) (pin 2)) + (node (ref mag.ic) (pin 3)) + (node (ref usb.conn) (pin S1)) + (node (ref reg.hf_in_cap) (pin 2)) + (node (ref mcu.vcc_cap0) (pin 2)) + (node (ref mcu.vcc_cap1) (pin 2)) + (node (ref mcu.prog) (pin 4)) + (node (ref mcu.boot) (pin 2)) + (node (ref mag.cap) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 2)) + (node (ref mcu.en_pull.c) (pin 2)) + (node (ref usb.cc_pull.cc1) (pin 1)) + (node (ref usb.cc_pull.cc2) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref usb.conn) (pin A4)) + (node (ref usb.conn) (pin B9)) + (node (ref usb.conn) (pin B4)) + (node (ref usb.conn) (pin A9)) + (node (ref reg.ic) (pin 3)) + (node (ref reg.ic) (pin 5)) + (node (ref reg.hf_in_cap) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref mcu.ic) (pin 2)) + (node (ref mag.ic) (pin 1)) + (node (ref reg.fb.top_res) (pin 1)) + (node (ref mcu.vcc_cap0) (pin 1)) + (node (ref mcu.vcc_cap1) (pin 1)) + (node (ref mcu.prog) (pin 1)) + (node (ref mag.cap) (pin 1)) + (node (ref mcu.en_pull.r) (pin 1)) + (node (ref reg.power_path.inductor) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref mcu.ic) (pin 8)) + (node (ref sw) (pin 1))) +(net (code 5) (name "led[0].signal") + (node (ref mcu.ic) (pin 26)) + (node (ref led[0].package) (pin 2))) +(net (code 6) (name "led[1].signal") + (node (ref mcu.ic) (pin 27)) + (node (ref led[1].package) (pin 2))) +(net (code 7) (name "led[2].signal") + (node (ref mcu.ic) (pin 28)) + (node (ref led[2].package) (pin 2))) +(net (code 8) (name "led[3].signal") + (node (ref mcu.ic) (pin 29)) + (node (ref led[3].package) (pin 2))) +(net (code 9) (name "mag.out") + (node (ref mcu.ic) (pin 9)) + (node (ref mag.ic) (pin 2))) +(net (code 10) (name "usb.usb.dp") + (node (ref usb.conn) (pin A6)) + (node (ref usb.conn) (pin B6))) +(net (code 11) (name "usb.usb.dm") + (node (ref usb.conn) (pin A7)) + (node (ref usb.conn) (pin B7))) +(net (code 12) (name "usb.conn.cc.cc1") + (node (ref usb.conn) (pin A5)) + (node (ref usb.cc_pull.cc1) (pin 2))) +(net (code 13) (name "usb.conn.cc.cc2") + (node (ref usb.conn) (pin B5)) + (node (ref usb.cc_pull.cc2) (pin 2))) +(net (code 14) (name "reg.fb.output") + (node (ref reg.ic) (pin 4)) + (node (ref reg.fb.top_res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 1))) +(net (code 15) (name "reg.vbst_cap.neg") + (node (ref reg.vbst_cap) (pin 2)) + (node (ref reg.ic) (pin 2)) + (node (ref reg.power_path.inductor) (pin 1))) +(net (code 16) (name "reg.vbst_cap.pos") + (node (ref reg.vbst_cap) (pin 1)) + (node (ref reg.ic) (pin 6))) +(net (code 17) (name "mcu.program_uart_node.a_tx") + (node (ref mcu.ic) (pin 35)) + (node (ref mcu.prog) (pin 2))) +(net (code 18) (name "mcu.program_uart_node.b_tx") + (node (ref mcu.ic) (pin 34)) + (node (ref mcu.prog) (pin 3))) +(net (code 19) (name "mcu.program_en_node") + (node (ref mcu.ic) (pin 3)) + (node (ref mcu.en_pull.r) (pin 2)) + (node (ref mcu.en_pull.c) (pin 1))) +(net (code 20) (name "mcu.program_boot_node") + (node (ref mcu.ic) (pin 25)) + (node (ref mcu.boot) (pin 1))) +(net (code 21) (name "mcu.ic.io2") + (node (ref mcu.ic) (pin 24))) +(net (code 22) (name "led[0].res.a") + (node (ref led[0].res) (pin 1)) + (node (ref led[0].package) (pin 1))) +(net (code 23) (name "led[1].res.a") + (node (ref led[1].res) (pin 1)) + (node (ref led[1].package) (pin 1))) +(net (code 24) (name "led[2].res.a") + (node (ref led[2].res) (pin 1)) + (node (ref led[2].package) (pin 1))) +(net (code 25) (name "led[3].res.a") + (node (ref led[3].res) (pin 1)) + (node (ref led[3].package) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyWithLibraryExport/TestBlinkyWithLibraryExport.ref.net b/examples/TestBlinkyWithLibraryExport/TestBlinkyWithLibraryExport.ref.net new file mode 100644 index 000000000..c11a1d7f8 --- /dev/null +++ b/examples/TestBlinkyWithLibraryExport/TestBlinkyWithLibraryExport.ref.net @@ -0,0 +1,440 @@ +(export (version D) +(components +(comp (ref "J1") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "U1") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "R3") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "R4") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "C1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "C2") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "L1") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "C3") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "C4") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "U2") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "C5") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "C6") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "J2") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "SW1") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "R5") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "C7") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "SW2") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw.package")) + (property (name "edg_short_path") (value "sw")) + (property (name "edg_refdes") (value "SW2")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "015f00eb")) +(comp (ref "D1") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].package")) + (property (name "edg_short_path") (value "led[0].package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0b4e02cd")) +(comp (ref "R6") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[0].res")) + (property (name "edg_short_path") (value "led[0].res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[0]/") (tstamps "/07e5021e/")) + (tstamps "0296014b")) +(comp (ref "D2") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].package")) + (property (name "edg_short_path") (value "led[1].package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0b4e02cd")) +(comp (ref "R7") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[1].res")) + (property (name "edg_short_path") (value "led[1].res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[1]/") (tstamps "/07e7021f/")) + (tstamps "0296014b")) +(comp (ref "D3") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].package")) + (property (name "edg_short_path") (value "led[2].package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0b4e02cd")) +(comp (ref "R8") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[2].res")) + (property (name "edg_short_path") (value "led[2].res")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[2]/") (tstamps "/07e90220/")) + (tstamps "0296014b")) +(comp (ref "D4") + (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].package")) + (property (name "edg_short_path") (value "led[3].package")) + (property (name "edg_refdes") (value "D4")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0b4e02cd")) +(comp (ref "R9") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "led[3].res")) + (property (name "edg_short_path") (value "led[3].res")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/led[3]/") (tstamps "/07eb0221/")) + (tstamps "0296014b")) +(comp (ref "U3") + (value "LF21215TMR") + (footprint "Package_TO_SOT_SMD:SOT-23") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "examples.test_blinky.Lf21215tmr_Export")) + (property (name "edg_path") (value "mag.ic")) + (property (name "edg_short_path") (value "mag.ic")) + (property (name "edg_refdes") (value "U3")) + (property (name "edg_part") (value "LF21215TMR (Littelfuse)")) + (sheetpath (names "/mag/") (tstamps "/02730136/")) + (tstamps "013700cd")) +(comp (ref "C8") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "examples.test_blinky.Lf21215tmr_Export")) + (property (name "edg_path") (value "mag.cap.cap")) + (property (name "edg_short_path") (value "mag.cap")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mag/") (tstamps "/02730136/")) + (tstamps "025e0135"))) +(nets +(net (code 1) (name "usb.gnd") + (node (ref J1) (pin A1)) + (node (ref J1) (pin B12)) + (node (ref J1) (pin B1)) + (node (ref J1) (pin A12)) + (node (ref U1) (pin 1)) + (node (ref U2) (pin 1)) + (node (ref U2) (pin 15)) + (node (ref U2) (pin 38)) + (node (ref U2) (pin 39)) + (node (ref SW2) (pin 2)) + (node (ref R6) (pin 2)) + (node (ref R7) (pin 2)) + (node (ref R8) (pin 2)) + (node (ref R9) (pin 2)) + (node (ref U3) (pin 3)) + (node (ref J1) (pin S1)) + (node (ref C1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref J2) (pin 4)) + (node (ref SW1) (pin 2)) + (node (ref C8) (pin 2)) + (node (ref R4) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref R1) (pin 1)) + (node (ref R2) (pin 1)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref J1) (pin A4)) + (node (ref J1) (pin B9)) + (node (ref J1) (pin B4)) + (node (ref J1) (pin A9)) + (node (ref U1) (pin 3)) + (node (ref U1) (pin 5)) + (node (ref C1) (pin 1)) + (node (ref C3) (pin 1))) +(net (code 3) (name "reg.pwr_out") + (node (ref U2) (pin 2)) + (node (ref U3) (pin 1)) + (node (ref R3) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref C8) (pin 1)) + (node (ref R5) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C4) (pin 1))) +(net (code 4) (name "sw.out") + (node (ref U2) (pin 8)) + (node (ref SW2) (pin 1))) +(net (code 5) (name "led[0].signal") + (node (ref U2) (pin 26)) + (node (ref D1) (pin 2))) +(net (code 6) (name "led[1].signal") + (node (ref U2) (pin 27)) + (node (ref D2) (pin 2))) +(net (code 7) (name "led[2].signal") + (node (ref U2) (pin 28)) + (node (ref D3) (pin 2))) +(net (code 8) (name "led[3].signal") + (node (ref U2) (pin 29)) + (node (ref D4) (pin 2))) +(net (code 9) (name "mag.out") + (node (ref U2) (pin 9)) + (node (ref U3) (pin 2))) +(net (code 10) (name "usb.usb.dp") + (node (ref J1) (pin A6)) + (node (ref J1) (pin B6))) +(net (code 11) (name "usb.usb.dm") + (node (ref J1) (pin A7)) + (node (ref J1) (pin B7))) +(net (code 12) (name "usb.conn.cc.cc1") + (node (ref J1) (pin A5)) + (node (ref R1) (pin 2))) +(net (code 13) (name "usb.conn.cc.cc2") + (node (ref J1) (pin B5)) + (node (ref R2) (pin 2))) +(net (code 14) (name "reg.fb.output") + (node (ref U1) (pin 4)) + (node (ref R3) (pin 2)) + (node (ref R4) (pin 1))) +(net (code 15) (name "reg.vbst_cap.neg") + (node (ref C2) (pin 2)) + (node (ref U1) (pin 2)) + (node (ref L1) (pin 1))) +(net (code 16) (name "reg.vbst_cap.pos") + (node (ref C2) (pin 1)) + (node (ref U1) (pin 6))) +(net (code 17) (name "mcu.program_uart_node.a_tx") + (node (ref U2) (pin 35)) + (node (ref J2) (pin 2))) +(net (code 18) (name "mcu.program_uart_node.b_tx") + (node (ref U2) (pin 34)) + (node (ref J2) (pin 3))) +(net (code 19) (name "mcu.program_en_node") + (node (ref U2) (pin 3)) + (node (ref R5) (pin 2)) + (node (ref C7) (pin 1))) +(net (code 20) (name "mcu.program_boot_node") + (node (ref U2) (pin 25)) + (node (ref SW1) (pin 1))) +(net (code 21) (name "mcu.ic.io2") + (node (ref U2) (pin 24))) +(net (code 22) (name "led[0].res.a") + (node (ref R6) (pin 1)) + (node (ref D1) (pin 1))) +(net (code 23) (name "led[1].res.a") + (node (ref R7) (pin 1)) + (node (ref D2) (pin 1))) +(net (code 24) (name "led[2].res.a") + (node (ref R8) (pin 1)) + (node (ref D3) (pin 1))) +(net (code 25) (name "led[3].res.a") + (node (ref R9) (pin 1)) + (node (ref D4) (pin 1)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyWithModeledSchematicImport/TestBlinkyWithModeledSchematicImport.net b/examples/TestBlinkyWithModeledSchematicImport/TestBlinkyWithModeledSchematicImport.net index 649ed09cb..580533935 100644 --- a/examples/TestBlinkyWithModeledSchematicImport/TestBlinkyWithModeledSchematicImport.net +++ b/examples/TestBlinkyWithModeledSchematicImport/TestBlinkyWithModeledSchematicImport.net @@ -1,205 +1,205 @@ (export (version D) (components -(comp (ref "J1") - (value "COM-15111 (Sparkfun)") +(comp (ref "usb.conn") + (value "COM-15111") (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") (property (name "Sheetname") (value "usb")) - (property (name "Sheetfile") (value "electronics_lib.UsbPorts.UsbCReceptacle")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) (property (name "edg_path") (value "usb.conn")) (property (name "edg_short_path") (value "usb.conn")) (property (name "edg_refdes") (value "J1")) (property (name "edg_part") (value "COM-15111 (Sparkfun)")) (sheetpath (names "/usb/") (tstamps "/02aa014b/")) (tstamps "042701af")) -(comp (ref "R1") - (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 5.1k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "usb.cc_pull.cc1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "cc_pull")) - (property (name "Sheetfile") (value "electronics_lib.UsbPorts.UsbCcPulldownResistor")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) (property (name "edg_path") (value "usb.cc_pull.cc1.res")) (property (name "edg_short_path") (value "usb.cc_pull.cc1")) (property (name "edg_refdes") (value "R1")) (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) (tstamps "022300f8")) -(comp (ref "R2") - (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 5.1k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "usb.cc_pull.cc2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "cc_pull")) - (property (name "Sheetfile") (value "electronics_lib.UsbPorts.UsbCcPulldownResistor")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) (property (name "edg_path") (value "usb.cc_pull.cc2.res")) (property (name "edg_short_path") (value "usb.cc_pull.cc2")) (property (name "edg_refdes") (value "R2")) (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) (tstamps "022400f9")) -(comp (ref "U1") - (value "TPS561201 (Texas Instruments)") +(comp (ref "reg.ic") + (value "TPS561201") (footprint "Package_TO_SOT_SMD:SOT-23-6") (property (name "Sheetname") (value "reg")) - (property (name "Sheetfile") (value "electronics_lib.BuckConverter_TexasInstruments.Tps561201")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) (property (name "edg_path") (value "reg.ic")) (property (name "edg_short_path") (value "reg.ic")) (property (name "edg_refdes") (value "U1")) (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) (sheetpath (names "/reg/") (tstamps "/028a013f/")) (tstamps "013700cd")) -(comp (ref "R3") - (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 33k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "reg.fb.top_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "fb")) - (property (name "Sheetfile") (value "electronics_abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) (property (name "edg_path") (value "reg.fb.div.top_res")) (property (name "edg_short_path") (value "reg.fb.top_res")) (property (name "edg_refdes") (value "R3")) (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) (tstamps "0c0c02fd")) -(comp (ref "R4") - (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 10k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "reg.fb.bottom_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "fb")) - (property (name "Sheetfile") (value "electronics_abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) (property (name "edg_path") (value "reg.fb.div.bottom_res")) (property (name "edg_short_path") (value "reg.fb.bottom_res")) (property (name "edg_refdes") (value "R4")) (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) (tstamps "175b043f")) -(comp (ref "C1") - (value "CC0603KRX7R9BB104 (YAGEO) - 50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "reg.hf_in_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "reg")) - (property (name "Sheetfile") (value "electronics_lib.BuckConverter_TexasInstruments.Tps561201")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) (property (name "edg_path") (value "reg.hf_in_cap.cap")) (property (name "edg_short_path") (value "reg.hf_in_cap")) (property (name "edg_refdes") (value "C1")) (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) (sheetpath (names "/reg/") (tstamps "/028a013f/")) (tstamps "11ed0398")) -(comp (ref "C2") - (value "CC0603KRX7R9BB104 (YAGEO) - 50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "reg.vbst_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "reg")) - (property (name "Sheetfile") (value "electronics_lib.BuckConverter_TexasInstruments.Tps561201")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) (property (name "edg_path") (value "reg.vbst_cap")) (property (name "edg_short_path") (value "reg.vbst_cap")) (property (name "edg_refdes") (value "C2")) (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) (sheetpath (names "/reg/") (tstamps "/028a013f/")) (tstamps "0f330353")) -(comp (ref "L1") - (value "CBC3225T220KR (Taiyo Yuden) - 620mA 22uH ±10% 270m? 1210 Inductors (SMD) ROHS") - (footprint "Inductor_SMD:L_1210_3225Metric") +(comp (ref "reg.power_path.inductor") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") (property (name "Sheetname") (value "power_path")) - (property (name "Sheetfile") (value "electronics_abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) (property (name "edg_path") (value "reg.power_path.inductor")) (property (name "edg_short_path") (value "reg.power_path.inductor")) (property (name "edg_refdes") (value "L1")) - (property (name "edg_part") (value "CBC3225T220KR (Taiyo Yuden)")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) (tstamps "0f2b0369")) -(comp (ref "C3") - (value "CL21A475KAQNNNE (Samsung Electro-Mechanics) - 25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "reg.power_path.in_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0805_2012Metric") (property (name "Sheetname") (value "power_path")) - (property (name "Sheetfile") (value "electronics_abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) (property (name "edg_path") (value "reg.power_path.in_cap.cap")) (property (name "edg_short_path") (value "reg.power_path.in_cap")) (property (name "edg_refdes") (value "C3")) (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) (tstamps "0879026b")) -(comp (ref "C4") - (value "CL21A475KAQNNNE (Samsung Electro-Mechanics) - 25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "reg.power_path.out_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0805_2012Metric") (property (name "Sheetname") (value "power_path")) - (property (name "Sheetfile") (value "electronics_abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) (property (name "edg_path") (value "reg.power_path.out_cap.cap")) (property (name "edg_short_path") (value "reg.power_path.out_cap")) (property (name "edg_refdes") (value "C4")) (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) (tstamps "0be902ec")) -(comp (ref "U2") - (value "ESP32-WROOM-32 (Espressif Systems)") +(comp (ref "mcu.ic") + (value "ESP32-WROOM-32") (footprint "RF_Module:ESP32-WROOM-32") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "electronics_lib.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) (property (name "edg_path") (value "mcu.ic")) (property (name "edg_short_path") (value "mcu.ic")) (property (name "edg_refdes") (value "U2")) (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "013700cd")) -(comp (ref "C5") - (value "CL31A226KPHNNNE (Samsung Electro-Mechanics) - 10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "mcu.vcc_cap0") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_1206_3216Metric") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "electronics_lib.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) (property (name "edg_path") (value "mcu.vcc_cap0.cap")) (property (name "edg_short_path") (value "mcu.vcc_cap0")) (property (name "edg_refdes") (value "C5")) (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "0e590300")) -(comp (ref "C6") - (value "CC0603KRX7R9BB104 (YAGEO) - 50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "mcu.vcc_cap1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "electronics_lib.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) (property (name "edg_path") (value "mcu.vcc_cap1.cap")) (property (name "edg_short_path") (value "mcu.vcc_cap1")) (property (name "edg_refdes") (value "C6")) (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "0e5a0301")) -(comp (ref "J2") - (value "PinHeader2.54 1x4 (Generic)") +(comp (ref "mcu.prog") + (value "PinHeader2.54 1x4") (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "electronics_lib.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) (property (name "edg_path") (value "mcu.prog.conn")) (property (name "edg_short_path") (value "mcu.prog")) (property (name "edg_refdes") (value "J2")) (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "045f01b9")) -(comp (ref "SW1") +(comp (ref "mcu.boot") (value "5.1mm switch") (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "electronics_lib.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) (property (name "edg_path") (value "mcu.boot.package")) (property (name "edg_short_path") (value "mcu.boot")) (property (name "edg_refdes") (value "SW1")) (property (name "edg_part") (value "5.1mm switch")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "042b01b5")) -(comp (ref "R5") - (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 10k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "mcu.en_pull.r") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "en_pull")) - (property (name "Sheetfile") (value "electronics_abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) (property (name "edg_path") (value "mcu.en_pull.rc.r")) (property (name "edg_short_path") (value "mcu.en_pull.r")) (property (name "edg_refdes") (value "R5")) (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) (tstamps "00730073")) -(comp (ref "C7") - (value "CL10A105KB8NNNC (Samsung Electro-Mechanics) - 50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "mcu.en_pull.c") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "en_pull")) - (property (name "Sheetfile") (value "electronics_abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) (property (name "edg_path") (value "mcu.en_pull.rc.c")) (property (name "edg_short_path") (value "mcu.en_pull.c")) (property (name "edg_refdes") (value "C7")) (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) (tstamps "00640064")) -(comp (ref "J3") - (value "PinHeader2.54 1x4 (Generic)") +(comp (ref "conn") + (value "PinHeader2.54 1x4") (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") (property (name "Sheetname") (value "")) (property (name "Sheetfile") (value "")) @@ -209,8 +209,8 @@ (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) (sheetpath (names "/") (tstamps "/")) (tstamps "042701af")) -(comp (ref "Q1") - (value "MMBT3904 (Changjiang Electronics Tech (CJ)) - 40V 200mW 200mA 100@10mA,1V 300MHz 300mV@50mA,5mA NPN +150?@(Tj) SOT-23(SOT-23-3) Bipolar Transistors - BJT ROHS") +(comp (ref "sense.Q1") + (value "40V 200mW 200mA 100@10mA,1V 300MHz 300mV@50mA,5mA NPN +150℃@(Tj) SOT-23(SOT-23-3) Bipolar Transistors - BJT ROHS") (footprint "Package_TO_SOT_SMD:SOT-23") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) @@ -220,8 +220,8 @@ (property (name "edg_part") (value "MMBT3904 (Changjiang Electronics Tech (CJ))")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00d50083")) -(comp (ref "R6") - (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±200ppm/? -55?~+155? 100? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "sense.R3") + (value "±1% 1/10W Thick Film Resistors 75V ±200ppm/℃ -55℃~+155℃ 100Ω 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) @@ -231,8 +231,8 @@ (property (name "edg_part") (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00d90086")) -(comp (ref "R7") - (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±200ppm/? -55?~+155? 100? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "sense.R4") + (value "±1% 1/10W Thick Film Resistors 75V ±200ppm/℃ -55℃~+155℃ 100Ω 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) @@ -242,8 +242,8 @@ (property (name "edg_part") (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00da0087")) -(comp (ref "C8") - (value "CL21A106KAYNNNE (Samsung Electro-Mechanics) - X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "sense.C2") + (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0805_2012Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) @@ -253,8 +253,8 @@ (property (name "edg_part") (value "CL21A106KAYNNNE (Samsung Electro-Mechanics)")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00ba0076")) -(comp (ref "C9") - (value "CC0603KRX7R9BB104 (YAGEO) - 50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "sense.C4") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) @@ -264,8 +264,8 @@ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00bc0078")) -(comp (ref "R8") - (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 20k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "sense.R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 20kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) @@ -275,8 +275,8 @@ (property (name "edg_part") (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00d70084")) -(comp (ref "R9") - (value "0603WAF8201T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 8.2k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "sense.R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 8.2kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) @@ -286,8 +286,8 @@ (property (name "edg_part") (value "0603WAF8201T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00d80085")) -(comp (ref "C10") - (value "CC0603KRX7R9BB104 (YAGEO) - 50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "sense.C3") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) @@ -297,8 +297,8 @@ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00bb0077")) -(comp (ref "U3") - (value "Analog_ADC:HX711 - HX711") +(comp (ref "sense.U1") + (value "HX711") (footprint "Package_SO:SOP-16_3.9x9.9mm_P1.27mm") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) @@ -308,8 +308,8 @@ (property (name "edg_part") (value "Analog_ADC:HX711")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00dd0087")) -(comp (ref "C11") - (value "CL21A106KAYNNNE (Samsung Electro-Mechanics) - X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "sense.C1") + (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0805_2012Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) @@ -320,134 +320,134 @@ (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00b90075"))) (nets -(net (code 1) (name "usb.gnd") - (node (ref J1) (pin A1)) - (node (ref J1) (pin B12)) - (node (ref J1) (pin B1)) - (node (ref J1) (pin A12)) - (node (ref U1) (pin 1)) - (node (ref U2) (pin 1)) - (node (ref U2) (pin 15)) - (node (ref U2) (pin 38)) - (node (ref U2) (pin 39)) - (node (ref C8) (pin 2)) - (node (ref R9) (pin 2)) - (node (ref U3) (pin 14)) - (node (ref C11) (pin 2)) - (node (ref U3) (pin 10)) - (node (ref U3) (pin 9)) - (node (ref U3) (pin 15)) - (node (ref U3) (pin 5)) - (node (ref C10) (pin 2)) - (node (ref J1) (pin S1)) - (node (ref C1) (pin 2)) - (node (ref C5) (pin 2)) - (node (ref C6) (pin 2)) - (node (ref J2) (pin 4)) - (node (ref SW1) (pin 2)) - (node (ref J3) (pin 2)) - (node (ref R4) (pin 2)) - (node (ref C7) (pin 2)) - (node (ref R1) (pin 1)) - (node (ref R2) (pin 1)) - (node (ref C3) (pin 2)) - (node (ref C4) (pin 2))) +(net (code 1) (name "sense.GND") + (node (ref usb.conn) (pin A1)) + (node (ref usb.conn) (pin B12)) + (node (ref usb.conn) (pin B1)) + (node (ref usb.conn) (pin A12)) + (node (ref reg.ic) (pin 1)) + (node (ref mcu.ic) (pin 1)) + (node (ref mcu.ic) (pin 15)) + (node (ref mcu.ic) (pin 38)) + (node (ref mcu.ic) (pin 39)) + (node (ref sense.C2) (pin 2)) + (node (ref sense.R2) (pin 2)) + (node (ref sense.U1) (pin 14)) + (node (ref sense.C1) (pin 2)) + (node (ref sense.U1) (pin 10)) + (node (ref sense.U1) (pin 9)) + (node (ref sense.U1) (pin 15)) + (node (ref sense.U1) (pin 5)) + (node (ref sense.C3) (pin 2)) + (node (ref usb.conn) (pin S1)) + (node (ref reg.hf_in_cap) (pin 2)) + (node (ref mcu.vcc_cap0) (pin 2)) + (node (ref mcu.vcc_cap1) (pin 2)) + (node (ref mcu.prog) (pin 4)) + (node (ref mcu.boot) (pin 2)) + (node (ref conn) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 2)) + (node (ref mcu.en_pull.c) (pin 2)) + (node (ref usb.cc_pull.cc1) (pin 1)) + (node (ref usb.cc_pull.cc2) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 2))) (net (code 2) (name "usb.pwr") - (node (ref J1) (pin A4)) - (node (ref J1) (pin B9)) - (node (ref J1) (pin B4)) - (node (ref J1) (pin A9)) - (node (ref U1) (pin 3)) - (node (ref U1) (pin 5)) - (node (ref C1) (pin 1)) - (node (ref C3) (pin 1))) -(net (code 3) (name "reg.pwr_out") - (node (ref U2) (pin 2)) - (node (ref Q1) (pin 2)) - (node (ref C11) (pin 1)) - (node (ref U3) (pin 1)) - (node (ref U3) (pin 16)) - (node (ref R3) (pin 1)) - (node (ref C5) (pin 1)) - (node (ref C6) (pin 1)) - (node (ref J2) (pin 1)) - (node (ref R5) (pin 1)) - (node (ref L1) (pin 2)) - (node (ref C4) (pin 1))) + (node (ref usb.conn) (pin A4)) + (node (ref usb.conn) (pin B9)) + (node (ref usb.conn) (pin B4)) + (node (ref usb.conn) (pin A9)) + (node (ref reg.ic) (pin 3)) + (node (ref reg.ic) (pin 5)) + (node (ref reg.hf_in_cap) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 1))) +(net (code 3) (name "sense.VCC") + (node (ref mcu.ic) (pin 2)) + (node (ref sense.Q1) (pin 2)) + (node (ref sense.C1) (pin 1)) + (node (ref sense.U1) (pin 1)) + (node (ref sense.U1) (pin 16)) + (node (ref reg.fb.top_res) (pin 1)) + (node (ref mcu.vcc_cap0) (pin 1)) + (node (ref mcu.vcc_cap1) (pin 1)) + (node (ref mcu.prog) (pin 1)) + (node (ref mcu.en_pull.r) (pin 1)) + (node (ref reg.power_path.inductor) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 1))) (net (code 4) (name "sense.dout") - (node (ref U2) (pin 8)) - (node (ref U3) (pin 12))) + (node (ref mcu.ic) (pin 8)) + (node (ref sense.U1) (pin 12))) (net (code 5) (name "sense.sck") - (node (ref U2) (pin 9)) - (node (ref U3) (pin 11))) + (node (ref mcu.ic) (pin 9)) + (node (ref sense.U1) (pin 11))) (net (code 6) (name "sense.ep") - (node (ref J3) (pin 1)) - (node (ref C8) (pin 1)) - (node (ref R8) (pin 1)) - (node (ref Q1) (pin 3)) - (node (ref U3) (pin 3))) + (node (ref conn) (pin 1)) + (node (ref sense.C2) (pin 1)) + (node (ref sense.R1) (pin 1)) + (node (ref sense.Q1) (pin 3)) + (node (ref sense.U1) (pin 3))) (net (code 7) (name "sense.sp") - (node (ref J3) (pin 3)) - (node (ref R6) (pin 1))) + (node (ref conn) (pin 3)) + (node (ref sense.R3) (pin 1))) (net (code 8) (name "sense.sn") - (node (ref J3) (pin 4)) - (node (ref R7) (pin 1))) + (node (ref conn) (pin 4)) + (node (ref sense.R4) (pin 1))) (net (code 9) (name "usb.usb.dp") - (node (ref J1) (pin A6)) - (node (ref J1) (pin B6))) + (node (ref usb.conn) (pin A6)) + (node (ref usb.conn) (pin B6))) (net (code 10) (name "usb.usb.dm") - (node (ref J1) (pin A7)) - (node (ref J1) (pin B7))) -(net (code 11) (name "usb.conn.A5") - (node (ref J1) (pin A5)) - (node (ref R1) (pin 2))) -(net (code 12) (name "usb.conn.B5") - (node (ref J1) (pin B5)) - (node (ref R2) (pin 2))) + (node (ref usb.conn) (pin A7)) + (node (ref usb.conn) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref usb.conn) (pin A5)) + (node (ref usb.cc_pull.cc1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref usb.conn) (pin B5)) + (node (ref usb.cc_pull.cc2) (pin 2))) (net (code 13) (name "reg.fb.output") - (node (ref U1) (pin 4)) - (node (ref R3) (pin 2)) - (node (ref R4) (pin 1))) + (node (ref reg.ic) (pin 4)) + (node (ref reg.fb.top_res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 1))) (net (code 14) (name "reg.vbst_cap.neg") - (node (ref C2) (pin 2)) - (node (ref U1) (pin 2)) - (node (ref L1) (pin 1))) + (node (ref reg.vbst_cap) (pin 2)) + (node (ref reg.ic) (pin 2)) + (node (ref reg.power_path.inductor) (pin 1))) (net (code 15) (name "reg.vbst_cap.pos") - (node (ref C2) (pin 1)) - (node (ref U1) (pin 6))) + (node (ref reg.vbst_cap) (pin 1)) + (node (ref reg.ic) (pin 6))) (net (code 16) (name "mcu.program_uart_node.a_tx") - (node (ref U2) (pin 35)) - (node (ref J2) (pin 2))) + (node (ref mcu.ic) (pin 35)) + (node (ref mcu.prog) (pin 2))) (net (code 17) (name "mcu.program_uart_node.b_tx") - (node (ref U2) (pin 34)) - (node (ref J2) (pin 3))) + (node (ref mcu.ic) (pin 34)) + (node (ref mcu.prog) (pin 3))) (net (code 18) (name "mcu.program_en_node") - (node (ref U2) (pin 3)) - (node (ref R5) (pin 2)) - (node (ref C7) (pin 1))) + (node (ref mcu.ic) (pin 3)) + (node (ref mcu.en_pull.r) (pin 2)) + (node (ref mcu.en_pull.c) (pin 1))) (net (code 19) (name "mcu.program_boot_node") - (node (ref U2) (pin 25)) - (node (ref SW1) (pin 1))) + (node (ref mcu.ic) (pin 25)) + (node (ref mcu.boot) (pin 1))) (net (code 20) (name "mcu.ic.io2") - (node (ref U2) (pin 24))) + (node (ref mcu.ic) (pin 24))) (net (code 21) (name "sense.R3.b") - (node (ref R6) (pin 2)) - (node (ref C9) (pin 1)) - (node (ref U3) (pin 8))) + (node (ref sense.R3) (pin 2)) + (node (ref sense.C4) (pin 1)) + (node (ref sense.U1) (pin 8))) (net (code 22) (name "sense.R4.b") - (node (ref R7) (pin 2)) - (node (ref C9) (pin 2)) - (node (ref U3) (pin 7))) + (node (ref sense.R4) (pin 2)) + (node (ref sense.C4) (pin 2)) + (node (ref sense.U1) (pin 7))) (net (code 23) (name "sense.R1.b") - (node (ref R8) (pin 2)) - (node (ref R9) (pin 1)) - (node (ref U3) (pin 4))) + (node (ref sense.R1) (pin 2)) + (node (ref sense.R2) (pin 1)) + (node (ref sense.U1) (pin 4))) (net (code 24) (name "sense.Q1.base") - (node (ref Q1) (pin 1)) - (node (ref U3) (pin 2))) + (node (ref sense.Q1) (pin 1)) + (node (ref sense.U1) (pin 2))) (net (code 25) (name "sense.C3.pos") - (node (ref C10) (pin 1)) - (node (ref U3) (pin 6))) + (node (ref sense.C3) (pin 1)) + (node (ref sense.U1) (pin 6))) (net (code 26) (name "sense.U1.ports.13") - (node (ref U3) (pin 13)))) + (node (ref sense.U1) (pin 13)))) ) \ No newline at end of file diff --git a/examples/TestBlinkyWithModeledSchematicImport/TestBlinkyWithModeledSchematicImport.ref.net b/examples/TestBlinkyWithModeledSchematicImport/TestBlinkyWithModeledSchematicImport.ref.net new file mode 100644 index 000000000..a6cbb2715 --- /dev/null +++ b/examples/TestBlinkyWithModeledSchematicImport/TestBlinkyWithModeledSchematicImport.ref.net @@ -0,0 +1,453 @@ +(export (version D) +(components +(comp (ref "J1") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "U1") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "R3") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "R4") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "C1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "C2") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "L1") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "C3") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "C4") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "U2") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "C5") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "C6") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "J2") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "SW1") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "R5") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "C7") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "J3") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "conn")) + (property (name "edg_short_path") (value "conn")) + (property (name "edg_refdes") (value "J3")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "042701af")) +(comp (ref "Q1") + (value "40V 200mW 200mA 100@10mA,1V 300MHz 300mV@50mA,5mA NPN +150℃@(Tj) SOT-23(SOT-23-3) Bipolar Transistors - BJT ROHS") + (footprint "Package_TO_SOT_SMD:SOT-23") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) + (property (name "edg_path") (value "sense.Q1")) + (property (name "edg_short_path") (value "sense.Q1")) + (property (name "edg_refdes") (value "Q1")) + (property (name "edg_part") (value "MMBT3904 (Changjiang Electronics Tech (CJ))")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00d50083")) +(comp (ref "R6") + (value "±1% 1/10W Thick Film Resistors 75V ±200ppm/℃ -55℃~+155℃ 100Ω 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) + (property (name "edg_path") (value "sense.R3")) + (property (name "edg_short_path") (value "sense.R3")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00d90086")) +(comp (ref "R7") + (value "±1% 1/10W Thick Film Resistors 75V ±200ppm/℃ -55℃~+155℃ 100Ω 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) + (property (name "edg_path") (value "sense.R4")) + (property (name "edg_short_path") (value "sense.R4")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00da0087")) +(comp (ref "C8") + (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) + (property (name "edg_path") (value "sense.C2")) + (property (name "edg_short_path") (value "sense.C2")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CL21A106KAYNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00ba0076")) +(comp (ref "C9") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) + (property (name "edg_path") (value "sense.C4")) + (property (name "edg_short_path") (value "sense.C4")) + (property (name "edg_refdes") (value "C9")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00bc0078")) +(comp (ref "R8") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 20kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) + (property (name "edg_path") (value "sense.R1")) + (property (name "edg_short_path") (value "sense.R1")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00d70084")) +(comp (ref "R9") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 8.2kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) + (property (name "edg_path") (value "sense.R2")) + (property (name "edg_short_path") (value "sense.R2")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF8201T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00d80085")) +(comp (ref "C10") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) + (property (name "edg_path") (value "sense.C3")) + (property (name "edg_short_path") (value "sense.C3")) + (property (name "edg_refdes") (value "C10")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00bb0077")) +(comp (ref "U3") + (value "HX711") + (footprint "Package_SO:SOP-16_3.9x9.9mm_P1.27mm") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) + (property (name "edg_path") (value "sense.U1")) + (property (name "edg_short_path") (value "sense.U1")) + (property (name "edg_refdes") (value "U3")) + (property (name "edg_part") (value "Analog_ADC:HX711")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00dd0087")) +(comp (ref "C11") + (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711Modeled")) + (property (name "edg_path") (value "sense.C1")) + (property (name "edg_short_path") (value "sense.C1")) + (property (name "edg_refdes") (value "C11")) + (property (name "edg_part") (value "CL21A106KAYNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00b90075"))) +(nets +(net (code 1) (name "sense.GND") + (node (ref J1) (pin A1)) + (node (ref J1) (pin B12)) + (node (ref J1) (pin B1)) + (node (ref J1) (pin A12)) + (node (ref U1) (pin 1)) + (node (ref U2) (pin 1)) + (node (ref U2) (pin 15)) + (node (ref U2) (pin 38)) + (node (ref U2) (pin 39)) + (node (ref C8) (pin 2)) + (node (ref R9) (pin 2)) + (node (ref U3) (pin 14)) + (node (ref C11) (pin 2)) + (node (ref U3) (pin 10)) + (node (ref U3) (pin 9)) + (node (ref U3) (pin 15)) + (node (ref U3) (pin 5)) + (node (ref C10) (pin 2)) + (node (ref J1) (pin S1)) + (node (ref C1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref J2) (pin 4)) + (node (ref SW1) (pin 2)) + (node (ref J3) (pin 2)) + (node (ref R4) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref R1) (pin 1)) + (node (ref R2) (pin 1)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref J1) (pin A4)) + (node (ref J1) (pin B9)) + (node (ref J1) (pin B4)) + (node (ref J1) (pin A9)) + (node (ref U1) (pin 3)) + (node (ref U1) (pin 5)) + (node (ref C1) (pin 1)) + (node (ref C3) (pin 1))) +(net (code 3) (name "sense.VCC") + (node (ref U2) (pin 2)) + (node (ref Q1) (pin 2)) + (node (ref C11) (pin 1)) + (node (ref U3) (pin 1)) + (node (ref U3) (pin 16)) + (node (ref R3) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref R5) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C4) (pin 1))) +(net (code 4) (name "sense.dout") + (node (ref U2) (pin 8)) + (node (ref U3) (pin 12))) +(net (code 5) (name "sense.sck") + (node (ref U2) (pin 9)) + (node (ref U3) (pin 11))) +(net (code 6) (name "sense.ep") + (node (ref J3) (pin 1)) + (node (ref C8) (pin 1)) + (node (ref R8) (pin 1)) + (node (ref Q1) (pin 3)) + (node (ref U3) (pin 3))) +(net (code 7) (name "sense.sp") + (node (ref J3) (pin 3)) + (node (ref R6) (pin 1))) +(net (code 8) (name "sense.sn") + (node (ref J3) (pin 4)) + (node (ref R7) (pin 1))) +(net (code 9) (name "usb.usb.dp") + (node (ref J1) (pin A6)) + (node (ref J1) (pin B6))) +(net (code 10) (name "usb.usb.dm") + (node (ref J1) (pin A7)) + (node (ref J1) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref J1) (pin A5)) + (node (ref R1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref J1) (pin B5)) + (node (ref R2) (pin 2))) +(net (code 13) (name "reg.fb.output") + (node (ref U1) (pin 4)) + (node (ref R3) (pin 2)) + (node (ref R4) (pin 1))) +(net (code 14) (name "reg.vbst_cap.neg") + (node (ref C2) (pin 2)) + (node (ref U1) (pin 2)) + (node (ref L1) (pin 1))) +(net (code 15) (name "reg.vbst_cap.pos") + (node (ref C2) (pin 1)) + (node (ref U1) (pin 6))) +(net (code 16) (name "mcu.program_uart_node.a_tx") + (node (ref U2) (pin 35)) + (node (ref J2) (pin 2))) +(net (code 17) (name "mcu.program_uart_node.b_tx") + (node (ref U2) (pin 34)) + (node (ref J2) (pin 3))) +(net (code 18) (name "mcu.program_en_node") + (node (ref U2) (pin 3)) + (node (ref R5) (pin 2)) + (node (ref C7) (pin 1))) +(net (code 19) (name "mcu.program_boot_node") + (node (ref U2) (pin 25)) + (node (ref SW1) (pin 1))) +(net (code 20) (name "mcu.ic.io2") + (node (ref U2) (pin 24))) +(net (code 21) (name "sense.R3.b") + (node (ref R6) (pin 2)) + (node (ref C9) (pin 1)) + (node (ref U3) (pin 8))) +(net (code 22) (name "sense.R4.b") + (node (ref R7) (pin 2)) + (node (ref C9) (pin 2)) + (node (ref U3) (pin 7))) +(net (code 23) (name "sense.R1.b") + (node (ref R8) (pin 2)) + (node (ref R9) (pin 1)) + (node (ref U3) (pin 4))) +(net (code 24) (name "sense.Q1.base") + (node (ref Q1) (pin 1)) + (node (ref U3) (pin 2))) +(net (code 25) (name "sense.C3.pos") + (node (ref C10) (pin 1)) + (node (ref U3) (pin 6))) +(net (code 26) (name "sense.U1.ports.13") + (node (ref U3) (pin 13)))) +) \ No newline at end of file diff --git a/examples/TestBlinkyWithSchematicImport/TestBlinkyWithSchematicImport.net b/examples/TestBlinkyWithSchematicImport/TestBlinkyWithSchematicImport.net index c9bb81b86..4c26c61ea 100644 --- a/examples/TestBlinkyWithSchematicImport/TestBlinkyWithSchematicImport.net +++ b/examples/TestBlinkyWithSchematicImport/TestBlinkyWithSchematicImport.net @@ -1,205 +1,205 @@ (export (version D) (components -(comp (ref "J1") - (value "COM-15111 (Sparkfun)") +(comp (ref "usb.conn") + (value "COM-15111") (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") (property (name "Sheetname") (value "usb")) - (property (name "Sheetfile") (value "electronics_lib.UsbPorts.UsbCReceptacle")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) (property (name "edg_path") (value "usb.conn")) (property (name "edg_short_path") (value "usb.conn")) (property (name "edg_refdes") (value "J1")) (property (name "edg_part") (value "COM-15111 (Sparkfun)")) (sheetpath (names "/usb/") (tstamps "/02aa014b/")) (tstamps "042701af")) -(comp (ref "R1") - (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 5.1k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "usb.cc_pull.cc1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "cc_pull")) - (property (name "Sheetfile") (value "electronics_lib.UsbPorts.UsbCcPulldownResistor")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) (property (name "edg_path") (value "usb.cc_pull.cc1.res")) (property (name "edg_short_path") (value "usb.cc_pull.cc1")) (property (name "edg_refdes") (value "R1")) (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) (tstamps "022300f8")) -(comp (ref "R2") - (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 5.1k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "usb.cc_pull.cc2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "cc_pull")) - (property (name "Sheetfile") (value "electronics_lib.UsbPorts.UsbCcPulldownResistor")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) (property (name "edg_path") (value "usb.cc_pull.cc2.res")) (property (name "edg_short_path") (value "usb.cc_pull.cc2")) (property (name "edg_refdes") (value "R2")) (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) (tstamps "022400f9")) -(comp (ref "U1") - (value "TPS561201 (Texas Instruments)") +(comp (ref "reg.ic") + (value "TPS561201") (footprint "Package_TO_SOT_SMD:SOT-23-6") (property (name "Sheetname") (value "reg")) - (property (name "Sheetfile") (value "electronics_lib.BuckConverter_TexasInstruments.Tps561201")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) (property (name "edg_path") (value "reg.ic")) (property (name "edg_short_path") (value "reg.ic")) (property (name "edg_refdes") (value "U1")) (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) (sheetpath (names "/reg/") (tstamps "/028a013f/")) (tstamps "013700cd")) -(comp (ref "R3") - (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 33k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "reg.fb.top_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "fb")) - (property (name "Sheetfile") (value "electronics_abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) (property (name "edg_path") (value "reg.fb.div.top_res")) (property (name "edg_short_path") (value "reg.fb.top_res")) (property (name "edg_refdes") (value "R3")) (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) (tstamps "0c0c02fd")) -(comp (ref "R4") - (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 10k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "reg.fb.bottom_res") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "fb")) - (property (name "Sheetfile") (value "electronics_abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) (property (name "edg_path") (value "reg.fb.div.bottom_res")) (property (name "edg_short_path") (value "reg.fb.bottom_res")) (property (name "edg_refdes") (value "R4")) (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) (tstamps "175b043f")) -(comp (ref "C1") - (value "CC0603KRX7R9BB104 (YAGEO) - 50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "reg.hf_in_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "reg")) - (property (name "Sheetfile") (value "electronics_lib.BuckConverter_TexasInstruments.Tps561201")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) (property (name "edg_path") (value "reg.hf_in_cap.cap")) (property (name "edg_short_path") (value "reg.hf_in_cap")) (property (name "edg_refdes") (value "C1")) (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) (sheetpath (names "/reg/") (tstamps "/028a013f/")) (tstamps "11ed0398")) -(comp (ref "C2") - (value "CC0603KRX7R9BB104 (YAGEO) - 50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "reg.vbst_cap") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "reg")) - (property (name "Sheetfile") (value "electronics_lib.BuckConverter_TexasInstruments.Tps561201")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) (property (name "edg_path") (value "reg.vbst_cap")) (property (name "edg_short_path") (value "reg.vbst_cap")) (property (name "edg_refdes") (value "C2")) (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) (sheetpath (names "/reg/") (tstamps "/028a013f/")) (tstamps "0f330353")) -(comp (ref "L1") - (value "CBC3225T220KR (Taiyo Yuden) - 620mA 22uH ±10% 270m? 1210 Inductors (SMD) ROHS") - (footprint "Inductor_SMD:L_1210_3225Metric") +(comp (ref "reg.power_path.inductor") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") (property (name "Sheetname") (value "power_path")) - (property (name "Sheetfile") (value "electronics_abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) (property (name "edg_path") (value "reg.power_path.inductor")) (property (name "edg_short_path") (value "reg.power_path.inductor")) (property (name "edg_refdes") (value "L1")) - (property (name "edg_part") (value "CBC3225T220KR (Taiyo Yuden)")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) (tstamps "0f2b0369")) -(comp (ref "C3") - (value "CL21A475KAQNNNE (Samsung Electro-Mechanics) - 25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "reg.power_path.in_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0805_2012Metric") (property (name "Sheetname") (value "power_path")) - (property (name "Sheetfile") (value "electronics_abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) (property (name "edg_path") (value "reg.power_path.in_cap.cap")) (property (name "edg_short_path") (value "reg.power_path.in_cap")) (property (name "edg_refdes") (value "C3")) (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) (tstamps "0879026b")) -(comp (ref "C4") - (value "CL21A475KAQNNNE (Samsung Electro-Mechanics) - 25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "reg.power_path.out_cap") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0805_2012Metric") (property (name "Sheetname") (value "power_path")) - (property (name "Sheetfile") (value "electronics_abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) (property (name "edg_path") (value "reg.power_path.out_cap.cap")) (property (name "edg_short_path") (value "reg.power_path.out_cap")) (property (name "edg_refdes") (value "C4")) (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) (tstamps "0be902ec")) -(comp (ref "U2") - (value "ESP32-WROOM-32 (Espressif Systems)") +(comp (ref "mcu.ic") + (value "ESP32-WROOM-32") (footprint "RF_Module:ESP32-WROOM-32") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "electronics_lib.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) (property (name "edg_path") (value "mcu.ic")) (property (name "edg_short_path") (value "mcu.ic")) (property (name "edg_refdes") (value "U2")) (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "013700cd")) -(comp (ref "C5") - (value "CL31A226KPHNNNE (Samsung Electro-Mechanics) - 10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "mcu.vcc_cap0") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_1206_3216Metric") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "electronics_lib.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) (property (name "edg_path") (value "mcu.vcc_cap0.cap")) (property (name "edg_short_path") (value "mcu.vcc_cap0")) (property (name "edg_refdes") (value "C5")) (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "0e590300")) -(comp (ref "C6") - (value "CC0603KRX7R9BB104 (YAGEO) - 50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "mcu.vcc_cap1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "electronics_lib.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) (property (name "edg_path") (value "mcu.vcc_cap1.cap")) (property (name "edg_short_path") (value "mcu.vcc_cap1")) (property (name "edg_refdes") (value "C6")) (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "0e5a0301")) -(comp (ref "J2") - (value "PinHeader2.54 1x4 (Generic)") +(comp (ref "mcu.prog") + (value "PinHeader2.54 1x4") (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "electronics_lib.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) (property (name "edg_path") (value "mcu.prog.conn")) (property (name "edg_short_path") (value "mcu.prog")) (property (name "edg_refdes") (value "J2")) (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "045f01b9")) -(comp (ref "SW1") +(comp (ref "mcu.boot") (value "5.1mm switch") (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "electronics_lib.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) (property (name "edg_path") (value "mcu.boot.package")) (property (name "edg_short_path") (value "mcu.boot")) (property (name "edg_refdes") (value "SW1")) (property (name "edg_part") (value "5.1mm switch")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "042b01b5")) -(comp (ref "R5") - (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 10k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "mcu.en_pull.r") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "en_pull")) - (property (name "Sheetfile") (value "electronics_abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) (property (name "edg_path") (value "mcu.en_pull.rc.r")) (property (name "edg_short_path") (value "mcu.en_pull.r")) (property (name "edg_refdes") (value "R5")) (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) (tstamps "00730073")) -(comp (ref "C7") - (value "CL10A105KB8NNNC (Samsung Electro-Mechanics) - 50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "mcu.en_pull.c") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "en_pull")) - (property (name "Sheetfile") (value "electronics_abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) (property (name "edg_path") (value "mcu.en_pull.rc.c")) (property (name "edg_short_path") (value "mcu.en_pull.c")) (property (name "edg_refdes") (value "C7")) (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) (tstamps "00640064")) -(comp (ref "J3") - (value "PinHeader2.54 1x4 (Generic)") +(comp (ref "conn") + (value "PinHeader2.54 1x4") (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") (property (name "Sheetname") (value "")) (property (name "Sheetfile") (value "")) @@ -209,8 +209,8 @@ (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) (sheetpath (names "/") (tstamps "/")) (tstamps "042701af")) -(comp (ref "Q1") - (value "MMBT3904 (Changjiang Electronics Tech (CJ)) - 40V 200mW 200mA 100@10mA,1V 300MHz 300mV@50mA,5mA NPN +150?@(Tj) SOT-23(SOT-23-3) Bipolar Transistors - BJT ROHS") +(comp (ref "sense.Q1") + (value "40V 200mW 200mA 100@10mA,1V 300MHz 300mV@50mA,5mA NPN +150℃@(Tj) SOT-23(SOT-23-3) Bipolar Transistors - BJT ROHS") (footprint "Package_TO_SOT_SMD:SOT-23") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) @@ -220,8 +220,8 @@ (property (name "edg_part") (value "MMBT3904 (Changjiang Electronics Tech (CJ))")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00d50083")) -(comp (ref "R6") - (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±200ppm/? -55?~+155? 100? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "sense.R3") + (value "±1% 1/10W Thick Film Resistors 75V ±200ppm/℃ -55℃~+155℃ 100Ω 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) @@ -231,8 +231,8 @@ (property (name "edg_part") (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00d90086")) -(comp (ref "R7") - (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±200ppm/? -55?~+155? 100? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "sense.R4") + (value "±1% 1/10W Thick Film Resistors 75V ±200ppm/℃ -55℃~+155℃ 100Ω 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) @@ -242,8 +242,8 @@ (property (name "edg_part") (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00da0087")) -(comp (ref "C8") - (value "CL21A106KAYNNNE (Samsung Electro-Mechanics) - X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "sense.C2") + (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0805_2012Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) @@ -253,8 +253,8 @@ (property (name "edg_part") (value "CL21A106KAYNNNE (Samsung Electro-Mechanics)")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00ba0076")) -(comp (ref "C9") - (value "CC0603KRX7R9BB104 (YAGEO) - 50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "sense.C4") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) @@ -264,8 +264,8 @@ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00bc0078")) -(comp (ref "R8") - (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 20k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "sense.R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 20kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) @@ -275,8 +275,8 @@ (property (name "edg_part") (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00d70084")) -(comp (ref "R9") - (value "0603WAF8201T5E (UNI-ROYAL(Uniroyal Elec)) - ±1% 1/10W Thick Film Resistors 75V ±100ppm/? -55?~+155? 8.2k? 0603 Chip Resistor - Surface Mount ROHS") +(comp (ref "sense.R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 8.2kΩ 0603 Chip Resistor - Surface Mount ROHS") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) @@ -286,8 +286,8 @@ (property (name "edg_part") (value "0603WAF8201T5E (UNI-ROYAL(Uniroyal Elec))")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00d80085")) -(comp (ref "C10") - (value "CC0603KRX7R9BB104 (YAGEO) - 50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "sense.C3") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) @@ -297,8 +297,8 @@ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00bb0077")) -(comp (ref "U3") - (value "Analog_ADC:HX711 - HX711") +(comp (ref "sense.U1") + (value "HX711") (footprint "Package_SO:SOP-16_3.9x9.9mm_P1.27mm") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) @@ -308,8 +308,8 @@ (property (name "edg_part") (value "Analog_ADC:HX711")) (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00dd0087")) -(comp (ref "C11") - (value "CL21A106KAYNNNE (Samsung Electro-Mechanics) - X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") +(comp (ref "sense.C1") + (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") (footprint "Capacitor_SMD:C_0805_2012Metric") (property (name "Sheetname") (value "sense")) (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) @@ -320,134 +320,134 @@ (sheetpath (names "/sense/") (tstamps "/066d021f/")) (tstamps "00b90075"))) (nets -(net (code 1) (name "usb.gnd") - (node (ref J1) (pin A1)) - (node (ref J1) (pin B12)) - (node (ref J1) (pin B1)) - (node (ref J1) (pin A12)) - (node (ref U1) (pin 1)) - (node (ref U2) (pin 1)) - (node (ref U2) (pin 15)) - (node (ref U2) (pin 38)) - (node (ref U2) (pin 39)) - (node (ref C8) (pin 2)) - (node (ref R9) (pin 2)) - (node (ref U3) (pin 14)) - (node (ref C11) (pin 2)) - (node (ref U3) (pin 10)) - (node (ref U3) (pin 9)) - (node (ref U3) (pin 15)) - (node (ref U3) (pin 5)) - (node (ref C10) (pin 2)) - (node (ref J1) (pin S1)) - (node (ref C1) (pin 2)) - (node (ref C5) (pin 2)) - (node (ref C6) (pin 2)) - (node (ref J2) (pin 4)) - (node (ref SW1) (pin 2)) - (node (ref J3) (pin 2)) - (node (ref R4) (pin 2)) - (node (ref C7) (pin 2)) - (node (ref R1) (pin 1)) - (node (ref R2) (pin 1)) - (node (ref C3) (pin 2)) - (node (ref C4) (pin 2))) +(net (code 1) (name "sense.GND") + (node (ref usb.conn) (pin A1)) + (node (ref usb.conn) (pin B12)) + (node (ref usb.conn) (pin B1)) + (node (ref usb.conn) (pin A12)) + (node (ref reg.ic) (pin 1)) + (node (ref mcu.ic) (pin 1)) + (node (ref mcu.ic) (pin 15)) + (node (ref mcu.ic) (pin 38)) + (node (ref mcu.ic) (pin 39)) + (node (ref sense.C2) (pin 2)) + (node (ref sense.R2) (pin 2)) + (node (ref sense.U1) (pin 14)) + (node (ref sense.C1) (pin 2)) + (node (ref sense.U1) (pin 10)) + (node (ref sense.U1) (pin 9)) + (node (ref sense.U1) (pin 15)) + (node (ref sense.U1) (pin 5)) + (node (ref sense.C3) (pin 2)) + (node (ref usb.conn) (pin S1)) + (node (ref reg.hf_in_cap) (pin 2)) + (node (ref mcu.vcc_cap0) (pin 2)) + (node (ref mcu.vcc_cap1) (pin 2)) + (node (ref mcu.prog) (pin 4)) + (node (ref mcu.boot) (pin 2)) + (node (ref conn) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 2)) + (node (ref mcu.en_pull.c) (pin 2)) + (node (ref usb.cc_pull.cc1) (pin 1)) + (node (ref usb.cc_pull.cc2) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 2))) (net (code 2) (name "usb.pwr") - (node (ref J1) (pin A4)) - (node (ref J1) (pin B9)) - (node (ref J1) (pin B4)) - (node (ref J1) (pin A9)) - (node (ref U1) (pin 3)) - (node (ref U1) (pin 5)) - (node (ref C1) (pin 1)) - (node (ref C3) (pin 1))) -(net (code 3) (name "reg.pwr_out") - (node (ref U2) (pin 2)) - (node (ref Q1) (pin 2)) - (node (ref C11) (pin 1)) - (node (ref U3) (pin 1)) - (node (ref U3) (pin 16)) - (node (ref R3) (pin 1)) - (node (ref C5) (pin 1)) - (node (ref C6) (pin 1)) - (node (ref J2) (pin 1)) - (node (ref R5) (pin 1)) - (node (ref L1) (pin 2)) - (node (ref C4) (pin 1))) + (node (ref usb.conn) (pin A4)) + (node (ref usb.conn) (pin B9)) + (node (ref usb.conn) (pin B4)) + (node (ref usb.conn) (pin A9)) + (node (ref reg.ic) (pin 3)) + (node (ref reg.ic) (pin 5)) + (node (ref reg.hf_in_cap) (pin 1)) + (node (ref reg.power_path.in_cap) (pin 1))) +(net (code 3) (name "sense.VCC") + (node (ref mcu.ic) (pin 2)) + (node (ref sense.Q1) (pin 2)) + (node (ref sense.C1) (pin 1)) + (node (ref sense.U1) (pin 1)) + (node (ref sense.U1) (pin 16)) + (node (ref reg.fb.top_res) (pin 1)) + (node (ref mcu.vcc_cap0) (pin 1)) + (node (ref mcu.vcc_cap1) (pin 1)) + (node (ref mcu.prog) (pin 1)) + (node (ref mcu.en_pull.r) (pin 1)) + (node (ref reg.power_path.inductor) (pin 2)) + (node (ref reg.power_path.out_cap) (pin 1))) (net (code 4) (name "sense.dout") - (node (ref U2) (pin 8)) - (node (ref U3) (pin 12))) + (node (ref mcu.ic) (pin 8)) + (node (ref sense.U1) (pin 12))) (net (code 5) (name "sense.sck") - (node (ref U2) (pin 9)) - (node (ref U3) (pin 11))) + (node (ref mcu.ic) (pin 9)) + (node (ref sense.U1) (pin 11))) (net (code 6) (name "sense.ep") - (node (ref J3) (pin 1)) - (node (ref C8) (pin 1)) - (node (ref R8) (pin 1)) - (node (ref Q1) (pin 3)) - (node (ref U3) (pin 3))) + (node (ref conn) (pin 1)) + (node (ref sense.C2) (pin 1)) + (node (ref sense.R1) (pin 1)) + (node (ref sense.Q1) (pin 3)) + (node (ref sense.U1) (pin 3))) (net (code 7) (name "sense.sp") - (node (ref J3) (pin 3)) - (node (ref R6) (pin 1))) + (node (ref conn) (pin 3)) + (node (ref sense.R3) (pin 1))) (net (code 8) (name "sense.sn") - (node (ref J3) (pin 4)) - (node (ref R7) (pin 1))) + (node (ref conn) (pin 4)) + (node (ref sense.R4) (pin 1))) (net (code 9) (name "usb.usb.dp") - (node (ref J1) (pin A6)) - (node (ref J1) (pin B6))) + (node (ref usb.conn) (pin A6)) + (node (ref usb.conn) (pin B6))) (net (code 10) (name "usb.usb.dm") - (node (ref J1) (pin A7)) - (node (ref J1) (pin B7))) -(net (code 11) (name "usb.conn.A5") - (node (ref J1) (pin A5)) - (node (ref R1) (pin 2))) -(net (code 12) (name "usb.conn.B5") - (node (ref J1) (pin B5)) - (node (ref R2) (pin 2))) + (node (ref usb.conn) (pin A7)) + (node (ref usb.conn) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref usb.conn) (pin A5)) + (node (ref usb.cc_pull.cc1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref usb.conn) (pin B5)) + (node (ref usb.cc_pull.cc2) (pin 2))) (net (code 13) (name "reg.fb.output") - (node (ref U1) (pin 4)) - (node (ref R3) (pin 2)) - (node (ref R4) (pin 1))) + (node (ref reg.ic) (pin 4)) + (node (ref reg.fb.top_res) (pin 2)) + (node (ref reg.fb.bottom_res) (pin 1))) (net (code 14) (name "reg.vbst_cap.neg") - (node (ref C2) (pin 2)) - (node (ref U1) (pin 2)) - (node (ref L1) (pin 1))) + (node (ref reg.vbst_cap) (pin 2)) + (node (ref reg.ic) (pin 2)) + (node (ref reg.power_path.inductor) (pin 1))) (net (code 15) (name "reg.vbst_cap.pos") - (node (ref C2) (pin 1)) - (node (ref U1) (pin 6))) + (node (ref reg.vbst_cap) (pin 1)) + (node (ref reg.ic) (pin 6))) (net (code 16) (name "mcu.program_uart_node.a_tx") - (node (ref U2) (pin 35)) - (node (ref J2) (pin 2))) + (node (ref mcu.ic) (pin 35)) + (node (ref mcu.prog) (pin 2))) (net (code 17) (name "mcu.program_uart_node.b_tx") - (node (ref U2) (pin 34)) - (node (ref J2) (pin 3))) + (node (ref mcu.ic) (pin 34)) + (node (ref mcu.prog) (pin 3))) (net (code 18) (name "mcu.program_en_node") - (node (ref U2) (pin 3)) - (node (ref R5) (pin 2)) - (node (ref C7) (pin 1))) + (node (ref mcu.ic) (pin 3)) + (node (ref mcu.en_pull.r) (pin 2)) + (node (ref mcu.en_pull.c) (pin 1))) (net (code 19) (name "mcu.program_boot_node") - (node (ref U2) (pin 25)) - (node (ref SW1) (pin 1))) + (node (ref mcu.ic) (pin 25)) + (node (ref mcu.boot) (pin 1))) (net (code 20) (name "mcu.ic.io2") - (node (ref U2) (pin 24))) + (node (ref mcu.ic) (pin 24))) (net (code 21) (name "sense.R3.b") - (node (ref R6) (pin 2)) - (node (ref C9) (pin 1)) - (node (ref U3) (pin 8))) + (node (ref sense.R3) (pin 2)) + (node (ref sense.C4) (pin 1)) + (node (ref sense.U1) (pin 8))) (net (code 22) (name "sense.R4.b") - (node (ref R7) (pin 2)) - (node (ref C9) (pin 2)) - (node (ref U3) (pin 7))) + (node (ref sense.R4) (pin 2)) + (node (ref sense.C4) (pin 2)) + (node (ref sense.U1) (pin 7))) (net (code 23) (name "sense.R1.b") - (node (ref R8) (pin 2)) - (node (ref R9) (pin 1)) - (node (ref U3) (pin 4))) + (node (ref sense.R1) (pin 2)) + (node (ref sense.R2) (pin 1)) + (node (ref sense.U1) (pin 4))) (net (code 24) (name "sense.Q1.base") - (node (ref Q1) (pin 1)) - (node (ref U3) (pin 2))) + (node (ref sense.Q1) (pin 1)) + (node (ref sense.U1) (pin 2))) (net (code 25) (name "sense.C3.pos") - (node (ref C10) (pin 1)) - (node (ref U3) (pin 6))) + (node (ref sense.C3) (pin 1)) + (node (ref sense.U1) (pin 6))) (net (code 26) (name "sense.U1.ports.13") - (node (ref U3) (pin 13)))) + (node (ref sense.U1) (pin 13)))) ) \ No newline at end of file diff --git a/examples/TestBlinkyWithSchematicImport/TestBlinkyWithSchematicImport.ref.net b/examples/TestBlinkyWithSchematicImport/TestBlinkyWithSchematicImport.ref.net new file mode 100644 index 000000000..74062d581 --- /dev/null +++ b/examples/TestBlinkyWithSchematicImport/TestBlinkyWithSchematicImport.ref.net @@ -0,0 +1,453 @@ +(export (version D) +(components +(comp (ref "J1") + (value "COM-15111") + (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") + (property (name "Sheetname") (value "usb")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCReceptacle")) + (property (name "edg_path") (value "usb.conn")) + (property (name "edg_short_path") (value "usb.conn")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "COM-15111 (Sparkfun)")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "R1") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc1.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022300f8")) +(comp (ref "R2") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "cc_pull")) + (property (name "Sheetfile") (value "edg.parts.UsbPorts.UsbCcPulldownResistor")) + (property (name "edg_path") (value "usb.cc_pull.cc2.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF5101T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/")) + (tstamps "022400f9")) +(comp (ref "U1") + (value "TPS561201") + (footprint "Package_TO_SOT_SMD:SOT-23-6") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.ic")) + (property (name "edg_short_path") (value "reg.ic")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "TPS561201 (Texas Instruments)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "013700cd")) +(comp (ref "R3") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.top_res")) + (property (name "edg_short_path") (value "reg.fb.top_res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF3302T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "0c0c02fd")) +(comp (ref "R4") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "fb")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.FeedbackVoltageDivider")) + (property (name "edg_path") (value "reg.fb.div.bottom_res")) + (property (name "edg_short_path") (value "reg.fb.bottom_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/")) + (tstamps "175b043f")) +(comp (ref "C1") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.hf_in_cap.cap")) + (property (name "edg_short_path") (value "reg.hf_in_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "11ed0398")) +(comp (ref "C2") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "reg")) + (property (name "Sheetfile") (value "edg.parts.BuckConverter_TexasInstruments.Tps561201")) + (property (name "edg_path") (value "reg.vbst_cap")) + (property (name "edg_short_path") (value "reg.vbst_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/reg/") (tstamps "/028a013f/")) + (tstamps "0f330353")) +(comp (ref "L1") + (value "530mA 22uH ±20% 839mΩ SMD Power Inductors ROHS") + (footprint "Inductor_SMD:L_Sunlord_SWPA3012S") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.inductor")) + (property (name "edg_short_path") (value "reg.power_path.inductor")) + (property (name "edg_refdes") (value "L1")) + (property (name "edg_part") (value "SWPA3012S220MT (Sunlord)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0f2b0369")) +(comp (ref "C3") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.in_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.in_cap")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0879026b")) +(comp (ref "C4") + (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "power_path")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractPowerConverters.BuckConverterPowerPath")) + (property (name "edg_path") (value "reg.power_path.out_cap.cap")) + (property (name "edg_short_path") (value "reg.power_path.out_cap")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/")) + (tstamps "0be902ec")) +(comp (ref "U2") + (value "ESP32-WROOM-32") + (footprint "RF_Module:ESP32-WROOM-32") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "ESP32-WROOM-32 (Espressif Systems)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) +(comp (ref "C5") + (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_1206_3216Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap0.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap0")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e590300")) +(comp (ref "C6") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.vcc_cap1.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap1")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e5a0301")) +(comp (ref "J2") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.prog.conn")) + (property (name "edg_short_path") (value "mcu.prog")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "045f01b9")) +(comp (ref "SW1") + (value "5.1mm switch") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.Microcontroller_Esp32.Esp32_Wroom_32")) + (property (name "edg_path") (value "mcu.boot.package")) + (property (name "edg_short_path") (value "mcu.boot")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "042b01b5")) +(comp (ref "R5") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.r")) + (property (name "edg_short_path") (value "mcu.en_pull.r")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00730073")) +(comp (ref "C7") + (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "en_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.PassiveFilters.PullupDelayRc")) + (property (name "edg_path") (value "mcu.en_pull.rc.c")) + (property (name "edg_short_path") (value "mcu.en_pull.c")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/")) + (tstamps "00640064")) +(comp (ref "J3") + (value "PinHeader2.54 1x4") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "conn")) + (property (name "edg_short_path") (value "conn")) + (property (name "edg_refdes") (value "J3")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "042701af")) +(comp (ref "Q1") + (value "40V 200mW 200mA 100@10mA,1V 300MHz 300mV@50mA,5mA NPN +150℃@(Tj) SOT-23(SOT-23-3) Bipolar Transistors - BJT ROHS") + (footprint "Package_TO_SOT_SMD:SOT-23") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) + (property (name "edg_path") (value "sense.Q1")) + (property (name "edg_short_path") (value "sense.Q1")) + (property (name "edg_refdes") (value "Q1")) + (property (name "edg_part") (value "MMBT3904 (Changjiang Electronics Tech (CJ))")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00d50083")) +(comp (ref "R6") + (value "±1% 1/10W Thick Film Resistors 75V ±200ppm/℃ -55℃~+155℃ 100Ω 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) + (property (name "edg_path") (value "sense.R3")) + (property (name "edg_short_path") (value "sense.R3")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00d90086")) +(comp (ref "R7") + (value "±1% 1/10W Thick Film Resistors 75V ±200ppm/℃ -55℃~+155℃ 100Ω 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) + (property (name "edg_path") (value "sense.R4")) + (property (name "edg_short_path") (value "sense.R4")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1000T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00da0087")) +(comp (ref "C8") + (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) + (property (name "edg_path") (value "sense.C2")) + (property (name "edg_short_path") (value "sense.C2")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CL21A106KAYNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00ba0076")) +(comp (ref "C9") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) + (property (name "edg_path") (value "sense.C4")) + (property (name "edg_short_path") (value "sense.C4")) + (property (name "edg_refdes") (value "C9")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00bc0078")) +(comp (ref "R8") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 20kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) + (property (name "edg_path") (value "sense.R1")) + (property (name "edg_short_path") (value "sense.R1")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00d70084")) +(comp (ref "R9") + (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 8.2kΩ 0603 Chip Resistor - Surface Mount ROHS") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) + (property (name "edg_path") (value "sense.R2")) + (property (name "edg_short_path") (value "sense.R2")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF8201T5E (UNI-ROYAL(Uniroyal Elec))")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00d80085")) +(comp (ref "C10") + (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) + (property (name "edg_path") (value "sense.C3")) + (property (name "edg_short_path") (value "sense.C3")) + (property (name "edg_refdes") (value "C10")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00bb0077")) +(comp (ref "U3") + (value "HX711") + (footprint "Package_SO:SOP-16_3.9x9.9mm_P1.27mm") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) + (property (name "edg_path") (value "sense.U1")) + (property (name "edg_short_path") (value "sense.U1")) + (property (name "edg_refdes") (value "U3")) + (property (name "edg_part") (value "Analog_ADC:HX711")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00dd0087")) +(comp (ref "C11") + (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "sense")) + (property (name "Sheetfile") (value "examples.test_blinky.Hx711")) + (property (name "edg_path") (value "sense.C1")) + (property (name "edg_short_path") (value "sense.C1")) + (property (name "edg_refdes") (value "C11")) + (property (name "edg_part") (value "CL21A106KAYNNNE (Samsung Electro-Mechanics)")) + (sheetpath (names "/sense/") (tstamps "/066d021f/")) + (tstamps "00b90075"))) +(nets +(net (code 1) (name "sense.GND") + (node (ref J1) (pin A1)) + (node (ref J1) (pin B12)) + (node (ref J1) (pin B1)) + (node (ref J1) (pin A12)) + (node (ref U1) (pin 1)) + (node (ref U2) (pin 1)) + (node (ref U2) (pin 15)) + (node (ref U2) (pin 38)) + (node (ref U2) (pin 39)) + (node (ref C8) (pin 2)) + (node (ref R9) (pin 2)) + (node (ref U3) (pin 14)) + (node (ref C11) (pin 2)) + (node (ref U3) (pin 10)) + (node (ref U3) (pin 9)) + (node (ref U3) (pin 15)) + (node (ref U3) (pin 5)) + (node (ref C10) (pin 2)) + (node (ref J1) (pin S1)) + (node (ref C1) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref J2) (pin 4)) + (node (ref SW1) (pin 2)) + (node (ref J3) (pin 2)) + (node (ref R4) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref R1) (pin 1)) + (node (ref R2) (pin 1)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2))) +(net (code 2) (name "usb.pwr") + (node (ref J1) (pin A4)) + (node (ref J1) (pin B9)) + (node (ref J1) (pin B4)) + (node (ref J1) (pin A9)) + (node (ref U1) (pin 3)) + (node (ref U1) (pin 5)) + (node (ref C1) (pin 1)) + (node (ref C3) (pin 1))) +(net (code 3) (name "sense.VCC") + (node (ref U2) (pin 2)) + (node (ref Q1) (pin 2)) + (node (ref C11) (pin 1)) + (node (ref U3) (pin 1)) + (node (ref U3) (pin 16)) + (node (ref R3) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref J2) (pin 1)) + (node (ref R5) (pin 1)) + (node (ref L1) (pin 2)) + (node (ref C4) (pin 1))) +(net (code 4) (name "sense.dout") + (node (ref U2) (pin 8)) + (node (ref U3) (pin 12))) +(net (code 5) (name "sense.sck") + (node (ref U2) (pin 9)) + (node (ref U3) (pin 11))) +(net (code 6) (name "sense.ep") + (node (ref J3) (pin 1)) + (node (ref C8) (pin 1)) + (node (ref R8) (pin 1)) + (node (ref Q1) (pin 3)) + (node (ref U3) (pin 3))) +(net (code 7) (name "sense.sp") + (node (ref J3) (pin 3)) + (node (ref R6) (pin 1))) +(net (code 8) (name "sense.sn") + (node (ref J3) (pin 4)) + (node (ref R7) (pin 1))) +(net (code 9) (name "usb.usb.dp") + (node (ref J1) (pin A6)) + (node (ref J1) (pin B6))) +(net (code 10) (name "usb.usb.dm") + (node (ref J1) (pin A7)) + (node (ref J1) (pin B7))) +(net (code 11) (name "usb.conn.cc.cc1") + (node (ref J1) (pin A5)) + (node (ref R1) (pin 2))) +(net (code 12) (name "usb.conn.cc.cc2") + (node (ref J1) (pin B5)) + (node (ref R2) (pin 2))) +(net (code 13) (name "reg.fb.output") + (node (ref U1) (pin 4)) + (node (ref R3) (pin 2)) + (node (ref R4) (pin 1))) +(net (code 14) (name "reg.vbst_cap.neg") + (node (ref C2) (pin 2)) + (node (ref U1) (pin 2)) + (node (ref L1) (pin 1))) +(net (code 15) (name "reg.vbst_cap.pos") + (node (ref C2) (pin 1)) + (node (ref U1) (pin 6))) +(net (code 16) (name "mcu.program_uart_node.a_tx") + (node (ref U2) (pin 35)) + (node (ref J2) (pin 2))) +(net (code 17) (name "mcu.program_uart_node.b_tx") + (node (ref U2) (pin 34)) + (node (ref J2) (pin 3))) +(net (code 18) (name "mcu.program_en_node") + (node (ref U2) (pin 3)) + (node (ref R5) (pin 2)) + (node (ref C7) (pin 1))) +(net (code 19) (name "mcu.program_boot_node") + (node (ref U2) (pin 25)) + (node (ref SW1) (pin 1))) +(net (code 20) (name "mcu.ic.io2") + (node (ref U2) (pin 24))) +(net (code 21) (name "sense.R3.b") + (node (ref R6) (pin 2)) + (node (ref C9) (pin 1)) + (node (ref U3) (pin 8))) +(net (code 22) (name "sense.R4.b") + (node (ref R7) (pin 2)) + (node (ref C9) (pin 2)) + (node (ref U3) (pin 7))) +(net (code 23) (name "sense.R1.b") + (node (ref R8) (pin 2)) + (node (ref R9) (pin 1)) + (node (ref U3) (pin 4))) +(net (code 24) (name "sense.Q1.base") + (node (ref Q1) (pin 1)) + (node (ref U3) (pin 2))) +(net (code 25) (name "sense.C3.pos") + (node (ref C10) (pin 1)) + (node (ref U3) (pin 6))) +(net (code 26) (name "sense.U1.ports.13") + (node (ref U3) (pin 13)))) +) \ No newline at end of file diff --git a/examples/test_blinky.py b/examples/test_blinky.py index b0ac4d748..d26e08c9c 100644 --- a/examples/test_blinky.py +++ b/examples/test_blinky.py @@ -535,7 +535,7 @@ def test_design_basic(self) -> None: compile_board_inplace(TestBlinkyBasic) # generate this netlist as a test def test_design_empty(self) -> None: - compile_board_inplace(TestBlinkyEmpty, False) + compile_board_inplace(TestBlinkyEmpty) def test_design_incomplete(self) -> None: with self.assertRaises(CompilerCheckError): @@ -546,37 +546,37 @@ def test_design_regulated(self) -> None: compile_board_inplace(TestBlinkyRegulated, False) def test_design_complete(self) -> None: - compile_board_inplace(TestBlinkyComplete, False) + compile_board_inplace(TestBlinkyComplete) def test_design_expnaded(self) -> None: - compile_board_inplace(TestBlinkyExpanded, False) + compile_board_inplace(TestBlinkyExpanded) def test_design_implicit(self) -> None: - compile_board_inplace(TestBlinkyImplicit, False) + compile_board_inplace(TestBlinkyImplicit) def test_design_chain(self) -> None: compile_board_inplace(TestBlinkyChain) # generate this netlist as a test def test_design_micro(self) -> None: - compile_board_inplace(TestBlinkyMicro, False) + compile_board_inplace(TestBlinkyMicro) def test_design_library(self) -> None: - compile_board_inplace(TestBlinkyWithLibrary, False) + compile_board_inplace(TestBlinkyWithLibrary) def test_design_export(self) -> None: - compile_board_inplace(TestBlinkyWithLibraryExport, False) + compile_board_inplace(TestBlinkyWithLibraryExport) def test_design_array(self) -> None: - compile_board_inplace(TestBlinkyArray, False) + compile_board_inplace(TestBlinkyArray) def test_design_packed(self) -> None: - compile_board_inplace(TestBlinkyPacked, False) + compile_board_inplace(TestBlinkyPacked) def test_design_schematic_import(self) -> None: - compile_board_inplace(TestBlinkyWithSchematicImport, False) + compile_board_inplace(TestBlinkyWithSchematicImport) def test_design_schematic_import_modeled(self) -> None: - compile_board_inplace(TestBlinkyWithModeledSchematicImport, False) + compile_board_inplace(TestBlinkyWithModeledSchematicImport) if __name__ == "__main__": From faed395636ae4da341748b5024dbfb4fa0e2bda9 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 1 Feb 2025 23:06:41 -0800 Subject: [PATCH 15/29] fix pullups? --- edg/electronics_model/I2cPort.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/edg/electronics_model/I2cPort.py b/edg/electronics_model/I2cPort.py index 6bca81807..094b10535 100644 --- a/edg/electronics_model/I2cPort.py +++ b/edg/electronics_model/I2cPort.py @@ -12,21 +12,28 @@ class I2cLink(Link): def __init__(self) -> None: super().__init__() - self.pull = self.Port(I2cPullupPort(), optional=True) self.controller = self.Port(I2cController(DigitalBidir.empty())) self.targets = self.Port(Vector(I2cTarget(DigitalBidir.empty()))) + # in concept we should only have one pullup, but optional handling on non-vector ports is a mess + # and this breaks where we have to create a bridge, since the internal link has a disconnected pull port + # so this structurally allows multiple pullups, but an assertion checks that there aren't multiple + self.pull = self.Port(Vector(I2cPullupPort().empty()), optional=True) + self.addresses = self.Parameter(ArrayIntExpr(self.targets.flatten(lambda x: x.addresses))) - self.has_pull = self.Parameter(BoolExpr(self.pull.is_connected())) + self.has_pull = self.Parameter(BoolExpr(self.pull.any_connected())) def contents(self) -> None: super().contents() - self.require(self.pull.is_connected() | self.controller.has_pullup) + self.require(self.pull.any_connected() | self.controller.has_pullup) + self.require(self.pull.length() <= 1, "at most one pullup") self.require(self.addresses.all_unique(), "conflicting addresses on I2C bus") - self.scl = self.connect(self.pull.scl, self.controller.scl, self.targets.map_extract(lambda device: device.scl), + self.scl = self.connect(self.pull.map_extract(lambda device: device.scl), + self.controller.scl, self.targets.map_extract(lambda device: device.scl), flatten=True) - self.sda = self.connect(self.pull.sda, self.controller.sda, self.targets.map_extract(lambda device: device.sda), + self.sda = self.connect(self.pull.map_extract(lambda device: device.sda), + self.controller.sda, self.targets.map_extract(lambda device: device.sda), flatten=True) From dcfb72e80ce0612f6afb3d7642daf06c56d4a15f Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 00:43:20 -0800 Subject: [PATCH 16/29] fix smu --- .../scala/edg/compiler/ExprEvaluate.scala | 27 ++++++++++++------- edg/electronics_model/DigitalPorts.py | 11 +++++--- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/compiler/src/main/scala/edg/compiler/ExprEvaluate.scala b/compiler/src/main/scala/edg/compiler/ExprEvaluate.scala index bb0685ac7..20dc72a0b 100644 --- a/compiler/src/main/scala/edg/compiler/ExprEvaluate.scala +++ b/compiler/src/main/scala/edg/compiler/ExprEvaluate.scala @@ -188,7 +188,16 @@ object ExprEvaluate { } case Op.RANGE => (lhs, rhs) match { - case (FloatPromotable(lhs), FloatPromotable(rhs)) => RangeValue(math.min(lhs, rhs), math.max(lhs, rhs)) + case (FloatPromotable(lhs), FloatPromotable(rhs)) => + if (lhs.isNaN && rhs.isNaN) { // here, NaN is treated as empty and dispreferred (instead of NaN prop) + RangeEmpty + } else if (lhs.isNaN) { + RangeValue(rhs, rhs) + } else if (rhs.isNaN) { + RangeValue(lhs, lhs) + } else { + RangeValue(math.min(lhs, rhs), math.max(lhs, rhs)) + } case _ => throw new ExprEvaluateException(s"Unknown binary operands types in $lhs ${binary.op} $rhs from $binary") } @@ -259,6 +268,12 @@ object ExprEvaluate { case (Op.MIN, RangeValue(valMin, _)) => FloatValue(valMin) case (Op.MAX, RangeValue(_, valMax)) => FloatValue(valMax) + + // TODO can we have stricter semantics to avoid min(RangeEmpty) and max(RangeEmpty)? + // This just NaNs out so at least it propagates + case (Op.MAX, RangeEmpty) => FloatValue(Float.NaN) + case (Op.MIN, RangeEmpty) => FloatValue(Float.NaN) + case (Op.CENTER, RangeValue(valMin, valMax)) => FloatValue((valMin + valMax) / 2) case (Op.WIDTH, RangeValue(valMin, valMax)) => FloatValue(math.abs(valMax - valMin)) @@ -273,6 +288,7 @@ object ExprEvaluate { case (Op.SUM, ArrayValue.Empty(_)) => FloatValue(0) // TODO type needs to be dynamic case (Op.SUM, ArrayValue.ExtractFloat(vals)) => FloatValue(vals.sum) case (Op.SUM, ArrayValue.ExtractInt(vals)) => IntValue(vals.sum) + case (Op.SUM, ArrayValue.ExtractBoolean(vals)) => IntValue(vals.count(_ == true)) case (Op.SUM, ArrayValue.UnpackRange(extracted)) => extracted match { case ArrayValue.UnpackRange.FullRange(valMins, valMaxs) => RangeValue(valMins.sum, valMaxs.sum) case _ => RangeEmpty // TODO how should sum behave on empty ranges? @@ -294,15 +310,6 @@ object ExprEvaluate { case (Op.MINIMUM, ArrayValue.ExtractFloat(vals)) => FloatValue(vals.min) case (Op.MINIMUM, ArrayValue.ExtractInt(vals)) => IntValue(vals.min) - // TODO this is definitely a hack in the absence of a proper range extractor - case (Op.MAXIMUM, RangeValue(lower, upper)) => FloatValue(upper) - case (Op.MINIMUM, RangeValue(lower, upper)) => FloatValue(lower) - - // TODO can we have stricter semantics to avoid min(RangeEmpty) and max(RangeEmpty)? - // This just NaNs out so at least it propagates - case (Op.MAXIMUM, RangeEmpty) => FloatValue(Float.NaN) - case (Op.MINIMUM, RangeEmpty) => FloatValue(Float.NaN) - // TODO this should be a user-level assertion instead of a compiler error case (Op.SET_EXTRACT, ArrayValue.Empty(_)) => throw new ExprEvaluateException(s"SetExtract with empty values from $unarySet") diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 8ac800317..6b124c933 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -145,10 +145,10 @@ def __init__(self) -> None: current_draw=RangeExpr(), input_thresholds=RangeExpr())) - self.inner_link = self.Port(DigitalSource(current_limits=RangeExpr.ALL, # magical port - voltage_out=RangeExpr.EMPTY, - output_thresholds=RangeExpr.ALL, - pullup_capable=True, pulldown_capable=True)) + self.inner_link = self.Port(DigitalSource(current_limits=RangeExpr.ALL, + voltage_out=RangeExpr(), + output_thresholds=RangeExpr(), + pullup_capable=True, pulldown_capable=True)) # magical port def contents(self) -> None: super().contents() @@ -157,6 +157,9 @@ def contents(self) -> None: self.assign(self.outer_port.current_draw, self.inner_link.link().current_drawn) self.assign(self.outer_port.input_thresholds, self.inner_link.link().input_thresholds) + self.assign(self.inner_link.voltage_out, self.outer_port.link().voltage) + self.assign(self.inner_link.output_thresholds, self.outer_port.link().output_thresholds) + class DigitalSink(DigitalBase): bridge_type = DigitalSinkBridge From 75a103a788e0b2b87798a812ac76b596bc4bb0de Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 00:48:12 -0800 Subject: [PATCH 17/29] implement count + fix conflict detect --- edg/core/Array.py | 4 ++++ edg/core/ArrayExpr.py | 3 +++ edg/electronics_model/DigitalPorts.py | 7 +++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/edg/core/Array.py b/edg/core/Array.py index fdde28d5f..99b756c8a 100644 --- a/edg/core/Array.py +++ b/edg/core/Array.py @@ -333,6 +333,10 @@ def all(self, selector: Callable[[VectorType], BoolExpr]) -> BoolExpr: param = self.validate_selector(BoolExpr, selector(self._elt_sample)) return ArrayBoolExpr()._bind(MapExtractBinding(self, param)).all() + def count(self, selector: Callable[[VectorType], BoolExpr]) -> IntExpr: + param = self.validate_selector(BoolExpr, selector(self._elt_sample)) + return ArrayBoolExpr()._bind(MapExtractBinding(self, param)).count() + @overload def sum(self, selector: Callable[[VectorType], RangeExpr]) -> RangeExpr: ... @overload diff --git a/edg/core/ArrayExpr.py b/edg/core/ArrayExpr.py index 9a6ab226b..2540c9c0e 100644 --- a/edg/core/ArrayExpr.py +++ b/edg/core/ArrayExpr.py @@ -115,6 +115,9 @@ def any(self) -> BoolExpr: def all(self) -> BoolExpr: return BoolExpr()._new_bind(UnarySetOpBinding(self, BoolOp.op_and)) + def count(self) -> IntExpr: + return IntExpr()._new_bind(UnarySetOpBinding(self, NumericOp.sum)) + ArrayIntLike = Union['ArrayIntExpr', Sequence[IntLike]] class ArrayIntExpr(ArrayExpr[IntExpr, List[int], ArrayIntLike]): diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 6b124c933..af83b8235 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -127,10 +127,9 @@ def contents(self): self._has_low_signal_driver.implies(self._has_high_signal_driver | self.pullup_capable), "requires high driver or pullup") # when multiple sources, ensure they all drive only one signal direction (eg, open drain) - # TODO IMPLEMENT ME WITH COUNT OPERATION - # self.require((self.sources.length() > 1).implies( - # ~self.sources.any(lambda x: x.high_driver) | ~self.sources.any(lambda x: x.low_driver)), - # "conflicting source drivers") + self.require((self.sources.count(lambda x: x.high_driver) > 1).implies(~self.sources.any(lambda x: x.low_driver)) & + (self.sources.count(lambda x: x.low_driver) > 1).implies(~self.sources.any(lambda x: x.high_driver)), + "conflicting source drivers") class DigitalBase(CircuitPort[DigitalLink]): From bb11660138ccb283b3dec2adb2aa46518262d61a Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 01:11:56 -0800 Subject: [PATCH 18/29] fix esp --- edg/parts/Microcontroller_Esp.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/edg/parts/Microcontroller_Esp.py b/edg/parts/Microcontroller_Esp.py index 761836943..43af04945 100644 --- a/edg/parts/Microcontroller_Esp.py +++ b/edg/parts/Microcontroller_Esp.py @@ -58,8 +58,8 @@ def contents(self) -> None: self.connect(self.uart.tx, self.conn.pins.request('4').adapt_to(DigitalSource())) self.connect(self.gnd, self.conn.pins.request('5').adapt_to(Ground())) - self.connect(self.en, self.conn.pins.request('6').adapt_to(DigitalSource())) # RTS - self.connect(self.boot, self.conn.pins.request('2').adapt_to(DigitalSource())) # CTS + self.connect(self.en, self.conn.pins.request('6').adapt_to(DigitalSource.low_from_supply(self.gnd))) # RTS + self.connect(self.boot, self.conn.pins.request('2').adapt_to(DigitalSource.low_from_supply(self.gnd))) # CTS @non_library From 2216966e632e66e3a5551307fc9f93dc5de27905 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 01:14:31 -0800 Subject: [PATCH 19/29] Update edg-compiler-precompiled.jar --- .../resources/edg-compiler-precompiled.jar | Bin 13163881 -> 13164024 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/edg/core/resources/edg-compiler-precompiled.jar b/edg/core/resources/edg-compiler-precompiled.jar index 1d4cb3bb743c967edf639cd3ed67b0bb10215dcf..9a3348d4e9649f43d5e7960a8fd3f55fa88d9783 100644 GIT binary patch delta 91849 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 XHdX%x|7wkEjXTcQ_@!`J1*HE2W>pW+ delta 90350 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 cnWnDWIOW#A;NLx+dpbQAwfV(zWi` Date: Sun, 2 Feb 2025 01:40:58 -0800 Subject: [PATCH 20/29] cleaner reset modeling - wip --- edg/abstract_parts/AbstractDebugHeaders.py | 2 +- edg/electronics_model/DigitalPorts.py | 42 +++++++++++----------- edg/electronics_model/PassivePort.py | 6 ++-- edg/parts/DebugHeaders.py | 6 ++-- edg/parts/Microcontroller_Stm32f103.py | 3 +- edg/parts/Microcontroller_Stm32g031.py | 5 ++- edg/parts/Microcontroller_Stm32l432.py | 2 +- 7 files changed, 34 insertions(+), 32 deletions(-) diff --git a/edg/abstract_parts/AbstractDebugHeaders.py b/edg/abstract_parts/AbstractDebugHeaders.py index 0a3e9574f..86aaae2cc 100644 --- a/edg/abstract_parts/AbstractDebugHeaders.py +++ b/edg/abstract_parts/AbstractDebugHeaders.py @@ -17,7 +17,7 @@ class SwdCortexTargetConnectorReset(BlockInterfaceMixin[SwdCortexTargetConnector """Mixin for SWD connectors with adding the optional reset pin""" def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) - self.reset = self.Port(DigitalBidir.empty(), optional=True) # can tri-state when not asserted + self.reset = self.Port(DigitalSource.empty(), optional=True) # as open-drain class SwdCortexTargetConnectorSwo(BlockInterfaceMixin[SwdCortexTargetConnector]): diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index af83b8235..cf742aafb 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -51,11 +51,6 @@ def __init__(self) -> None: self._has_low_signal_driver = self.Parameter(BoolExpr()) self._has_high_signal_driver = self.Parameter(BoolExpr()) - # these are only used for defining bridges - # TODO can these be moved into the bridge only so they're not evaluated everywhere? - self._only_low_single_source_driver = self.Parameter(BoolExpr()) - self._only_high_single_source_driver = self.Parameter(BoolExpr()) - def contents(self): super().contents() @@ -111,20 +106,20 @@ def contents(self): # ensure both digital levels can be driven (but pull-up or -down only connections are allowed) self.assign(self.pullup_capable, - self.bidirs.any(lambda x: x.pullup_capable) | - self.sources.any(lambda x: x.pullup_capable)) + self.sources.any(lambda x: x.pullup_capable) | + self.sinks.any(lambda x: x.pullup_capable) | + self.bidirs.any(lambda x: x.pullup_capable)) self.assign(self.pulldown_capable, - self.bidirs.any(lambda x: x.pulldown_capable) | - self.sources.any(lambda x: x.pulldown_capable)) + self.sources.any(lambda x: x.pulldown_capable) | + self.sinks.any(lambda x: x.pulldown_capable) | + self.bidirs.any(lambda x: x.pulldown_capable)) self.assign(self._has_low_signal_driver, # assumed bidirs are true directional drivers self.bidirs.any_connected() | self.sources.any(lambda x: x.low_driver)) self.assign(self._has_high_signal_driver, self.bidirs.any_connected() | self.sources.any(lambda x: x.high_driver)) - self.require(self.sinks.any(lambda x: x._bridged_internal) | - self._has_high_signal_driver.implies(self._has_low_signal_driver | self.pulldown_capable), "requires low driver or pulldown") - self.require(self.sinks.any(lambda x: x._bridged_internal) | - self._has_low_signal_driver.implies(self._has_high_signal_driver | self.pullup_capable), "requires high driver or pullup") + self.require(self._has_high_signal_driver.implies(self._has_low_signal_driver | self.pulldown_capable), "requires low driver or pulldown") + self.require(self._has_low_signal_driver.implies(self._has_high_signal_driver | self.pullup_capable), "requires high driver or pullup") # when multiple sources, ensure they all drive only one signal direction (eg, open drain) self.require((self.sources.count(lambda x: x.high_driver) > 1).implies(~self.sources.any(lambda x: x.low_driver)) & @@ -169,7 +164,9 @@ def from_supply(neg: Port[GroundLink], pos: Port[VoltageLink], *, voltage_limit_tolerance: Optional[RangeLike] = None, current_draw: RangeLike = RangeExpr.ZERO, input_threshold_factor: Optional[RangeLike] = None, - input_threshold_abs: Optional[RangeLike] = None) -> DigitalSink: + input_threshold_abs: Optional[RangeLike] = None, + pullup_capable: BoolLike = False, + pulldown_capable: BoolLike = False) -> DigitalSink: supply_range = VoltageLink._supply_voltage_range(neg, pos) if voltage_limit_abs is not None: assert voltage_limit_tolerance is None @@ -193,29 +190,32 @@ def from_supply(neg: Port[GroundLink], pos: Port[VoltageLink], *, return DigitalSink( # TODO get rid of to_expr_type w/ dedicated Range conversion voltage_limits=voltage_limit, current_draw=current_draw, - input_thresholds=input_threshold + input_thresholds=input_threshold, + pullup_capable=pullup_capable, + pulldown_capable=pulldown_capable ) @staticmethod def from_bidir(model: DigitalBidir) -> DigitalSink: model_is_empty = not model._get_initializers([]) if not model_is_empty: - return DigitalSink(model.voltage_limits, model.current_draw, input_thresholds=model.input_thresholds) + return DigitalSink(model.voltage_limits, model.current_draw, input_thresholds=model.input_thresholds, + pulldown_capable=model.pulldown_capable, pullup_capable=model.pullup_capable) else: return DigitalSink.empty() def __init__(self, voltage_limits: RangeLike = RangeExpr.ALL, current_draw: RangeLike = RangeExpr.ZERO, *, input_thresholds: RangeLike = RangeExpr.EMPTY, - _bridged_internal: BoolLike = False) -> None: + pullup_capable: BoolLike = False, + pulldown_capable: BoolLike = False) -> None: super().__init__() self.voltage_limits: RangeExpr = self.Parameter(RangeExpr(voltage_limits)) self.current_draw: RangeExpr = self.Parameter(RangeExpr(current_draw)) self.input_thresholds: RangeExpr = self.Parameter(RangeExpr(input_thresholds)) - # internal subcircuits are not necessarily fully valid, e.g. may have open-drain inputs with pull-up - # so this marks this as a bridged port and to relax some checks that should be delegated to the top-level - self._bridged_internal = self.Parameter(BoolExpr(_bridged_internal)) + self.pullup_capable: BoolExpr = self.Parameter(BoolExpr(pullup_capable)) + self.pulldown_capable: BoolExpr = self.Parameter(BoolExpr(pulldown_capable)) class DigitalSourceBridge(CircuitPortBridge): @@ -233,7 +233,7 @@ def __init__(self) -> None: self.inner_link = self.Port(DigitalSink(voltage_limits=RangeExpr.ALL, current_draw=RangeExpr(), input_thresholds=RangeExpr.EMPTY, - _bridged_internal=True)) + pullup_capable=True, pulldown_capable=True)) def contents(self) -> None: super().contents() diff --git a/edg/electronics_model/PassivePort.py b/edg/electronics_model/PassivePort.py index 6d90245d9..be499f0f5 100644 --- a/edg/electronics_model/PassivePort.py +++ b/edg/electronics_model/PassivePort.py @@ -69,12 +69,14 @@ class PassiveAdapterDigitalSink(CircuitPortAdapter[DigitalSink]): def __init__(self, voltage_limits: RangeLike = RangeExpr.ALL, current_draw: RangeLike = RangeExpr.ZERO, input_thresholds: RangeLike = RangeExpr.EMPTY, - _bridged_internal: BoolLike = False): + pullup_capable: BoolLike = False, + pulldown_capable: BoolLike = False): super().__init__() self.src = self.Port(Passive()) self.dst = self.Port(DigitalSink(voltage_limits=voltage_limits, current_draw=current_draw, input_thresholds=input_thresholds, - _bridged_internal=_bridged_internal)) + pullup_capable=pullup_capable, + pulldown_capable=pulldown_capable)) class PassiveAdapterDigitalBidir(CircuitPortAdapter[DigitalBidir]): diff --git a/edg/parts/DebugHeaders.py b/edg/parts/DebugHeaders.py index 8bc21d53f..aea1b8bbf 100644 --- a/edg/parts/DebugHeaders.py +++ b/edg/parts/DebugHeaders.py @@ -16,7 +16,7 @@ def contents(self): self.connect(self.swd.swclk, self.conn.pins.request('4').adapt_to(DigitalSource())) self.connect(self.swo, self.conn.pins.request('6').adapt_to(DigitalBidir())) self.connect(self.tdi, self.conn.pins.request('8').adapt_to(DigitalBidir())) - self.connect(self.reset, self.conn.pins.request('10').adapt_to(DigitalBidir())) + self.connect(self.reset, self.conn.pins.request('10').adapt_to(DigitalSource.low_from_supply(self.gnd))) class SwdCortexTargetTagConnect(SwdCortexTargetConnector, SwdCortexTargetConnectorReset, SwdCortexTargetConnectorSwo): @@ -27,7 +27,7 @@ def contents(self): self.conn = self.Block(TagConnect(6)) self.connect(self.pwr, self.conn.pins.request('1').adapt_to(VoltageSink())) self.connect(self.swd.swdio, self.conn.pins.request('2').adapt_to(DigitalBidir())) # also TMS - self.connect(self.reset, self.conn.pins.request('3').adapt_to(DigitalBidir())) + self.connect(self.reset, self.conn.pins.request('3').adapt_to(DigitalSource.low_from_supply(self.gnd))) self.connect(self.swd.swclk, self.conn.pins.request('4').adapt_to(DigitalSource())) self.connect(self.gnd, self.conn.pins.request('5').adapt_to(Ground())) self.connect(self.swo, self.conn.pins.request('6').adapt_to(DigitalBidir())) @@ -47,4 +47,4 @@ def contents(self): self.connect(self.swd.swclk, self.conn.pins.request('9').adapt_to(DigitalSource())) self.connect(self.swo, self.conn.pins.request('8').adapt_to(DigitalBidir())) self.connect(self.tdi, self.conn.pins.request('7').adapt_to(DigitalBidir())) - self.connect(self.reset, self.conn.pins.request('6').adapt_to(DigitalBidir())) + self.connect(self.reset, self.conn.pins.request('6').adapt_to(DigitalSource.low_from_supply(self.gnd))) diff --git a/edg/parts/Microcontroller_Stm32f103.py b/edg/parts/Microcontroller_Stm32f103.py index 8581c9035..74deddc53 100644 --- a/edg/parts/Microcontroller_Stm32f103.py +++ b/edg/parts/Microcontroller_Stm32f103.py @@ -29,7 +29,8 @@ def __init__(self, **kwargs) -> None: self.gnd, self.pwr, voltage_limit_tolerance=(-0.3, 0.3)*Volt, # Table 5.3.1, general operating conditions TODO: FT IO, BOOT0 IO current_draw=(0, 0)*Amp, - input_threshold_abs=(0.8, 2)*Volt + input_threshold_abs=(0.8, 2)*Volt, + pullup_capable=True ), optional=True) # note, internal pull-up resistor, 30-50 kOhm by Table 35 # TODO need to pass through to pin mapper diff --git a/edg/parts/Microcontroller_Stm32g031.py b/edg/parts/Microcontroller_Stm32g031.py index 3e1d5b4d3..a0a82c163 100644 --- a/edg/parts/Microcontroller_Stm32g031.py +++ b/edg/parts/Microcontroller_Stm32g031.py @@ -28,7 +28,7 @@ def __init__(self, **kwargs) -> None: self.swd = self.Port(SwdTargetPort.empty()) self._io_ports.insert(0, self.swd) - self.nrst = self.Port(DigitalBidir.empty(), optional=True) # internally pulled up + self.nrst = self.Port(DigitalSink.empty(), optional=True) # internally pulled up def _system_pinmap(self) -> Dict[str, CircuitPort]: return VariantPinRemapper({ # Pin/peripheral resource definitions (section 4) @@ -50,10 +50,9 @@ def _io_pinmap(self) -> PinMapUtil: ) dio_fta_model = dio_ftea_model = dio_ftf_model = dio_ftfa_model = dio_ft_model - self.nrst.init_from(DigitalBidir.from_supply( # specified differently than other pins + self.nrst.init_from(DigitalSink.from_supply( # specified differently than other pins self.gnd, self.pwr, voltage_limit_abs=io_voltage_limit, # assumed - current_limits=(-15, 15)*mAmp, # Section 5.3.14, relaxed bounds for relaxed Vol/Voh input_threshold_factor=(0.3, 0.7), pullup_capable=True # internal pullup )) diff --git a/edg/parts/Microcontroller_Stm32l432.py b/edg/parts/Microcontroller_Stm32l432.py index 7083b5337..5f22c7c60 100644 --- a/edg/parts/Microcontroller_Stm32l432.py +++ b/edg/parts/Microcontroller_Stm32l432.py @@ -29,7 +29,7 @@ def __init__(self, **kwargs) -> None: self.swd = self.Port(SwdTargetPort.empty()) self._io_ports.insert(0, self.swd) - self.nrst = self.Port(DigitalBidir.empty(), optional=True) # internally pulled up + self.nrst = self.Port(DigitalSink.empty(), optional=True) # internally pulled up def _system_pinmap(self) -> Dict[str, CircuitPort]: return VariantPinRemapper({ # Pin/peripheral resource definitions (section 4) From ad808b28aadf2163ad9bd362632ed071e624baab Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 01:50:02 -0800 Subject: [PATCH 21/29] a few hacks to make things work --- edg/parts/DebugHeaders.py | 9 ++++++--- edg/parts/Microcontroller_Esp.py | 5 +++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/edg/parts/DebugHeaders.py b/edg/parts/DebugHeaders.py index aea1b8bbf..f30193f9c 100644 --- a/edg/parts/DebugHeaders.py +++ b/edg/parts/DebugHeaders.py @@ -16,7 +16,8 @@ def contents(self): self.connect(self.swd.swclk, self.conn.pins.request('4').adapt_to(DigitalSource())) self.connect(self.swo, self.conn.pins.request('6').adapt_to(DigitalBidir())) self.connect(self.tdi, self.conn.pins.request('8').adapt_to(DigitalBidir())) - self.connect(self.reset, self.conn.pins.request('10').adapt_to(DigitalSource.low_from_supply(self.gnd))) + # TODO: pulldown is a hack to prevent driver conflict warnings, this should be a active low (open drain) driver + self.connect(self.reset, self.conn.pins.request('10').adapt_to(DigitalSource.pulldown_from_supply(self.gnd))) class SwdCortexTargetTagConnect(SwdCortexTargetConnector, SwdCortexTargetConnectorReset, SwdCortexTargetConnectorSwo): @@ -27,7 +28,8 @@ def contents(self): self.conn = self.Block(TagConnect(6)) self.connect(self.pwr, self.conn.pins.request('1').adapt_to(VoltageSink())) self.connect(self.swd.swdio, self.conn.pins.request('2').adapt_to(DigitalBidir())) # also TMS - self.connect(self.reset, self.conn.pins.request('3').adapt_to(DigitalSource.low_from_supply(self.gnd))) + # TODO: pulldown is a hack to prevent driver conflict warnings, this should be a active low (open drain) driver + self.connect(self.reset, self.conn.pins.request('3').adapt_to(DigitalSource.pulldown_from_supply(self.gnd))) self.connect(self.swd.swclk, self.conn.pins.request('4').adapt_to(DigitalSource())) self.connect(self.gnd, self.conn.pins.request('5').adapt_to(Ground())) self.connect(self.swo, self.conn.pins.request('6').adapt_to(DigitalBidir())) @@ -47,4 +49,5 @@ def contents(self): self.connect(self.swd.swclk, self.conn.pins.request('9').adapt_to(DigitalSource())) self.connect(self.swo, self.conn.pins.request('8').adapt_to(DigitalBidir())) self.connect(self.tdi, self.conn.pins.request('7').adapt_to(DigitalBidir())) - self.connect(self.reset, self.conn.pins.request('6').adapt_to(DigitalSource.low_from_supply(self.gnd))) + # TODO: pulldown is a hack to prevent driver conflict warnings, this should be a active low (open drain) driver + self.connect(self.reset, self.conn.pins.request('6').adapt_to(DigitalSource.pulldown_from_supply(self.gnd))) diff --git a/edg/parts/Microcontroller_Esp.py b/edg/parts/Microcontroller_Esp.py index 43af04945..b4d03d432 100644 --- a/edg/parts/Microcontroller_Esp.py +++ b/edg/parts/Microcontroller_Esp.py @@ -58,8 +58,9 @@ def contents(self) -> None: self.connect(self.uart.tx, self.conn.pins.request('4').adapt_to(DigitalSource())) self.connect(self.gnd, self.conn.pins.request('5').adapt_to(Ground())) - self.connect(self.en, self.conn.pins.request('6').adapt_to(DigitalSource.low_from_supply(self.gnd))) # RTS - self.connect(self.boot, self.conn.pins.request('2').adapt_to(DigitalSource.low_from_supply(self.gnd))) # CTS + # TODO: pulldown is a hack to prevent driver conflict warnings, this should be a active low (open drain) driver + self.connect(self.en, self.conn.pins.request('6').adapt_to(DigitalSource.pulldown_from_supply(self.gnd))) # RTS + self.connect(self.boot, self.conn.pins.request('2').adapt_to(DigitalSource.pulldown_from_supply(self.gnd))) # CTS @non_library From 03b705cc2f5739cfb56c6ee9ab368e4ba24e7d78 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 02:09:45 -0800 Subject: [PATCH 22/29] capabilities + bridges refactor --- edg/electronics_model/DigitalPorts.py | 46 +++++++++++++++------------ edg/electronics_model/PassivePort.py | 12 ++++--- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index cf742aafb..9e1a56e09 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -118,8 +118,13 @@ def contents(self): self.assign(self._has_high_signal_driver, self.bidirs.any_connected() | self.sources.any(lambda x: x.high_driver)) - self.require(self._has_high_signal_driver.implies(self._has_low_signal_driver | self.pulldown_capable), "requires low driver or pulldown") - self.require(self._has_low_signal_driver.implies(self._has_high_signal_driver | self.pullup_capable), "requires high driver or pullup") + is_bridged_internal = (self.sources.any(lambda x: x._bridged_internal) | + self.sinks.any(lambda x: x._bridged_internal) | + self.bidirs.any(lambda x: x._bridged_internal)) + self.require(is_bridged_internal | + self._has_high_signal_driver.implies(self._has_low_signal_driver | self.pulldown_capable), "requires low driver or pulldown") + self.require(is_bridged_internal | + self._has_low_signal_driver.implies(self._has_high_signal_driver | self.pullup_capable), "requires high driver or pullup") # when multiple sources, ensure they all drive only one signal direction (eg, open drain) self.require((self.sources.count(lambda x: x.high_driver) > 1).implies(~self.sources.any(lambda x: x.low_driver)) & @@ -142,7 +147,8 @@ def __init__(self) -> None: self.inner_link = self.Port(DigitalSource(current_limits=RangeExpr.ALL, voltage_out=RangeExpr(), output_thresholds=RangeExpr(), - pullup_capable=True, pulldown_capable=True)) # magical port + pullup_capable=False, pulldown_capable=False, # don't create a loop + _bridged_internal=True)) def contents(self) -> None: super().contents() @@ -208,7 +214,8 @@ def __init__(self, voltage_limits: RangeLike = RangeExpr.ALL, current_draw: RangeLike = RangeExpr.ZERO, *, input_thresholds: RangeLike = RangeExpr.EMPTY, pullup_capable: BoolLike = False, - pulldown_capable: BoolLike = False) -> None: + pulldown_capable: BoolLike = False, + _bridged_internal: BoolLike = False) -> None: super().__init__() self.voltage_limits: RangeExpr = self.Parameter(RangeExpr(voltage_limits)) self.current_draw: RangeExpr = self.Parameter(RangeExpr(current_draw)) @@ -216,6 +223,7 @@ def __init__(self, voltage_limits: RangeLike = RangeExpr.ALL, self.pullup_capable: BoolExpr = self.Parameter(BoolExpr(pullup_capable)) self.pulldown_capable: BoolExpr = self.Parameter(BoolExpr(pulldown_capable)) + self._bridged_internal: BoolExpr = self.Parameter(BoolExpr(_bridged_internal)) class DigitalSourceBridge(CircuitPortBridge): @@ -233,7 +241,8 @@ def __init__(self) -> None: self.inner_link = self.Port(DigitalSink(voltage_limits=RangeExpr.ALL, current_draw=RangeExpr(), input_thresholds=RangeExpr.EMPTY, - pullup_capable=True, pulldown_capable=True)) + pullup_capable=False, pulldown_capable=False, # don't create a loop + _bridged_internal=True)) def contents(self) -> None: super().contents() @@ -295,7 +304,8 @@ def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, high_driver: BoolLike = True, low_driver: BoolLike = True, pullup_capable: BoolLike = False, - pulldown_capable: BoolLike = False) -> None: + pulldown_capable: BoolLike = False, + _bridged_internal: BoolLike = False) -> None: super().__init__() self.voltage_out: RangeExpr = self.Parameter(RangeExpr(voltage_out)) self.current_limits: RangeExpr = self.Parameter(RangeExpr(current_limits)) @@ -306,6 +316,8 @@ def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, self.pullup_capable: BoolExpr = self.Parameter(BoolExpr(pullup_capable)) self.pulldown_capable: BoolExpr = self.Parameter(BoolExpr(pulldown_capable)) + self._bridged_internal: BoolExpr = self.Parameter(BoolExpr(_bridged_internal)) + @staticmethod def low_from_supply(neg: Port[VoltageLink]) -> DigitalSource: return DigitalSource( @@ -361,12 +373,12 @@ def __init__(self) -> None: self.outer_port = self.Port(DigitalBidir(voltage_out=RangeExpr(), current_draw=RangeExpr(), voltage_limits=RangeExpr(), current_limits=RangeExpr(), output_thresholds=RangeExpr(), input_thresholds=RangeExpr(), - # TODO see issue 58, how do we propagate this in both directions? - # pulldown_capable=BoolExpr(), pullup_capable=BoolExpr(), + pulldown_capable=BoolExpr(), pullup_capable=BoolExpr(), )) # TODO can we actually define something here? as a pseudoport, this doesn't have limits self.inner_link = self.Port(DigitalBidir(voltage_limits=RangeExpr.ALL, current_limits=RangeExpr.ALL, - pulldown_capable=BoolExpr(), pullup_capable=BoolExpr(), + pullup_capable=False, pulldown_capable=False, # don't create a loop + _bridged_internal=True )) def contents(self) -> None: @@ -379,16 +391,8 @@ def contents(self) -> None: self.assign(self.outer_port.output_thresholds, self.inner_link.link().output_thresholds) self.assign(self.outer_port.input_thresholds, self.inner_link.link().input_thresholds) - - # TODO this is a hacktastic in that it's not bidirectional, but it serves the use case for the USB PD CC case - # TODO this is a bit hacky, but allows a externally disconnected port - self.assign(self.inner_link.pullup_capable, self.outer_port.is_connected().then_else( - self.outer_port.link().pullup_capable, BoolExpr._to_expr_type(False))) - self.assign(self.inner_link.pulldown_capable, self.outer_port.is_connected().then_else( - self.outer_port.link().pulldown_capable, BoolExpr._to_expr_type(False))) - # TODO see issue 58, how do we propagate this in both directions? - # self.assign(self.outer_port.pullup_capable, self.inner_link.link().pullup_capable) - # self.assign(self.outer_port.pulldown_capable, self.inner_link.link().pulldown_capable) + self.assign(self.outer_port.pullup_capable, self.inner_link.link().pullup_capable) + self.assign(self.outer_port.pulldown_capable, self.inner_link.link().pulldown_capable) class DigitalBidirNotConnected(InternalBlock, Block): @@ -465,7 +469,8 @@ def __init__(self, *, voltage_limits: RangeLike = RangeExpr.ALL, input_thresholds: RangeLike = RangeExpr.EMPTY, output_thresholds: RangeLike = RangeExpr.ALL, pullup_capable: BoolLike = False, - pulldown_capable: BoolLike = False) -> None: + pulldown_capable: BoolLike = False, + _bridged_internal: BoolLike = False) -> None: super().__init__() self.voltage_limits: RangeExpr = self.Parameter(RangeExpr(voltage_limits)) self.current_draw: RangeExpr = self.Parameter(RangeExpr(current_draw)) @@ -476,6 +481,7 @@ def __init__(self, *, voltage_limits: RangeLike = RangeExpr.ALL, self.pullup_capable: BoolExpr = self.Parameter(BoolExpr(pullup_capable)) self.pulldown_capable: BoolExpr = self.Parameter(BoolExpr(pulldown_capable)) + self._bridged_internal: BoolExpr = self.Parameter(BoolExpr(_bridged_internal)) class DigitalSingleSourceFake: diff --git a/edg/electronics_model/PassivePort.py b/edg/electronics_model/PassivePort.py index be499f0f5..9ff50e5d1 100644 --- a/edg/electronics_model/PassivePort.py +++ b/edg/electronics_model/PassivePort.py @@ -54,13 +54,15 @@ def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, pullup_capable: BoolLike = False, pulldown_capable: BoolLike = False, high_driver: BoolLike = True, - low_driver: BoolLike = True): + low_driver: BoolLike = True, + _bridged_internal: BoolLike = False): super().__init__() self.src = self.Port(Passive()) self.dst = self.Port(DigitalSource(voltage_out=voltage_out, current_limits=current_limits, output_thresholds=output_thresholds, pullup_capable=pullup_capable, pulldown_capable=pulldown_capable, - high_driver=high_driver, low_driver=low_driver)) + high_driver=high_driver, low_driver=low_driver, + _bridged_internal=_bridged_internal)) class PassiveAdapterDigitalSink(CircuitPortAdapter[DigitalSink]): @@ -70,13 +72,15 @@ def __init__(self, voltage_limits: RangeLike = RangeExpr.ALL, current_draw: RangeLike = RangeExpr.ZERO, input_thresholds: RangeLike = RangeExpr.EMPTY, pullup_capable: BoolLike = False, - pulldown_capable: BoolLike = False): + pulldown_capable: BoolLike = False, + _bridged_internal: BoolLike = False): super().__init__() self.src = self.Port(Passive()) self.dst = self.Port(DigitalSink(voltage_limits=voltage_limits, current_draw=current_draw, input_thresholds=input_thresholds, pullup_capable=pullup_capable, - pulldown_capable=pulldown_capable)) + pulldown_capable=pulldown_capable, + _bridged_internal=_bridged_internal)) class PassiveAdapterDigitalBidir(CircuitPortAdapter[DigitalBidir]): From 5b720ab01b68c62900b161cb36203b6f5dc54dcf Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 02:10:22 -0800 Subject: [PATCH 23/29] Update PassivePort.py --- edg/electronics_model/PassivePort.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/edg/electronics_model/PassivePort.py b/edg/electronics_model/PassivePort.py index 9ff50e5d1..1d2a16451 100644 --- a/edg/electronics_model/PassivePort.py +++ b/edg/electronics_model/PassivePort.py @@ -94,13 +94,15 @@ def __init__(self, voltage_limits: RangeLike = RangeExpr.ALL, output_thresholds: RangeLike = RangeExpr.ALL, *, pullup_capable: BoolLike = False, - pulldown_capable: BoolLike = False): + pulldown_capable: BoolLike = False, + _bridged_internal: BoolLike = False): super().__init__() self.src = self.Port(Passive()) self.dst = self.Port(DigitalBidir(voltage_limits=voltage_limits, current_draw=current_draw, voltage_out=voltage_out, current_limits=current_limits, input_thresholds=input_thresholds, output_thresholds=output_thresholds, - pullup_capable=pullup_capable, pulldown_capable=pulldown_capable)) + pullup_capable=pullup_capable, pulldown_capable=pulldown_capable, + _bridged_internal=_bridged_internal)) class PassiveAdapterAnalogSource(CircuitPortAdapter[AnalogSource]): From 1723b1efc92da724caee118489107ebad0cefb92 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 11:05:52 -0800 Subject: [PATCH 24/29] cleaning --- edg/electronics_model/DigitalPorts.py | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 9e1a56e09..cf7a415c8 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -323,10 +323,8 @@ def low_from_supply(neg: Port[VoltageLink]) -> DigitalSource: return DigitalSource( voltage_out=neg.link().voltage, output_thresholds=(neg.link().voltage.upper(), float('inf')), - high_driver=False, - low_driver=True, - pullup_capable=False, - pulldown_capable=False + high_driver=False, low_driver=True, + pullup_capable=False, pulldown_capable=False ) @staticmethod @@ -334,10 +332,8 @@ def high_from_supply(pos: Port[VoltageLink]) -> DigitalSource: return DigitalSource( voltage_out=pos.link().voltage, output_thresholds=(-float('inf'), pos.link().voltage.lower()), - high_driver=True, - low_driver=False, - pullup_capable=False, - pulldown_capable=False + high_driver=True, low_driver=False, + pullup_capable=False, pulldown_capable=False ) @staticmethod @@ -345,10 +341,8 @@ def pulldown_from_supply(neg: Port[VoltageLink]) -> DigitalSource: return DigitalSource( voltage_out=neg.link().voltage, output_thresholds=(neg.link().voltage.upper(), float('inf')), - high_driver=False, - low_driver=False, - pullup_capable=False, - pulldown_capable=True + high_driver=False, low_driver=False, + pullup_capable=False, pulldown_capable=True ) @staticmethod @@ -356,10 +350,8 @@ def pullup_from_supply(pos: Port[VoltageLink]) -> DigitalSource: return DigitalSource( voltage_out=pos.link().voltage, output_thresholds=(-float('inf'), pos.link().voltage.lower()), - high_driver=False, - low_driver=False, - pullup_capable=True, - pulldown_capable=False + high_driver=False, low_driver=False, + pullup_capable=True, pulldown_capable=False ) def as_voltage_source(self) -> VoltageSource: From 03f82fd3f61787b967a66eed70d1ce4e41e1056c Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 14:08:41 -0800 Subject: [PATCH 25/29] refactor to eliminate depre warnings --- edg/abstract_parts/AbstractResistor.py | 12 +++++------ edg/abstract_parts/AbstractSwitch.py | 28 ++++++++++++------------- edg/abstract_parts/DigitalAmplifiers.py | 4 ++-- edg/abstract_parts/PassiveFilters.py | 2 +- edg/electronics_model/DebugPorts.py | 2 +- edg/electronics_model/DigitalPorts.py | 6 ++++-- edg/electronics_model/I2cPort.py | 7 +++---- edg/electronics_model/PassivePort.py | 2 +- edg/parts/Bldc_Drv8313.py | 2 +- edg/parts/Comparator_Lmv331.py | 2 +- edg/parts/DacI2c_Mcp4728.py | 2 +- edg/parts/Distance_Vl53l0x.py | 4 ++-- edg/parts/EnvironmentalSensor_Ti.py | 2 +- edg/parts/FanConnector.py | 2 +- edg/parts/Fusb302b.py | 2 +- edg/parts/Imu_Lsm6ds3trc.py | 2 +- edg/parts/Microcontroller_Lpc1549.py | 2 +- edg/parts/Microcontroller_Stm32l432.py | 2 +- edg/parts/PowerConditioning.py | 10 +++------ edg/parts/ResetGenerator_Apx803s.py | 2 +- edg/parts/Rtc_Pcf2129.py | 2 +- edg/parts/SdCards.py | 2 +- edg/parts/SwitchMatrix.py | 8 +++---- examples/test_bldc_controller.py | 6 +++--- examples/test_simon.py | 2 +- 25 files changed, 57 insertions(+), 60 deletions(-) diff --git a/edg/abstract_parts/AbstractResistor.py b/edg/abstract_parts/AbstractResistor.py index 02a33d265..d9d015cea 100644 --- a/edg/abstract_parts/AbstractResistor.py +++ b/edg/abstract_parts/AbstractResistor.py @@ -131,7 +131,7 @@ def __init__(self, resistance: RangeLike) -> None: self.pwr = self.Export(self.res.a.adapt_to(VoltageSink()), [Power]) self.io = self.Export(self.res.b.adapt_to( - DigitalSingleSource.high_from_supply(self.pwr, is_pullup=True) + DigitalSource.pullup_from_supply(self.pwr) ), [InOut]) def connected(self, pwr: Optional[Port[VoltageLink]] = None, io: Optional[Port[DigitalLink]] = None) -> \ @@ -154,7 +154,7 @@ def __init__(self, resistance: RangeLike) -> None: self.gnd = self.Export(self.res.a.adapt_to(Ground()), [Common]) self.io = self.Export(self.res.b.adapt_to( - DigitalSingleSource.low_from_supply(self.gnd, is_pulldown=True) + DigitalSource.pulldown_from_supply(self.gnd) ), [InOut]) def connected(self, gnd: Optional[Port[VoltageLink]] = None, io: Optional[Port[DigitalLink]] = None) -> \ @@ -173,7 +173,7 @@ class PullupResistorArray(TypedTestPoint, GeneratorBlock): def __init__(self, resistance: RangeLike): super().__init__() self.pwr = self.Port(VoltageSink.empty(), [Power]) - self.io = self.Port(Vector(DigitalSingleSource.empty()), [InOut]) + self.io = self.Port(Vector(DigitalSource.empty()), [InOut]) self.generator_param(self.io.requested()) self.resistance = self.ArgParameter(resistance) @@ -183,7 +183,7 @@ def generate(self): for requested in self.get(self.io.requested()): res = self.res[requested] = self.Block(PullupResistor(self.resistance)) self.connect(self.pwr, res.pwr) - self.connect(self.io.append_elt(DigitalSingleSource.empty(), requested), res.io) + self.connect(self.io.append_elt(DigitalSource.empty(), requested), res.io) class PulldownResistorArray(TypedTestPoint, GeneratorBlock): @@ -192,7 +192,7 @@ class PulldownResistorArray(TypedTestPoint, GeneratorBlock): def __init__(self, resistance: RangeLike): super().__init__() self.gnd = self.Port(Ground.empty(), [Common]) - self.io = self.Port(Vector(DigitalSingleSource.empty()), [InOut]) + self.io = self.Port(Vector(DigitalSource.empty()), [InOut]) self.generator_param(self.io.requested()) self.resistance = self.ArgParameter(resistance) @@ -202,7 +202,7 @@ def generate(self): for requested in self.get(self.io.requested()): res = self.res[requested] = self.Block(PulldownResistor(self.resistance)) self.connect(self.gnd, res.gnd) - self.connect(self.io.append_elt(DigitalSingleSource.empty(), requested), res.io) + self.connect(self.io.append_elt(DigitalSource.empty(), requested), res.io) class SeriesPowerResistor(DiscreteApplication): diff --git a/edg/abstract_parts/AbstractSwitch.py b/edg/abstract_parts/AbstractSwitch.py index aeb2654f6..440561ba3 100644 --- a/edg/abstract_parts/AbstractSwitch.py +++ b/edg/abstract_parts/AbstractSwitch.py @@ -89,14 +89,14 @@ def __init__(self) -> None: super().__init__() self.gnd = self.Port(Ground.empty(), [Common]) - self.out = self.Port(DigitalSingleSource.empty(), [Output]) + self.out = self.Port(DigitalSource.empty(), [Output]) def contents(self): super().contents() self.package = self.Block(Switch(current=self.out.link().current_drawn, voltage=self.out.link().voltage)) - self.connect(self.out, self.package.sw.adapt_to(DigitalSingleSource.low_from_supply(self.gnd))) + self.connect(self.out, self.package.sw.adapt_to(DigitalSource.low_from_supply(self.gnd))) self.connect(self.gnd, self.package.com.adapt_to(Ground())) @@ -107,8 +107,8 @@ def __init__(self) -> None: super().__init__() self.gnd = self.Port(Ground.empty(), [Common]) - self.a = self.Port(DigitalSingleSource.empty()) - self.b = self.Port(DigitalSingleSource.empty()) + self.a = self.Port(DigitalSource.empty()) + self.b = self.Port(DigitalSource.empty()) class DigitalWrapperRotaryEncoder(DigitalRotaryEncoder): @@ -118,7 +118,7 @@ def contents(self): self.package = self.Block(RotaryEncoder(current=self.a.link().current_drawn.hull(self.b.link().current_drawn), voltage=self.a.link().voltage.hull(self.b.link().voltage))) - dio_model = DigitalSingleSource.low_from_supply(self.gnd) + dio_model = DigitalSource.low_from_supply(self.gnd) self.connect(self.a, self.package.a.adapt_to(dio_model)) self.connect(self.b, self.package.b.adapt_to(dio_model)) self.connect(self.gnd, self.package.com.adapt_to(Ground())) @@ -130,7 +130,7 @@ class DigitalRotaryEncoderSwitch(BlockInterfaceMixin[DigitalRotaryEncoder]): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) - self.sw = self.Port(DigitalSingleSource.empty(), optional=True) + self.sw = self.Port(DigitalSource.empty(), optional=True) class DigitalWrapperRotaryEncoderWithSwitch(DigitalRotaryEncoderSwitch, DigitalWrapperRotaryEncoder, GeneratorBlock): @@ -142,7 +142,7 @@ def generate(self): super().generate() if self.get(self.sw.is_connected()): package_sw = self.package.with_mixin(RotaryEncoderSwitch()) - dio_model = DigitalSingleSource.low_from_supply(self.gnd) + dio_model = DigitalSource.low_from_supply(self.gnd) self.connect(self.sw, package_sw.sw.adapt_to(dio_model)) @@ -153,10 +153,10 @@ def __init__(self) -> None: super().__init__() self.gnd = self.Port(Ground.empty(), [Common]) - self.a = self.Port(DigitalSingleSource.empty()) - self.b = self.Port(DigitalSingleSource.empty()) - self.c = self.Port(DigitalSingleSource.empty()) - self.d = self.Port(DigitalSingleSource.empty()) + self.a = self.Port(DigitalSource.empty()) + self.b = self.Port(DigitalSource.empty()) + self.c = self.Port(DigitalSource.empty()) + self.d = self.Port(DigitalSource.empty()) class DigitalWrapperDirectionSwitch(DigitalDirectionSwitch): @@ -166,7 +166,7 @@ def contents(self): self.package = self.Block(DirectionSwitch(current=self.a.link().current_drawn.hull(self.b.link().current_drawn), voltage=self.a.link().voltage.hull(self.b.link().voltage))) - dio_model = DigitalSingleSource.low_from_supply(self.gnd) + dio_model = DigitalSource.low_from_supply(self.gnd) self.connect(self.a, self.package.a.adapt_to(dio_model)) self.connect(self.b, self.package.b.adapt_to(dio_model)) self.connect(self.c, self.package.c.adapt_to(dio_model)) @@ -180,7 +180,7 @@ class DigitalDirectionSwitchCenter(BlockInterfaceMixin[DigitalDirectionSwitch]): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) - self.center = self.Port(DigitalSingleSource.empty(), optional=True) + self.center = self.Port(DigitalSource.empty(), optional=True) class DigitalWrapperDirectionSwitchWithCenter(DigitalDirectionSwitchCenter, DigitalWrapperDirectionSwitch, @@ -193,5 +193,5 @@ def generate(self): super().generate() if self.get(self.center.is_connected()): package_sw = self.package.with_mixin(DirectionSwitchCenter()) - dio_model = DigitalSingleSource.low_from_supply(self.gnd) + dio_model = DigitalSource.low_from_supply(self.gnd) self.connect(self.center, package_sw.center.adapt_to(dio_model)) diff --git a/edg/abstract_parts/DigitalAmplifiers.py b/edg/abstract_parts/DigitalAmplifiers.py index aa1d7d2aa..4220b9837 100644 --- a/edg/abstract_parts/DigitalAmplifiers.py +++ b/edg/abstract_parts/DigitalAmplifiers.py @@ -115,7 +115,7 @@ def __init__(self, max_rds: FloatLike = 1*Ohm, frequency: RangeLike = RangeExpr. self.gnd = self.Port(Ground.empty(), [Common]) self.control = self.Port(DigitalSink.empty(), [Input]) - self.output = self.Port(DigitalSingleSource.empty(), [Output]) + self.output = self.Port(DigitalSource.empty(), [Output]) self.max_rds = self.ArgParameter(max_rds) self.frequency = self.ArgParameter(frequency) @@ -131,7 +131,7 @@ def contents(self): frequency=self.frequency, drive_current=self.control.link().current_limits )) - self.connect(self.drv.drain.adapt_to(DigitalSingleSource.low_from_supply(self.gnd + self.connect(self.drv.drain.adapt_to(DigitalSource.low_from_supply(self.gnd )), self.output) self.connect(self.drv.source.adapt_to(Ground()), self.gnd) self.connect(self.drv.gate.adapt_to(DigitalSink()), diff --git a/edg/abstract_parts/PassiveFilters.py b/edg/abstract_parts/PassiveFilters.py index 73e232bc5..f981f0d50 100644 --- a/edg/abstract_parts/PassiveFilters.py +++ b/edg/abstract_parts/PassiveFilters.py @@ -48,7 +48,7 @@ def __init__(self, impedance: RangeLike, time_constant: RangeLike): voltage=self.pwr.link().voltage)) self.connect(self.pwr, self.rc.input.adapt_to(VoltageSink())) - self.io = self.Export(self.rc.output.adapt_to(DigitalSingleSource.high_from_supply(self.pwr)), [Output]) + self.io = self.Export(self.rc.output.adapt_to(DigitalSource.pullup_from_supply(self.pwr)), [Output]) self.gnd = self.Export(self.rc.gnd.adapt_to(Ground()), [Common]) def connected(self, *, gnd: Optional[Port[VoltageLink]] = None, pwr: Optional[Port[VoltageLink]] = None, diff --git a/edg/electronics_model/DebugPorts.py b/edg/electronics_model/DebugPorts.py index 0101b293b..87f1c0715 100644 --- a/edg/electronics_model/DebugPorts.py +++ b/edg/electronics_model/DebugPorts.py @@ -1,7 +1,7 @@ from typing import * from ..core import * -from .DigitalPorts import DigitalSink, DigitalSource, DigitalBidir, DigitalSingleSource +from .DigitalPorts import DigitalSink, DigitalSource, DigitalBidir class SwdLink(Link): diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index cf7a415c8..4cb8520ba 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -319,18 +319,20 @@ def __init__(self, voltage_out: RangeLike = RangeExpr.ZERO, self._bridged_internal: BoolExpr = self.Parameter(BoolExpr(_bridged_internal)) @staticmethod - def low_from_supply(neg: Port[VoltageLink]) -> DigitalSource: + def low_from_supply(neg: Port[VoltageLink], *, current_limits: RangeLike = RangeExpr.ALL) -> DigitalSource: return DigitalSource( voltage_out=neg.link().voltage, + current_limits=current_limits, output_thresholds=(neg.link().voltage.upper(), float('inf')), high_driver=False, low_driver=True, pullup_capable=False, pulldown_capable=False ) @staticmethod - def high_from_supply(pos: Port[VoltageLink]) -> DigitalSource: + def high_from_supply(pos: Port[VoltageLink], *, current_limits: RangeLike = RangeExpr.ALL) -> DigitalSource: return DigitalSource( voltage_out=pos.link().voltage, + current_limits=current_limits, output_thresholds=(-float('inf'), pos.link().voltage.lower()), high_driver=True, low_driver=False, pullup_capable=False, pulldown_capable=False diff --git a/edg/electronics_model/I2cPort.py b/edg/electronics_model/I2cPort.py index 094b10535..641e6e4aa 100644 --- a/edg/electronics_model/I2cPort.py +++ b/edg/electronics_model/I2cPort.py @@ -1,8 +1,7 @@ from typing import * from ..core import * -from .DigitalPorts import DigitalSink, DigitalSource, DigitalBidir, DigitalSingleSource, DigitalBidirBridge, \ - DigitalSinkBridge +from .DigitalPorts import DigitalSink, DigitalSource, DigitalBidir, DigitalBidirBridge, DigitalSinkBridge class I2cLink(Link): @@ -42,8 +41,8 @@ class I2cPullupPort(Bundle[I2cLink]): def __init__(self) -> None: super().__init__() - self.scl = self.Port(DigitalSingleSource(pullup_capable=True)) - self.sda = self.Port(DigitalSingleSource(pullup_capable=True)) + self.scl = self.Port(DigitalSource(low_driver=False, high_driver=False, pullup_capable=True)) + self.sda = self.Port(DigitalSource(low_driver=False, high_driver=False, pullup_capable=True)) class I2cController(Bundle[I2cLink]): diff --git a/edg/electronics_model/PassivePort.py b/edg/electronics_model/PassivePort.py index 1d2a16451..ff788c893 100644 --- a/edg/electronics_model/PassivePort.py +++ b/edg/electronics_model/PassivePort.py @@ -6,7 +6,7 @@ from .GroundPort import Ground from .AnalogPort import AnalogSource, AnalogSink from .CircuitBlock import CircuitLink, CircuitPortBridge, CircuitPortAdapter -from .DigitalPorts import DigitalSource, DigitalSink, DigitalBidir, DigitalSingleSource +from .DigitalPorts import DigitalSource, DigitalSink, DigitalBidir from .VoltagePorts import CircuitPort, VoltageSource, VoltageSink diff --git a/edg/parts/Bldc_Drv8313.py b/edg/parts/Bldc_Drv8313.py index a7ca91a15..48d560a64 100644 --- a/edg/parts/Bldc_Drv8313.py +++ b/edg/parts/Bldc_Drv8313.py @@ -29,7 +29,7 @@ def __init__(self) -> None: ) self.nreset = self.Port(self.din_model) # required to be driven, to clear fault conditions self.nsleep = self.Port(self.din_model) # required, though can be tied high - self.nfault = self.Port(DigitalSingleSource.low_from_supply(self.gnd), optional=True) + self.nfault = self.Port(DigitalSource.low_from_supply(self.gnd), optional=True) self.pgnds = self.Port(Vector(Passive.empty())) diff --git a/edg/parts/Comparator_Lmv331.py b/edg/parts/Comparator_Lmv331.py index 2ec4065f2..5a66f659b 100644 --- a/edg/parts/Comparator_Lmv331.py +++ b/edg/parts/Comparator_Lmv331.py @@ -19,7 +19,7 @@ def __init__(self) -> None: ) self.inn = self.Port(in_model) self.inp = self.Port(in_model) - out_model = DigitalSingleSource.low_from_supply(self.gnd) + out_model = DigitalSource.low_from_supply(self.gnd) self.out = self.Port(out_model) def contents(self) -> None: diff --git a/edg/parts/DacI2c_Mcp4728.py b/edg/parts/DacI2c_Mcp4728.py index 82242cbb8..32c409882 100644 --- a/edg/parts/DacI2c_Mcp4728.py +++ b/edg/parts/DacI2c_Mcp4728.py @@ -28,7 +28,7 @@ def __init__(self) -> None: ) self.i2c = self.Port(I2cTarget(dio_model, addresses=[0x60])) # TODO 3LSBs EEPROM programmable self.ldac = self.Port(DigitalSink.from_bidir(dio_model), optional=True) - self.rdy = self.Port(DigitalSingleSource.low_from_supply(self.vss), optional=True) + self.rdy = self.Port(DigitalSource.low_from_supply(self.vss), optional=True) self.generator_param(self.ldac.is_connected()) diff --git a/edg/parts/Distance_Vl53l0x.py b/edg/parts/Distance_Vl53l0x.py index ee2b0435a..bcec5706a 100644 --- a/edg/parts/Distance_Vl53l0x.py +++ b/edg/parts/Distance_Vl53l0x.py @@ -19,7 +19,7 @@ def __init__(self) -> None: input_threshold_factor=(0.3, 0.7), ) self.xshut = self.Port(DigitalSink.from_bidir(gpio_model)) - self.gpio1 = self.Port(DigitalSingleSource.low_from_supply(self.vss), optional=True) + self.gpio1 = self.Port(DigitalSource.low_from_supply(self.vss), optional=True) # TODO: support addresses, the default is 0x29 though it's software remappable self.i2c = self.Port(I2cTarget(DigitalBidir.from_supply( @@ -63,7 +63,7 @@ def __init__(self): self.i2c = self.Export(self.ic.i2c) - self.int = self.Port(DigitalSingleSource.empty(), optional=True, + self.int = self.Port(DigitalSource.empty(), optional=True, doc="Interrupt output for new data available") self.generator_param(self.reset.is_connected(), self.int.is_connected()) diff --git a/edg/parts/EnvironmentalSensor_Ti.py b/edg/parts/EnvironmentalSensor_Ti.py index 543a53ecb..d2ba3f2e9 100644 --- a/edg/parts/EnvironmentalSensor_Ti.py +++ b/edg/parts/EnvironmentalSensor_Ti.py @@ -66,7 +66,7 @@ def __init__(self, addr_lsb: IntLike) -> None: input_threshold_factor=(0.3, 0.7) ) self.i2c = self.Port(I2cTarget(dio_model, addresses=ArrayIntExpr())) - self.alert = self.Port(DigitalSingleSource.low_from_supply(self.gnd), optional=True) + self.alert = self.Port(DigitalSource.low_from_supply(self.gnd), optional=True) self.addr_lsb = self.ArgParameter(addr_lsb) self.generator_param(self.addr_lsb) diff --git a/edg/parts/FanConnector.py b/edg/parts/FanConnector.py index ea262c06a..7911934d0 100644 --- a/edg/parts/FanConnector.py +++ b/edg/parts/FanConnector.py @@ -11,7 +11,7 @@ def __init__(self): voltage_limits=12*Volt(tol=0.05), current_draw=(0, 2.2)*Amp, # section 2.1.2: 2.2A max for up to 2s during startup ), [Power]) - self.sense = self.Port(DigitalSingleSource.low_from_supply(self.gnd)) # tolerant up to 12v + self.sense = self.Port(DigitalSource.low_from_supply(self.gnd)) # tolerant up to 12v @abstract_block_default(lambda: CpuFan4Pin) diff --git a/edg/parts/Fusb302b.py b/edg/parts/Fusb302b.py index e6a700b27..a771df769 100644 --- a/edg/parts/Fusb302b.py +++ b/edg/parts/Fusb302b.py @@ -22,7 +22,7 @@ def __init__(self) -> None: output_thresholds=(0.35, float('inf')) * Volt, ) self.i2c = self.Port(I2cTarget(i2c_model, [0x22])) - self.int_n = self.Port(DigitalSingleSource.low_from_supply(self.gnd), optional=True) + self.int_n = self.Port(DigitalSource.low_from_supply(self.gnd), optional=True) def contents(self) -> None: self.footprint( diff --git a/edg/parts/Imu_Lsm6ds3trc.py b/edg/parts/Imu_Lsm6ds3trc.py index 774fbe145..a0bf84e08 100644 --- a/edg/parts/Imu_Lsm6ds3trc.py +++ b/edg/parts/Imu_Lsm6ds3trc.py @@ -23,7 +23,7 @@ def __init__(self) -> None: ) self.i2c = self.Port(I2cTarget(dio_model)) - dout_model = DigitalSingleSource.low_from_supply(self.gnd) + dout_model = DigitalSource.low_from_supply(self.gnd) self.int1 = self.Port(dout_model, optional=True) self.int2 = self.Port(dout_model, optional=True) diff --git a/edg/parts/Microcontroller_Lpc1549.py b/edg/parts/Microcontroller_Lpc1549.py index 19b60df67..12212bf67 100644 --- a/edg/parts/Microcontroller_Lpc1549.py +++ b/edg/parts/Microcontroller_Lpc1549.py @@ -328,7 +328,7 @@ def __init__(self): super().__init__() self.pwr = self.Port(VoltageSink.empty(), [Power]) self.gnd = self.Port(Ground.empty(), [Common]) - self.swd = self.Port(SwdPullPort(DigitalSingleSource.empty()), [InOut]) + self.swd = self.Port(SwdPullPort(DigitalSource.empty()), [InOut]) def contents(self): super().contents() diff --git a/edg/parts/Microcontroller_Stm32l432.py b/edg/parts/Microcontroller_Stm32l432.py index 5f22c7c60..d7d4acf0c 100644 --- a/edg/parts/Microcontroller_Stm32l432.py +++ b/edg/parts/Microcontroller_Stm32l432.py @@ -59,7 +59,7 @@ def _io_pinmap(self) -> PinMapUtil: input_threshold_factor=(0.3, 0.7), # section 6.3.14, simplest for 1.62 None: self.vcc = self.Port(VoltageSink( voltage_limits=(1.0, 5.5)*Volt, current_draw=(10, 15)*uAmp)) - self.nreset = self.Port(DigitalSingleSource.low_from_supply(self.gnd), [Output]) + self.nreset = self.Port(DigitalSource.low_from_supply(self.gnd), [Output]) self.reset_threshold = self.ArgParameter(reset_threshold) self.generator_param(self.reset_threshold) diff --git a/edg/parts/Rtc_Pcf2129.py b/edg/parts/Rtc_Pcf2129.py index 862c4bf91..eec13059b 100644 --- a/edg/parts/Rtc_Pcf2129.py +++ b/edg/parts/Rtc_Pcf2129.py @@ -29,7 +29,7 @@ def __init__(self) -> None: self.spi = self.Port(SpiPeripheral(dio_model), [Output]) self.cs = self.Port(DigitalSink.from_bidir(dio_model)) - opendrain_model = DigitalSingleSource.low_from_supply(self.gnd) # TODO -1 - 1 mAmp current limit? + opendrain_model = DigitalSource.low_from_supply(self.gnd, current_limits=(-1, 0)*mAmp) self.clkout = self.Port(opendrain_model, optional=True) self.int = self.Port(opendrain_model, optional=True) diff --git a/edg/parts/SdCards.py b/edg/parts/SdCards.py index 1e0a784f3..9a9f8efd2 100644 --- a/edg/parts/SdCards.py +++ b/edg/parts/SdCards.py @@ -31,7 +31,7 @@ def __init__(self) -> None: super().__init__() # TODO switch current rating not provided by datasheet, here's some probably sane default - sw_model = DigitalSingleSource.low_from_supply(self.gnd) # current_limits=(0, 20)*mAmp + sw_model = DigitalSource.low_from_supply(self.gnd, current_limits=(-20, 0)*mAmp) self.cd = self.Port(sw_model, optional=True) self.wp = self.Port(sw_model, optional=True) diff --git a/edg/parts/SwitchMatrix.py b/edg/parts/SwitchMatrix.py index 3982a98ed..0ceab0e45 100644 --- a/edg/parts/SwitchMatrix.py +++ b/edg/parts/SwitchMatrix.py @@ -105,7 +105,7 @@ def _svgpcb_template(self) -> str: def __init__(self, nrows: IntLike, ncols: IntLike, voltage_drop: RangeLike = (0, 0.7)*Volt): super().__init__() - self.rows = self.Port(Vector(DigitalSingleSource.empty())) + self.rows = self.Port(Vector(DigitalSource.empty())) self.cols = self.Port(Vector(DigitalSink.empty())) self.voltage_drop = self.ArgParameter(voltage_drop) @@ -117,7 +117,7 @@ def generate(self): super().generate() row_ports = {} for row in range(self.get(self.nrows)): - row_ports[row] = self.rows.append_elt(DigitalSingleSource.empty(), str(row)) + row_ports[row] = self.rows.append_elt(DigitalSource.empty(), str(row)) self.sw = ElementDict[Switch]() self.d = ElementDict[Diode]() @@ -137,10 +137,10 @@ def generate(self): )) lowest_output = col_port.link().voltage.lower() + d.actual_voltage_drop.lower() highest_output = col_port.link().output_thresholds.lower() + d.actual_voltage_drop.upper() - self.connect(d.anode.adapt_to(DigitalSingleSource( + self.connect(d.anode.adapt_to(DigitalSource( voltage_out=(lowest_output, highest_output), output_thresholds=(highest_output, float('inf')), - low_signal_driver=True + low_driver=True, high_driver=False )), row_port) self.connect(d.cathode, sw.sw) self.connect(sw.com.adapt_to(col_port_model), col_port) diff --git a/examples/test_bldc_controller.py b/examples/test_bldc_controller.py index 7d217f23b..eb4c6e16f 100644 --- a/examples/test_bldc_controller.py +++ b/examples/test_bldc_controller.py @@ -66,10 +66,10 @@ def __init__(self): self.gnd = self.Export(self.conn.pins.request('5').adapt_to(Ground()), [Common]) - self.phases = self.Port(Vector(DigitalSingleSource.empty())) - phase_model = DigitalSingleSource.low_from_supply(self.gnd) + self.phases = self.Port(Vector(DigitalSource.empty())) + phase_model = DigitalSource.low_from_supply(self.gnd) for (pin, name) in [('2', 'u'), ('3', 'v'), ('4', 'w')]: - phase = self.phases.append_elt(DigitalSingleSource.empty(), name) + phase = self.phases.append_elt(DigitalSource.empty(), name) self.require(phase.is_connected(), f"all phases {name} must be connected") self.connect(phase, self.conn.pins.request(pin).adapt_to(phase_model)) diff --git a/examples/test_simon.py b/examples/test_simon.py index 27fbd1bca..28e4813fa 100644 --- a/examples/test_simon.py +++ b/examples/test_simon.py @@ -14,7 +14,7 @@ def __init__(self) -> None: )) self.led_k = self.Port(Ground(), [Common]) # TODO should be agnostic to high / low sided drive self.sw2 = self.Port(Ground(), [Common]) - self.sw1 = self.Port(DigitalSingleSource.low_from_supply(self.sw2)) + self.sw1 = self.Port(DigitalSource.low_from_supply(self.sw2)) def contents(self) -> None: super().contents() From 2f2198b4d11bcd9cbe54b02611ad1d0429a255db Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 15:43:45 -0800 Subject: [PATCH 26/29] abstract comparator --- edg/BoardTop.py | 1 + edg/abstract_parts/AbstractComparator.py | 24 ++++++++++++++++++++++++ edg/abstract_parts/__init__.py | 1 + edg/parts/Comparator_Lmv331.py | 23 +++++++++-------------- 4 files changed, 35 insertions(+), 14 deletions(-) create mode 100644 edg/abstract_parts/AbstractComparator.py diff --git a/edg/BoardTop.py b/edg/BoardTop.py index e1a3620a1..c8b5486ba 100644 --- a/edg/BoardTop.py +++ b/edg/BoardTop.py @@ -95,6 +95,7 @@ def refinements(self) -> Refinements: (Fpc050Top, Afc07Top), (Fpc030Bottom, HiroseFh35cshw), (UsbEsdDiode, Pesd5v0x1bt), + (Comparator, Lmv331), (Opamp, Lmv321), (SpiMemory, W25q), # 128M version is a basic part (TestPoint, Keystone5015), # this is larger, but is part of JLC's parts inventory diff --git a/edg/abstract_parts/AbstractComparator.py b/edg/abstract_parts/AbstractComparator.py new file mode 100644 index 000000000..5f44cd070 --- /dev/null +++ b/edg/abstract_parts/AbstractComparator.py @@ -0,0 +1,24 @@ +from typing import Mapping + +from ..electronics_model import * + + +class Comparator(KiCadInstantiableBlock, Block): + """Abstract comparator interface, output goes high when inp > inn.""" + def symbol_pinning(self, symbol_name: str) -> Mapping[str, BasePort]: + assert symbol_name in ('Simulation_SPICE:OPAMP', 'edg_importable:Opamp') + return {'+': self.inp, '-': self.inn, '3': self.out, 'V+': self.pwr, 'V-': self.gnd} + + @classmethod + def block_from_symbol(cls, symbol_name: str, properties: Mapping[str, str]) -> 'Comparator': + return Comparator() + + @init_in_parent + def __init__(self) -> None: + super().__init__() + + self.pwr = self.Port(VoltageSink.empty(), [Power]) + self.gnd = self.Port(Ground.empty(), [Common]) + self.inn = self.Port(AnalogSink.empty()) + self.inp = self.Port(AnalogSink.empty()) + self.out = self.Port(DigitalSource.empty()) diff --git a/edg/abstract_parts/__init__.py b/edg/abstract_parts/__init__.py index dc4e6cc5e..0744aa8f8 100644 --- a/edg/abstract_parts/__init__.py +++ b/edg/abstract_parts/__init__.py @@ -61,6 +61,7 @@ from .AbstractSwitch import Switch, TactileSwitch, MechanicalKeyswitch, DigitalSwitch from .AbstractSwitch import RotaryEncoder, RotaryEncoderSwitch, DigitalRotaryEncoder, DigitalRotaryEncoderSwitch from .AbstractSwitch import DirectionSwitch, DirectionSwitchCenter, DigitalDirectionSwitch, DigitalDirectionSwitchCenter +from .AbstractComparator import Comparator from .AbstractOpamp import Opamp, OpampElement, MultipackOpamp, MultipackOpampGenerator from .OpampCircuits import OpampFollower, Amplifier, DifferentialAmplifier, IntegratorInverting from .AbstractSpiMemory import SpiMemory, SpiMemoryQspi diff --git a/edg/parts/Comparator_Lmv331.py b/edg/parts/Comparator_Lmv331.py index 5a66f659b..117919c17 100644 --- a/edg/parts/Comparator_Lmv331.py +++ b/edg/parts/Comparator_Lmv331.py @@ -39,20 +39,15 @@ def contents(self) -> None: self.assign(self.lcsc_part, 'C7976') -class Lmv331(Interface, Block): - """General purpose comparator - - TODO: should extend an abstract comparator interface, note output is open-drain""" - @init_in_parent - def __init__(self) -> None: - super().__init__() - self.ic = self.Block(Lmv331_Device()) - self.pwr = self.Export(self.ic.vcc, [Power]) - self.gnd = self.Export(self.ic.gnd, [Common]) - self.inn = self.Export(self.ic.inn) - self.inp = self.Export(self.ic.inp) - self.out = self.Export(self.ic.out) - +class Lmv331(Comparator): + """General purpose comparator""" def contents(self) -> None: super().contents() + self.ic = self.Block(Lmv331_Device()) + self.connect(self.ic.vcc, self.pwr) + self.connect(self.ic.gnd, self.gnd) + self.connect(self.ic.inn, self.inn) + self.connect(self.ic.inp, self.inp) + self.connect(self.ic.out, self.out) + self.vdd_cap = self.Block(DecouplingCapacitor(0.1*uFarad(tol=0.2))).connected(self.gnd, self.pwr) From a3610a0fefe7b374c4d008162f981bee7e31bacd Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 16:28:26 -0800 Subject: [PATCH 27/29] abstract comparator --- examples/test_usb_source_measure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/test_usb_source_measure.py b/examples/test_usb_source_measure.py index dd6c767fe..51bba93ee 100644 --- a/examples/test_usb_source_measure.py +++ b/examples/test_usb_source_measure.py @@ -537,7 +537,7 @@ def contents(self) -> None: (self.boost_rc, ), _ = self.chain(self.mcu.gpio.request('boost_pwm'), imp.Block(rc_model), self.conv.boost_pwm) # TODO: this should be a wrapper VoltageComparator with more precise tolerancing - self.conv_comp = imp.Block(Lmv331()) + self.conv_comp = imp.Block(Comparator()) (self.comp_ref, ), _ = self.chain( self.v3v3, imp.Block(VoltageDivider(output_voltage=1*Volt(tol=0.05), From d0e237d7e45be69f07a79934c3598f7b8510cf8b Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 18:05:59 -0800 Subject: [PATCH 28/29] cleaning --- edg/electronics_model/DigitalPorts.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/edg/electronics_model/DigitalPorts.py b/edg/electronics_model/DigitalPorts.py index 4cb8520ba..483aa6c49 100644 --- a/edg/electronics_model/DigitalPorts.py +++ b/edg/electronics_model/DigitalPorts.py @@ -79,23 +79,13 @@ def contents(self): self.sinks.sum(lambda x: x.current_draw) + self.bidirs.sum(lambda x: x.current_draw) ) self.assign(self.current_limits, - self.sources.any_connected().then_else( - self.sources.intersection(lambda x: x.current_limits), - RangeExpr._to_expr_type(RangeExpr.ALL)) + self.sources.intersection(lambda x: x.current_limits) .intersect(self.bidirs.intersection(lambda x: x.current_limits))) self.require(self.current_limits.contains(self.current_drawn), "overcurrent") - sources_output_thresholds = self.sources.any_connected().then_else( - self.sources.intersection(lambda x: x.output_thresholds), - RangeExpr.ALL * Volt - ) - bidirs_output_thresholds = self.bidirs.any_connected().then_else( - self.bidirs.intersection(lambda x: x.output_thresholds), - RangeExpr.ALL * Volt - ) self.assign(self.output_thresholds, - sources_output_thresholds.intersect(bidirs_output_thresholds)) - + self.sources.intersection(lambda x: x.output_thresholds) + .intersect(self.bidirs.intersection(lambda x: x.output_thresholds),)) self.assign(self.input_thresholds, self.sinks.hull(lambda x: x.input_thresholds).hull(self.bidirs.hull(lambda x: x.input_thresholds)), ) From a53a11ebd9cfff2e8ebb819789b0675959036da2 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sun, 2 Feb 2025 18:06:04 -0800 Subject: [PATCH 29/29] fix sbt workflow --- .github/workflows/pr-scala.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr-scala.yml b/.github/workflows/pr-scala.yml index 6776da27a..fde080762 100644 --- a/.github/workflows/pr-scala.yml +++ b/.github/workflows/pr-scala.yml @@ -36,6 +36,8 @@ jobs: - uses: actions/setup-python@v1 with: python-version: '3.10' + - name: Setup sbt launcher + uses: sbt/setup-sbt@v1 - name: install dependencies run: pip install -r requirements.txt - name: sbt test