diff --git a/README.md b/README.md
index d4b765bd0..62649af43 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ class Keyboard(SimpleBoardTop):
ImplicitConnect(self.reg.pwr_out, [Power]),
ImplicitConnect(self.reg.gnd, [Common]),
) as imp:
- self.mcu = imp.Block(Stm32f103_48())
+ self.mcu = imp.Block(Stm32f103())
self.connect(self.usb.usb, self.mcu.usb.request())
self.sw = self.Block(SwitchMatrix(nrows=3, ncols=2))
diff --git a/docs/ide/ide_blinky_blocks.png b/docs/ide/ide_blinky_blocks.png
index 884475f41..d3418b6cd 100644
Binary files a/docs/ide/ide_blinky_blocks.png and b/docs/ide/ide_blinky_blocks.png differ
diff --git a/docs/ide/ide_blinky_connect.png b/docs/ide/ide_blinky_connect.png
index a59a3143d..0078e58bb 100644
Binary files a/docs/ide/ide_blinky_connect.png and b/docs/ide/ide_blinky_connect.png differ
diff --git a/docs/ide/ide_connect_mcu_start.png b/docs/ide/ide_connect_mcu_start.png
new file mode 100644
index 000000000..a5a7c649e
Binary files /dev/null and b/docs/ide/ide_connect_mcu_start.png differ
diff --git a/docs/ide/ide_designhierarchy_switch.png b/docs/ide/ide_designhierarchy_switch.png
new file mode 100644
index 000000000..5631f7dd5
Binary files /dev/null and b/docs/ide/ide_designhierarchy_switch.png differ
diff --git a/docs/ide/ide_library_xiao.png b/docs/ide/ide_library_xiao.png
new file mode 100644
index 000000000..8e8714572
Binary files /dev/null and b/docs/ide/ide_library_xiao.png differ
diff --git a/docs/ide/ide_livetemplate_gnd_connect.png b/docs/ide/ide_livetemplate_gnd_connect.png
index c2a54689d..711ae0dbc 100644
Binary files a/docs/ide/ide_livetemplate_gnd_connect.png and b/docs/ide/ide_livetemplate_gnd_connect.png differ
diff --git a/docs/ide/ide_livetemplate_mcu.png b/docs/ide/ide_livetemplate_mcu.png
new file mode 100644
index 000000000..f29f9946e
Binary files /dev/null and b/docs/ide/ide_livetemplate_mcu.png differ
diff --git a/docs/ide/ide_livetemplate_mcu_named.png b/docs/ide/ide_livetemplate_mcu_named.png
new file mode 100644
index 000000000..0375749bf
Binary files /dev/null and b/docs/ide/ide_livetemplate_mcu_named.png differ
diff --git a/docs/ide/ide_refine_switch.png b/docs/ide/ide_refine_switch.png
new file mode 100644
index 000000000..f18ae5792
Binary files /dev/null and b/docs/ide/ide_refine_switch.png differ
diff --git a/docs/kicad/app_pcb_editor.png b/docs/kicad/app_pcb_editor.png
new file mode 100644
index 000000000..83f81db5e
Binary files /dev/null and b/docs/kicad/app_pcb_editor.png differ
diff --git a/docs/kicad/kicad_array.png b/docs/kicad/kicad_array.png
new file mode 100644
index 000000000..37948f1a9
Binary files /dev/null and b/docs/kicad/kicad_array.png differ
diff --git a/docs/kicad/kicad_designblocks_empty.png b/docs/kicad/kicad_designblocks_empty.png
new file mode 100644
index 000000000..b087fa948
Binary files /dev/null and b/docs/kicad/kicad_designblocks_empty.png differ
diff --git a/docs/kicad/kicad_designblocks_newgroup.png b/docs/kicad/kicad_designblocks_newgroup.png
new file mode 100644
index 000000000..b812051e1
Binary files /dev/null and b/docs/kicad/kicad_designblocks_newgroup.png differ
diff --git a/docs/kicad/kicad_designblocks_newlibrary.png b/docs/kicad/kicad_designblocks_newlibrary.png
new file mode 100644
index 000000000..05f943873
Binary files /dev/null and b/docs/kicad/kicad_designblocks_newlibrary.png differ
diff --git a/docs/kicad/kicad_designblocks_refprop.png b/docs/kicad/kicad_designblocks_refprop.png
new file mode 100644
index 000000000..fa0f6a11b
Binary files /dev/null and b/docs/kicad/kicad_designblocks_refprop.png differ
diff --git a/docs/kicad/kicad_designblocks_replicate.png b/docs/kicad/kicad_designblocks_replicate.png
new file mode 100644
index 000000000..89fd00075
Binary files /dev/null and b/docs/kicad/kicad_designblocks_replicate.png differ
diff --git a/docs/kicad/kicad_designblocks_save.png b/docs/kicad/kicad_designblocks_save.png
new file mode 100644
index 000000000..da14f7ccc
Binary files /dev/null and b/docs/kicad/kicad_designblocks_save.png differ
diff --git a/docs/kicad/kicad_designblocks_switchcell.png b/docs/kicad/kicad_designblocks_switchcell.png
new file mode 100644
index 000000000..a2cbac17d
Binary files /dev/null and b/docs/kicad/kicad_designblocks_switchcell.png differ
diff --git a/docs/kicad/pcb_initial.png b/docs/kicad/pcb_initial.png
new file mode 100644
index 000000000..e9b5d484d
Binary files /dev/null and b/docs/kicad/pcb_initial.png differ
diff --git a/docs/kicad/pcb_netlist.png b/docs/kicad/pcb_netlist.png
new file mode 100644
index 000000000..61572b39b
Binary files /dev/null and b/docs/kicad/pcb_netlist.png differ
diff --git a/docs/kicad/pcb_netlist_dialog.png b/docs/kicad/pcb_netlist_dialog.png
new file mode 100644
index 000000000..89b7ad381
Binary files /dev/null and b/docs/kicad/pcb_netlist_dialog.png differ
diff --git a/docs/kicad/pcb_stm32.png b/docs/kicad/pcb_stm32.png
new file mode 100644
index 000000000..907ed62b3
Binary files /dev/null and b/docs/kicad/pcb_stm32.png differ
diff --git a/docs/kicad/pcb_switcharray.png b/docs/kicad/pcb_switcharray.png
new file mode 100644
index 000000000..999904bbe
Binary files /dev/null and b/docs/kicad/pcb_switcharray.png differ
diff --git a/docs/kicad/pcb_switcharray_ordered.png b/docs/kicad/pcb_switcharray_ordered.png
new file mode 100644
index 000000000..3792a1854
Binary files /dev/null and b/docs/kicad/pcb_switcharray_ordered.png differ
diff --git a/docs/kicad/pcb_switchcell.png b/docs/kicad/pcb_switchcell.png
new file mode 100644
index 000000000..f9f35ac39
Binary files /dev/null and b/docs/kicad/pcb_switchcell.png differ
diff --git a/docs/kicad/pcb_switchcell_anchor.png b/docs/kicad/pcb_switchcell_anchor.png
new file mode 100644
index 000000000..ed08a4b61
Binary files /dev/null and b/docs/kicad/pcb_switchcell_anchor.png differ
diff --git a/docs/kicad/pcb_switchcell_group.png b/docs/kicad/pcb_switchcell_group.png
new file mode 100644
index 000000000..0b9049cb3
Binary files /dev/null and b/docs/kicad/pcb_switchcell_group.png differ
diff --git a/docs/kicad/pcb_switchmatrix_replicated.png b/docs/kicad/pcb_switchmatrix_replicated.png
new file mode 100644
index 000000000..8dbd8b190
Binary files /dev/null and b/docs/kicad/pcb_switchmatrix_replicated.png differ
diff --git a/docs/kicad/pcm_keyswitch_library.png b/docs/kicad/pcm_keyswitch_library.png
new file mode 100644
index 000000000..07b884456
Binary files /dev/null and b/docs/kicad/pcm_keyswitch_library.png differ
diff --git a/docs/kicad/pcm_sublayout.png b/docs/kicad/pcm_sublayout.png
new file mode 100644
index 000000000..b3cf165f1
Binary files /dev/null and b/docs/kicad/pcm_sublayout.png differ
diff --git a/docs/kicad/sublayout_selected.png b/docs/kicad/sublayout_selected.png
new file mode 100644
index 000000000..36166ca4a
Binary files /dev/null and b/docs/kicad/sublayout_selected.png differ
diff --git a/docs/kicad/sublayout_stm32.png b/docs/kicad/sublayout_stm32.png
new file mode 100644
index 000000000..823a7347b
Binary files /dev/null and b/docs/kicad/sublayout_stm32.png differ
diff --git a/docs/kicad_blinky.png b/docs/kicad_blinky.png
new file mode 100644
index 000000000..e8f50b3b7
Binary files /dev/null and b/docs/kicad_blinky.png differ
diff --git a/docs/kicad_switchmatrix.png b/docs/kicad_switchmatrix.png
new file mode 100644
index 000000000..60d2d58b7
Binary files /dev/null and b/docs/kicad_switchmatrix.png differ
diff --git a/docs/kicad_switchmatrix_discrete.png b/docs/kicad_switchmatrix_discrete.png
new file mode 100644
index 000000000..6febf62bc
Binary files /dev/null and b/docs/kicad_switchmatrix_discrete.png differ
diff --git a/docs/kicad_switchmatrix_refined.png b/docs/kicad_switchmatrix_refined.png
new file mode 100644
index 000000000..180e8d5bf
Binary files /dev/null and b/docs/kicad_switchmatrix_refined.png differ
diff --git a/edg/BoardTop.py b/edg/BoardTop.py
index 5b29db04d..66503c7f6 100644
--- a/edg/BoardTop.py
+++ b/edg/BoardTop.py
@@ -99,6 +99,7 @@ def refinements(self) -> Refinements:
(Diode, JlcDiode),
(Bjt, JlcBjt),
(Fet, JlcFet),
+ (LinearRegulator, Ams1117),
(Antenna, JlcAntenna),
(Fpc050Bottom, Afc01),
(Fpc050Top, Afc07Top),
diff --git a/edg/abstract_parts/Neopixel.py b/edg/abstract_parts/Neopixel.py
index 93377b6e4..4d85ed899 100644
--- a/edg/abstract_parts/Neopixel.py
+++ b/edg/abstract_parts/Neopixel.py
@@ -1,3 +1,5 @@
+from deprecated import deprecated
+
from ..electronics_interfaces import *
@@ -8,7 +10,11 @@ class Neopixel(Light, Block):
def __init__(self) -> None:
super().__init__()
self.pwr = self.Port(VoltageSink.empty(), [Power])
- self.vdd = self.pwr # deprecated alias
self.gnd = self.Port(Ground.empty(), [Common])
self.din = self.Port(DigitalSink.empty(), [Input])
self.dout = self.Port(DigitalSource.empty(), optional=True)
+
+ @property
+ @deprecated(f"use pwr")
+ def vdd(self) -> VoltageSink:
+ return self.pwr
diff --git a/edg/circuits/BootstrapCapacitor.py b/edg/circuits/BootstrapCapacitor.py
index 3f1163420..b0b74c8fa 100644
--- a/edg/circuits/BootstrapCapacitor.py
+++ b/edg/circuits/BootstrapCapacitor.py
@@ -2,7 +2,7 @@
from ..abstract_parts import *
-class BootstrapCapacitor(Block):
+class BootstrapCapacitor(InternalBlock, Block):
"""A Capacitor wrapper for bootstrap capacitors, with a negative VoltageSink and a positive VoltageSource.
This is meant to be used only with bootstrap pins on power conversion chips, that source some voltage and sink the
boosted voltage. This is not meant to be general-purpose and will not function standalone.
diff --git a/edg/circuits/PowerCircuits.py b/edg/circuits/PowerCircuits.py
index 865d7b6e5..f2dad1008 100644
--- a/edg/circuits/PowerCircuits.py
+++ b/edg/circuits/PowerCircuits.py
@@ -139,7 +139,7 @@ def generate(self) -> None:
self.connect(self.reset, self.driver.with_mixin(Resettable()).reset)
-class RampLimiter(KiCadSchematicBlock):
+class RampLimiter(PowerConditioner, KiCadSchematicBlock):
"""PMOS-based ramp limiter that roughly targets a constant-dV/dt ramp.
The cgd should be specified to swamp (10x+) the parasitic Cgd of the FET to get more controlled parameters.
The target ramp rate is in volts/second, and for a capacitive load this can be calculated from a target current with
diff --git a/edg/circuits/SwitchMatrix.py b/edg/circuits/SwitchMatrix.py
index 21af7a03e..846910e82 100644
--- a/edg/circuits/SwitchMatrix.py
+++ b/edg/circuits/SwitchMatrix.py
@@ -77,7 +77,7 @@ def contents(self) -> None:
@abstract_block_default(lambda: SwitchDiodeMatrix)
-class SwitchMatrix(InternalBlock, Block):
+class SwitchMatrix(HumanInterface, Block):
def __init__(self, ncols: IntLike, nrows: IntLike, voltage_drop: RangeLike = (0, 0.7) * Volt):
super().__init__()
@@ -90,7 +90,7 @@ def __init__(self, ncols: IntLike, nrows: IntLike, voltage_drop: RangeLike = (0,
self.cols = self.Port(Vector(DigitalSource.empty()))
-class SwitchDiodeMatrix(SwitchMatrix, HumanInterface, GeneratorBlock, SvgPcbTemplateBlock):
+class SwitchDiodeMatrix(SwitchMatrix, GeneratorBlock, SvgPcbTemplateBlock):
"""A switch matrix, such as for a keyboard, that generates (nrows * ncols) switches while only
using max(nrows, ncols) IOs.
@@ -249,7 +249,7 @@ def __init__(self, *args: Any, npx_order: StringLike = "row_snake", **kwargs: An
self.npx_gnd = self.Port(Ground.empty())
-class SwitchDiodeMatrixNeopixels(SwitchMatrixNeopixels, SwitchDiodeMatrix, HumanInterface, GeneratorBlock):
+class SwitchDiodeMatrixNeopixels(SwitchMatrixNeopixels, SwitchDiodeMatrix, GeneratorBlock):
"""SwitchMatrix implementation with neopixel chain."""
def __init__(self, *args: Any, **kwargs: Any) -> None:
diff --git a/edg/circuits/VoltageComparator.py b/edg/circuits/VoltageComparator.py
index ccb76ac4d..43c793e7f 100644
--- a/edg/circuits/VoltageComparator.py
+++ b/edg/circuits/VoltageComparator.py
@@ -4,7 +4,7 @@
from .ResistiveDivider import VoltageDivider, FeedbackVoltageDivider
-class VoltageComparator(GeneratorBlock):
+class VoltageComparator(Analog, GeneratorBlock):
"""A comparator subcircuit that compares an input voltage rail against some reference, either
internally generated from the power lines or an external analog signals.
Accounts for tolerance stackup on the reference input - so make sure the trip
diff --git a/edg/electronics_interfaces/CircuitPackingBlock.py b/edg/electronics_interfaces/CircuitPackingBlock.py
index 370ec720c..ed52edaaf 100644
--- a/edg/electronics_interfaces/CircuitPackingBlock.py
+++ b/edg/electronics_interfaces/CircuitPackingBlock.py
@@ -15,7 +15,7 @@ def packed(self, elts: BasePort, merged: BasePort) -> None:
self.nets_packed = self.Metadata({"src": self._ports.name_of(elts), "dst": self._ports.name_of(merged)})
-class PackedPassive(GeneratorBlock):
+class PackedPassive(InternalSubcircuit, GeneratorBlock):
"""A pseudoblock that asserts all elts are connected to the same net, then connects them to merged."""
def __init__(self) -> None:
@@ -36,7 +36,7 @@ def generate(self) -> None:
)
-class PackedGround(GeneratorBlock):
+class PackedGround(InternalSubcircuit, GeneratorBlock):
"""Takes in several Ground connections that are of the same net (asserted in netlister),
and provides a single Ground."""
@@ -59,7 +59,7 @@ def generate(self) -> None:
self.assign(self.gnd_out.voltage, self.gnd_ins.hull(lambda x: x.link().voltage))
-class PackedVoltageSource(GeneratorBlock):
+class PackedVoltageSource(InternalSubcircuit, GeneratorBlock):
"""Takes in several VoltageSink connections that are of the same net (asserted in netlister),
and provides a single VoltageSource. Distributes the current draw from the VoltageSource
equally among the inputs."""
diff --git a/edg/electronics_model/SubboardBlock.py b/edg/electronics_model/SubboardBlock.py
index e43572b20..3c9ffb94e 100644
--- a/edg/electronics_model/SubboardBlock.py
+++ b/edg/electronics_model/SubboardBlock.py
@@ -5,6 +5,7 @@
from ..core.Core import Refable
from ..core.HdlUserExceptions import UnconnectableError
from .. import edgir
+from .Categories import DiscreteComponent
@non_library
@@ -68,6 +69,7 @@ def _populate_def_proto_hierarchy(self, pb: edgir.HierarchyBlock, ref_map: Refab
constraint_pb.exported.tap = True
+@non_library
class SubboardBlock(HasSubboardBlockApi, Block):
"""A block that is a sub-board, where all its blocks not marked external are part of a different board.
Provides the export_tap construct to tack connectors onto ports without breaking modeling.
@@ -81,6 +83,7 @@ def __init__(self) -> None:
self.fp_subboard = self.Metadata("A") # dummy distinct value
+@non_library
class WrapperSubboardBlock(SubboardBlock):
"""A wrapper block where the internal blocks are skipped for netlisting and used for modeling only.
Useful for eg, dev boards that only generate a connector or socket but re-use modeling from the raw subcircuit."""
@@ -90,7 +93,8 @@ def __init__(self) -> None:
self.fp_subblocks_ignored = self.Metadata("B") # dummy distinct value
-class SubboardConnectorPair(HasSubboardBlockApi, Block):
+@abstract_block
+class SubboardConnectorPair(DiscreteComponent, HasSubboardBlockApi, Block):
"""A block meant for a connector pair, one in the exterior and one in the interior, of a SubboardBlock.
When in a SubboardBlock scope and marked external, this inherits the parent and self board scope of its container,
so inner Blocks marked external are part of the SubboardBlock's parent scope, while internal Blocks
diff --git a/edg/parts/analog/opamp/Ina826.py b/edg/parts/analog/opamp/Ina826.py
index e3872e904..e56e18492 100644
--- a/edg/parts/analog/opamp/Ina826.py
+++ b/edg/parts/analog/opamp/Ina826.py
@@ -70,7 +70,7 @@ def contents(self) -> None:
self.assign(self.actual_basic_part, False)
-class Ina826(KiCadImportableBlock, GeneratorBlock):
+class Ina826(Sensor, KiCadImportableBlock, GeneratorBlock):
"""Cost-effective instrumentation amplifier in SOIC-8, with gain 1-1000 set by single resistor.
TODO: DiffAmp / InAmp abstract class, which supports KiCadImportableBlock
"""
diff --git a/edg/parts/human_interface/Neopixel.py b/edg/parts/human_interface/Neopixel.py
index 440ab6e97..cc67f92b4 100644
--- a/edg/parts/human_interface/Neopixel.py
+++ b/edg/parts/human_interface/Neopixel.py
@@ -21,7 +21,7 @@ def __init__(self) -> None:
self.din.init_from(
DigitalSink.from_supply(
self.gnd,
- self.vdd,
+ self.pwr,
voltage_limit_tolerance=(-0.3, 0.7),
input_threshold_abs=(0.7, 2.7),
# note that a more restrictive input_threshold_abs of (1.5, 2.3) was used previously
diff --git a/edg/parts/interface/Rf_Sx1262.py b/edg/parts/interface/Rf_Sx1262.py
index becb0be2c..f71b1b01e 100644
--- a/edg/parts/interface/Rf_Sx1262.py
+++ b/edg/parts/interface/Rf_Sx1262.py
@@ -64,7 +64,7 @@ def contents(self) -> None:
self.assign(self.actual_basic_part, False)
-class Pe4259(Block):
+class Pe4259(InternalSubcircuit, Block):
"""RF switch between 10 MHz to 3000 MHz, 1.8-3.3v input.
Requires all RF pins be held at 0v or are DC-blocked with a series cap.
TODO: perhaps a RfSwitch base class? maybe some relation to AnalogSwitch? (though not valid at DC)
diff --git a/edg/parts/microcontroller/Stm32f103.py b/edg/parts/microcontroller/Stm32f103.py
index 24a49f7ec..d5758be69 100644
--- a/edg/parts/microcontroller/Stm32f103.py
+++ b/edg/parts/microcontroller/Stm32f103.py
@@ -1,5 +1,6 @@
from typing import *
+from deprecated import deprecated
from typing_extensions import override
from ...circuits import *
@@ -255,7 +256,7 @@ def __init__(self, resistance: RangeLike):
self.connect(self.usb.dp, self.dp.b)
-class Stm32f103_48(
+class Stm32f103(
Resettable,
IoControllerI2cTarget,
IoControllerCan,
@@ -323,3 +324,8 @@ def _crystal_required(self) -> bool: # crystal needed for CAN or USB b/c tighte
or len(self.get(self.usb.requested())) > 0
or super()._crystal_required()
)
+
+
+@deprecated("Use Stm32f103 instead of Stm32f103_48")
+class Stm32f103_48(Stm32f103):
+ pass
diff --git a/edg/parts/microcontroller/__init__.py b/edg/parts/microcontroller/__init__.py
index a167dbf27..fb5391562 100644
--- a/edg/parts/microcontroller/__init__.py
+++ b/edg/parts/microcontroller/__init__.py
@@ -1,7 +1,7 @@
from .Ch32v003 import Ch32v003, Ch32vSdiHeader, Ch32vSdiHeader254, Ch32vSdiTc2030
from .Ch32v203 import Ch32v203, Ch32vSdi2Header, Ch32vSdi2Header254, Ch32vSdi2Tc2030
from .Lpc1549 import Lpc1549_48, Lpc1549_64
-from .Stm32f103 import Stm32f103_48
+from .Stm32f103 import Stm32f103, Stm32f103_48
from .Stm32f303 import Nucleo_F303k8
from .Stm32g031 import Stm32g031_G
from .Stm32g431 import Stm32g431kb
diff --git a/edg/parts/power/FuelGauge_Max17048.py b/edg/parts/power/FuelGauge_Max17048.py
index eaabff60f..3d2225d08 100644
--- a/edg/parts/power/FuelGauge_Max17048.py
+++ b/edg/parts/power/FuelGauge_Max17048.py
@@ -53,7 +53,7 @@ def contents(self) -> None:
self.assign(self.actual_basic_part, False)
-class Max17048(DefaultExportBlock):
+class Max17048(Sensor, DefaultExportBlock):
"""1-Cell Li-Ion voltage based fuel gauge. Senses its pwr as the battery voltage."""
def __init__(self) -> None:
diff --git a/edg/parts/power/motor/StepperDriver_A4988.py b/edg/parts/power/motor/StepperDriver_A4988.py
index 2c66f7f1c..e6f99e233 100644
--- a/edg/parts/power/motor/StepperDriver_A4988.py
+++ b/edg/parts/power/motor/StepperDriver_A4988.py
@@ -111,7 +111,7 @@ def contents(self) -> None:
self.assign(self.lcsc_part, "C38437")
-class A4988(GeneratorBlock):
+class A4988(MotorDriver, GeneratorBlock):
"""Bipolar stepper motor driver with microstepping (1:2/4/8/16) and current limiting. 8-35V input, up to 2A."""
def __init__(
@@ -302,7 +302,7 @@ def generate(self) -> None:
)
-class PololuA4988(BrushedMotorDriver, WrapperSubboardBlock):
+class PololuA4988(MotorDriver, WrapperSubboardBlock):
"""Pololu breakout board for the A4988 stepper driver. Adjustable current limit with onboard trimpot."""
def __init__(self, step_resolution: IntLike = 16):
diff --git a/edg/vendor_parts/TactileSwitches.py b/edg/vendor_parts/Switches.py
similarity index 75%
rename from edg/vendor_parts/TactileSwitches.py
rename to edg/vendor_parts/Switches.py
index 6acdff942..b9394b4b9 100644
--- a/edg/vendor_parts/TactileSwitches.py
+++ b/edg/vendor_parts/Switches.py
@@ -40,11 +40,8 @@ def contents(self) -> None:
class KailhSocket(MechanicalKeyswitch, FootprintBlock):
"""Kailh mechanical keyboard hotswap socket.
- Requires an external library, Keyswitch Kicad Library, can be installed from the
- KiCad Plugin and Content Manager, or from GitHub https://github.com/perigoso/keyswitch-kicad-library
- Even after the content manager install, it must also be manually added to the footprint table:
- Name: Switch_Keyboard_Hotswap_Kailh
- Location: ${KICAD6_3RD_PARTY}/footprints/com_github_perigoso_keyswitch-kicad-library/Switch_Keyboard_Hotswap_Kailh.pretty
+ Requires an external library, Keyswitch Kicad Library, available on the KiCad Plugin and Content Manager (PCM).
+ This footprint uses the path when installed via the PCM.
"""
@override
@@ -53,7 +50,7 @@ def contents(self) -> None:
self.footprint(
"SW",
- "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX",
+ "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX",
{
"1": self.sw,
"2": self.com,
diff --git a/edg/vendor_parts/__init__.py b/edg/vendor_parts/__init__.py
index 4c796faee..d27aa3eb0 100644
--- a/edg/vendor_parts/__init__.py
+++ b/edg/vendor_parts/__init__.py
@@ -3,7 +3,7 @@
from . import jlcparts
from .generic import *
-from .TactileSwitches import SmtSwitch, SmtSwitchRa, KailhSocket
+from .Switches import SmtSwitch, SmtSwitchRa, KailhSocket
from .Leds import SmtLed, ThtLed, Smt0606RgbLed, Smt0404RgbLed, ThtRgbLed
from .CeramicResonator_Cstne import Cstne
diff --git a/examples/DeskController/DeskController.net.ref b/examples/DeskController/DeskController.net.ref
index cbb6f5660..8972bfabe 100644
--- a/examples/DeskController/DeskController.net.ref
+++ b/examples/DeskController/DeskController.net.ref
@@ -266,7 +266,7 @@
(tstamps "00640064"))
(comp (ref "DSW1")
(value "sw.sw[0,0].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[0,0]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[0,0].sw"))
@@ -290,7 +290,7 @@
(tstamps "00650065"))
(comp (ref "DSW2")
(value "sw.sw[1,0].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[1,0]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[1,0].sw"))
@@ -314,7 +314,7 @@
(tstamps "00650065"))
(comp (ref "DSW3")
(value "sw.sw[0,1].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[0,1]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[0,1].sw"))
@@ -338,7 +338,7 @@
(tstamps "00650065"))
(comp (ref "DSW4")
(value "sw.sw[1,1].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[1,1]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[1,1].sw"))
@@ -362,7 +362,7 @@
(tstamps "00650065"))
(comp (ref "DSW5")
(value "sw.sw[0,2].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[0,2]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[0,2].sw"))
@@ -386,7 +386,7 @@
(tstamps "00650065"))
(comp (ref "DSW6")
(value "sw.sw[1,2].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[1,2]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[1,2].sw"))
diff --git a/examples/JacdacKeyswitch/JacdacKeyswitch.net.ref b/examples/JacdacKeyswitch/JacdacKeyswitch.net.ref
index a8b6abaf4..2d63b49ea 100644
--- a/examples/JacdacKeyswitch/JacdacKeyswitch.net.ref
+++ b/examples/JacdacKeyswitch/JacdacKeyswitch.net.ref
@@ -326,7 +326,7 @@
(tstamps "02ae014f"))
(comp (ref "SW1")
(value "sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value ""))
(property (name "edg_path") (value "sw.package"))
diff --git a/examples/JacdacKeyswitch/JacdacKeyswitch.svgpcb.js b/examples/JacdacKeyswitch/JacdacKeyswitch.svgpcb.js
index ac8ed410d..ed4c432b4 100644
--- a/examples/JacdacKeyswitch/JacdacKeyswitch.svgpcb.js
+++ b/examples/JacdacKeyswitch/JacdacKeyswitch.svgpcb.js
@@ -2,187 +2,187 @@ const board = new PCB();
// jlc_th.th1
const H1 = board.add(JlcToolingHole_1_152mm, {
- translate: pt(0.862, 1.038), rotate: 0,
+ translate: pt(0.575, 0.968), rotate: 0,
id: 'H1'
})
// jlc_th.th2
const H2 = board.add(JlcToolingHole_1_152mm, {
- translate: pt(0.902, 1.038), rotate: 0,
+ translate: pt(0.614, 0.968), rotate: 0,
id: 'H2'
})
// jlc_th.th3
const H3 = board.add(JlcToolingHole_1_152mm, {
- translate: pt(0.862, 1.078), rotate: 0,
+ translate: pt(0.575, 1.007), rotate: 0,
id: 'H3'
})
// edge.conn
const EC1 = board.add(JD_PEC_02_Prerouted_recessed, {
- translate: pt(0.113, 0.883), rotate: 0,
+ translate: pt(1.090, 0.194), rotate: 0,
id: 'EC1'
})
// edge.status_led.package
const D1 = board.add(LED_0603_1608Metric, {
- translate: pt(0.058, 0.718), rotate: 0,
+ translate: pt(1.036, 0.029), rotate: 0,
id: 'D1'
})
// edge.status_led.res
const R1 = board.add(R_0603_1608Metric, {
- translate: pt(0.058, 0.815), rotate: 0,
+ translate: pt(1.035, 0.126), rotate: 0,
id: 'R1'
})
// edge.tvs_jd_pwr.diode
const D2 = board.add(D_0402_1005Metric, {
- translate: pt(0.193, 0.805), rotate: 0,
+ translate: pt(1.170, 0.116), rotate: 0,
id: 'D2'
})
// edge.tvs_jd_data.diode
const D3 = board.add(D_0402_1005Metric, {
- translate: pt(0.037, 0.902), rotate: 0,
+ translate: pt(1.014, 0.213), rotate: 0,
id: 'D3'
})
// jd_mh1
const MH1 = board.add(jacdac_hole_DATA_notched_MH1, {
- translate: pt(1.020, 1.038), rotate: 0,
+ translate: pt(0.850, 0.968), rotate: 0,
id: 'MH1'
})
// jd_mh2
const MH2 = board.add(jacdac_hole_GND_MH2, {
- translate: pt(1.059, 1.038), rotate: 0,
+ translate: pt(0.890, 0.968), rotate: 0,
id: 'MH2'
})
// jd_mh3
const MH3 = board.add(jacdac_hole_PWR_MH3, {
- translate: pt(1.098, 1.038), rotate: 0,
+ translate: pt(0.929, 0.968), rotate: 0,
id: 'MH3'
})
// jd_mh4
const MH4 = board.add(jacdac_hole_GND_MH4, {
- translate: pt(1.138, 1.038), rotate: 0,
+ translate: pt(0.969, 0.968), rotate: 0,
id: 'MH4'
})
// edge2.conn
const EC2 = board.add(JD_PEC_02_Prerouted_recessed, {
- translate: pt(0.460, 0.883), rotate: 0,
+ translate: pt(0.113, 0.813), rotate: 0,
id: 'EC2'
})
// edge2.status_led.package
const D4 = board.add(LED_0603_1608Metric, {
- translate: pt(0.406, 0.718), rotate: 0,
+ translate: pt(0.058, 0.648), rotate: 0,
id: 'D4'
})
// edge2.status_led.res
const R2 = board.add(R_0603_1608Metric, {
- translate: pt(0.406, 0.815), rotate: 0,
+ translate: pt(0.058, 0.745), rotate: 0,
id: 'R2'
})
// edge2.tvs_jd_pwr.diode
const D5 = board.add(D_0402_1005Metric, {
- translate: pt(0.540, 0.805), rotate: 0,
+ translate: pt(0.193, 0.735), rotate: 0,
id: 'D5'
})
// edge2.tvs_jd_data.diode
const D6 = board.add(D_0402_1005Metric, {
- translate: pt(0.384, 0.902), rotate: 0,
+ translate: pt(0.037, 0.831), rotate: 0,
id: 'D6'
})
// tp_gnd.tp
const TP1 = board.add(TestPoint_Keystone_5015_Micro_Minature, {
- translate: pt(0.085, 1.091), rotate: 0,
+ translate: pt(1.213, 0.672), rotate: 0,
id: 'TP1'
})
// tp_jd_pwr.tp
const TP2 = board.add(TestPoint_Keystone_5015_Micro_Minature, {
- translate: pt(0.372, 1.091), rotate: 0,
+ translate: pt(0.085, 1.021), rotate: 0,
id: 'TP2'
})
// reg_3v3.ic
const U1 = board.add(SOT_23_5, {
- translate: pt(0.775, 0.756), rotate: 0,
+ translate: pt(0.428, 0.686), rotate: 0,
id: 'U1'
})
// reg_3v3.in_cap.cap
const C1 = board.add(C_0603_1608Metric, {
- translate: pt(0.753, 0.891), rotate: 0,
+ translate: pt(0.406, 0.821), rotate: 0,
id: 'C1'
})
// reg_3v3.out_cap.cap
const C2 = board.add(C_0603_1608Metric, {
- translate: pt(0.909, 0.891), rotate: 0,
+ translate: pt(0.561, 0.821), rotate: 0,
id: 'C2'
})
// tp_3v3.tp
const TP3 = board.add(TestPoint_Keystone_5015_Micro_Minature, {
- translate: pt(0.659, 1.091), rotate: 0,
+ translate: pt(0.372, 1.021), rotate: 0,
id: 'TP3'
})
// mcu.ic
const U2 = board.add(QFN_28_4x4mm_P0_5mm, {
- translate: pt(0.836, 0.104), rotate: 0,
+ translate: pt(0.104, 0.104), rotate: 0,
id: 'U2'
})
// mcu.pwr_cap0.cap
const C3 = board.add(C_0805_2012Metric, {
- translate: pt(1.114, 0.285), rotate: 0,
+ translate: pt(0.382, 0.285), rotate: 0,
id: 'C3'
})
// mcu.pwr_cap1.cap
const C4 = board.add(C_0603_1608Metric, {
- translate: pt(0.791, 0.472), rotate: 0,
+ translate: pt(0.058, 0.472), rotate: 0,
id: 'C4'
})
// mcu.swd.conn
const J1 = board.add(Tag_Connect_TC2030_IDC_NL_2x03_P1_27mm_Vertical, {
- translate: pt(0.870, 0.325), rotate: 0,
+ translate: pt(0.138, 0.325), rotate: 0,
id: 'J1'
})
// sw.package
const SW1 = board.add(SW_Hotswap_Kailh_MX, {
- translate: pt(0.307, 0.285), rotate: 0,
+ translate: pt(0.732, 0.968), rotate: 0,
id: 'SW1'
})
// rgb.package
const D7 = board.add(LED_LiteOn_LTST_C19HE1WT, {
- translate: pt(1.126, 0.744), rotate: 0,
+ translate: pt(0.779, 0.674), rotate: 0,
id: 'D7'
})
// rgb.red_res
const R3 = board.add(R_0603_1608Metric, {
- translate: pt(1.265, 0.718), rotate: 0,
+ translate: pt(0.918, 0.648), rotate: 0,
id: 'R3'
})
// rgb.green_res
const R4 = board.add(R_0603_1608Metric, {
- translate: pt(1.143, 0.867), rotate: 0,
+ translate: pt(0.796, 0.797), rotate: 0,
id: 'R4'
})
// rgb.blue_res
const R5 = board.add(R_0603_1608Metric, {
- translate: pt(1.299, 0.867), rotate: 0,
+ translate: pt(0.952, 0.797), rotate: 0,
id: 'R5'
})
// jd_if.ferrite
const FB1 = board.add(L_0603_1608Metric, {
- translate: pt(1.357, 0.143), rotate: 0,
+ translate: pt(0.625, 0.143), rotate: 0,
id: 'FB1'
})
// jd_if.rc.r
const R6 = board.add(R_0603_1608Metric, {
- translate: pt(1.513, 0.143), rotate: 0,
+ translate: pt(0.781, 0.143), rotate: 0,
id: 'R6'
})
// jd_if.rc.c
const C5 = board.add(C_0603_1608Metric, {
- translate: pt(1.357, 0.240), rotate: 0,
+ translate: pt(0.625, 0.240), rotate: 0,
id: 'C5'
})
// jd_if.clamp_hi
const D8 = board.add(D_SOD_323, {
- translate: pt(1.363, 0.037), rotate: 0,
+ translate: pt(0.630, 0.037), rotate: 0,
id: 'D8'
})
// jd_if.clamp_lo
const D9 = board.add(D_SOD_323, {
- translate: pt(1.528, 0.037), rotate: 0,
+ translate: pt(0.796, 0.037), rotate: 0,
id: 'D9'
})
@@ -210,7 +210,7 @@ board.setNetlist([
])
const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
-const limit1 = pt(1.709448818897638, 1.2625984251968505);
+const limit1 = pt(1.415748031496063, 1.19251968503937);
const xMin = Math.min(limit0[0], limit1[0]);
const xMax = Math.max(limit0[0], limit1[0]);
const yMin = Math.min(limit0[1], limit1[1]);
diff --git a/examples/Keyboard/Keyboard.net.ref b/examples/Keyboard/Keyboard.net.ref
index 30a51b3a1..fb875de81 100644
--- a/examples/Keyboard/Keyboard.net.ref
+++ b/examples/Keyboard/Keyboard.net.ref
@@ -218,7 +218,7 @@
(tstamps "0296014b"))
(comp (ref "SW1")
(value "sw.sw[0,0].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[0,0]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[0,0].sw"))
@@ -266,7 +266,7 @@
(tstamps "025e0135"))
(comp (ref "SW2")
(value "sw.sw[1,0].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[1,0]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[1,0].sw"))
@@ -314,7 +314,7 @@
(tstamps "025e0135"))
(comp (ref "SW3")
(value "sw.sw[2,0].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[2,0]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[2,0].sw"))
@@ -362,7 +362,7 @@
(tstamps "025e0135"))
(comp (ref "SW4")
(value "sw.sw[0,1].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[0,1]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[0,1].sw"))
@@ -410,7 +410,7 @@
(tstamps "025e0135"))
(comp (ref "SW5")
(value "sw.sw[1,1].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[1,1]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[1,1].sw"))
@@ -458,7 +458,7 @@
(tstamps "025e0135"))
(comp (ref "SW6")
(value "sw.sw[2,1].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[2,1]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[2,1].sw"))
@@ -506,7 +506,7 @@
(tstamps "025e0135"))
(comp (ref "SW7")
(value "sw.sw[0,2].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[0,2]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[0,2].sw"))
@@ -554,7 +554,7 @@
(tstamps "025e0135"))
(comp (ref "SW8")
(value "sw.sw[1,2].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[1,2]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[1,2].sw"))
@@ -602,7 +602,7 @@
(tstamps "025e0135"))
(comp (ref "SW9")
(value "sw.sw[2,2].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[2,2]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[2,2].sw"))
@@ -650,7 +650,7 @@
(tstamps "025e0135"))
(comp (ref "SW10")
(value "sw.sw[0,3].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[0,3]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[0,3].sw"))
@@ -698,7 +698,7 @@
(tstamps "025e0135"))
(comp (ref "SW11")
(value "sw.sw[1,3].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[1,3]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[1,3].sw"))
@@ -746,7 +746,7 @@
(tstamps "025e0135"))
(comp (ref "SW12")
(value "sw.sw[2,3].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[2,3]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
(property (name "edg_path") (value "sw.sw[2,3].sw"))
diff --git a/examples/PcbBot/PcbBot.net.ref b/examples/PcbBot/PcbBot.net.ref
index 4c0bd7ffd..c6b41329e 100644
--- a/examples/PcbBot/PcbBot.net.ref
+++ b/examples/PcbBot/PcbBot.net.ref
@@ -1286,7 +1286,7 @@
(tstamps "175c0440"))
(comp (ref "SW3")
(value "switch")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value ""))
(property (name "Sheetfile") (value ""))
(property (name "edg_path") (value "switch.package"))
diff --git a/examples/PcbBot/PcbBot.svgpcb.js b/examples/PcbBot/PcbBot.svgpcb.js
index c91681e02..3deed6500 100644
--- a/examples/PcbBot/PcbBot.svgpcb.js
+++ b/examples/PcbBot/PcbBot.svgpcb.js
@@ -2,162 +2,162 @@ const board = new PCB();
// jlc_th.th1
const H1 = board.add(JlcToolingHole_1_152mm, {
- translate: pt(0.191, 3.717), rotate: 0,
+ translate: pt(3.848, 3.301), rotate: 0,
id: 'H1'
})
// jlc_th.th2
const H2 = board.add(JlcToolingHole_1_152mm, {
- translate: pt(0.230, 3.717), rotate: 0,
+ translate: pt(3.887, 3.301), rotate: 0,
id: 'H2'
})
// jlc_th.th3
const H3 = board.add(JlcToolingHole_1_152mm, {
- translate: pt(0.191, 3.757), rotate: 0,
+ translate: pt(3.848, 3.341), rotate: 0,
id: 'H3'
})
// usb.conn
const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, {
- translate: pt(3.766, 1.905), rotate: 0,
+ translate: pt(3.034, 1.905), rotate: 0,
id: 'J1'
})
// usb.cc_pull.cc1
const R1 = board.add(R_0603_1608Metric, {
- translate: pt(3.615, 2.160), rotate: 0,
+ translate: pt(2.883, 2.160), rotate: 0,
id: 'R1'
})
// usb.cc_pull.cc2
const R2 = board.add(R_0603_1608Metric, {
- translate: pt(3.771, 2.160), rotate: 0,
+ translate: pt(3.039, 2.160), rotate: 0,
id: 'R2'
})
// batt.conn
const J2 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, {
- translate: pt(1.674, 3.498), rotate: 0,
+ translate: pt(0.487, 3.431), rotate: 0,
id: 'J2'
})
// tp_gnd.tp
const TP1 = board.add(TestPoint_TE_RCT_0805, {
- translate: pt(3.914, 3.406), rotate: 0,
+ translate: pt(2.728, 3.339), rotate: 0,
id: 'TP1'
})
// fuse.fuse
const F1 = board.add(R_1206_3216Metric, {
- translate: pt(3.640, 3.413), rotate: 0,
+ translate: pt(2.454, 3.345), rotate: 0,
id: 'F1'
})
// gate.pwr_gate.pull_res
const R3 = board.add(R_0603_1608Metric, {
- translate: pt(2.972, 2.206), rotate: 0,
+ translate: pt(2.239, 2.206), rotate: 0,
id: 'R3'
})
// gate.pwr_gate.pwr_fet
const Q1 = board.add(SOT_23, {
- translate: pt(3.363, 1.807), rotate: 0,
+ translate: pt(2.631, 1.807), rotate: 0,
id: 'Q1'
})
// gate.pwr_gate.amp_res
const R4 = board.add(R_0603_1608Metric, {
- translate: pt(3.128, 2.206), rotate: 0,
+ translate: pt(2.395, 2.206), rotate: 0,
id: 'R4'
})
// gate.pwr_gate.amp_fet
const Q2 = board.add(SOT_23, {
- translate: pt(2.989, 2.071), rotate: 0,
+ translate: pt(2.257, 2.071), rotate: 0,
id: 'Q2'
})
// gate.pwr_gate.ctl_diode
const D1 = board.add(D_SOD_323, {
- translate: pt(3.167, 2.041), rotate: 0,
+ translate: pt(2.435, 2.041), rotate: 0,
id: 'D1'
})
// gate.pwr_gate.btn_diode
const D2 = board.add(D_SOD_323, {
- translate: pt(3.333, 2.041), rotate: 0,
+ translate: pt(2.601, 2.041), rotate: 0,
id: 'D2'
})
// gate.btn.package
const SW1 = board.add(SW_SPST_SKQG_WithoutStem, {
- translate: pt(3.081, 1.852), rotate: 0,
+ translate: pt(2.348, 1.852), rotate: 0,
id: 'SW1'
})
// prot_batt.diode
const D3 = board.add(D_SMA, {
- translate: pt(3.294, 3.437), rotate: 0,
+ translate: pt(2.108, 3.370), rotate: 0,
id: 'D3'
})
// tp_batt.tp
const TP2 = board.add(TestPoint_TE_RCT_0805, {
- translate: pt(4.165, 3.406), rotate: 0,
+ translate: pt(2.978, 3.339), rotate: 0,
id: 'TP2'
})
// pwr_or.pdr
const R5 = board.add(R_0603_1608Metric, {
- translate: pt(3.977, 3.044), rotate: 0,
+ translate: pt(2.681, 3.044), rotate: 0,
id: 'R5'
})
// pwr_or.diode
const D4 = board.add(D_SOD_323, {
- translate: pt(3.816, 3.053), rotate: 0,
+ translate: pt(2.521, 3.053), rotate: 0,
id: 'D4'
})
// pwr_or.fet
const Q3 = board.add(SOT_23, {
- translate: pt(3.828, 2.909), rotate: 0,
+ translate: pt(2.533, 2.909), rotate: 0,
id: 'Q3'
})
// reg_3v3.ic
const U1 = board.add(SOT_223_3_TabPin2, {
- translate: pt(1.004, 2.984), rotate: 0,
+ translate: pt(4.365, 1.882), rotate: 0,
id: 'U1'
})
// reg_3v3.in_cap.cap
const C1 = board.add(C_0603_1608Metric, {
- translate: pt(1.062, 3.194), rotate: 0,
+ translate: pt(4.424, 2.092), rotate: 0,
id: 'C1'
})
// reg_3v3.out_cap.cap
const C2 = board.add(C_0805_2012Metric, {
- translate: pt(0.898, 3.204), rotate: 0,
+ translate: pt(4.259, 2.102), rotate: 0,
id: 'C2'
})
// prot_3v3.diode
const D5 = board.add(D_SOD_323, {
- translate: pt(4.412, 3.406), rotate: 0,
+ translate: pt(3.226, 3.339), rotate: 0,
id: 'D5'
})
// tp_3v3.tp
const TP3 = board.add(TestPoint_TE_RCT_0805, {
- translate: pt(4.659, 3.406), rotate: 0,
+ translate: pt(3.473, 3.339), rotate: 0,
id: 'TP3'
})
// charger.ic
const U2 = board.add(SOT_23_5, {
- translate: pt(3.381, 2.909), rotate: 0,
+ translate: pt(2.085, 2.909), rotate: 0,
id: 'U2'
})
// charger.vdd_cap.cap
const C3 = board.add(C_0805_2012Metric, {
- translate: pt(3.568, 2.881), rotate: 0,
+ translate: pt(2.272, 2.881), rotate: 0,
id: 'C3'
})
// charger.vbat_cap.cap
const C4 = board.add(C_0805_2012Metric, {
- translate: pt(3.367, 3.054), rotate: 0,
+ translate: pt(2.072, 3.054), rotate: 0,
id: 'C4'
})
// charger.prog_res.res
const R6 = board.add(R_0603_1608Metric, {
- translate: pt(3.531, 3.044), rotate: 0,
+ translate: pt(2.236, 3.044), rotate: 0,
id: 'R6'
})
// charge_led.package
const D6 = board.add(LED_0603_1608Metric, {
- translate: pt(2.276, 3.397), rotate: 0,
+ translate: pt(1.089, 3.330), rotate: 0,
id: 'D6'
})
// charge_led.res
const R7 = board.add(R_0603_1608Metric, {
- translate: pt(2.276, 3.494), rotate: 0,
+ translate: pt(1.089, 3.427), rotate: 0,
id: 'R7'
})
// mcu.prog.conn
@@ -197,17 +197,17 @@ const C7 = board.add(C_0603_1608Metric, {
})
// usb_esd
const U4 = board.add(SOT_23, {
- translate: pt(0.076, 3.784), rotate: 0,
+ translate: pt(3.733, 3.368), rotate: 0,
id: 'U4'
})
// led.package
const D7 = board.add(LED_0603_1608Metric, {
- translate: pt(2.511, 3.397), rotate: 0,
+ translate: pt(1.324, 3.330), rotate: 0,
id: 'D7'
})
// led.res
const R9 = board.add(R_0603_1608Metric, {
- translate: pt(2.510, 3.494), rotate: 0,
+ translate: pt(1.324, 3.427), rotate: 0,
id: 'R9'
})
// tof.elt[0].conn
@@ -232,87 +232,87 @@ const J7 = board.add(PinSocket_1x06_P2_54mm_Vertical, {
})
// i2c_pull.scl_res.res
const R10 = board.add(R_0603_1608Metric, {
- translate: pt(2.745, 3.397), rotate: 0,
+ translate: pt(1.559, 3.330), rotate: 0,
id: 'R10'
})
// i2c_pull.sda_res.res
const R11 = board.add(R_0603_1608Metric, {
- translate: pt(2.745, 3.494), rotate: 0,
+ translate: pt(1.559, 3.427), rotate: 0,
id: 'R11'
})
// i2c_tp.tp_scl.tp
const TP4 = board.add(TestPoint_TE_RCT_0805, {
- translate: pt(2.033, 3.406), rotate: 0,
+ translate: pt(0.846, 3.339), rotate: 0,
id: 'TP4'
})
// i2c_tp.tp_sda.tp
const TP5 = board.add(TestPoint_TE_RCT_0805, {
- translate: pt(2.033, 3.520), rotate: 0,
+ translate: pt(0.846, 3.453), rotate: 0,
id: 'TP5'
})
// imu.ic
const U5 = board.add(Bosch_LGA_14_3x2_5mm_P0_5mm, {
- translate: pt(1.259, 3.431), rotate: 0,
+ translate: pt(0.073, 3.364), rotate: 0,
id: 'U5'
})
// imu.vdd_cap.cap
const C8 = board.add(C_0603_1608Metric, {
- translate: pt(1.245, 3.563), rotate: 0,
+ translate: pt(0.058, 3.495), rotate: 0,
id: 'C8'
})
// imu.vddio_cap.cap
const C9 = board.add(C_0603_1608Metric, {
- translate: pt(1.401, 3.563), rotate: 0,
+ translate: pt(0.214, 3.495), rotate: 0,
id: 'C9'
})
// mag.ic
const U6 = board.add(LGA_16_3x3mm_P0_5mm, {
- translate: pt(4.222, 2.911), rotate: 0,
+ translate: pt(2.927, 2.911), rotate: 0,
id: 'U6'
})
// mag.vdd_cap.cap
const C10 = board.add(C_0603_1608Metric, {
- translate: pt(4.211, 3.048), rotate: 0,
+ translate: pt(2.916, 3.048), rotate: 0,
id: 'C10'
})
// mag.set_cap
const C11 = board.add(C_0603_1608Metric, {
- translate: pt(4.367, 3.048), rotate: 0,
+ translate: pt(3.072, 3.048), rotate: 0,
id: 'C11'
})
// mag.c1.cap
const C12 = board.add(C_0805_2012Metric, {
- translate: pt(4.397, 2.881), rotate: 0,
+ translate: pt(3.102, 2.881), rotate: 0,
id: 'C12'
})
// expander.ic
const U7 = board.add(TSSOP_16_4_4x5mm_P0_65mm, {
- translate: pt(2.486, 2.951), rotate: 0,
+ translate: pt(1.191, 2.951), rotate: 0,
id: 'U7'
})
// expander.vdd_cap.cap
const C13 = board.add(C_0603_1608Metric, {
- translate: pt(2.393, 3.127), rotate: 0,
+ translate: pt(1.098, 3.127), rotate: 0,
id: 'C13'
})
// rgb.package
const D8 = board.add(LED_D5_0mm_4_RGB_Staggered_Pins, {
- translate: pt(2.796, 3.000), rotate: 0,
+ translate: pt(1.501, 3.000), rotate: 0,
id: 'D8'
})
// rgb.red_res
const R12 = board.add(R_0603_1608Metric, {
- translate: pt(3.124, 2.871), rotate: 0,
+ translate: pt(1.828, 2.871), rotate: 0,
id: 'R12'
})
// rgb.green_res
const R13 = board.add(R_0603_1608Metric, {
- translate: pt(3.124, 2.968), rotate: 0,
+ translate: pt(1.828, 2.968), rotate: 0,
id: 'R13'
})
// rgb.blue_res
const R14 = board.add(R_0603_1608Metric, {
- translate: pt(3.124, 3.065), rotate: 0,
+ translate: pt(1.828, 3.065), rotate: 0,
id: 'R14'
})
// oled.device.conn
@@ -362,32 +362,32 @@ const C19 = board.add(C_0805_2012Metric, {
})
// batt_sense.div.top_res
const R16 = board.add(R_0603_1608Metric, {
- translate: pt(2.980, 3.397), rotate: 0,
+ translate: pt(1.793, 3.330), rotate: 0,
id: 'R16'
})
// batt_sense.div.bottom_res
const R17 = board.add(R_0603_1608Metric, {
- translate: pt(2.980, 3.494), rotate: 0,
+ translate: pt(1.793, 3.427), rotate: 0,
id: 'R17'
})
// servo[0].conn
const J9 = board.add(PinHeader_1x03_P2_54mm_Vertical, {
- translate: pt(1.366, 3.112), rotate: 0,
+ translate: pt(0.071, 3.112), rotate: 0,
id: 'J9'
})
// servo[1].conn
const J10 = board.add(PinHeader_1x03_P2_54mm_Vertical, {
- translate: pt(1.626, 3.112), rotate: 0,
+ translate: pt(0.331, 3.112), rotate: 0,
id: 'J10'
})
// servo[2].conn
const J11 = board.add(PinHeader_1x03_P2_54mm_Vertical, {
- translate: pt(1.886, 3.112), rotate: 0,
+ translate: pt(0.591, 3.112), rotate: 0,
id: 'J11'
})
// servo[3].conn
const J12 = board.add(PinHeader_1x03_P2_54mm_Vertical, {
- translate: pt(2.146, 3.112), rotate: 0,
+ translate: pt(0.850, 3.112), rotate: 0,
id: 'J12'
})
// npx.led[0]
@@ -472,72 +472,72 @@ const D24 = board.add(LED_WS2812B_PLCC4_5_0x5_0mm_P3_2mm, {
})
// npx_key.device
const D25 = board.add(LED_SK6812MINI_E, {
- translate: pt(0.925, 3.433), rotate: 0,
+ translate: pt(4.212, 2.907), rotate: 0,
id: 'D25'
})
// npx_key.cap.cap
const C20 = board.add(C_0603_1608Metric, {
- translate: pt(0.839, 3.567), rotate: 0,
+ translate: pt(4.126, 3.041), rotate: 0,
id: 'C20'
})
// reg_2v5.ic
const U9 = board.add(SOT_23, {
- translate: pt(0.076, 3.435), rotate: 0,
+ translate: pt(3.363, 2.909), rotate: 0,
id: 'U9'
})
// reg_2v5.in_cap.cap
const C21 = board.add(C_0603_1608Metric, {
- translate: pt(0.058, 3.570), rotate: 0,
+ translate: pt(3.345, 3.044), rotate: 0,
id: 'C21'
})
// reg_2v5.out_cap.cap
const C22 = board.add(C_0603_1608Metric, {
- translate: pt(0.214, 3.570), rotate: 0,
+ translate: pt(3.501, 3.044), rotate: 0,
id: 'C22'
})
// reg_1v2.ic
const U10 = board.add(SOT_23, {
- translate: pt(0.466, 3.435), rotate: 0,
+ translate: pt(3.753, 2.909), rotate: 0,
id: 'U10'
})
// reg_1v2.in_cap.cap
const C23 = board.add(C_0603_1608Metric, {
- translate: pt(0.449, 3.570), rotate: 0,
+ translate: pt(3.736, 3.044), rotate: 0,
id: 'C23'
})
// reg_1v2.out_cap.cap
const C24 = board.add(C_0603_1608Metric, {
- translate: pt(0.605, 3.570), rotate: 0,
+ translate: pt(3.892, 3.044), rotate: 0,
id: 'C24'
})
// cam.device.conn
const J13 = board.add(Hirose_FH12_24S_0_5SH_1x24_1MP_P0_50mm_Horizontal, {
- translate: pt(0.356, 3.035), rotate: 0,
+ translate: pt(3.718, 1.933), rotate: 0,
id: 'J13'
})
// cam.dovdd_cap.cap
const C25 = board.add(C_0603_1608Metric, {
- translate: pt(0.058, 3.222), rotate: 0,
+ translate: pt(3.420, 2.119), rotate: 0,
id: 'C25'
})
// cam.reset_cap.cap
const C26 = board.add(C_0603_1608Metric, {
- translate: pt(0.214, 3.222), rotate: 0,
+ translate: pt(3.576, 2.119), rotate: 0,
id: 'C26'
})
// cam.pclk_cap.cap
const C27 = board.add(C_0603_1608Metric, {
- translate: pt(0.370, 3.222), rotate: 0,
+ translate: pt(3.731, 2.119), rotate: 0,
id: 'C27'
})
// cam.reset_pull.res
const R18 = board.add(R_0603_1608Metric, {
- translate: pt(0.526, 3.222), rotate: 0,
+ translate: pt(3.887, 2.119), rotate: 0,
id: 'R18'
})
// switch.package
const SW3 = board.add(SW_Hotswap_Kailh_MX, {
- translate: pt(2.488, 2.026), rotate: 0,
+ translate: pt(4.005, 3.301), rotate: 0,
id: 'SW3'
})
@@ -639,7 +639,7 @@ board.setNetlist([
])
const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
-const limit1 = pt(4.843700787401574, 3.8905511811023628);
+const limit1 = pt(4.656692913385828, 3.642125984251969);
const xMin = Math.min(limit0[0], limit1[0]);
const xMax = Math.max(limit0[0], limit1[0]);
const yMin = Math.min(limit0[1], limit1[1]);
diff --git a/examples/RobotCrawler/RobotCrawler.net.ref b/examples/RobotCrawler/RobotCrawler.net.ref
index 7299ee60b..f8cf83e23 100644
--- a/examples/RobotCrawler/RobotCrawler.net.ref
+++ b/examples/RobotCrawler/RobotCrawler.net.ref
@@ -580,7 +580,7 @@
(value "mcu_servo.ic")
(footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm")
(property (name "Sheetname") (value "mcu_servo"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu_servo.ic"))
(property (name "edg_short_path") (value "mcu_servo.ic"))
(property (name "edg_refdes") (value "RU7"))
@@ -592,7 +592,7 @@
(value "mcu_servo.pwr_cap[0]")
(footprint "Capacitor_SMD:C_0805_2012Metric")
(property (name "Sheetname") (value "mcu_servo"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu_servo.pwr_cap[0].cap"))
(property (name "edg_short_path") (value "mcu_servo.pwr_cap[0]"))
(property (name "edg_refdes") (value "RC15"))
@@ -604,7 +604,7 @@
(value "mcu_servo.pwr_cap[1]")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu_servo"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu_servo.pwr_cap[1].cap"))
(property (name "edg_short_path") (value "mcu_servo.pwr_cap[1]"))
(property (name "edg_refdes") (value "RC16"))
@@ -616,7 +616,7 @@
(value "mcu_servo.pwr_cap[2]")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu_servo"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu_servo.pwr_cap[2].cap"))
(property (name "edg_short_path") (value "mcu_servo.pwr_cap[2]"))
(property (name "edg_refdes") (value "RC17"))
@@ -628,7 +628,7 @@
(value "mcu_servo.pwr_cap[3]")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu_servo"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu_servo.pwr_cap[3].cap"))
(property (name "edg_short_path") (value "mcu_servo.pwr_cap[3]"))
(property (name "edg_refdes") (value "RC18"))
@@ -640,7 +640,7 @@
(value "mcu_servo.vdda_cap_0")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu_servo"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu_servo.vdda_cap_0.cap"))
(property (name "edg_short_path") (value "mcu_servo.vdda_cap_0"))
(property (name "edg_refdes") (value "RC19"))
@@ -652,7 +652,7 @@
(value "mcu_servo.vdda_cap_1")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu_servo"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu_servo.vdda_cap_1.cap"))
(property (name "edg_short_path") (value "mcu_servo.vdda_cap_1"))
(property (name "edg_refdes") (value "RC20"))
@@ -664,7 +664,7 @@
(value "mcu_servo.swd")
(footprint "Connector:Tag-Connect_TC2030-IDC-NL_2x03_P1.27mm_Vertical")
(property (name "Sheetname") (value "mcu_servo"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu_servo.swd.conn"))
(property (name "edg_short_path") (value "mcu_servo.swd"))
(property (name "edg_refdes") (value "RJ17"))
diff --git a/examples/SwdDebugger/SwdDebugger.net.ref b/examples/SwdDebugger/SwdDebugger.net.ref
index 5b05af2c7..fafa8826a 100644
--- a/examples/SwdDebugger/SwdDebugger.net.ref
+++ b/examples/SwdDebugger/SwdDebugger.net.ref
@@ -160,7 +160,7 @@
(value "mcu.ic")
(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 "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu.ic"))
(property (name "edg_short_path") (value "mcu.ic"))
(property (name "edg_refdes") (value "SU3"))
@@ -172,7 +172,7 @@
(value "mcu.pwr_cap[0]")
(footprint "Capacitor_SMD:C_0805_2012Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "SC5"))
@@ -184,7 +184,7 @@
(value "mcu.pwr_cap[1]")
(footprint "Capacitor_SMD:C_0402_1005Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "SC6"))
@@ -196,7 +196,7 @@
(value "mcu.pwr_cap[2]")
(footprint "Capacitor_SMD:C_0402_1005Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "SC7"))
@@ -208,7 +208,7 @@
(value "mcu.pwr_cap[3]")
(footprint "Capacitor_SMD:C_0402_1005Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "SC8"))
@@ -220,7 +220,7 @@
(value "mcu.vdda_cap_0")
(footprint "Capacitor_SMD:C_0402_1005Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "SC9"))
@@ -232,7 +232,7 @@
(value "mcu.vdda_cap_1")
(footprint "Capacitor_SMD:C_0402_1005Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "SC10"))
@@ -244,7 +244,7 @@
(value "mcu.crystal")
(footprint "Crystal:Resonator_SMD_Murata_CSTxExxV-3Pin_3.0x1.1mm")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu.crystal"))
(property (name "edg_short_path") (value "mcu.crystal"))
(property (name "edg_refdes") (value "SU4"))
@@ -256,7 +256,7 @@
(value "mcu.swd")
(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 "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu.swd.conn"))
(property (name "edg_short_path") (value "mcu.swd"))
(property (name "edg_refdes") (value "SJ2"))
@@ -268,7 +268,7 @@
(value "mcu.usb_pull")
(footprint "Resistor_SMD:R_0402_1005Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu.usb_pull.dp"))
(property (name "edg_short_path") (value "mcu.usb_pull"))
(property (name "edg_refdes") (value "SR3"))
diff --git a/examples/TestBlinkyBasicBattery/TestBlinkyBasicBattery.net.ref b/examples/TestBlinkyBasicBattery/TestBlinkyBasicBattery.net.ref
deleted file mode 100644
index d6862010e..000000000
--- a/examples/TestBlinkyBasicBattery/TestBlinkyBasicBattery.net.ref
+++ /dev/null
@@ -1,112 +0,0 @@
-(export (version D)
-(components
-(comp (ref "U1")
- (value "bat.cell[0]")
- (footprint "Battery:BatteryHolder_Keystone_2460_1xAA")
- (property (name "Sheetname") (value "bat"))
- (property (name "Sheetfile") (value "edg.parts.power.Batteries.AaBatteryStack"))
- (property (name "edg_path") (value "bat.cell[0]"))
- (property (name "edg_short_path") (value "bat.cell[0]"))
- (property (name "edg_refdes") (value "U1"))
- (property (name "edg_part") (value "2460 (Keystone)"))
- (property (name "edg_value") (value "2460"))
- (sheetpath (names "/bat/") (tstamps "/025f0138/"))
- (tstamps "0ab40289"))
-(comp (ref "U2")
- (value "bat.cell[1]")
- (footprint "Battery:BatteryHolder_Keystone_2460_1xAA")
- (property (name "Sheetname") (value "bat"))
- (property (name "Sheetfile") (value "edg.parts.power.Batteries.AaBatteryStack"))
- (property (name "edg_path") (value "bat.cell[1]"))
- (property (name "edg_short_path") (value "bat.cell[1]"))
- (property (name "edg_refdes") (value "U2"))
- (property (name "edg_part") (value "2460 (Keystone)"))
- (property (name "edg_value") (value "2460"))
- (sheetpath (names "/bat/") (tstamps "/025f0138/"))
- (tstamps "0ab6028a"))
-(comp (ref "U3")
- (value "bat.cell[2]")
- (footprint "Battery:BatteryHolder_Keystone_2460_1xAA")
- (property (name "Sheetname") (value "bat"))
- (property (name "Sheetfile") (value "edg.parts.power.Batteries.AaBatteryStack"))
- (property (name "edg_path") (value "bat.cell[2]"))
- (property (name "edg_short_path") (value "bat.cell[2]"))
- (property (name "edg_refdes") (value "U3"))
- (property (name "edg_part") (value "2460 (Keystone)"))
- (property (name "edg_value") (value "2460"))
- (sheetpath (names "/bat/") (tstamps "/025f0138/"))
- (tstamps "0ab8028b"))
-(comp (ref "U4")
- (value "bat.cell[3]")
- (footprint "Battery:BatteryHolder_Keystone_2460_1xAA")
- (property (name "Sheetname") (value "bat"))
- (property (name "Sheetfile") (value "edg.parts.power.Batteries.AaBatteryStack"))
- (property (name "edg_path") (value "bat.cell[3]"))
- (property (name "edg_short_path") (value "bat.cell[3]"))
- (property (name "edg_refdes") (value "U4"))
- (property (name "edg_part") (value "2460 (Keystone)"))
- (property (name "edg_value") (value "2460"))
- (sheetpath (names "/bat/") (tstamps "/025f0138/"))
- (tstamps "0aba028c"))
-(comp (ref "U5")
- (value "mcu")
- (footprint "Seeed Studio XIAO Series Library:XIAO-RP2040-SMD")
- (property (name "Sheetname") (value ""))
- (property (name "Sheetfile") (value ""))
- (property (name "edg_path") (value "mcu.device"))
- (property (name "edg_short_path") (value "mcu"))
- (property (name "edg_refdes") (value "U5"))
- (property (name "edg_part") (value "XIAO RP2040"))
- (property (name "edg_value") (value "XIAO RP2040"))
- (sheetpath (names "/") (tstamps "/"))
- (tstamps "02850146"))
-(comp (ref "D1")
- (value "led.package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led/") (tstamps "/02750136/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R1")
- (value "led.res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorLed"))
- (property (name "edg_path") (value "led.res"))
- (property (name "edg_short_path") (value "led.res"))
- (property (name "edg_refdes") (value "R1"))
- (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led/") (tstamps "/02750136/"))
- (tstamps "0296014b")))
-(nets
-(net (code 1) (name "bat.pwr")
- (node (ref U4) (pin 1))
- (node (ref U5) (pin 14)))
-(net (code 2) (name "bat.gnd")
- (node (ref U1) (pin 2))
- (node (ref U5) (pin 13))
- (node (ref R1) (pin 2)))
-(net (code 3) (name "bat.cell[0].pwr")
- (node (ref U1) (pin 1))
- (node (ref U2) (pin 2)))
-(net (code 4) (name "bat.cell[1].pwr")
- (node (ref U2) (pin 1))
- (node (ref U3) (pin 2)))
-(net (code 5) (name "bat.cell[2].pwr")
- (node (ref U3) (pin 1))
- (node (ref U4) (pin 2)))
-(net (code 6) (name "mcu.pwr_out")
- (node (ref U5) (pin 12)))
-(net (code 7) (name "led.signal")
- (node (ref U5) (pin 7))
- (node (ref D1) (pin 2)))
-(net (code 8) (name "led.package.k")
- (node (ref D1) (pin 1))
- (node (ref R1) (pin 1))))
-)
\ No newline at end of file
diff --git a/examples/TestBlinkyBasicBattery/TestBlinkyBasicBattery.svgpcb.js b/examples/TestBlinkyBasicBattery/TestBlinkyBasicBattery.svgpcb.js
deleted file mode 100644
index 81f790f12..000000000
--- a/examples/TestBlinkyBasicBattery/TestBlinkyBasicBattery.svgpcb.js
+++ /dev/null
@@ -1,88 +0,0 @@
-const board = new PCB();
-
-// bat.cell[0]
-const U1 = board.add(BatteryHolder_Keystone_2460_1xAA, {
- translate: pt(0.108, 0.343), rotate: 0,
- id: 'U1'
-})
-// bat.cell[1]
-const U2 = board.add(BatteryHolder_Keystone_2460_1xAA, {
- translate: pt(0.108, 1.067), rotate: 0,
- id: 'U2'
-})
-// bat.cell[2]
-const U3 = board.add(BatteryHolder_Keystone_2460_1xAA, {
- translate: pt(0.108, 1.791), rotate: 0,
- id: 'U3'
-})
-// bat.cell[3]
-const U4 = board.add(BatteryHolder_Keystone_2460_1xAA, {
- translate: pt(0.108, 2.516), rotate: 0,
- id: 'U4'
-})
-// mcu.device
-const U5 = board.add(XIAO_RP2040_SMD, {
- translate: pt(2.730, 0.410), rotate: 0,
- id: 'U5'
-})
-// led.package
-const D1 = board.add(LED_0603_1608Metric, {
- translate: pt(3.258, 0.029), rotate: 0,
- id: 'D1'
-})
-// led.res
-const R1 = board.add(R_0603_1608Metric, {
- translate: pt(3.258, 0.126), rotate: 0,
- id: 'R1'
-})
-
-board.setNetlist([
- {name: "bat.pwr", pads: [["U4", "1"], ["U5", "14"]]},
- {name: "bat.gnd", pads: [["U1", "2"], ["U5", "13"], ["R1", "2"]]},
- {name: "bat.cell[0].pwr", pads: [["U1", "1"], ["U2", "2"]]},
- {name: "bat.cell[1].pwr", pads: [["U2", "1"], ["U3", "2"]]},
- {name: "bat.cell[2].pwr", pads: [["U3", "1"], ["U4", "2"]]},
- {name: "mcu.pwr_out", pads: [["U5", "12"]]},
- {name: "led.signal", pads: [["U5", "7"], ["D1", "2"]]},
- {name: "led.package.k", pads: [["D1", "1"], ["R1", "1"]]}
-])
-
-const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
-const limit1 = pt(3.4348425196850396, 2.9763779527559056);
-const xMin = Math.min(limit0[0], limit1[0]);
-const xMax = Math.max(limit0[0], limit1[0]);
-const yMin = Math.min(limit0[1], limit1[1]);
-const yMax = Math.max(limit0[1], limit1[1]);
-
-const filletRadius = 0.1;
-const outline = path(
- [(xMin+xMax/2), yMax],
- ["fillet", filletRadius, [xMax, yMax]],
- ["fillet", filletRadius, [xMax, yMin]],
- ["fillet", filletRadius, [xMin, yMin]],
- ["fillet", filletRadius, [xMin, yMax]],
- [(xMin+xMax/2), yMax],
-);
-board.addShape("outline", outline);
-
-renderPCB({
- pcb: board,
- layerColors: {
- "F.Paste": "#000000ff",
- "F.Mask": "#000000ff",
- "B.Mask": "#000000ff",
- "componentLabels": "#00e5e5e5",
- "outline": "#002d00ff",
- "padLabels": "#ffff99e5",
- "B.Cu": "#ef4e4eff",
- "F.Cu": "#ff8c00cc",
- },
- limits: {
- x: [xMin, xMax],
- y: [yMin, yMax]
- },
- background: "#00000000",
- mmPerUnit: 25.4
-})
-
-
diff --git a/examples/TestBlinkyChain/TestBlinkyChain.net.ref b/examples/TestBlinkyChain/TestBlinkyChain.net.ref
deleted file mode 100644
index 21abf4314..000000000
--- a/examples/TestBlinkyChain/TestBlinkyChain.net.ref
+++ /dev/null
@@ -1,464 +0,0 @@
-(export (version D)
-(components
-(comp (ref "J1")
- (value "usb.conn")
- (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11")
- (property (name "Sheetname") (value "usb"))
- (property (name "Sheetfile") (value "edg.parts.connector.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)"))
- (property (name "edg_value") (value "COM-15111"))
- (sheetpath (names "/usb/") (tstamps "/02aa014b/"))
- (tstamps "042701af"))
-(comp (ref "R1")
- (value "usb.cc_pull.cc1")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "cc_pull"))
- (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
- (property (name "edg_path") (value "usb.cc_pull.cc1"))
- (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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
- (tstamps "022300f8"))
-(comp (ref "R2")
- (value "usb.cc_pull.cc2")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "cc_pull"))
- (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
- (property (name "edg_path") (value "usb.cc_pull.cc2"))
- (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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
- (tstamps "022400f9"))
-(comp (ref "U1")
- (value "reg.ic")
- (footprint "Package_TO_SOT_SMD:SOT-23-6")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.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)"))
- (property (name "edg_value") (value "TPS561201"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "013700cd"))
-(comp (ref "R3")
- (value "reg.fb.top_res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "fb"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/"))
- (tstamps "0c0c02fd"))
-(comp (ref "R4")
- (value "reg.fb.bottom_res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "fb"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/"))
- (tstamps "175b043f"))
-(comp (ref "C1")
- (value "reg.hf_in_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "11ed0398"))
-(comp (ref "C2")
- (value "reg.vbst_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.Tps561201"))
- (property (name "edg_path") (value "reg.vbst_cap.cap"))
- (property (name "edg_short_path") (value "reg.vbst_cap"))
- (property (name "edg_refdes") (value "C2"))
- (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "0f330353"))
-(comp (ref "L1")
- (value "reg.power_path.inductor")
- (footprint "Inductor_SMD:L_0603_1608Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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 "MGFL1608F6R8MT-LF (microgate)"))
- (property (name "edg_value") (value "400mA 6.8uH ±20% 530mΩ 0603 Inductors (SMD) ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0f2b0369"))
-(comp (ref "C3")
- (value "reg.power_path.in_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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)"))
- (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0879026b"))
-(comp (ref "C4")
- (value "reg.power_path.out_cap")
- (footprint "Capacitor_SMD:C_0805_2012Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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)"))
- (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0be902ec"))
-(comp (ref "U2")
- (value "mcu.ic")
- (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)"))
- (property (name "edg_value") (value "STM32F103xxT6"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "013700cd"))
-(comp (ref "C5")
- (value "mcu.pwr_cap[0]")
- (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)"))
- (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168703d5"))
-(comp (ref "C6")
- (value "mcu.pwr_cap[1]")
- (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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168903d6"))
-(comp (ref "C7")
- (value "mcu.pwr_cap[2]")
- (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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168b03d7"))
-(comp (ref "C8")
- (value "mcu.pwr_cap[3]")
- (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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168d03d8"))
-(comp (ref "C9")
- (value "mcu.vdda_cap_0")
- (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))"))
- (property (name "edg_value") (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "15dc03c2"))
-(comp (ref "C10")
- (value "mcu.vdda_cap_1")
- (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)"))
- (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "15dd03c3"))
-(comp (ref "J2")
- (value "mcu.swd")
- (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)"))
- (property (name "edg_value") (value "PinHeader1.27 Shrouded 2x5"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "02ae014f"))
-(comp (ref "SW1")
- (value "sw")
- (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"))
- (property (name "edg_value") (value "5.1mm switch"))
- (sheetpath (names "/") (tstamps "/"))
- (tstamps "015f00eb"))
-(comp (ref "D1")
- (value "led[0].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[0]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[0]/") (tstamps "/07e5021e/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R5")
- (value "led[0].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[0]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[0]/") (tstamps "/07e5021e/"))
- (tstamps "0296014b"))
-(comp (ref "D2")
- (value "led[1].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[1]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[1]/") (tstamps "/07e7021f/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R6")
- (value "led[1].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[1]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[1]/") (tstamps "/07e7021f/"))
- (tstamps "0296014b"))
-(comp (ref "D3")
- (value "led[2].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[2]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[2]/") (tstamps "/07e90220/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R7")
- (value "led[2].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[2]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[2]/") (tstamps "/07e90220/"))
- (tstamps "0296014b"))
-(comp (ref "D4")
- (value "led[3].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[3]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[3]/") (tstamps "/07eb0221/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R8")
- (value "led[3].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[3]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[3]/") (tstamps "/07eb0221/"))
- (tstamps "0296014b")))
-(nets
-(net (code 1) (name "usb.pwr")
- (node (ref J1) (pin A4))
- (node (ref J1) (pin A9))
- (node (ref J1) (pin B4))
- (node (ref J1) (pin B9))
- (node (ref U1) (pin 3))
- (node (ref U1) (pin 5))
- (node (ref C1) (pin 1))
- (node (ref C3) (pin 1)))
-(net (code 2) (name "usb.gnd")
- (node (ref J1) (pin A1))
- (node (ref J1) (pin A12))
- (node (ref J1) (pin B1))
- (node (ref J1) (pin B12))
- (node (ref J1) (pin S1))
- (node (ref R1) (pin 1))
- (node (ref R2) (pin 1))
- (node (ref U1) (pin 1))
- (node (ref R4) (pin 2))
- (node (ref C1) (pin 2))
- (node (ref C3) (pin 2))
- (node (ref C4) (pin 2))
- (node (ref U2) (pin 23))
- (node (ref U2) (pin 35))
- (node (ref U2) (pin 44))
- (node (ref U2) (pin 47))
- (node (ref U2) (pin 8))
- (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 J2) (pin 3))
- (node (ref J2) (pin 5))
- (node (ref J2) (pin 9))
- (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)))
-(net (code 3) (name "usb.usb.dp")
- (node (ref J1) (pin A6))
- (node (ref J1) (pin B6)))
-(net (code 4) (name "usb.usb.dm")
- (node (ref J1) (pin A7))
- (node (ref J1) (pin B7)))
-(net (code 5) (name "usb.conn.cc.cc1")
- (node (ref J1) (pin A5))
- (node (ref R1) (pin 2)))
-(net (code 6) (name "usb.conn.cc.cc2")
- (node (ref J1) (pin B5))
- (node (ref R2) (pin 2)))
-(net (code 7) (name "reg.pwr_out")
- (node (ref R3) (pin 1))
- (node (ref L1) (pin 2))
- (node (ref C4) (pin 1))
- (node (ref U2) (pin 1))
- (node (ref U2) (pin 24))
- (node (ref U2) (pin 36))
- (node (ref U2) (pin 48))
- (node (ref U2) (pin 9))
- (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 J2) (pin 1)))
-(net (code 8) (name "reg.ic.sw")
- (node (ref U1) (pin 2))
- (node (ref C2) (pin 2))
- (node (ref L1) (pin 1)))
-(net (code 9) (name "reg.ic.fb")
- (node (ref U1) (pin 4))
- (node (ref R3) (pin 2))
- (node (ref R4) (pin 1)))
-(net (code 10) (name "reg.ic.vbst")
- (node (ref U1) (pin 6))
- (node (ref C2) (pin 1)))
-(net (code 11) (name "mcu.swd_node.swdio")
- (node (ref U2) (pin 34))
- (node (ref J2) (pin 2)))
-(net (code 12) (name "mcu.swd_node.swclk")
- (node (ref U2) (pin 37))
- (node (ref J2) (pin 4)))
-(net (code 13) (name "mcu.reset_node")
- (node (ref U2) (pin 7))
- (node (ref J2) (pin 10)))
-(net (code 14) (name "mcu.ic.osc.xtal_in")
- (node (ref U2) (pin 5)))
-(net (code 15) (name "mcu.ic.osc.xtal_out")
- (node (ref U2) (pin 6)))
-(net (code 16) (name "mcu.swd.tdi")
- (node (ref J2) (pin 8)))
-(net (code 17) (name "mcu.swd.swo")
- (node (ref J2) (pin 6)))
-(net (code 18) (name "sw.out")
- (node (ref U2) (pin 10))
- (node (ref SW1) (pin 1)))
-(net (code 19) (name "led[0].signal")
- (node (ref U2) (pin 11))
- (node (ref D1) (pin 2)))
-(net (code 20) (name "led[0].package.k")
- (node (ref D1) (pin 1))
- (node (ref R5) (pin 1)))
-(net (code 21) (name "led[1].signal")
- (node (ref U2) (pin 12))
- (node (ref D2) (pin 2)))
-(net (code 22) (name "led[1].package.k")
- (node (ref D2) (pin 1))
- (node (ref R6) (pin 1)))
-(net (code 23) (name "led[2].signal")
- (node (ref U2) (pin 13))
- (node (ref D3) (pin 2)))
-(net (code 24) (name "led[2].package.k")
- (node (ref D3) (pin 1))
- (node (ref R7) (pin 1)))
-(net (code 25) (name "led[3].signal")
- (node (ref U2) (pin 14))
- (node (ref D4) (pin 2)))
-(net (code 26) (name "led[3].package.k")
- (node (ref D4) (pin 1))
- (node (ref R8) (pin 1))))
-)
\ No newline at end of file
diff --git a/examples/TestBlinkyChain/TestBlinkyChain.svgpcb.js b/examples/TestBlinkyChain/TestBlinkyChain.svgpcb.js
deleted file mode 100644
index 0131c90ca..000000000
--- a/examples/TestBlinkyChain/TestBlinkyChain.svgpcb.js
+++ /dev/null
@@ -1,211 +0,0 @@
-const board = new PCB();
-
-// usb.conn
-const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, {
- translate: pt(1.111, 0.165), rotate: 0,
- id: 'J1'
-})
-// usb.cc_pull.cc1
-const R1 = board.add(R_0603_1608Metric, {
- translate: pt(0.960, 0.420), rotate: 0,
- id: 'R1'
-})
-// usb.cc_pull.cc2
-const R2 = board.add(R_0603_1608Metric, {
- translate: pt(1.116, 0.420), rotate: 0,
- id: 'R2'
-})
-// reg.ic
-const U1 = board.add(SOT_23_6, {
- translate: pt(0.081, 0.804), rotate: 0,
- id: 'U1'
-})
-// reg.fb.div.top_res
-const R3 = board.add(R_0603_1608Metric, {
- translate: pt(0.058, 0.939), rotate: 0,
- id: 'R3'
-})
-// reg.fb.div.bottom_res
-const R4 = board.add(R_0603_1608Metric, {
- translate: pt(0.214, 0.939), rotate: 0,
- id: 'R4'
-})
-// reg.hf_in_cap.cap
-const C1 = board.add(C_0603_1608Metric, {
- translate: pt(0.370, 0.939), rotate: 0,
- id: 'C1'
-})
-// reg.vbst_cap.cap
-const C2 = board.add(C_0603_1608Metric, {
- translate: pt(0.058, 1.036), rotate: 0,
- id: 'C2'
-})
-// reg.power_path.inductor
-const L1 = board.add(L_0603_1608Metric, {
- translate: pt(0.214, 1.036), rotate: 0,
- id: 'L1'
-})
-// reg.power_path.in_cap.cap
-const C3 = board.add(C_0603_1608Metric, {
- translate: pt(0.370, 1.036), rotate: 0,
- id: 'C3'
-})
-// reg.power_path.out_cap.cap
-const C4 = board.add(C_0805_2012Metric, {
- translate: pt(0.268, 0.776), rotate: 0,
- id: 'C4'
-})
-// mcu.ic
-const U2 = board.add(LQFP_48_7x7mm_P0_5mm, {
- translate: pt(0.203, 0.203), rotate: 0,
- id: 'U2'
-})
-// mcu.pwr_cap[0].cap
-const C5 = board.add(C_0805_2012Metric, {
- translate: pt(0.067, 0.483), rotate: 0,
- id: 'C5'
-})
-// mcu.pwr_cap[1].cap
-const C6 = board.add(C_0603_1608Metric, {
- translate: pt(0.231, 0.474), rotate: 0,
- id: 'C6'
-})
-// mcu.pwr_cap[2].cap
-const C7 = board.add(C_0603_1608Metric, {
- translate: pt(0.387, 0.474), rotate: 0,
- id: 'C7'
-})
-// mcu.pwr_cap[3].cap
-const C8 = board.add(C_0603_1608Metric, {
- translate: pt(0.543, 0.474), rotate: 0,
- id: 'C8'
-})
-// mcu.vdda_cap_0.cap
-const C9 = board.add(C_0603_1608Metric, {
- translate: pt(0.699, 0.474), rotate: 0,
- id: 'C9'
-})
-// mcu.vdda_cap_1.cap
-const C10 = board.add(C_0603_1608Metric, {
- translate: pt(0.058, 0.590), rotate: 0,
- id: 'C10'
-})
-// mcu.swd.conn
-const J2 = board.add(PinHeader_2x05_P1_27mm_Vertical_SMD, {
- translate: pt(0.614, 0.146), rotate: 0,
- id: 'J2'
-})
-// sw.package
-const SW1 = board.add(SW_SPST_SKQG_WithoutStem, {
- translate: pt(0.714, 0.849), rotate: 0,
- id: 'SW1'
-})
-// led[0].package
-const D1 = board.add(LED_0603_1608Metric, {
- translate: pt(1.058, 0.766), rotate: 0,
- id: 'D1'
-})
-// led[0].res
-const R5 = board.add(R_0603_1608Metric, {
- translate: pt(1.057, 0.863), rotate: 0,
- id: 'R5'
-})
-// led[1].package
-const D2 = board.add(LED_0603_1608Metric, {
- translate: pt(1.293, 0.766), rotate: 0,
- id: 'D2'
-})
-// led[1].res
-const R6 = board.add(R_0603_1608Metric, {
- translate: pt(1.292, 0.863), rotate: 0,
- id: 'R6'
-})
-// led[2].package
-const D3 = board.add(LED_0603_1608Metric, {
- translate: pt(0.058, 1.212), rotate: 0,
- id: 'D3'
-})
-// led[2].res
-const R7 = board.add(R_0603_1608Metric, {
- translate: pt(0.058, 1.309), rotate: 0,
- id: 'R7'
-})
-// led[3].package
-const D4 = board.add(LED_0603_1608Metric, {
- translate: pt(0.293, 1.212), rotate: 0,
- id: 'D4'
-})
-// led[3].res
-const R8 = board.add(R_0603_1608Metric, {
- translate: pt(0.293, 1.309), rotate: 0,
- id: 'R8'
-})
-
-board.setNetlist([
- {name: "usb.pwr", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["U1", "3"], ["U1", "5"], ["C1", "1"], ["C3", "1"]]},
- {name: "usb.gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["U1", "1"], ["R4", "2"], ["C1", "2"], ["C3", "2"], ["C4", "2"], ["U2", "23"], ["U2", "35"], ["U2", "44"], ["U2", "47"], ["U2", "8"], ["C5", "2"], ["C6", "2"], ["C7", "2"], ["C8", "2"], ["C9", "2"], ["C10", "2"], ["J2", "3"], ["J2", "5"], ["J2", "9"], ["SW1", "2"], ["R5", "2"], ["R6", "2"], ["R7", "2"], ["R8", "2"]]},
- {name: "usb.usb.dp", pads: [["J1", "A6"], ["J1", "B6"]]},
- {name: "usb.usb.dm", pads: [["J1", "A7"], ["J1", "B7"]]},
- {name: "usb.conn.cc.cc1", pads: [["J1", "A5"], ["R1", "2"]]},
- {name: "usb.conn.cc.cc2", pads: [["J1", "B5"], ["R2", "2"]]},
- {name: "reg.pwr_out", pads: [["R3", "1"], ["L1", "2"], ["C4", "1"], ["U2", "1"], ["U2", "24"], ["U2", "36"], ["U2", "48"], ["U2", "9"], ["C5", "1"], ["C6", "1"], ["C7", "1"], ["C8", "1"], ["C9", "1"], ["C10", "1"], ["J2", "1"]]},
- {name: "reg.ic.sw", pads: [["U1", "2"], ["C2", "2"], ["L1", "1"]]},
- {name: "reg.ic.fb", pads: [["U1", "4"], ["R3", "2"], ["R4", "1"]]},
- {name: "reg.ic.vbst", pads: [["U1", "6"], ["C2", "1"]]},
- {name: "mcu.swd_node.swdio", pads: [["U2", "34"], ["J2", "2"]]},
- {name: "mcu.swd_node.swclk", pads: [["U2", "37"], ["J2", "4"]]},
- {name: "mcu.reset_node", pads: [["U2", "7"], ["J2", "10"]]},
- {name: "mcu.ic.osc.xtal_in", pads: [["U2", "5"]]},
- {name: "mcu.ic.osc.xtal_out", pads: [["U2", "6"]]},
- {name: "mcu.swd.tdi", pads: [["J2", "8"]]},
- {name: "mcu.swd.swo", pads: [["J2", "6"]]},
- {name: "sw.out", pads: [["U2", "10"], ["SW1", "1"]]},
- {name: "led[0].signal", pads: [["U2", "11"], ["D1", "2"]]},
- {name: "led[0].package.k", pads: [["D1", "1"], ["R5", "1"]]},
- {name: "led[1].signal", pads: [["U2", "12"], ["D2", "2"]]},
- {name: "led[1].package.k", pads: [["D2", "1"], ["R6", "1"]]},
- {name: "led[2].signal", pads: [["U2", "13"], ["D3", "2"]]},
- {name: "led[2].package.k", pads: [["D3", "1"], ["R7", "1"]]},
- {name: "led[3].signal", pads: [["U2", "14"], ["D4", "2"]]},
- {name: "led[3].package.k", pads: [["D4", "1"], ["R8", "1"]]}
-])
-
-const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
-const limit1 = pt(1.4688976377952758, 1.455511811023622);
-const xMin = Math.min(limit0[0], limit1[0]);
-const xMax = Math.max(limit0[0], limit1[0]);
-const yMin = Math.min(limit0[1], limit1[1]);
-const yMax = Math.max(limit0[1], limit1[1]);
-
-const filletRadius = 0.1;
-const outline = path(
- [(xMin+xMax/2), yMax],
- ["fillet", filletRadius, [xMax, yMax]],
- ["fillet", filletRadius, [xMax, yMin]],
- ["fillet", filletRadius, [xMin, yMin]],
- ["fillet", filletRadius, [xMin, yMax]],
- [(xMin+xMax/2), yMax],
-);
-board.addShape("outline", outline);
-
-renderPCB({
- pcb: board,
- layerColors: {
- "F.Paste": "#000000ff",
- "F.Mask": "#000000ff",
- "B.Mask": "#000000ff",
- "componentLabels": "#00e5e5e5",
- "outline": "#002d00ff",
- "padLabels": "#ffff99e5",
- "B.Cu": "#ef4e4eff",
- "F.Cu": "#ff8c00cc",
- },
- limits: {
- x: [xMin, xMax],
- y: [yMin, yMax]
- },
- background: "#00000000",
- mmPerUnit: 25.4
-})
-
-
diff --git a/examples/TestBlinkyComplete/TestBlinkyComplete.net.ref b/examples/TestBlinkyComplete/TestBlinkyComplete.net.ref
deleted file mode 100644
index 84f754732..000000000
--- a/examples/TestBlinkyComplete/TestBlinkyComplete.net.ref
+++ /dev/null
@@ -1,355 +0,0 @@
-(export (version D)
-(components
-(comp (ref "J1")
- (value "usb.conn")
- (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11")
- (property (name "Sheetname") (value "usb"))
- (property (name "Sheetfile") (value "edg.parts.connector.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)"))
- (property (name "edg_value") (value "COM-15111"))
- (sheetpath (names "/usb/") (tstamps "/02aa014b/"))
- (tstamps "042701af"))
-(comp (ref "R1")
- (value "usb.cc_pull.cc1")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "cc_pull"))
- (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
- (property (name "edg_path") (value "usb.cc_pull.cc1"))
- (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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
- (tstamps "022300f8"))
-(comp (ref "R2")
- (value "usb.cc_pull.cc2")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "cc_pull"))
- (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
- (property (name "edg_path") (value "usb.cc_pull.cc2"))
- (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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
- (tstamps "022400f9"))
-(comp (ref "U1")
- (value "reg.ic")
- (footprint "Package_TO_SOT_SMD:SOT-23-6")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.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)"))
- (property (name "edg_value") (value "TPS561201"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "013700cd"))
-(comp (ref "R3")
- (value "reg.fb.top_res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "fb"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/"))
- (tstamps "0c0c02fd"))
-(comp (ref "R4")
- (value "reg.fb.bottom_res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "fb"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/"))
- (tstamps "175b043f"))
-(comp (ref "C1")
- (value "reg.hf_in_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "11ed0398"))
-(comp (ref "C2")
- (value "reg.vbst_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.Tps561201"))
- (property (name "edg_path") (value "reg.vbst_cap.cap"))
- (property (name "edg_short_path") (value "reg.vbst_cap"))
- (property (name "edg_refdes") (value "C2"))
- (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "0f330353"))
-(comp (ref "L1")
- (value "reg.power_path.inductor")
- (footprint "Inductor_SMD:L_0603_1608Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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 "MGFL1608F6R8MT-LF (microgate)"))
- (property (name "edg_value") (value "400mA 6.8uH ±20% 530mΩ 0603 Inductors (SMD) ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0f2b0369"))
-(comp (ref "C3")
- (value "reg.power_path.in_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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)"))
- (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0879026b"))
-(comp (ref "C4")
- (value "reg.power_path.out_cap")
- (footprint "Capacitor_SMD:C_0805_2012Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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)"))
- (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0be902ec"))
-(comp (ref "U2")
- (value "mcu.ic")
- (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)"))
- (property (name "edg_value") (value "STM32F103xxT6"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "013700cd"))
-(comp (ref "C5")
- (value "mcu.pwr_cap[0]")
- (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)"))
- (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168703d5"))
-(comp (ref "C6")
- (value "mcu.pwr_cap[1]")
- (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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168903d6"))
-(comp (ref "C7")
- (value "mcu.pwr_cap[2]")
- (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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168b03d7"))
-(comp (ref "C8")
- (value "mcu.pwr_cap[3]")
- (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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168d03d8"))
-(comp (ref "C9")
- (value "mcu.vdda_cap_0")
- (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))"))
- (property (name "edg_value") (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "15dc03c2"))
-(comp (ref "C10")
- (value "mcu.vdda_cap_1")
- (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)"))
- (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "15dd03c3"))
-(comp (ref "J2")
- (value "mcu.swd")
- (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)"))
- (property (name "edg_value") (value "PinHeader1.27 Shrouded 2x5"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "02ae014f"))
-(comp (ref "D1")
- (value "led.package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led/") (tstamps "/02750136/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R5")
- (value "led.res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led/") (tstamps "/02750136/"))
- (tstamps "0296014b")))
-(nets
-(net (code 1) (name "usb.pwr")
- (node (ref J1) (pin A4))
- (node (ref J1) (pin A9))
- (node (ref J1) (pin B4))
- (node (ref J1) (pin B9))
- (node (ref U1) (pin 3))
- (node (ref U1) (pin 5))
- (node (ref C1) (pin 1))
- (node (ref C3) (pin 1)))
-(net (code 2) (name "usb.gnd")
- (node (ref J1) (pin A1))
- (node (ref J1) (pin A12))
- (node (ref J1) (pin B1))
- (node (ref J1) (pin B12))
- (node (ref J1) (pin S1))
- (node (ref R1) (pin 1))
- (node (ref R2) (pin 1))
- (node (ref U1) (pin 1))
- (node (ref R4) (pin 2))
- (node (ref C1) (pin 2))
- (node (ref C3) (pin 2))
- (node (ref C4) (pin 2))
- (node (ref U2) (pin 23))
- (node (ref U2) (pin 35))
- (node (ref U2) (pin 44))
- (node (ref U2) (pin 47))
- (node (ref U2) (pin 8))
- (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 J2) (pin 3))
- (node (ref J2) (pin 5))
- (node (ref J2) (pin 9))
- (node (ref R5) (pin 2)))
-(net (code 3) (name "usb.usb.dp")
- (node (ref J1) (pin A6))
- (node (ref J1) (pin B6)))
-(net (code 4) (name "usb.usb.dm")
- (node (ref J1) (pin A7))
- (node (ref J1) (pin B7)))
-(net (code 5) (name "usb.conn.cc.cc1")
- (node (ref J1) (pin A5))
- (node (ref R1) (pin 2)))
-(net (code 6) (name "usb.conn.cc.cc2")
- (node (ref J1) (pin B5))
- (node (ref R2) (pin 2)))
-(net (code 7) (name "reg.pwr_out")
- (node (ref R3) (pin 1))
- (node (ref L1) (pin 2))
- (node (ref C4) (pin 1))
- (node (ref U2) (pin 1))
- (node (ref U2) (pin 24))
- (node (ref U2) (pin 36))
- (node (ref U2) (pin 48))
- (node (ref U2) (pin 9))
- (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 J2) (pin 1)))
-(net (code 8) (name "reg.ic.sw")
- (node (ref U1) (pin 2))
- (node (ref C2) (pin 2))
- (node (ref L1) (pin 1)))
-(net (code 9) (name "reg.ic.fb")
- (node (ref U1) (pin 4))
- (node (ref R3) (pin 2))
- (node (ref R4) (pin 1)))
-(net (code 10) (name "reg.ic.vbst")
- (node (ref U1) (pin 6))
- (node (ref C2) (pin 1)))
-(net (code 11) (name "mcu.swd_node.swdio")
- (node (ref U2) (pin 34))
- (node (ref J2) (pin 2)))
-(net (code 12) (name "mcu.swd_node.swclk")
- (node (ref U2) (pin 37))
- (node (ref J2) (pin 4)))
-(net (code 13) (name "mcu.reset_node")
- (node (ref U2) (pin 7))
- (node (ref J2) (pin 10)))
-(net (code 14) (name "mcu.ic.osc.xtal_in")
- (node (ref U2) (pin 5)))
-(net (code 15) (name "mcu.ic.osc.xtal_out")
- (node (ref U2) (pin 6)))
-(net (code 16) (name "mcu.swd.tdi")
- (node (ref J2) (pin 8)))
-(net (code 17) (name "mcu.swd.swo")
- (node (ref J2) (pin 6)))
-(net (code 18) (name "led.signal")
- (node (ref U2) (pin 10))
- (node (ref D1) (pin 2)))
-(net (code 19) (name "led.package.k")
- (node (ref D1) (pin 1))
- (node (ref R5) (pin 1))))
-)
\ No newline at end of file
diff --git a/examples/TestBlinkyComplete/TestBlinkyComplete.svgpcb.js b/examples/TestBlinkyComplete/TestBlinkyComplete.svgpcb.js
deleted file mode 100644
index 711c2ee7d..000000000
--- a/examples/TestBlinkyComplete/TestBlinkyComplete.svgpcb.js
+++ /dev/null
@@ -1,169 +0,0 @@
-const board = new PCB();
-
-// usb.conn
-const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, {
- translate: pt(1.111, 0.165), rotate: 0,
- id: 'J1'
-})
-// usb.cc_pull.cc1
-const R1 = board.add(R_0603_1608Metric, {
- translate: pt(0.960, 0.420), rotate: 0,
- id: 'R1'
-})
-// usb.cc_pull.cc2
-const R2 = board.add(R_0603_1608Metric, {
- translate: pt(1.116, 0.420), rotate: 0,
- id: 'R2'
-})
-// reg.ic
-const U1 = board.add(SOT_23_6, {
- translate: pt(0.081, 0.804), rotate: 0,
- id: 'U1'
-})
-// reg.fb.div.top_res
-const R3 = board.add(R_0603_1608Metric, {
- translate: pt(0.058, 0.939), rotate: 0,
- id: 'R3'
-})
-// reg.fb.div.bottom_res
-const R4 = board.add(R_0603_1608Metric, {
- translate: pt(0.214, 0.939), rotate: 0,
- id: 'R4'
-})
-// reg.hf_in_cap.cap
-const C1 = board.add(C_0603_1608Metric, {
- translate: pt(0.370, 0.939), rotate: 0,
- id: 'C1'
-})
-// reg.vbst_cap.cap
-const C2 = board.add(C_0603_1608Metric, {
- translate: pt(0.058, 1.036), rotate: 0,
- id: 'C2'
-})
-// reg.power_path.inductor
-const L1 = board.add(L_0603_1608Metric, {
- translate: pt(0.214, 1.036), rotate: 0,
- id: 'L1'
-})
-// reg.power_path.in_cap.cap
-const C3 = board.add(C_0603_1608Metric, {
- translate: pt(0.370, 1.036), rotate: 0,
- id: 'C3'
-})
-// reg.power_path.out_cap.cap
-const C4 = board.add(C_0805_2012Metric, {
- translate: pt(0.268, 0.776), rotate: 0,
- id: 'C4'
-})
-// mcu.ic
-const U2 = board.add(LQFP_48_7x7mm_P0_5mm, {
- translate: pt(0.203, 0.203), rotate: 0,
- id: 'U2'
-})
-// mcu.pwr_cap[0].cap
-const C5 = board.add(C_0805_2012Metric, {
- translate: pt(0.067, 0.483), rotate: 0,
- id: 'C5'
-})
-// mcu.pwr_cap[1].cap
-const C6 = board.add(C_0603_1608Metric, {
- translate: pt(0.231, 0.474), rotate: 0,
- id: 'C6'
-})
-// mcu.pwr_cap[2].cap
-const C7 = board.add(C_0603_1608Metric, {
- translate: pt(0.387, 0.474), rotate: 0,
- id: 'C7'
-})
-// mcu.pwr_cap[3].cap
-const C8 = board.add(C_0603_1608Metric, {
- translate: pt(0.543, 0.474), rotate: 0,
- id: 'C8'
-})
-// mcu.vdda_cap_0.cap
-const C9 = board.add(C_0603_1608Metric, {
- translate: pt(0.699, 0.474), rotate: 0,
- id: 'C9'
-})
-// mcu.vdda_cap_1.cap
-const C10 = board.add(C_0603_1608Metric, {
- translate: pt(0.058, 0.590), rotate: 0,
- id: 'C10'
-})
-// mcu.swd.conn
-const J2 = board.add(PinHeader_2x05_P1_27mm_Vertical_SMD, {
- translate: pt(0.614, 0.146), rotate: 0,
- id: 'J2'
-})
-// led.package
-const D1 = board.add(LED_0603_1608Metric, {
- translate: pt(0.605, 0.766), rotate: 0,
- id: 'D1'
-})
-// led.res
-const R5 = board.add(R_0603_1608Metric, {
- translate: pt(0.605, 0.863), rotate: 0,
- id: 'R5'
-})
-
-board.setNetlist([
- {name: "usb.pwr", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["U1", "3"], ["U1", "5"], ["C1", "1"], ["C3", "1"]]},
- {name: "usb.gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["U1", "1"], ["R4", "2"], ["C1", "2"], ["C3", "2"], ["C4", "2"], ["U2", "23"], ["U2", "35"], ["U2", "44"], ["U2", "47"], ["U2", "8"], ["C5", "2"], ["C6", "2"], ["C7", "2"], ["C8", "2"], ["C9", "2"], ["C10", "2"], ["J2", "3"], ["J2", "5"], ["J2", "9"], ["R5", "2"]]},
- {name: "usb.usb.dp", pads: [["J1", "A6"], ["J1", "B6"]]},
- {name: "usb.usb.dm", pads: [["J1", "A7"], ["J1", "B7"]]},
- {name: "usb.conn.cc.cc1", pads: [["J1", "A5"], ["R1", "2"]]},
- {name: "usb.conn.cc.cc2", pads: [["J1", "B5"], ["R2", "2"]]},
- {name: "reg.pwr_out", pads: [["R3", "1"], ["L1", "2"], ["C4", "1"], ["U2", "1"], ["U2", "24"], ["U2", "36"], ["U2", "48"], ["U2", "9"], ["C5", "1"], ["C6", "1"], ["C7", "1"], ["C8", "1"], ["C9", "1"], ["C10", "1"], ["J2", "1"]]},
- {name: "reg.ic.sw", pads: [["U1", "2"], ["C2", "2"], ["L1", "1"]]},
- {name: "reg.ic.fb", pads: [["U1", "4"], ["R3", "2"], ["R4", "1"]]},
- {name: "reg.ic.vbst", pads: [["U1", "6"], ["C2", "1"]]},
- {name: "mcu.swd_node.swdio", pads: [["U2", "34"], ["J2", "2"]]},
- {name: "mcu.swd_node.swclk", pads: [["U2", "37"], ["J2", "4"]]},
- {name: "mcu.reset_node", pads: [["U2", "7"], ["J2", "10"]]},
- {name: "mcu.ic.osc.xtal_in", pads: [["U2", "5"]]},
- {name: "mcu.ic.osc.xtal_out", pads: [["U2", "6"]]},
- {name: "mcu.swd.tdi", pads: [["J2", "8"]]},
- {name: "mcu.swd.swo", pads: [["J2", "6"]]},
- {name: "led.signal", pads: [["U2", "10"], ["D1", "2"]]},
- {name: "led.package.k", pads: [["D1", "1"], ["R5", "1"]]}
-])
-
-const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
-const limit1 = pt(1.4385826771653545, 1.1826771653543309);
-const xMin = Math.min(limit0[0], limit1[0]);
-const xMax = Math.max(limit0[0], limit1[0]);
-const yMin = Math.min(limit0[1], limit1[1]);
-const yMax = Math.max(limit0[1], limit1[1]);
-
-const filletRadius = 0.1;
-const outline = path(
- [(xMin+xMax/2), yMax],
- ["fillet", filletRadius, [xMax, yMax]],
- ["fillet", filletRadius, [xMax, yMin]],
- ["fillet", filletRadius, [xMin, yMin]],
- ["fillet", filletRadius, [xMin, yMax]],
- [(xMin+xMax/2), yMax],
-);
-board.addShape("outline", outline);
-
-renderPCB({
- pcb: board,
- layerColors: {
- "F.Paste": "#000000ff",
- "F.Mask": "#000000ff",
- "B.Mask": "#000000ff",
- "componentLabels": "#00e5e5e5",
- "outline": "#002d00ff",
- "padLabels": "#ffff99e5",
- "B.Cu": "#ef4e4eff",
- "F.Cu": "#ff8c00cc",
- },
- limits: {
- x: [xMin, xMax],
- y: [yMin, yMax]
- },
- background: "#00000000",
- mmPerUnit: 25.4
-})
-
-
diff --git a/examples/TestBlinkyExpanded/TestBlinkyExpanded.net.ref b/examples/TestBlinkyExpanded/TestBlinkyExpanded.net.ref
deleted file mode 100644
index 21abf4314..000000000
--- a/examples/TestBlinkyExpanded/TestBlinkyExpanded.net.ref
+++ /dev/null
@@ -1,464 +0,0 @@
-(export (version D)
-(components
-(comp (ref "J1")
- (value "usb.conn")
- (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11")
- (property (name "Sheetname") (value "usb"))
- (property (name "Sheetfile") (value "edg.parts.connector.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)"))
- (property (name "edg_value") (value "COM-15111"))
- (sheetpath (names "/usb/") (tstamps "/02aa014b/"))
- (tstamps "042701af"))
-(comp (ref "R1")
- (value "usb.cc_pull.cc1")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "cc_pull"))
- (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
- (property (name "edg_path") (value "usb.cc_pull.cc1"))
- (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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
- (tstamps "022300f8"))
-(comp (ref "R2")
- (value "usb.cc_pull.cc2")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "cc_pull"))
- (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
- (property (name "edg_path") (value "usb.cc_pull.cc2"))
- (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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
- (tstamps "022400f9"))
-(comp (ref "U1")
- (value "reg.ic")
- (footprint "Package_TO_SOT_SMD:SOT-23-6")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.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)"))
- (property (name "edg_value") (value "TPS561201"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "013700cd"))
-(comp (ref "R3")
- (value "reg.fb.top_res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "fb"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/"))
- (tstamps "0c0c02fd"))
-(comp (ref "R4")
- (value "reg.fb.bottom_res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "fb"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/"))
- (tstamps "175b043f"))
-(comp (ref "C1")
- (value "reg.hf_in_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "11ed0398"))
-(comp (ref "C2")
- (value "reg.vbst_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.Tps561201"))
- (property (name "edg_path") (value "reg.vbst_cap.cap"))
- (property (name "edg_short_path") (value "reg.vbst_cap"))
- (property (name "edg_refdes") (value "C2"))
- (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "0f330353"))
-(comp (ref "L1")
- (value "reg.power_path.inductor")
- (footprint "Inductor_SMD:L_0603_1608Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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 "MGFL1608F6R8MT-LF (microgate)"))
- (property (name "edg_value") (value "400mA 6.8uH ±20% 530mΩ 0603 Inductors (SMD) ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0f2b0369"))
-(comp (ref "C3")
- (value "reg.power_path.in_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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)"))
- (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0879026b"))
-(comp (ref "C4")
- (value "reg.power_path.out_cap")
- (footprint "Capacitor_SMD:C_0805_2012Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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)"))
- (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0be902ec"))
-(comp (ref "U2")
- (value "mcu.ic")
- (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)"))
- (property (name "edg_value") (value "STM32F103xxT6"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "013700cd"))
-(comp (ref "C5")
- (value "mcu.pwr_cap[0]")
- (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)"))
- (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168703d5"))
-(comp (ref "C6")
- (value "mcu.pwr_cap[1]")
- (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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168903d6"))
-(comp (ref "C7")
- (value "mcu.pwr_cap[2]")
- (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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168b03d7"))
-(comp (ref "C8")
- (value "mcu.pwr_cap[3]")
- (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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "168d03d8"))
-(comp (ref "C9")
- (value "mcu.vdda_cap_0")
- (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))"))
- (property (name "edg_value") (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "15dc03c2"))
-(comp (ref "C10")
- (value "mcu.vdda_cap_1")
- (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)"))
- (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "15dd03c3"))
-(comp (ref "J2")
- (value "mcu.swd")
- (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)"))
- (property (name "edg_value") (value "PinHeader1.27 Shrouded 2x5"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "02ae014f"))
-(comp (ref "SW1")
- (value "sw")
- (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"))
- (property (name "edg_value") (value "5.1mm switch"))
- (sheetpath (names "/") (tstamps "/"))
- (tstamps "015f00eb"))
-(comp (ref "D1")
- (value "led[0].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[0]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[0]/") (tstamps "/07e5021e/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R5")
- (value "led[0].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[0]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[0]/") (tstamps "/07e5021e/"))
- (tstamps "0296014b"))
-(comp (ref "D2")
- (value "led[1].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[1]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[1]/") (tstamps "/07e7021f/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R6")
- (value "led[1].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[1]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[1]/") (tstamps "/07e7021f/"))
- (tstamps "0296014b"))
-(comp (ref "D3")
- (value "led[2].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[2]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[2]/") (tstamps "/07e90220/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R7")
- (value "led[2].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[2]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[2]/") (tstamps "/07e90220/"))
- (tstamps "0296014b"))
-(comp (ref "D4")
- (value "led[3].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[3]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[3]/") (tstamps "/07eb0221/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R8")
- (value "led[3].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[3]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[3]/") (tstamps "/07eb0221/"))
- (tstamps "0296014b")))
-(nets
-(net (code 1) (name "usb.pwr")
- (node (ref J1) (pin A4))
- (node (ref J1) (pin A9))
- (node (ref J1) (pin B4))
- (node (ref J1) (pin B9))
- (node (ref U1) (pin 3))
- (node (ref U1) (pin 5))
- (node (ref C1) (pin 1))
- (node (ref C3) (pin 1)))
-(net (code 2) (name "usb.gnd")
- (node (ref J1) (pin A1))
- (node (ref J1) (pin A12))
- (node (ref J1) (pin B1))
- (node (ref J1) (pin B12))
- (node (ref J1) (pin S1))
- (node (ref R1) (pin 1))
- (node (ref R2) (pin 1))
- (node (ref U1) (pin 1))
- (node (ref R4) (pin 2))
- (node (ref C1) (pin 2))
- (node (ref C3) (pin 2))
- (node (ref C4) (pin 2))
- (node (ref U2) (pin 23))
- (node (ref U2) (pin 35))
- (node (ref U2) (pin 44))
- (node (ref U2) (pin 47))
- (node (ref U2) (pin 8))
- (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 J2) (pin 3))
- (node (ref J2) (pin 5))
- (node (ref J2) (pin 9))
- (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)))
-(net (code 3) (name "usb.usb.dp")
- (node (ref J1) (pin A6))
- (node (ref J1) (pin B6)))
-(net (code 4) (name "usb.usb.dm")
- (node (ref J1) (pin A7))
- (node (ref J1) (pin B7)))
-(net (code 5) (name "usb.conn.cc.cc1")
- (node (ref J1) (pin A5))
- (node (ref R1) (pin 2)))
-(net (code 6) (name "usb.conn.cc.cc2")
- (node (ref J1) (pin B5))
- (node (ref R2) (pin 2)))
-(net (code 7) (name "reg.pwr_out")
- (node (ref R3) (pin 1))
- (node (ref L1) (pin 2))
- (node (ref C4) (pin 1))
- (node (ref U2) (pin 1))
- (node (ref U2) (pin 24))
- (node (ref U2) (pin 36))
- (node (ref U2) (pin 48))
- (node (ref U2) (pin 9))
- (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 J2) (pin 1)))
-(net (code 8) (name "reg.ic.sw")
- (node (ref U1) (pin 2))
- (node (ref C2) (pin 2))
- (node (ref L1) (pin 1)))
-(net (code 9) (name "reg.ic.fb")
- (node (ref U1) (pin 4))
- (node (ref R3) (pin 2))
- (node (ref R4) (pin 1)))
-(net (code 10) (name "reg.ic.vbst")
- (node (ref U1) (pin 6))
- (node (ref C2) (pin 1)))
-(net (code 11) (name "mcu.swd_node.swdio")
- (node (ref U2) (pin 34))
- (node (ref J2) (pin 2)))
-(net (code 12) (name "mcu.swd_node.swclk")
- (node (ref U2) (pin 37))
- (node (ref J2) (pin 4)))
-(net (code 13) (name "mcu.reset_node")
- (node (ref U2) (pin 7))
- (node (ref J2) (pin 10)))
-(net (code 14) (name "mcu.ic.osc.xtal_in")
- (node (ref U2) (pin 5)))
-(net (code 15) (name "mcu.ic.osc.xtal_out")
- (node (ref U2) (pin 6)))
-(net (code 16) (name "mcu.swd.tdi")
- (node (ref J2) (pin 8)))
-(net (code 17) (name "mcu.swd.swo")
- (node (ref J2) (pin 6)))
-(net (code 18) (name "sw.out")
- (node (ref U2) (pin 10))
- (node (ref SW1) (pin 1)))
-(net (code 19) (name "led[0].signal")
- (node (ref U2) (pin 11))
- (node (ref D1) (pin 2)))
-(net (code 20) (name "led[0].package.k")
- (node (ref D1) (pin 1))
- (node (ref R5) (pin 1)))
-(net (code 21) (name "led[1].signal")
- (node (ref U2) (pin 12))
- (node (ref D2) (pin 2)))
-(net (code 22) (name "led[1].package.k")
- (node (ref D2) (pin 1))
- (node (ref R6) (pin 1)))
-(net (code 23) (name "led[2].signal")
- (node (ref U2) (pin 13))
- (node (ref D3) (pin 2)))
-(net (code 24) (name "led[2].package.k")
- (node (ref D3) (pin 1))
- (node (ref R7) (pin 1)))
-(net (code 25) (name "led[3].signal")
- (node (ref U2) (pin 14))
- (node (ref D4) (pin 2)))
-(net (code 26) (name "led[3].package.k")
- (node (ref D4) (pin 1))
- (node (ref R8) (pin 1))))
-)
\ No newline at end of file
diff --git a/examples/TestBlinkyExpanded/TestBlinkyExpanded.svgpcb.js b/examples/TestBlinkyExpanded/TestBlinkyExpanded.svgpcb.js
deleted file mode 100644
index 0131c90ca..000000000
--- a/examples/TestBlinkyExpanded/TestBlinkyExpanded.svgpcb.js
+++ /dev/null
@@ -1,211 +0,0 @@
-const board = new PCB();
-
-// usb.conn
-const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, {
- translate: pt(1.111, 0.165), rotate: 0,
- id: 'J1'
-})
-// usb.cc_pull.cc1
-const R1 = board.add(R_0603_1608Metric, {
- translate: pt(0.960, 0.420), rotate: 0,
- id: 'R1'
-})
-// usb.cc_pull.cc2
-const R2 = board.add(R_0603_1608Metric, {
- translate: pt(1.116, 0.420), rotate: 0,
- id: 'R2'
-})
-// reg.ic
-const U1 = board.add(SOT_23_6, {
- translate: pt(0.081, 0.804), rotate: 0,
- id: 'U1'
-})
-// reg.fb.div.top_res
-const R3 = board.add(R_0603_1608Metric, {
- translate: pt(0.058, 0.939), rotate: 0,
- id: 'R3'
-})
-// reg.fb.div.bottom_res
-const R4 = board.add(R_0603_1608Metric, {
- translate: pt(0.214, 0.939), rotate: 0,
- id: 'R4'
-})
-// reg.hf_in_cap.cap
-const C1 = board.add(C_0603_1608Metric, {
- translate: pt(0.370, 0.939), rotate: 0,
- id: 'C1'
-})
-// reg.vbst_cap.cap
-const C2 = board.add(C_0603_1608Metric, {
- translate: pt(0.058, 1.036), rotate: 0,
- id: 'C2'
-})
-// reg.power_path.inductor
-const L1 = board.add(L_0603_1608Metric, {
- translate: pt(0.214, 1.036), rotate: 0,
- id: 'L1'
-})
-// reg.power_path.in_cap.cap
-const C3 = board.add(C_0603_1608Metric, {
- translate: pt(0.370, 1.036), rotate: 0,
- id: 'C3'
-})
-// reg.power_path.out_cap.cap
-const C4 = board.add(C_0805_2012Metric, {
- translate: pt(0.268, 0.776), rotate: 0,
- id: 'C4'
-})
-// mcu.ic
-const U2 = board.add(LQFP_48_7x7mm_P0_5mm, {
- translate: pt(0.203, 0.203), rotate: 0,
- id: 'U2'
-})
-// mcu.pwr_cap[0].cap
-const C5 = board.add(C_0805_2012Metric, {
- translate: pt(0.067, 0.483), rotate: 0,
- id: 'C5'
-})
-// mcu.pwr_cap[1].cap
-const C6 = board.add(C_0603_1608Metric, {
- translate: pt(0.231, 0.474), rotate: 0,
- id: 'C6'
-})
-// mcu.pwr_cap[2].cap
-const C7 = board.add(C_0603_1608Metric, {
- translate: pt(0.387, 0.474), rotate: 0,
- id: 'C7'
-})
-// mcu.pwr_cap[3].cap
-const C8 = board.add(C_0603_1608Metric, {
- translate: pt(0.543, 0.474), rotate: 0,
- id: 'C8'
-})
-// mcu.vdda_cap_0.cap
-const C9 = board.add(C_0603_1608Metric, {
- translate: pt(0.699, 0.474), rotate: 0,
- id: 'C9'
-})
-// mcu.vdda_cap_1.cap
-const C10 = board.add(C_0603_1608Metric, {
- translate: pt(0.058, 0.590), rotate: 0,
- id: 'C10'
-})
-// mcu.swd.conn
-const J2 = board.add(PinHeader_2x05_P1_27mm_Vertical_SMD, {
- translate: pt(0.614, 0.146), rotate: 0,
- id: 'J2'
-})
-// sw.package
-const SW1 = board.add(SW_SPST_SKQG_WithoutStem, {
- translate: pt(0.714, 0.849), rotate: 0,
- id: 'SW1'
-})
-// led[0].package
-const D1 = board.add(LED_0603_1608Metric, {
- translate: pt(1.058, 0.766), rotate: 0,
- id: 'D1'
-})
-// led[0].res
-const R5 = board.add(R_0603_1608Metric, {
- translate: pt(1.057, 0.863), rotate: 0,
- id: 'R5'
-})
-// led[1].package
-const D2 = board.add(LED_0603_1608Metric, {
- translate: pt(1.293, 0.766), rotate: 0,
- id: 'D2'
-})
-// led[1].res
-const R6 = board.add(R_0603_1608Metric, {
- translate: pt(1.292, 0.863), rotate: 0,
- id: 'R6'
-})
-// led[2].package
-const D3 = board.add(LED_0603_1608Metric, {
- translate: pt(0.058, 1.212), rotate: 0,
- id: 'D3'
-})
-// led[2].res
-const R7 = board.add(R_0603_1608Metric, {
- translate: pt(0.058, 1.309), rotate: 0,
- id: 'R7'
-})
-// led[3].package
-const D4 = board.add(LED_0603_1608Metric, {
- translate: pt(0.293, 1.212), rotate: 0,
- id: 'D4'
-})
-// led[3].res
-const R8 = board.add(R_0603_1608Metric, {
- translate: pt(0.293, 1.309), rotate: 0,
- id: 'R8'
-})
-
-board.setNetlist([
- {name: "usb.pwr", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["U1", "3"], ["U1", "5"], ["C1", "1"], ["C3", "1"]]},
- {name: "usb.gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["U1", "1"], ["R4", "2"], ["C1", "2"], ["C3", "2"], ["C4", "2"], ["U2", "23"], ["U2", "35"], ["U2", "44"], ["U2", "47"], ["U2", "8"], ["C5", "2"], ["C6", "2"], ["C7", "2"], ["C8", "2"], ["C9", "2"], ["C10", "2"], ["J2", "3"], ["J2", "5"], ["J2", "9"], ["SW1", "2"], ["R5", "2"], ["R6", "2"], ["R7", "2"], ["R8", "2"]]},
- {name: "usb.usb.dp", pads: [["J1", "A6"], ["J1", "B6"]]},
- {name: "usb.usb.dm", pads: [["J1", "A7"], ["J1", "B7"]]},
- {name: "usb.conn.cc.cc1", pads: [["J1", "A5"], ["R1", "2"]]},
- {name: "usb.conn.cc.cc2", pads: [["J1", "B5"], ["R2", "2"]]},
- {name: "reg.pwr_out", pads: [["R3", "1"], ["L1", "2"], ["C4", "1"], ["U2", "1"], ["U2", "24"], ["U2", "36"], ["U2", "48"], ["U2", "9"], ["C5", "1"], ["C6", "1"], ["C7", "1"], ["C8", "1"], ["C9", "1"], ["C10", "1"], ["J2", "1"]]},
- {name: "reg.ic.sw", pads: [["U1", "2"], ["C2", "2"], ["L1", "1"]]},
- {name: "reg.ic.fb", pads: [["U1", "4"], ["R3", "2"], ["R4", "1"]]},
- {name: "reg.ic.vbst", pads: [["U1", "6"], ["C2", "1"]]},
- {name: "mcu.swd_node.swdio", pads: [["U2", "34"], ["J2", "2"]]},
- {name: "mcu.swd_node.swclk", pads: [["U2", "37"], ["J2", "4"]]},
- {name: "mcu.reset_node", pads: [["U2", "7"], ["J2", "10"]]},
- {name: "mcu.ic.osc.xtal_in", pads: [["U2", "5"]]},
- {name: "mcu.ic.osc.xtal_out", pads: [["U2", "6"]]},
- {name: "mcu.swd.tdi", pads: [["J2", "8"]]},
- {name: "mcu.swd.swo", pads: [["J2", "6"]]},
- {name: "sw.out", pads: [["U2", "10"], ["SW1", "1"]]},
- {name: "led[0].signal", pads: [["U2", "11"], ["D1", "2"]]},
- {name: "led[0].package.k", pads: [["D1", "1"], ["R5", "1"]]},
- {name: "led[1].signal", pads: [["U2", "12"], ["D2", "2"]]},
- {name: "led[1].package.k", pads: [["D2", "1"], ["R6", "1"]]},
- {name: "led[2].signal", pads: [["U2", "13"], ["D3", "2"]]},
- {name: "led[2].package.k", pads: [["D3", "1"], ["R7", "1"]]},
- {name: "led[3].signal", pads: [["U2", "14"], ["D4", "2"]]},
- {name: "led[3].package.k", pads: [["D4", "1"], ["R8", "1"]]}
-])
-
-const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
-const limit1 = pt(1.4688976377952758, 1.455511811023622);
-const xMin = Math.min(limit0[0], limit1[0]);
-const xMax = Math.max(limit0[0], limit1[0]);
-const yMin = Math.min(limit0[1], limit1[1]);
-const yMax = Math.max(limit0[1], limit1[1]);
-
-const filletRadius = 0.1;
-const outline = path(
- [(xMin+xMax/2), yMax],
- ["fillet", filletRadius, [xMax, yMax]],
- ["fillet", filletRadius, [xMax, yMin]],
- ["fillet", filletRadius, [xMin, yMin]],
- ["fillet", filletRadius, [xMin, yMax]],
- [(xMin+xMax/2), yMax],
-);
-board.addShape("outline", outline);
-
-renderPCB({
- pcb: board,
- layerColors: {
- "F.Paste": "#000000ff",
- "F.Mask": "#000000ff",
- "B.Mask": "#000000ff",
- "componentLabels": "#00e5e5e5",
- "outline": "#002d00ff",
- "padLabels": "#ffff99e5",
- "B.Cu": "#ef4e4eff",
- "F.Cu": "#ff8c00cc",
- },
- limits: {
- x: [xMin, xMax],
- y: [yMin, yMax]
- },
- background: "#00000000",
- mmPerUnit: 25.4
-})
-
-
diff --git a/examples/TestBlinkyImplicit/TestBlinkyImplicit.net.ref b/examples/TestBlinkyImplicit/TestBlinkyImplicit.net.ref
index 21abf4314..5627e034e 100644
--- a/examples/TestBlinkyImplicit/TestBlinkyImplicit.net.ref
+++ b/examples/TestBlinkyImplicit/TestBlinkyImplicit.net.ref
@@ -38,105 +38,45 @@
(tstamps "022400f9"))
(comp (ref "U1")
(value "reg.ic")
- (footprint "Package_TO_SOT_SMD:SOT-23-6")
+ (footprint "Package_TO_SOT_SMD:SOT-223-3_TabPin2")
(property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.Tps561201"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
(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)"))
- (property (name "edg_value") (value "TPS561201"))
+ (property (name "edg_part") (value "AMS1117-3.3 (Advanced Monolithic Systems)"))
+ (property (name "edg_value") (value "AMS1117-3.3"))
(sheetpath (names "/reg/") (tstamps "/028a013f/"))
(tstamps "013700cd"))
-(comp (ref "R3")
- (value "reg.fb.top_res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "fb"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/"))
- (tstamps "0c0c02fd"))
-(comp (ref "R4")
- (value "reg.fb.bottom_res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "fb"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/"))
- (tstamps "175b043f"))
(comp (ref "C1")
- (value "reg.hf_in_cap")
+ (value "reg.in_cap")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.Tps561201"))
- (property (name "edg_path") (value "reg.hf_in_cap.cap"))
- (property (name "edg_short_path") (value "reg.hf_in_cap"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (property (name "edg_path") (value "reg.in_cap.cap"))
+ (property (name "edg_short_path") (value "reg.in_cap"))
(property (name "edg_refdes") (value "C1"))
(property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
(property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
(sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "11ed0398"))
+ (tstamps "0879026b"))
(comp (ref "C2")
- (value "reg.vbst_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (value "reg.out_cap")
+ (footprint "Capacitor_SMD:C_1206_3216Metric")
(property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.Tps561201"))
- (property (name "edg_path") (value "reg.vbst_cap.cap"))
- (property (name "edg_short_path") (value "reg.vbst_cap"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (property (name "edg_path") (value "reg.out_cap.cap"))
+ (property (name "edg_short_path") (value "reg.out_cap"))
(property (name "edg_refdes") (value "C2"))
- (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
(sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "0f330353"))
-(comp (ref "L1")
- (value "reg.power_path.inductor")
- (footprint "Inductor_SMD:L_0603_1608Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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 "MGFL1608F6R8MT-LF (microgate)"))
- (property (name "edg_value") (value "400mA 6.8uH ±20% 530mΩ 0603 Inductors (SMD) ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0f2b0369"))
-(comp (ref "C3")
- (value "reg.power_path.in_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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)"))
- (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0879026b"))
-(comp (ref "C4")
- (value "reg.power_path.out_cap")
- (footprint "Capacitor_SMD:C_0805_2012Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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)"))
- (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
(tstamps "0be902ec"))
(comp (ref "U2")
(value "mcu.ic")
(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 "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu.ic"))
(property (name "edg_short_path") (value "mcu.ic"))
(property (name "edg_refdes") (value "U2"))
@@ -144,83 +84,119 @@
(property (name "edg_value") (value "STM32F103xxT6"))
(sheetpath (names "/mcu/") (tstamps "/02850146/"))
(tstamps "013700cd"))
-(comp (ref "C5")
+(comp (ref "C3")
(value "mcu.pwr_cap[0]")
(footprint "Capacitor_SMD:C_0805_2012Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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_refdes") (value "C3"))
(property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)"))
(property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
(sheetpath (names "/mcu/") (tstamps "/02850146/"))
(tstamps "168703d5"))
-(comp (ref "C6")
+(comp (ref "C4")
(value "mcu.pwr_cap[1]")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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_refdes") (value "C4"))
(property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
(property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
(sheetpath (names "/mcu/") (tstamps "/02850146/"))
(tstamps "168903d6"))
-(comp (ref "C7")
+(comp (ref "C5")
(value "mcu.pwr_cap[2]")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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_refdes") (value "C5"))
(property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
(property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
(sheetpath (names "/mcu/") (tstamps "/02850146/"))
(tstamps "168b03d7"))
-(comp (ref "C8")
+(comp (ref "C6")
(value "mcu.pwr_cap[3]")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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_refdes") (value "C6"))
(property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
(property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
(sheetpath (names "/mcu/") (tstamps "/02850146/"))
(tstamps "168d03d8"))
-(comp (ref "C9")
+(comp (ref "C7")
(value "mcu.vdda_cap_0")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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_refdes") (value "C7"))
(property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))"))
(property (name "edg_value") (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
(sheetpath (names "/mcu/") (tstamps "/02850146/"))
(tstamps "15dc03c2"))
-(comp (ref "C10")
+(comp (ref "C8")
(value "mcu.vdda_cap_1")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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_refdes") (value "C8"))
(property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)"))
(property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
(sheetpath (names "/mcu/") (tstamps "/02850146/"))
(tstamps "15dd03c3"))
+(comp (ref "X1")
+ (value "mcu.crystal.package")
+ (footprint "Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.package"))
+ (property (name "edg_short_path") (value "mcu.crystal.package"))
+ (property (name "edg_refdes") (value "X1"))
+ (property (name "edg_part") (value "X32258MOB4SI (Yangxing Tech)"))
+ (property (name "edg_value") (value "8MHz SMD Crystal Resonator 12pF ±10ppm ±30ppm -40℃~+85℃ SMD3225-4P Crystals ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "0b4e02cd"))
+(comp (ref "C9")
+ (value "mcu.crystal.cap_a")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.cap_a"))
+ (property (name "edg_short_path") (value "mcu.crystal.cap_a"))
+ (property (name "edg_refdes") (value "C9"))
+ (property (name "edg_part") (value "CL10C100JB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 10pF C0G ±5% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "05e701f5"))
+(comp (ref "C10")
+ (value "mcu.crystal.cap_b")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.cap_b"))
+ (property (name "edg_short_path") (value "mcu.crystal.cap_b"))
+ (property (name "edg_refdes") (value "C10"))
+ (property (name "edg_part") (value "CL10C100JB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 10pF C0G ±5% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "05e801f6"))
(comp (ref "J2")
(value "mcu.swd")
(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 "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu.swd.conn"))
(property (name "edg_short_path") (value "mcu.swd"))
(property (name "edg_refdes") (value "J2"))
@@ -228,114 +204,354 @@
(property (name "edg_value") (value "PinHeader1.27 Shrouded 2x5"))
(sheetpath (names "/mcu/") (tstamps "/02850146/"))
(tstamps "02ae014f"))
-(comp (ref "SW1")
- (value "sw")
- (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"))
- (property (name "edg_value") (value "5.1mm switch"))
- (sheetpath (names "/") (tstamps "/"))
- (tstamps "015f00eb"))
+(comp (ref "R3")
+ (value "mcu.usb_pull")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (property (name "edg_path") (value "mcu.usb_pull.dp"))
+ (property (name "edg_short_path") (value "mcu.usb_pull"))
+ (property (name "edg_refdes") (value "R3"))
+ (property (name "edg_part") (value "0603WAF1501T5E (UNI-ROYAL(Uniroyal Elec))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1.5kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "0f5f0367"))
(comp (ref "D1")
- (value "led[0].package")
+ (value "led.package")
(footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[0]"))
+ (property (name "Sheetname") (value "led"))
(property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorLed"))
- (property (name "edg_path") (value "led[0].package"))
- (property (name "edg_short_path") (value "led[0].package"))
+ (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)"))
(property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[0]/") (tstamps "/07e5021e/"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
(tstamps "0b4e02cd"))
-(comp (ref "R5")
- (value "led[0].res")
+(comp (ref "R4")
+ (value "led.res")
(footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[0]"))
+ (property (name "Sheetname") (value "led"))
(property (name "Sheetfile") (value "edg.abstract_parts.Led.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_path") (value "led.res"))
+ (property (name "edg_short_path") (value "led.res"))
+ (property (name "edg_refdes") (value "R4"))
(property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))"))
(property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[0]/") (tstamps "/07e5021e/"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
(tstamps "0296014b"))
+(comp (ref "SW1")
+ (value "sw.sw[0,0].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,0].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].sw"))
+ (property (name "edg_refdes") (value "SW1"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
+ (tstamps "015f00eb"))
(comp (ref "D2")
- (value "led[1].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[1]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorLed"))
- (property (name "edg_path") (value "led[1].package"))
- (property (name "edg_short_path") (value "led[1].package"))
+ (value "sw.sw[0,0].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,0].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].d"))
(property (name "edg_refdes") (value "D2"))
- (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[1]/") (tstamps "/07e7021f/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R6")
- (value "led[1].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[1]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[1]/") (tstamps "/07e7021f/"))
- (tstamps "0296014b"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
+ (tstamps "00650065"))
(comp (ref "D3")
- (value "led[2].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[2]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorLed"))
- (property (name "edg_path") (value "led[2].package"))
- (property (name "edg_short_path") (value "led[2].package"))
+ (value "sw.sw[0,0].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,0].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].npx.device"))
(property (name "edg_refdes") (value "D3"))
- (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[2]/") (tstamps "/07e90220/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R7")
- (value "led[2].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[2]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[2]/") (tstamps "/07e90220/"))
- (tstamps "0296014b"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[0,0]/npx/") (tstamps "/015f00eb/09be022f/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C11")
+ (value "sw.sw[0,0].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,0].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].npx.cap"))
+ (property (name "edg_refdes") (value "C11"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[0,0]/npx/") (tstamps "/015f00eb/09be022f/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW2")
+ (value "sw.sw[1,0].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,0].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].sw"))
+ (property (name "edg_refdes") (value "SW2"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
+ (tstamps "015f00eb"))
(comp (ref "D4")
- (value "led[3].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[3]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorLed"))
- (property (name "edg_path") (value "led[3].package"))
- (property (name "edg_short_path") (value "led[3].package"))
+ (value "sw.sw[1,0].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,0].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].d"))
(property (name "edg_refdes") (value "D4"))
- (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[3]/") (tstamps "/07eb0221/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R8")
- (value "led[3].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[3]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[3]/") (tstamps "/07eb0221/"))
- (tstamps "0296014b")))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
+ (tstamps "00650065"))
+(comp (ref "D5")
+ (value "sw.sw[1,0].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,0].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].npx.device"))
+ (property (name "edg_refdes") (value "D5"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[1,0]/npx/") (tstamps "/015f00eb/09c20230/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C12")
+ (value "sw.sw[1,0].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,0].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].npx.cap"))
+ (property (name "edg_refdes") (value "C12"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[1,0]/npx/") (tstamps "/015f00eb/09c20230/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW3")
+ (value "sw.sw[0,1].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,1].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].sw"))
+ (property (name "edg_refdes") (value "SW3"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
+ (tstamps "015f00eb"))
+(comp (ref "D6")
+ (value "sw.sw[0,1].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,1].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].d"))
+ (property (name "edg_refdes") (value "D6"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
+ (tstamps "00650065"))
+(comp (ref "D7")
+ (value "sw.sw[0,1].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,1].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].npx.device"))
+ (property (name "edg_refdes") (value "D7"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[0,1]/npx/") (tstamps "/015f00eb/09c00230/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C13")
+ (value "sw.sw[0,1].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,1].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].npx.cap"))
+ (property (name "edg_refdes") (value "C13"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[0,1]/npx/") (tstamps "/015f00eb/09c00230/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW4")
+ (value "sw.sw[1,1].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,1].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].sw"))
+ (property (name "edg_refdes") (value "SW4"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
+ (tstamps "015f00eb"))
+(comp (ref "D8")
+ (value "sw.sw[1,1].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,1].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].d"))
+ (property (name "edg_refdes") (value "D8"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
+ (tstamps "00650065"))
+(comp (ref "D9")
+ (value "sw.sw[1,1].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,1].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].npx.device"))
+ (property (name "edg_refdes") (value "D9"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[1,1]/npx/") (tstamps "/015f00eb/09c40231/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C14")
+ (value "sw.sw[1,1].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,1].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].npx.cap"))
+ (property (name "edg_refdes") (value "C14"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[1,1]/npx/") (tstamps "/015f00eb/09c40231/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW5")
+ (value "sw.sw[0,2].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,2].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].sw"))
+ (property (name "edg_refdes") (value "SW5"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
+ (tstamps "015f00eb"))
+(comp (ref "D10")
+ (value "sw.sw[0,2].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,2].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].d"))
+ (property (name "edg_refdes") (value "D10"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
+ (tstamps "00650065"))
+(comp (ref "D11")
+ (value "sw.sw[0,2].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,2].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].npx.device"))
+ (property (name "edg_refdes") (value "D11"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[0,2]/npx/") (tstamps "/015f00eb/09c20231/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C15")
+ (value "sw.sw[0,2].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,2].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].npx.cap"))
+ (property (name "edg_refdes") (value "C15"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[0,2]/npx/") (tstamps "/015f00eb/09c20231/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW6")
+ (value "sw.sw[1,2].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,2].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].sw"))
+ (property (name "edg_refdes") (value "SW6"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
+ (tstamps "015f00eb"))
+(comp (ref "D12")
+ (value "sw.sw[1,2].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,2].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].d"))
+ (property (name "edg_refdes") (value "D12"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
+ (tstamps "00650065"))
+(comp (ref "D13")
+ (value "sw.sw[1,2].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,2].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].npx.device"))
+ (property (name "edg_refdes") (value "D13"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[1,2]/npx/") (tstamps "/015f00eb/09c60232/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C16")
+ (value "sw.sw[1,2].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,2].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].npx.cap"))
+ (property (name "edg_refdes") (value "C16"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[1,2]/npx/") (tstamps "/015f00eb/09c60232/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "U3")
+ (value "npx_shift.ic")
+ (footprint "Package_TO_SOT_SMD:SOT-23-5")
+ (property (name "Sheetname") (value "npx_shift"))
+ (property (name "Sheetfile") (value "edg.parts.logic.Logic_74Ahct.L74Ahct1g125"))
+ (property (name "edg_path") (value "npx_shift.ic"))
+ (property (name "edg_short_path") (value "npx_shift.ic"))
+ (property (name "edg_refdes") (value "U3"))
+ (property (name "edg_part") (value "74AHCT1G125W5-7 (Diodes Incorporated)"))
+ (property (name "edg_value") (value "74AHCT1G125W5-7"))
+ (sheetpath (names "/npx_shift/") (tstamps "/134303d4/"))
+ (tstamps "013700cd"))
+(comp (ref "C17")
+ (value "npx_shift.vdd_cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx_shift"))
+ (property (name "Sheetfile") (value "edg.parts.logic.Logic_74Ahct.L74Ahct1g125"))
+ (property (name "edg_path") (value "npx_shift.vdd_cap.cap"))
+ (property (name "edg_short_path") (value "npx_shift.vdd_cap"))
+ (property (name "edg_refdes") (value "C17"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/npx_shift/") (tstamps "/134303d4/"))
+ (tstamps "0b6402d2")))
(nets
(net (code 1) (name "usb.pwr")
(node (ref J1) (pin A4))
@@ -343,9 +559,21 @@
(node (ref J1) (pin B4))
(node (ref J1) (pin B9))
(node (ref U1) (pin 3))
- (node (ref U1) (pin 5))
(node (ref C1) (pin 1))
- (node (ref C3) (pin 1)))
+ (node (ref D3) (pin 4))
+ (node (ref C11) (pin 1))
+ (node (ref D5) (pin 4))
+ (node (ref C12) (pin 1))
+ (node (ref D7) (pin 4))
+ (node (ref C13) (pin 1))
+ (node (ref D9) (pin 4))
+ (node (ref C14) (pin 1))
+ (node (ref D11) (pin 4))
+ (node (ref C15) (pin 1))
+ (node (ref D13) (pin 4))
+ (node (ref C16) (pin 1))
+ (node (ref U3) (pin 5))
+ (node (ref C17) (pin 1)))
(net (code 2) (name "usb.gnd")
(node (ref J1) (pin A1))
(node (ref J1) (pin A12))
@@ -355,35 +583,51 @@
(node (ref R1) (pin 1))
(node (ref R2) (pin 1))
(node (ref U1) (pin 1))
- (node (ref R4) (pin 2))
(node (ref C1) (pin 2))
- (node (ref C3) (pin 2))
- (node (ref C4) (pin 2))
+ (node (ref C2) (pin 2))
(node (ref U2) (pin 23))
(node (ref U2) (pin 35))
(node (ref U2) (pin 44))
(node (ref U2) (pin 47))
(node (ref U2) (pin 8))
+ (node (ref C3) (pin 2))
+ (node (ref C4) (pin 2))
(node (ref C5) (pin 2))
(node (ref C6) (pin 2))
(node (ref C7) (pin 2))
(node (ref C8) (pin 2))
+ (node (ref X1) (pin 2))
+ (node (ref X1) (pin 4))
(node (ref C9) (pin 2))
(node (ref C10) (pin 2))
(node (ref J2) (pin 3))
(node (ref J2) (pin 5))
(node (ref J2) (pin 9))
- (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 R4) (pin 2))
+ (node (ref D3) (pin 2))
+ (node (ref C11) (pin 2))
+ (node (ref D5) (pin 2))
+ (node (ref C12) (pin 2))
+ (node (ref D7) (pin 2))
+ (node (ref C13) (pin 2))
+ (node (ref D9) (pin 2))
+ (node (ref C14) (pin 2))
+ (node (ref D11) (pin 2))
+ (node (ref C15) (pin 2))
+ (node (ref D13) (pin 2))
+ (node (ref C16) (pin 2))
+ (node (ref U3) (pin 1))
+ (node (ref U3) (pin 3))
+ (node (ref C17) (pin 2)))
(net (code 3) (name "usb.usb.dp")
(node (ref J1) (pin A6))
- (node (ref J1) (pin B6)))
+ (node (ref J1) (pin B6))
+ (node (ref U2) (pin 33))
+ (node (ref R3) (pin 2)))
(net (code 4) (name "usb.usb.dm")
(node (ref J1) (pin A7))
- (node (ref J1) (pin B7)))
+ (node (ref J1) (pin B7))
+ (node (ref U2) (pin 32)))
(net (code 5) (name "usb.conn.cc.cc1")
(node (ref J1) (pin A5))
(node (ref R1) (pin 2)))
@@ -391,74 +635,109 @@
(node (ref J1) (pin B5))
(node (ref R2) (pin 2)))
(net (code 7) (name "reg.pwr_out")
- (node (ref R3) (pin 1))
- (node (ref L1) (pin 2))
- (node (ref C4) (pin 1))
+ (node (ref U1) (pin 2))
+ (node (ref C2) (pin 1))
(node (ref U2) (pin 1))
(node (ref U2) (pin 24))
(node (ref U2) (pin 36))
(node (ref U2) (pin 48))
(node (ref U2) (pin 9))
+ (node (ref C3) (pin 1))
+ (node (ref C4) (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 J2) (pin 1)))
-(net (code 8) (name "reg.ic.sw")
- (node (ref U1) (pin 2))
- (node (ref C2) (pin 2))
- (node (ref L1) (pin 1)))
-(net (code 9) (name "reg.ic.fb")
- (node (ref U1) (pin 4))
- (node (ref R3) (pin 2))
- (node (ref R4) (pin 1)))
-(net (code 10) (name "reg.ic.vbst")
- (node (ref U1) (pin 6))
- (node (ref C2) (pin 1)))
-(net (code 11) (name "mcu.swd_node.swdio")
+ (node (ref J2) (pin 1))
+ (node (ref R3) (pin 1)))
+(net (code 8) (name "mcu.gpio.cols_0")
+ (node (ref U2) (pin 12))
+ (node (ref SW1) (pin 1))
+ (node (ref SW3) (pin 1))
+ (node (ref SW5) (pin 1)))
+(net (code 9) (name "mcu.gpio.cols_1")
+ (node (ref U2) (pin 13))
+ (node (ref SW2) (pin 1))
+ (node (ref SW4) (pin 1))
+ (node (ref SW6) (pin 1)))
+(net (code 10) (name "mcu.gpio.rows_0")
+ (node (ref U2) (pin 14))
+ (node (ref D2) (pin 1))
+ (node (ref D4) (pin 1)))
+(net (code 11) (name "mcu.gpio.rows_1")
+ (node (ref U2) (pin 15))
+ (node (ref D6) (pin 1))
+ (node (ref D8) (pin 1)))
+(net (code 12) (name "mcu.gpio.rows_2")
+ (node (ref U2) (pin 16))
+ (node (ref D10) (pin 1))
+ (node (ref D12) (pin 1)))
+(net (code 13) (name "mcu.xtal_node.xi")
+ (node (ref U2) (pin 5))
+ (node (ref X1) (pin 1))
+ (node (ref C9) (pin 1)))
+(net (code 14) (name "mcu.xtal_node.xo")
+ (node (ref U2) (pin 6))
+ (node (ref X1) (pin 3))
+ (node (ref C10) (pin 1)))
+(net (code 15) (name "mcu.swd_node.swdio")
(node (ref U2) (pin 34))
(node (ref J2) (pin 2)))
-(net (code 12) (name "mcu.swd_node.swclk")
+(net (code 16) (name "mcu.swd_node.swclk")
(node (ref U2) (pin 37))
(node (ref J2) (pin 4)))
-(net (code 13) (name "mcu.reset_node")
+(net (code 17) (name "mcu.reset_node")
(node (ref U2) (pin 7))
(node (ref J2) (pin 10)))
-(net (code 14) (name "mcu.ic.osc.xtal_in")
- (node (ref U2) (pin 5)))
-(net (code 15) (name "mcu.ic.osc.xtal_out")
- (node (ref U2) (pin 6)))
-(net (code 16) (name "mcu.swd.tdi")
+(net (code 18) (name "mcu.swd.tdi")
(node (ref J2) (pin 8)))
-(net (code 17) (name "mcu.swd.swo")
+(net (code 19) (name "mcu.swd.swo")
(node (ref J2) (pin 6)))
-(net (code 18) (name "sw.out")
+(net (code 20) (name "led.signal")
(node (ref U2) (pin 10))
- (node (ref SW1) (pin 1)))
-(net (code 19) (name "led[0].signal")
- (node (ref U2) (pin 11))
(node (ref D1) (pin 2)))
-(net (code 20) (name "led[0].package.k")
+(net (code 21) (name "led.package.k")
(node (ref D1) (pin 1))
- (node (ref R5) (pin 1)))
-(net (code 21) (name "led[1].signal")
- (node (ref U2) (pin 12))
- (node (ref D2) (pin 2)))
-(net (code 22) (name "led[1].package.k")
- (node (ref D2) (pin 1))
- (node (ref R6) (pin 1)))
-(net (code 23) (name "led[2].signal")
- (node (ref U2) (pin 13))
- (node (ref D3) (pin 2)))
-(net (code 24) (name "led[2].package.k")
+ (node (ref R4) (pin 1)))
+(net (code 22) (name "sw.npx_din")
+ (node (ref D3) (pin 3))
+ (node (ref U3) (pin 4)))
+(net (code 23) (name "sw.npx_dout")
+ (node (ref D13) (pin 1)))
+(net (code 24) (name "sw.sw[0,0].npx_dout")
(node (ref D3) (pin 1))
- (node (ref R7) (pin 1)))
-(net (code 25) (name "led[3].signal")
- (node (ref U2) (pin 14))
+ (node (ref D5) (pin 3)))
+(net (code 25) (name "sw.sw[0,0].sw.com")
+ (node (ref SW1) (pin 2))
+ (node (ref D2) (pin 2)))
+(net (code 26) (name "sw.sw[1,0].npx_dout")
+ (node (ref D5) (pin 1))
+ (node (ref D9) (pin 3)))
+(net (code 27) (name "sw.sw[1,0].sw.com")
+ (node (ref SW2) (pin 2))
(node (ref D4) (pin 2)))
-(net (code 26) (name "led[3].package.k")
- (node (ref D4) (pin 1))
- (node (ref R8) (pin 1))))
+(net (code 28) (name "sw.sw[0,1].npx_din")
+ (node (ref D7) (pin 3))
+ (node (ref D9) (pin 1)))
+(net (code 29) (name "sw.sw[0,1].npx_dout")
+ (node (ref D7) (pin 1))
+ (node (ref D11) (pin 3)))
+(net (code 30) (name "sw.sw[0,1].sw.com")
+ (node (ref SW3) (pin 2))
+ (node (ref D6) (pin 2)))
+(net (code 31) (name "sw.sw[1,1].sw.com")
+ (node (ref SW4) (pin 2))
+ (node (ref D8) (pin 2)))
+(net (code 32) (name "sw.sw[0,2].npx_dout")
+ (node (ref D11) (pin 1))
+ (node (ref D13) (pin 3)))
+(net (code 33) (name "sw.sw[0,2].sw.com")
+ (node (ref SW5) (pin 2))
+ (node (ref D10) (pin 2)))
+(net (code 34) (name "sw.sw[1,2].sw.com")
+ (node (ref SW6) (pin 2))
+ (node (ref D12) (pin 2)))
+(net (code 35) (name "npx_shift.input")
+ (node (ref U2) (pin 11))
+ (node (ref U3) (pin 2))))
)
\ No newline at end of file
diff --git a/examples/TestBlinkyImplicit/TestBlinkyImplicit.svgpcb.js b/examples/TestBlinkyImplicit/TestBlinkyImplicit.svgpcb.js
index 0131c90ca..c39727ed8 100644
--- a/examples/TestBlinkyImplicit/TestBlinkyImplicit.svgpcb.js
+++ b/examples/TestBlinkyImplicit/TestBlinkyImplicit.svgpcb.js
@@ -1,177 +1,157 @@
const board = new PCB();
+const sw = SwitchDiodeMatrixNeopixels_2_3_sw(pt(0.039, 0.039))
// usb.conn
const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, {
- translate: pt(1.111, 0.165), rotate: 0,
+ translate: pt(2.252, 0.165), rotate: 0,
id: 'J1'
})
// usb.cc_pull.cc1
const R1 = board.add(R_0603_1608Metric, {
- translate: pt(0.960, 0.420), rotate: 0,
+ translate: pt(2.101, 0.420), rotate: 0,
id: 'R1'
})
// usb.cc_pull.cc2
const R2 = board.add(R_0603_1608Metric, {
- translate: pt(1.116, 0.420), rotate: 0,
+ translate: pt(2.257, 0.420), rotate: 0,
id: 'R2'
})
// reg.ic
-const U1 = board.add(SOT_23_6, {
- translate: pt(0.081, 0.804), rotate: 0,
+const U1 = board.add(SOT_223_3_TabPin2, {
+ translate: pt(1.291, 0.935), rotate: 0,
id: 'U1'
})
-// reg.fb.div.top_res
-const R3 = board.add(R_0603_1608Metric, {
- translate: pt(0.058, 0.939), rotate: 0,
- id: 'R3'
-})
-// reg.fb.div.bottom_res
-const R4 = board.add(R_0603_1608Metric, {
- translate: pt(0.214, 0.939), rotate: 0,
- id: 'R4'
-})
-// reg.hf_in_cap.cap
+// reg.in_cap.cap
const C1 = board.add(C_0603_1608Metric, {
- translate: pt(0.370, 0.939), rotate: 0,
+ translate: pt(1.397, 1.145), rotate: 0,
id: 'C1'
})
-// reg.vbst_cap.cap
-const C2 = board.add(C_0603_1608Metric, {
- translate: pt(0.058, 1.036), rotate: 0,
+// reg.out_cap.cap
+const C2 = board.add(C_1206_3216Metric, {
+ translate: pt(1.209, 1.162), rotate: 0,
id: 'C2'
})
-// reg.power_path.inductor
-const L1 = board.add(L_0603_1608Metric, {
- translate: pt(0.214, 1.036), rotate: 0,
- id: 'L1'
-})
-// reg.power_path.in_cap.cap
-const C3 = board.add(C_0603_1608Metric, {
- translate: pt(0.370, 1.036), rotate: 0,
- id: 'C3'
-})
-// reg.power_path.out_cap.cap
-const C4 = board.add(C_0805_2012Metric, {
- translate: pt(0.268, 0.776), rotate: 0,
- id: 'C4'
-})
// mcu.ic
const U2 = board.add(LQFP_48_7x7mm_P0_5mm, {
- translate: pt(0.203, 0.203), rotate: 0,
+ translate: pt(1.321, 0.203), rotate: 0,
id: 'U2'
})
// mcu.pwr_cap[0].cap
-const C5 = board.add(C_0805_2012Metric, {
- translate: pt(0.067, 0.483), rotate: 0,
- id: 'C5'
+const C3 = board.add(C_0805_2012Metric, {
+ translate: pt(1.390, 0.483), rotate: 0,
+ id: 'C3'
})
// mcu.pwr_cap[1].cap
+const C4 = board.add(C_0603_1608Metric, {
+ translate: pt(1.554, 0.474), rotate: 0,
+ id: 'C4'
+})
+// mcu.pwr_cap[2].cap
+const C5 = board.add(C_0603_1608Metric, {
+ translate: pt(1.710, 0.474), rotate: 0,
+ id: 'C5'
+})
+// mcu.pwr_cap[3].cap
const C6 = board.add(C_0603_1608Metric, {
- translate: pt(0.231, 0.474), rotate: 0,
+ translate: pt(1.866, 0.474), rotate: 0,
id: 'C6'
})
-// mcu.pwr_cap[2].cap
+// mcu.vdda_cap_0.cap
const C7 = board.add(C_0603_1608Metric, {
- translate: pt(0.387, 0.474), rotate: 0,
+ translate: pt(1.176, 0.647), rotate: 0,
id: 'C7'
})
-// mcu.pwr_cap[3].cap
+// mcu.vdda_cap_1.cap
const C8 = board.add(C_0603_1608Metric, {
- translate: pt(0.543, 0.474), rotate: 0,
+ translate: pt(1.332, 0.647), rotate: 0,
id: 'C8'
})
-// mcu.vdda_cap_0.cap
+// mcu.crystal.package
+const X1 = board.add(Crystal_SMD_3225_4Pin_3_2x2_5mm, {
+ translate: pt(1.201, 0.512), rotate: 0,
+ id: 'X1'
+})
+// mcu.crystal.cap_a
const C9 = board.add(C_0603_1608Metric, {
- translate: pt(0.699, 0.474), rotate: 0,
+ translate: pt(1.488, 0.647), rotate: 0,
id: 'C9'
})
-// mcu.vdda_cap_1.cap
+// mcu.crystal.cap_b
const C10 = board.add(C_0603_1608Metric, {
- translate: pt(0.058, 0.590), rotate: 0,
+ translate: pt(1.644, 0.647), rotate: 0,
id: 'C10'
})
// mcu.swd.conn
const J2 = board.add(PinHeader_2x05_P1_27mm_Vertical_SMD, {
- translate: pt(0.614, 0.146), rotate: 0,
+ translate: pt(1.732, 0.146), rotate: 0,
id: 'J2'
})
-// sw.package
-const SW1 = board.add(SW_SPST_SKQG_WithoutStem, {
- translate: pt(0.714, 0.849), rotate: 0,
- id: 'SW1'
+// mcu.usb_pull.dp
+const R3 = board.add(R_0603_1608Metric, {
+ translate: pt(1.800, 0.647), rotate: 0,
+ id: 'R3'
})
-// led[0].package
+// led.package
const D1 = board.add(LED_0603_1608Metric, {
- translate: pt(1.058, 0.766), rotate: 0,
+ translate: pt(1.921, 0.823), rotate: 0,
id: 'D1'
})
-// led[0].res
-const R5 = board.add(R_0603_1608Metric, {
- translate: pt(1.057, 0.863), rotate: 0,
- id: 'R5'
-})
-// led[1].package
-const D2 = board.add(LED_0603_1608Metric, {
- translate: pt(1.293, 0.766), rotate: 0,
- id: 'D2'
-})
-// led[1].res
-const R6 = board.add(R_0603_1608Metric, {
- translate: pt(1.292, 0.863), rotate: 0,
- id: 'R6'
-})
-// led[2].package
-const D3 = board.add(LED_0603_1608Metric, {
- translate: pt(0.058, 1.212), rotate: 0,
- id: 'D3'
-})
-// led[2].res
-const R7 = board.add(R_0603_1608Metric, {
- translate: pt(0.058, 1.309), rotate: 0,
- id: 'R7'
+// led.res
+const R4 = board.add(R_0603_1608Metric, {
+ translate: pt(1.920, 0.920), rotate: 0,
+ id: 'R4'
})
-// led[3].package
-const D4 = board.add(LED_0603_1608Metric, {
- translate: pt(0.293, 1.212), rotate: 0,
- id: 'D4'
+// npx_shift.ic
+const U3 = board.add(SOT_23_5, {
+ translate: pt(1.663, 0.861), rotate: 0,
+ id: 'U3'
})
-// led[3].res
-const R8 = board.add(R_0603_1608Metric, {
- translate: pt(0.293, 1.309), rotate: 0,
- id: 'R8'
+// npx_shift.vdd_cap.cap
+const C17 = board.add(C_0603_1608Metric, {
+ translate: pt(1.641, 0.996), rotate: 0,
+ id: 'C17'
})
board.setNetlist([
- {name: "usb.pwr", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["U1", "3"], ["U1", "5"], ["C1", "1"], ["C3", "1"]]},
- {name: "usb.gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["U1", "1"], ["R4", "2"], ["C1", "2"], ["C3", "2"], ["C4", "2"], ["U2", "23"], ["U2", "35"], ["U2", "44"], ["U2", "47"], ["U2", "8"], ["C5", "2"], ["C6", "2"], ["C7", "2"], ["C8", "2"], ["C9", "2"], ["C10", "2"], ["J2", "3"], ["J2", "5"], ["J2", "9"], ["SW1", "2"], ["R5", "2"], ["R6", "2"], ["R7", "2"], ["R8", "2"]]},
- {name: "usb.usb.dp", pads: [["J1", "A6"], ["J1", "B6"]]},
- {name: "usb.usb.dm", pads: [["J1", "A7"], ["J1", "B7"]]},
+ {name: "usb.pwr", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["U1", "3"], ["C1", "1"], ["D3", "4"], ["C11", "1"], ["D5", "4"], ["C12", "1"], ["D7", "4"], ["C13", "1"], ["D9", "4"], ["C14", "1"], ["D11", "4"], ["C15", "1"], ["D13", "4"], ["C16", "1"], ["U3", "5"], ["C17", "1"]]},
+ {name: "usb.gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["U1", "1"], ["C1", "2"], ["C2", "2"], ["U2", "23"], ["U2", "35"], ["U2", "44"], ["U2", "47"], ["U2", "8"], ["C3", "2"], ["C4", "2"], ["C5", "2"], ["C6", "2"], ["C7", "2"], ["C8", "2"], ["X1", "2"], ["X1", "4"], ["C9", "2"], ["C10", "2"], ["J2", "3"], ["J2", "5"], ["J2", "9"], ["R4", "2"], ["D3", "2"], ["C11", "2"], ["D5", "2"], ["C12", "2"], ["D7", "2"], ["C13", "2"], ["D9", "2"], ["C14", "2"], ["D11", "2"], ["C15", "2"], ["D13", "2"], ["C16", "2"], ["U3", "1"], ["U3", "3"], ["C17", "2"]]},
+ {name: "usb.usb.dp", pads: [["J1", "A6"], ["J1", "B6"], ["U2", "33"], ["R3", "2"]]},
+ {name: "usb.usb.dm", pads: [["J1", "A7"], ["J1", "B7"], ["U2", "32"]]},
{name: "usb.conn.cc.cc1", pads: [["J1", "A5"], ["R1", "2"]]},
{name: "usb.conn.cc.cc2", pads: [["J1", "B5"], ["R2", "2"]]},
- {name: "reg.pwr_out", pads: [["R3", "1"], ["L1", "2"], ["C4", "1"], ["U2", "1"], ["U2", "24"], ["U2", "36"], ["U2", "48"], ["U2", "9"], ["C5", "1"], ["C6", "1"], ["C7", "1"], ["C8", "1"], ["C9", "1"], ["C10", "1"], ["J2", "1"]]},
- {name: "reg.ic.sw", pads: [["U1", "2"], ["C2", "2"], ["L1", "1"]]},
- {name: "reg.ic.fb", pads: [["U1", "4"], ["R3", "2"], ["R4", "1"]]},
- {name: "reg.ic.vbst", pads: [["U1", "6"], ["C2", "1"]]},
+ {name: "reg.pwr_out", pads: [["U1", "2"], ["C2", "1"], ["U2", "1"], ["U2", "24"], ["U2", "36"], ["U2", "48"], ["U2", "9"], ["C3", "1"], ["C4", "1"], ["C5", "1"], ["C6", "1"], ["C7", "1"], ["C8", "1"], ["J2", "1"], ["R3", "1"]]},
+ {name: "mcu.gpio.cols_0", pads: [["U2", "12"], ["SW1", "1"], ["SW3", "1"], ["SW5", "1"]]},
+ {name: "mcu.gpio.cols_1", pads: [["U2", "13"], ["SW2", "1"], ["SW4", "1"], ["SW6", "1"]]},
+ {name: "mcu.gpio.rows_0", pads: [["U2", "14"], ["D2", "1"], ["D4", "1"]]},
+ {name: "mcu.gpio.rows_1", pads: [["U2", "15"], ["D6", "1"], ["D8", "1"]]},
+ {name: "mcu.gpio.rows_2", pads: [["U2", "16"], ["D10", "1"], ["D12", "1"]]},
+ {name: "mcu.xtal_node.xi", pads: [["U2", "5"], ["X1", "1"], ["C9", "1"]]},
+ {name: "mcu.xtal_node.xo", pads: [["U2", "6"], ["X1", "3"], ["C10", "1"]]},
{name: "mcu.swd_node.swdio", pads: [["U2", "34"], ["J2", "2"]]},
{name: "mcu.swd_node.swclk", pads: [["U2", "37"], ["J2", "4"]]},
{name: "mcu.reset_node", pads: [["U2", "7"], ["J2", "10"]]},
- {name: "mcu.ic.osc.xtal_in", pads: [["U2", "5"]]},
- {name: "mcu.ic.osc.xtal_out", pads: [["U2", "6"]]},
{name: "mcu.swd.tdi", pads: [["J2", "8"]]},
{name: "mcu.swd.swo", pads: [["J2", "6"]]},
- {name: "sw.out", pads: [["U2", "10"], ["SW1", "1"]]},
- {name: "led[0].signal", pads: [["U2", "11"], ["D1", "2"]]},
- {name: "led[0].package.k", pads: [["D1", "1"], ["R5", "1"]]},
- {name: "led[1].signal", pads: [["U2", "12"], ["D2", "2"]]},
- {name: "led[1].package.k", pads: [["D2", "1"], ["R6", "1"]]},
- {name: "led[2].signal", pads: [["U2", "13"], ["D3", "2"]]},
- {name: "led[2].package.k", pads: [["D3", "1"], ["R7", "1"]]},
- {name: "led[3].signal", pads: [["U2", "14"], ["D4", "2"]]},
- {name: "led[3].package.k", pads: [["D4", "1"], ["R8", "1"]]}
+ {name: "led.signal", pads: [["U2", "10"], ["D1", "2"]]},
+ {name: "led.package.k", pads: [["D1", "1"], ["R4", "1"]]},
+ {name: "sw.npx_din", pads: [["D3", "3"], ["U3", "4"]]},
+ {name: "sw.npx_dout", pads: [["D13", "1"]]},
+ {name: "sw.sw[0,0].npx_dout", pads: [["D3", "1"], ["D5", "3"]]},
+ {name: "sw.sw[0,0].sw.com", pads: [["SW1", "2"], ["D2", "2"]]},
+ {name: "sw.sw[1,0].npx_dout", pads: [["D5", "1"], ["D9", "3"]]},
+ {name: "sw.sw[1,0].sw.com", pads: [["SW2", "2"], ["D4", "2"]]},
+ {name: "sw.sw[0,1].npx_din", pads: [["D7", "3"], ["D9", "1"]]},
+ {name: "sw.sw[0,1].npx_dout", pads: [["D7", "1"], ["D11", "3"]]},
+ {name: "sw.sw[0,1].sw.com", pads: [["SW3", "2"], ["D6", "2"]]},
+ {name: "sw.sw[1,1].sw.com", pads: [["SW4", "2"], ["D8", "2"]]},
+ {name: "sw.sw[0,2].npx_dout", pads: [["D11", "1"], ["D13", "3"]]},
+ {name: "sw.sw[0,2].sw.com", pads: [["SW5", "2"], ["D10", "2"]]},
+ {name: "sw.sw[1,2].sw.com", pads: [["SW6", "2"], ["D12", "2"]]},
+ {name: "npx_shift.input", pads: [["U2", "11"], ["U3", "2"]]}
])
const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
-const limit1 = pt(1.4688976377952758, 1.455511811023622);
+const limit1 = pt(2.5795275590551188, 2.1181102362204722);
const xMin = Math.min(limit0[0], limit1[0]);
const xMax = Math.max(limit0[0], limit1[0]);
const yMin = Math.min(limit0[1], limit1[1]);
@@ -208,4 +188,73 @@ renderPCB({
mmPerUnit: 25.4
})
+function SwitchDiodeMatrixNeopixels_2_3_sw(xy, colSpacing=0.5, rowSpacing=0.5, diodeOffset=[0.25, 0]) {
+ // Circuit generator params
+ const ncols = 2
+ const nrows = 3
+
+ // Global params
+ const traceSize = 0.015
+ const viaTemplate = via(0.02, 0.035)
+
+ // Return object
+ const obj = {
+ footprints: {},
+ pts: {}
+ }
+
+ // Actual generator code
+ allColWirePoints = []
+ for (let yIndex=0; yIndex < nrows; yIndex++) {
+ colWirePoints = []
+ rowDiodeVias = []
+
+ for (let xIndex=0; xIndex < ncols; xIndex++) {
+ index = yIndex * ncols + xIndex + 1
+
+ buttonPos = [xy[0] + colSpacing * xIndex, xy[1] + rowSpacing * yIndex]
+ obj.footprints[`SW${1 + xIndex * nrows + yIndex}`] = button = board.add(
+ SW_Hotswap_Kailh_MX,
+ {
+ translate: buttonPos, rotate: 0,
+ id: `SW${1 + xIndex * nrows + yIndex}`
+ })
+
+ diodePos = [buttonPos[0] + diodeOffset[0], buttonPos[1] + diodeOffset[1]]
+ obj[`D${2 + xIndex * nrows + yIndex}`] = diode = board.add(
+ D_SOD_323,
+ {
+ translate: diodePos, rotate: 90,
+ id: `D${2 + xIndex * nrows + yIndex}`
+ })
+
+ // create stub wire for button -> column common line
+ colWirePoint = [buttonPos[0], button.padY("2")]
+ board.wire([colWirePoint, button.pad("2")], traceSize, "F.Cu")
+ colWirePoints.push(colWirePoint)
+
+ // create wire for button -> diode
+ board.wire([button.pad("1"), diode.pad("1")], traceSize, "F.Cu")
+ diodeViaPos = [diode.padX("2"), buttonPos[1] + rowSpacing / 2]
+ diodeVia = board.add(viaTemplate, {translate: diodeViaPos})
+ board.wire([diode.pad("2"), diodeVia.pos], traceSize)
+
+ if (rowDiodeVias.length > 0) {
+ board.wire([rowDiodeVias[rowDiodeVias.length - 1].pos, diodeVia.pos], traceSize, "B.Cu")
+ }
+ rowDiodeVias.push(diodeVia)
+ }
+ allColWirePoints.push(colWirePoints)
+ }
+
+ // Inter-row wiring
+ for (let xIndex=0; xIndex < allColWirePoints[0].length; xIndex++) {
+ board.wire([
+ allColWirePoints[0][xIndex],
+ allColWirePoints[allColWirePoints.length - 1][xIndex]
+ ], traceSize, "F.Cu")
+ }
+
+ return obj
+}
diff --git a/examples/TestBlinkyMicro/TestBlinkyMicro.net.ref b/examples/TestBlinkyMicro/TestBlinkyMicro.net.ref
deleted file mode 100644
index e469e6002..000000000
--- a/examples/TestBlinkyMicro/TestBlinkyMicro.net.ref
+++ /dev/null
@@ -1,438 +0,0 @@
-(export (version D)
-(components
-(comp (ref "J1")
- (value "usb.conn")
- (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11")
- (property (name "Sheetname") (value "usb"))
- (property (name "Sheetfile") (value "edg.parts.connector.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)"))
- (property (name "edg_value") (value "COM-15111"))
- (sheetpath (names "/usb/") (tstamps "/02aa014b/"))
- (tstamps "042701af"))
-(comp (ref "R1")
- (value "usb.cc_pull.cc1")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "cc_pull"))
- (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
- (property (name "edg_path") (value "usb.cc_pull.cc1"))
- (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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
- (tstamps "022300f8"))
-(comp (ref "R2")
- (value "usb.cc_pull.cc2")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "cc_pull"))
- (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
- (property (name "edg_path") (value "usb.cc_pull.cc2"))
- (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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
- (tstamps "022400f9"))
-(comp (ref "U1")
- (value "reg.ic")
- (footprint "Package_TO_SOT_SMD:SOT-23-6")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.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)"))
- (property (name "edg_value") (value "TPS561201"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "013700cd"))
-(comp (ref "R3")
- (value "reg.fb.top_res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "fb"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 33kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/"))
- (tstamps "0c0c02fd"))
-(comp (ref "R4")
- (value "reg.fb.bottom_res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "fb"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/reg/fb/") (tstamps "/028a013f/013000c9/"))
- (tstamps "175b043f"))
-(comp (ref "C1")
- (value "reg.hf_in_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "11ed0398"))
-(comp (ref "C2")
- (value "reg.vbst_cap")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "reg"))
- (property (name "Sheetfile") (value "edg.parts.power.converter.TexasInstruments_Buck.Tps561201"))
- (property (name "edg_path") (value "reg.vbst_cap.cap"))
- (property (name "edg_short_path") (value "reg.vbst_cap"))
- (property (name "edg_refdes") (value "C2"))
- (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/") (tstamps "/028a013f/"))
- (tstamps "0f330353"))
-(comp (ref "L1")
- (value "reg.power_path.inductor")
- (footprint "Inductor_SMD:L_0805_2012Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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 "MPH201214S100MT (Sunlord)"))
- (property (name "edg_value") (value "1A 10uH ±20% 375mΩ SMD,2.0x1.25x1.45mm Inductors (SMD) ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0f2b0369"))
-(comp (ref "C3")
- (value "reg.power_path.in_cap")
- (footprint "Capacitor_SMD:C_0805_2012Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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)"))
- (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0879026b"))
-(comp (ref "C4")
- (value "reg.power_path.out_cap")
- (footprint "Capacitor_SMD:C_0805_2012Metric")
- (property (name "Sheetname") (value "power_path"))
- (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.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)"))
- (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/reg/power_path/") (tstamps "/028a013f/1786043a/"))
- (tstamps "0be902ec"))
-(comp (ref "U2")
- (value "mcu.ic")
- (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)"))
- (property (name "edg_value") (value "ESP32-WROOM-32"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "013700cd"))
-(comp (ref "C5")
- (value "mcu.vcc_cap0")
- (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)"))
- (property (name "edg_value") (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "0e590300"))
-(comp (ref "C6")
- (value "mcu.vcc_cap1")
- (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)"))
- (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "0e5a0301"))
-(comp (ref "J2")
- (value "mcu.prog")
- (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)"))
- (property (name "edg_value") (value "PinHeader2.54 1x4"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "045f01b9"))
-(comp (ref "SW1")
- (value "mcu.boot")
- (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"))
- (property (name "edg_value") (value "5.1mm switch"))
- (sheetpath (names "/mcu/") (tstamps "/02850146/"))
- (tstamps "042b01b5"))
-(comp (ref "R5")
- (value "mcu.en_pull.r")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "en_pull"))
- (property (name "Sheetfile") (value "edg.circuits.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/"))
- (tstamps "00730073"))
-(comp (ref "C7")
- (value "mcu.en_pull.c")
- (footprint "Capacitor_SMD:C_0603_1608Metric")
- (property (name "Sheetname") (value "en_pull"))
- (property (name "Sheetfile") (value "edg.circuits.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)"))
- (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
- (sheetpath (names "/mcu/en_pull/") (tstamps "/02850146/0b9c02f0/"))
- (tstamps "00640064"))
-(comp (ref "SW2")
- (value "sw")
- (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"))
- (property (name "edg_value") (value "5.1mm switch"))
- (sheetpath (names "/") (tstamps "/"))
- (tstamps "015f00eb"))
-(comp (ref "D1")
- (value "led[0].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[0]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[0]/") (tstamps "/07e5021e/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R6")
- (value "led[0].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[0]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[0]/") (tstamps "/07e5021e/"))
- (tstamps "0296014b"))
-(comp (ref "D2")
- (value "led[1].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[1]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[1]/") (tstamps "/07e7021f/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R7")
- (value "led[1].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[1]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[1]/") (tstamps "/07e7021f/"))
- (tstamps "0296014b"))
-(comp (ref "D3")
- (value "led[2].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[2]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[2]/") (tstamps "/07e90220/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R8")
- (value "led[2].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[2]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[2]/") (tstamps "/07e90220/"))
- (tstamps "0296014b"))
-(comp (ref "D4")
- (value "led[3].package")
- (footprint "LED_SMD:LED_0603_1608Metric")
- (property (name "Sheetname") (value "led[3]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
- (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
- (sheetpath (names "/led[3]/") (tstamps "/07eb0221/"))
- (tstamps "0b4e02cd"))
-(comp (ref "R9")
- (value "led[3].res")
- (footprint "Resistor_SMD:R_0603_1608Metric")
- (property (name "Sheetname") (value "led[3]"))
- (property (name "Sheetfile") (value "edg.abstract_parts.Led.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))"))
- (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
- (sheetpath (names "/led[3]/") (tstamps "/07eb0221/"))
- (tstamps "0296014b")))
-(nets
-(net (code 1) (name "usb.pwr")
- (node (ref J1) (pin A4))
- (node (ref J1) (pin A9))
- (node (ref J1) (pin B4))
- (node (ref J1) (pin B9))
- (node (ref U1) (pin 3))
- (node (ref U1) (pin 5))
- (node (ref C1) (pin 1))
- (node (ref C3) (pin 1)))
-(net (code 2) (name "usb.gnd")
- (node (ref J1) (pin A1))
- (node (ref J1) (pin A12))
- (node (ref J1) (pin B1))
- (node (ref J1) (pin B12))
- (node (ref J1) (pin S1))
- (node (ref R1) (pin 1))
- (node (ref R2) (pin 1))
- (node (ref U1) (pin 1))
- (node (ref R4) (pin 2))
- (node (ref C1) (pin 2))
- (node (ref C3) (pin 2))
- (node (ref C4) (pin 2))
- (node (ref U2) (pin 1))
- (node (ref U2) (pin 15))
- (node (ref U2) (pin 38))
- (node (ref U2) (pin 39))
- (node (ref C5) (pin 2))
- (node (ref C6) (pin 2))
- (node (ref J2) (pin 4))
- (node (ref SW1) (pin 2))
- (node (ref C7) (pin 2))
- (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)))
-(net (code 3) (name "usb.usb.dp")
- (node (ref J1) (pin A6))
- (node (ref J1) (pin B6)))
-(net (code 4) (name "usb.usb.dm")
- (node (ref J1) (pin A7))
- (node (ref J1) (pin B7)))
-(net (code 5) (name "usb.conn.cc.cc1")
- (node (ref J1) (pin A5))
- (node (ref R1) (pin 2)))
-(net (code 6) (name "usb.conn.cc.cc2")
- (node (ref J1) (pin B5))
- (node (ref R2) (pin 2)))
-(net (code 7) (name "reg.pwr_out")
- (node (ref R3) (pin 1))
- (node (ref L1) (pin 2))
- (node (ref C4) (pin 1))
- (node (ref U2) (pin 2))
- (node (ref C5) (pin 1))
- (node (ref C6) (pin 1))
- (node (ref J2) (pin 1))
- (node (ref R5) (pin 1)))
-(net (code 8) (name "reg.ic.sw")
- (node (ref U1) (pin 2))
- (node (ref C2) (pin 2))
- (node (ref L1) (pin 1)))
-(net (code 9) (name "reg.ic.fb")
- (node (ref U1) (pin 4))
- (node (ref R3) (pin 2))
- (node (ref R4) (pin 1)))
-(net (code 10) (name "reg.ic.vbst")
- (node (ref U1) (pin 6))
- (node (ref C2) (pin 1)))
-(net (code 11) (name "mcu.program_uart_node.a_tx")
- (node (ref U2) (pin 35))
- (node (ref J2) (pin 2)))
-(net (code 12) (name "mcu.program_uart_node.b_tx")
- (node (ref U2) (pin 34))
- (node (ref J2) (pin 3)))
-(net (code 13) (name "mcu.program_en_node")
- (node (ref U2) (pin 3))
- (node (ref R5) (pin 2))
- (node (ref C7) (pin 1)))
-(net (code 14) (name "mcu.program_boot_node")
- (node (ref U2) (pin 25))
- (node (ref SW1) (pin 1)))
-(net (code 15) (name "mcu.ic.io2")
- (node (ref U2) (pin 24)))
-(net (code 16) (name "sw.out")
- (node (ref U2) (pin 8))
- (node (ref SW2) (pin 1)))
-(net (code 17) (name "led[0].signal")
- (node (ref U2) (pin 26))
- (node (ref D1) (pin 2)))
-(net (code 18) (name "led[0].package.k")
- (node (ref D1) (pin 1))
- (node (ref R6) (pin 1)))
-(net (code 19) (name "led[1].signal")
- (node (ref U2) (pin 27))
- (node (ref D2) (pin 2)))
-(net (code 20) (name "led[1].package.k")
- (node (ref D2) (pin 1))
- (node (ref R7) (pin 1)))
-(net (code 21) (name "led[2].signal")
- (node (ref U2) (pin 28))
- (node (ref D3) (pin 2)))
-(net (code 22) (name "led[2].package.k")
- (node (ref D3) (pin 1))
- (node (ref R8) (pin 1)))
-(net (code 23) (name "led[3].signal")
- (node (ref U2) (pin 29))
- (node (ref D4) (pin 2)))
-(net (code 24) (name "led[3].package.k")
- (node (ref D4) (pin 1))
- (node (ref R9) (pin 1))))
-)
\ No newline at end of file
diff --git a/examples/TestBlinkyMicro/TestBlinkyMicro.svgpcb.js b/examples/TestBlinkyMicro/TestBlinkyMicro.svgpcb.js
deleted file mode 100644
index fff8bc4c9..000000000
--- a/examples/TestBlinkyMicro/TestBlinkyMicro.svgpcb.js
+++ /dev/null
@@ -1,204 +0,0 @@
-const board = new PCB();
-
-// usb.conn
-const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, {
- translate: pt(2.750, 0.165), rotate: 0,
- id: 'J1'
-})
-// usb.cc_pull.cc1
-const R1 = board.add(R_0603_1608Metric, {
- translate: pt(2.598, 0.420), rotate: 0,
- id: 'R1'
-})
-// usb.cc_pull.cc2
-const R2 = board.add(R_0603_1608Metric, {
- translate: pt(2.754, 0.420), rotate: 0,
- id: 'R2'
-})
-// reg.ic
-const U1 = board.add(SOT_23_6, {
- translate: pt(0.081, 1.809), rotate: 0,
- id: 'U1'
-})
-// reg.fb.div.top_res
-const R3 = board.add(R_0603_1608Metric, {
- translate: pt(0.409, 1.944), rotate: 0,
- id: 'R3'
-})
-// reg.fb.div.bottom_res
-const R4 = board.add(R_0603_1608Metric, {
- translate: pt(0.058, 2.061), rotate: 0,
- id: 'R4'
-})
-// reg.hf_in_cap.cap
-const C1 = board.add(C_0603_1608Metric, {
- translate: pt(0.214, 2.061), rotate: 0,
- id: 'C1'
-})
-// reg.vbst_cap.cap
-const C2 = board.add(C_0603_1608Metric, {
- translate: pt(0.370, 2.061), rotate: 0,
- id: 'C2'
-})
-// reg.power_path.inductor
-const L1 = board.add(L_0805_2012Metric, {
- translate: pt(0.242, 1.949), rotate: 0,
- id: 'L1'
-})
-// reg.power_path.in_cap.cap
-const C3 = board.add(C_0805_2012Metric, {
- translate: pt(0.268, 1.781), rotate: 0,
- id: 'C3'
-})
-// reg.power_path.out_cap.cap
-const C4 = board.add(C_0805_2012Metric, {
- translate: pt(0.067, 1.954), rotate: 0,
- id: 'C4'
-})
-// mcu.ic
-const U2 = board.add(ESP32_WROOM_32, {
- translate: pt(0.945, 0.414), rotate: 0,
- id: 'U2'
-})
-// mcu.vcc_cap0.cap
-const C5 = board.add(C_1206_3216Metric, {
- translate: pt(2.020, 0.789), rotate: 0,
- id: 'C5'
-})
-// mcu.vcc_cap1.cap
-const C6 = board.add(C_0603_1608Metric, {
- translate: pt(2.208, 0.773), rotate: 0,
- id: 'C6'
-})
-// mcu.prog.conn
-const J2 = board.add(PinHeader_1x04_P2_54mm_Vertical, {
- translate: pt(2.000, 0.370), rotate: 0,
- id: 'J2'
-})
-// mcu.boot.package
-const SW1 = board.add(SW_SPST_SKQG_WithoutStem, {
- translate: pt(2.096, 0.593), rotate: 0,
- id: 'SW1'
-})
-// mcu.en_pull.rc.r
-const R5 = board.add(R_0603_1608Metric, {
- translate: pt(2.364, 0.773), rotate: 0,
- id: 'R5'
-})
-// mcu.en_pull.rc.c
-const C7 = board.add(C_0603_1608Metric, {
- translate: pt(1.987, 0.903), rotate: 0,
- id: 'C7'
-})
-// sw.package
-const SW2 = board.add(SW_SPST_SKQG_WithoutStem, {
- translate: pt(0.752, 1.854), rotate: 0,
- id: 'SW2'
-})
-// led[0].package
-const D1 = board.add(LED_0603_1608Metric, {
- translate: pt(1.096, 1.771), rotate: 0,
- id: 'D1'
-})
-// led[0].res
-const R6 = board.add(R_0603_1608Metric, {
- translate: pt(1.096, 1.868), rotate: 0,
- id: 'R6'
-})
-// led[1].package
-const D2 = board.add(LED_0603_1608Metric, {
- translate: pt(1.331, 1.771), rotate: 0,
- id: 'D2'
-})
-// led[1].res
-const R7 = board.add(R_0603_1608Metric, {
- translate: pt(1.331, 1.868), rotate: 0,
- id: 'R7'
-})
-// led[2].package
-const D3 = board.add(LED_0603_1608Metric, {
- translate: pt(1.566, 1.771), rotate: 0,
- id: 'D3'
-})
-// led[2].res
-const R8 = board.add(R_0603_1608Metric, {
- translate: pt(1.566, 1.868), rotate: 0,
- id: 'R8'
-})
-// led[3].package
-const D4 = board.add(LED_0603_1608Metric, {
- translate: pt(1.801, 1.771), rotate: 0,
- id: 'D4'
-})
-// led[3].res
-const R9 = board.add(R_0603_1608Metric, {
- translate: pt(1.801, 1.868), rotate: 0,
- id: 'R9'
-})
-
-board.setNetlist([
- {name: "usb.pwr", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["U1", "3"], ["U1", "5"], ["C1", "1"], ["C3", "1"]]},
- {name: "usb.gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["U1", "1"], ["R4", "2"], ["C1", "2"], ["C3", "2"], ["C4", "2"], ["U2", "1"], ["U2", "15"], ["U2", "38"], ["U2", "39"], ["C5", "2"], ["C6", "2"], ["J2", "4"], ["SW1", "2"], ["C7", "2"], ["SW2", "2"], ["R6", "2"], ["R7", "2"], ["R8", "2"], ["R9", "2"]]},
- {name: "usb.usb.dp", pads: [["J1", "A6"], ["J1", "B6"]]},
- {name: "usb.usb.dm", pads: [["J1", "A7"], ["J1", "B7"]]},
- {name: "usb.conn.cc.cc1", pads: [["J1", "A5"], ["R1", "2"]]},
- {name: "usb.conn.cc.cc2", pads: [["J1", "B5"], ["R2", "2"]]},
- {name: "reg.pwr_out", pads: [["R3", "1"], ["L1", "2"], ["C4", "1"], ["U2", "2"], ["C5", "1"], ["C6", "1"], ["J2", "1"], ["R5", "1"]]},
- {name: "reg.ic.sw", pads: [["U1", "2"], ["C2", "2"], ["L1", "1"]]},
- {name: "reg.ic.fb", pads: [["U1", "4"], ["R3", "2"], ["R4", "1"]]},
- {name: "reg.ic.vbst", pads: [["U1", "6"], ["C2", "1"]]},
- {name: "mcu.program_uart_node.a_tx", pads: [["U2", "35"], ["J2", "2"]]},
- {name: "mcu.program_uart_node.b_tx", pads: [["U2", "34"], ["J2", "3"]]},
- {name: "mcu.program_en_node", pads: [["U2", "3"], ["R5", "2"], ["C7", "1"]]},
- {name: "mcu.program_boot_node", pads: [["U2", "25"], ["SW1", "1"]]},
- {name: "mcu.ic.io2", pads: [["U2", "24"]]},
- {name: "sw.out", pads: [["U2", "8"], ["SW2", "1"]]},
- {name: "led[0].signal", pads: [["U2", "26"], ["D1", "2"]]},
- {name: "led[0].package.k", pads: [["D1", "1"], ["R6", "1"]]},
- {name: "led[1].signal", pads: [["U2", "27"], ["D2", "2"]]},
- {name: "led[1].package.k", pads: [["D2", "1"], ["R7", "1"]]},
- {name: "led[2].signal", pads: [["U2", "28"], ["D3", "2"]]},
- {name: "led[2].package.k", pads: [["D3", "1"], ["R8", "1"]]},
- {name: "led[3].signal", pads: [["U2", "29"], ["D4", "2"]]},
- {name: "led[3].package.k", pads: [["D4", "1"], ["R9", "1"]]}
-])
-
-const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
-const limit1 = pt(3.077165354330709, 2.20748031496063);
-const xMin = Math.min(limit0[0], limit1[0]);
-const xMax = Math.max(limit0[0], limit1[0]);
-const yMin = Math.min(limit0[1], limit1[1]);
-const yMax = Math.max(limit0[1], limit1[1]);
-
-const filletRadius = 0.1;
-const outline = path(
- [(xMin+xMax/2), yMax],
- ["fillet", filletRadius, [xMax, yMax]],
- ["fillet", filletRadius, [xMax, yMin]],
- ["fillet", filletRadius, [xMin, yMin]],
- ["fillet", filletRadius, [xMin, yMax]],
- [(xMin+xMax/2), yMax],
-);
-board.addShape("outline", outline);
-
-renderPCB({
- pcb: board,
- layerColors: {
- "F.Paste": "#000000ff",
- "F.Mask": "#000000ff",
- "B.Mask": "#000000ff",
- "componentLabels": "#00e5e5e5",
- "outline": "#002d00ff",
- "padLabels": "#ffff99e5",
- "B.Cu": "#ef4e4eff",
- "F.Cu": "#ff8c00cc",
- },
- limits: {
- x: [xMin, xMax],
- y: [yMin, yMax]
- },
- background: "#00000000",
- mmPerUnit: 25.4
-})
-
-
diff --git a/examples/TestBlinkyPinned/TestBlinkyPinned.net.ref b/examples/TestBlinkyPinned/TestBlinkyPinned.net.ref
new file mode 100644
index 000000000..2a8ffbe64
--- /dev/null
+++ b/examples/TestBlinkyPinned/TestBlinkyPinned.net.ref
@@ -0,0 +1,743 @@
+(export (version D)
+(components
+(comp (ref "J1")
+ (value "usb.conn")
+ (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11")
+ (property (name "Sheetname") (value "usb"))
+ (property (name "Sheetfile") (value "edg.parts.connector.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)"))
+ (property (name "edg_value") (value "COM-15111"))
+ (sheetpath (names "/usb/") (tstamps "/02aa014b/"))
+ (tstamps "042701af"))
+(comp (ref "R1")
+ (value "usb.cc_pull.cc1")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "cc_pull"))
+ (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
+ (property (name "edg_path") (value "usb.cc_pull.cc1"))
+ (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))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
+ (tstamps "022300f8"))
+(comp (ref "R2")
+ (value "usb.cc_pull.cc2")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "cc_pull"))
+ (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
+ (property (name "edg_path") (value "usb.cc_pull.cc2"))
+ (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))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
+ (tstamps "022400f9"))
+(comp (ref "U1")
+ (value "reg.ic")
+ (footprint "Package_TO_SOT_SMD:SOT-223-3_TabPin2")
+ (property (name "Sheetname") (value "reg"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (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 "AMS1117-3.3 (Advanced Monolithic Systems)"))
+ (property (name "edg_value") (value "AMS1117-3.3"))
+ (sheetpath (names "/reg/") (tstamps "/028a013f/"))
+ (tstamps "013700cd"))
+(comp (ref "C1")
+ (value "reg.in_cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "reg"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (property (name "edg_path") (value "reg.in_cap.cap"))
+ (property (name "edg_short_path") (value "reg.in_cap"))
+ (property (name "edg_refdes") (value "C1"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/reg/") (tstamps "/028a013f/"))
+ (tstamps "0879026b"))
+(comp (ref "C2")
+ (value "reg.out_cap")
+ (footprint "Capacitor_SMD:C_1206_3216Metric")
+ (property (name "Sheetname") (value "reg"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (property (name "edg_path") (value "reg.out_cap.cap"))
+ (property (name "edg_short_path") (value "reg.out_cap"))
+ (property (name "edg_refdes") (value "C2"))
+ (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/reg/") (tstamps "/028a013f/"))
+ (tstamps "0be902ec"))
+(comp (ref "U2")
+ (value "mcu.ic")
+ (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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)"))
+ (property (name "edg_value") (value "STM32F103xxT6"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "013700cd"))
+(comp (ref "C3")
+ (value "mcu.pwr_cap[0]")
+ (footprint "Capacitor_SMD:C_0805_2012Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C3"))
+ (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168703d5"))
+(comp (ref "C4")
+ (value "mcu.pwr_cap[1]")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C4"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168903d6"))
+(comp (ref "C5")
+ (value "mcu.pwr_cap[2]")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C5"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168b03d7"))
+(comp (ref "C6")
+ (value "mcu.pwr_cap[3]")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C6"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168d03d8"))
+(comp (ref "C7")
+ (value "mcu.vdda_cap_0")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C7"))
+ (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))"))
+ (property (name "edg_value") (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "15dc03c2"))
+(comp (ref "C8")
+ (value "mcu.vdda_cap_1")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C8"))
+ (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "15dd03c3"))
+(comp (ref "X1")
+ (value "mcu.crystal.package")
+ (footprint "Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.package"))
+ (property (name "edg_short_path") (value "mcu.crystal.package"))
+ (property (name "edg_refdes") (value "X1"))
+ (property (name "edg_part") (value "X32258MOB4SI (Yangxing Tech)"))
+ (property (name "edg_value") (value "8MHz SMD Crystal Resonator 12pF ±10ppm ±30ppm -40℃~+85℃ SMD3225-4P Crystals ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "0b4e02cd"))
+(comp (ref "C9")
+ (value "mcu.crystal.cap_a")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.cap_a"))
+ (property (name "edg_short_path") (value "mcu.crystal.cap_a"))
+ (property (name "edg_refdes") (value "C9"))
+ (property (name "edg_part") (value "CL10C100JB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 10pF C0G ±5% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "05e701f5"))
+(comp (ref "C10")
+ (value "mcu.crystal.cap_b")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.cap_b"))
+ (property (name "edg_short_path") (value "mcu.crystal.cap_b"))
+ (property (name "edg_refdes") (value "C10"))
+ (property (name "edg_part") (value "CL10C100JB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 10pF C0G ±5% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "05e801f6"))
+(comp (ref "J2")
+ (value "mcu.swd")
+ (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"))
+ (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)"))
+ (property (name "edg_value") (value "PinHeader1.27 Shrouded 2x5"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "02ae014f"))
+(comp (ref "R3")
+ (value "mcu.usb_pull")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (property (name "edg_path") (value "mcu.usb_pull.dp"))
+ (property (name "edg_short_path") (value "mcu.usb_pull"))
+ (property (name "edg_refdes") (value "R3"))
+ (property (name "edg_part") (value "0603WAF1501T5E (UNI-ROYAL(Uniroyal Elec))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1.5kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "0f5f0367"))
+(comp (ref "D1")
+ (value "led.package")
+ (footprint "LED_SMD:LED_0603_1608Metric")
+ (property (name "Sheetname") (value "led"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
+ (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
+ (tstamps "0b4e02cd"))
+(comp (ref "R4")
+ (value "led.res")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "led"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorLed"))
+ (property (name "edg_path") (value "led.res"))
+ (property (name "edg_short_path") (value "led.res"))
+ (property (name "edg_refdes") (value "R4"))
+ (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
+ (tstamps "0296014b"))
+(comp (ref "SW1")
+ (value "sw.sw[0,0].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,0].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].sw"))
+ (property (name "edg_refdes") (value "SW1"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
+ (tstamps "015f00eb"))
+(comp (ref "D2")
+ (value "sw.sw[0,0].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,0].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].d"))
+ (property (name "edg_refdes") (value "D2"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
+ (tstamps "00650065"))
+(comp (ref "D3")
+ (value "sw.sw[0,0].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,0].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].npx.device"))
+ (property (name "edg_refdes") (value "D3"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[0,0]/npx/") (tstamps "/015f00eb/09be022f/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C11")
+ (value "sw.sw[0,0].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,0].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].npx.cap"))
+ (property (name "edg_refdes") (value "C11"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[0,0]/npx/") (tstamps "/015f00eb/09be022f/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW2")
+ (value "sw.sw[1,0].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,0].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].sw"))
+ (property (name "edg_refdes") (value "SW2"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
+ (tstamps "015f00eb"))
+(comp (ref "D4")
+ (value "sw.sw[1,0].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,0].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].d"))
+ (property (name "edg_refdes") (value "D4"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
+ (tstamps "00650065"))
+(comp (ref "D5")
+ (value "sw.sw[1,0].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,0].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].npx.device"))
+ (property (name "edg_refdes") (value "D5"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[1,0]/npx/") (tstamps "/015f00eb/09c20230/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C12")
+ (value "sw.sw[1,0].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,0].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].npx.cap"))
+ (property (name "edg_refdes") (value "C12"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[1,0]/npx/") (tstamps "/015f00eb/09c20230/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW3")
+ (value "sw.sw[0,1].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,1].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].sw"))
+ (property (name "edg_refdes") (value "SW3"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
+ (tstamps "015f00eb"))
+(comp (ref "D6")
+ (value "sw.sw[0,1].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,1].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].d"))
+ (property (name "edg_refdes") (value "D6"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
+ (tstamps "00650065"))
+(comp (ref "D7")
+ (value "sw.sw[0,1].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,1].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].npx.device"))
+ (property (name "edg_refdes") (value "D7"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[0,1]/npx/") (tstamps "/015f00eb/09c00230/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C13")
+ (value "sw.sw[0,1].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,1].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].npx.cap"))
+ (property (name "edg_refdes") (value "C13"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[0,1]/npx/") (tstamps "/015f00eb/09c00230/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW4")
+ (value "sw.sw[1,1].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,1].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].sw"))
+ (property (name "edg_refdes") (value "SW4"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
+ (tstamps "015f00eb"))
+(comp (ref "D8")
+ (value "sw.sw[1,1].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,1].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].d"))
+ (property (name "edg_refdes") (value "D8"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
+ (tstamps "00650065"))
+(comp (ref "D9")
+ (value "sw.sw[1,1].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,1].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].npx.device"))
+ (property (name "edg_refdes") (value "D9"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[1,1]/npx/") (tstamps "/015f00eb/09c40231/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C14")
+ (value "sw.sw[1,1].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,1].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].npx.cap"))
+ (property (name "edg_refdes") (value "C14"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[1,1]/npx/") (tstamps "/015f00eb/09c40231/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW5")
+ (value "sw.sw[0,2].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,2].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].sw"))
+ (property (name "edg_refdes") (value "SW5"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
+ (tstamps "015f00eb"))
+(comp (ref "D10")
+ (value "sw.sw[0,2].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,2].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].d"))
+ (property (name "edg_refdes") (value "D10"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
+ (tstamps "00650065"))
+(comp (ref "D11")
+ (value "sw.sw[0,2].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,2].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].npx.device"))
+ (property (name "edg_refdes") (value "D11"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[0,2]/npx/") (tstamps "/015f00eb/09c20231/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C15")
+ (value "sw.sw[0,2].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,2].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].npx.cap"))
+ (property (name "edg_refdes") (value "C15"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[0,2]/npx/") (tstamps "/015f00eb/09c20231/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW6")
+ (value "sw.sw[1,2].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,2].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].sw"))
+ (property (name "edg_refdes") (value "SW6"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
+ (tstamps "015f00eb"))
+(comp (ref "D12")
+ (value "sw.sw[1,2].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,2].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].d"))
+ (property (name "edg_refdes") (value "D12"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
+ (tstamps "00650065"))
+(comp (ref "D13")
+ (value "sw.sw[1,2].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,2].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].npx.device"))
+ (property (name "edg_refdes") (value "D13"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[1,2]/npx/") (tstamps "/015f00eb/09c60232/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C16")
+ (value "sw.sw[1,2].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,2].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].npx.cap"))
+ (property (name "edg_refdes") (value "C16"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[1,2]/npx/") (tstamps "/015f00eb/09c60232/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "U3")
+ (value "npx_shift.ic")
+ (footprint "Package_TO_SOT_SMD:SOT-23-5")
+ (property (name "Sheetname") (value "npx_shift"))
+ (property (name "Sheetfile") (value "edg.parts.logic.Logic_74Ahct.L74Ahct1g125"))
+ (property (name "edg_path") (value "npx_shift.ic"))
+ (property (name "edg_short_path") (value "npx_shift.ic"))
+ (property (name "edg_refdes") (value "U3"))
+ (property (name "edg_part") (value "74AHCT1G125W5-7 (Diodes Incorporated)"))
+ (property (name "edg_value") (value "74AHCT1G125W5-7"))
+ (sheetpath (names "/npx_shift/") (tstamps "/134303d4/"))
+ (tstamps "013700cd"))
+(comp (ref "C17")
+ (value "npx_shift.vdd_cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx_shift"))
+ (property (name "Sheetfile") (value "edg.parts.logic.Logic_74Ahct.L74Ahct1g125"))
+ (property (name "edg_path") (value "npx_shift.vdd_cap.cap"))
+ (property (name "edg_short_path") (value "npx_shift.vdd_cap"))
+ (property (name "edg_refdes") (value "C17"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/npx_shift/") (tstamps "/134303d4/"))
+ (tstamps "0b6402d2")))
+(nets
+(net (code 1) (name "usb.pwr")
+ (node (ref J1) (pin A4))
+ (node (ref J1) (pin A9))
+ (node (ref J1) (pin B4))
+ (node (ref J1) (pin B9))
+ (node (ref U1) (pin 3))
+ (node (ref C1) (pin 1))
+ (node (ref D3) (pin 4))
+ (node (ref C11) (pin 1))
+ (node (ref D5) (pin 4))
+ (node (ref C12) (pin 1))
+ (node (ref D7) (pin 4))
+ (node (ref C13) (pin 1))
+ (node (ref D9) (pin 4))
+ (node (ref C14) (pin 1))
+ (node (ref D11) (pin 4))
+ (node (ref C15) (pin 1))
+ (node (ref D13) (pin 4))
+ (node (ref C16) (pin 1))
+ (node (ref U3) (pin 5))
+ (node (ref C17) (pin 1)))
+(net (code 2) (name "usb.gnd")
+ (node (ref J1) (pin A1))
+ (node (ref J1) (pin A12))
+ (node (ref J1) (pin B1))
+ (node (ref J1) (pin B12))
+ (node (ref J1) (pin S1))
+ (node (ref R1) (pin 1))
+ (node (ref R2) (pin 1))
+ (node (ref U1) (pin 1))
+ (node (ref C1) (pin 2))
+ (node (ref C2) (pin 2))
+ (node (ref U2) (pin 23))
+ (node (ref U2) (pin 35))
+ (node (ref U2) (pin 44))
+ (node (ref U2) (pin 47))
+ (node (ref U2) (pin 8))
+ (node (ref C3) (pin 2))
+ (node (ref C4) (pin 2))
+ (node (ref C5) (pin 2))
+ (node (ref C6) (pin 2))
+ (node (ref C7) (pin 2))
+ (node (ref C8) (pin 2))
+ (node (ref X1) (pin 2))
+ (node (ref X1) (pin 4))
+ (node (ref C9) (pin 2))
+ (node (ref C10) (pin 2))
+ (node (ref J2) (pin 3))
+ (node (ref J2) (pin 5))
+ (node (ref J2) (pin 9))
+ (node (ref R4) (pin 2))
+ (node (ref D3) (pin 2))
+ (node (ref C11) (pin 2))
+ (node (ref D5) (pin 2))
+ (node (ref C12) (pin 2))
+ (node (ref D7) (pin 2))
+ (node (ref C13) (pin 2))
+ (node (ref D9) (pin 2))
+ (node (ref C14) (pin 2))
+ (node (ref D11) (pin 2))
+ (node (ref C15) (pin 2))
+ (node (ref D13) (pin 2))
+ (node (ref C16) (pin 2))
+ (node (ref U3) (pin 1))
+ (node (ref U3) (pin 3))
+ (node (ref C17) (pin 2)))
+(net (code 3) (name "usb.usb.dp")
+ (node (ref J1) (pin A6))
+ (node (ref J1) (pin B6))
+ (node (ref U2) (pin 33))
+ (node (ref R3) (pin 2)))
+(net (code 4) (name "usb.usb.dm")
+ (node (ref J1) (pin A7))
+ (node (ref J1) (pin B7))
+ (node (ref U2) (pin 32)))
+(net (code 5) (name "usb.conn.cc.cc1")
+ (node (ref J1) (pin A5))
+ (node (ref R1) (pin 2)))
+(net (code 6) (name "usb.conn.cc.cc2")
+ (node (ref J1) (pin B5))
+ (node (ref R2) (pin 2)))
+(net (code 7) (name "reg.pwr_out")
+ (node (ref U1) (pin 2))
+ (node (ref C2) (pin 1))
+ (node (ref U2) (pin 1))
+ (node (ref U2) (pin 24))
+ (node (ref U2) (pin 36))
+ (node (ref U2) (pin 48))
+ (node (ref U2) (pin 9))
+ (node (ref C3) (pin 1))
+ (node (ref C4) (pin 1))
+ (node (ref C5) (pin 1))
+ (node (ref C6) (pin 1))
+ (node (ref C7) (pin 1))
+ (node (ref C8) (pin 1))
+ (node (ref J2) (pin 1))
+ (node (ref R3) (pin 1)))
+(net (code 8) (name "mcu.gpio.cols_0")
+ (node (ref U2) (pin 16))
+ (node (ref SW1) (pin 1))
+ (node (ref SW3) (pin 1))
+ (node (ref SW5) (pin 1)))
+(net (code 9) (name "mcu.gpio.cols_1")
+ (node (ref U2) (pin 17))
+ (node (ref SW2) (pin 1))
+ (node (ref SW4) (pin 1))
+ (node (ref SW6) (pin 1)))
+(net (code 10) (name "mcu.gpio.rows_0")
+ (node (ref U2) (pin 18))
+ (node (ref D2) (pin 1))
+ (node (ref D4) (pin 1)))
+(net (code 11) (name "mcu.gpio.rows_1")
+ (node (ref U2) (pin 19))
+ (node (ref D6) (pin 1))
+ (node (ref D8) (pin 1)))
+(net (code 12) (name "mcu.gpio.rows_2")
+ (node (ref U2) (pin 20))
+ (node (ref D10) (pin 1))
+ (node (ref D12) (pin 1)))
+(net (code 13) (name "mcu.xtal_node.xi")
+ (node (ref U2) (pin 5))
+ (node (ref X1) (pin 1))
+ (node (ref C9) (pin 1)))
+(net (code 14) (name "mcu.xtal_node.xo")
+ (node (ref U2) (pin 6))
+ (node (ref X1) (pin 3))
+ (node (ref C10) (pin 1)))
+(net (code 15) (name "mcu.swd_node.swdio")
+ (node (ref U2) (pin 34))
+ (node (ref J2) (pin 2)))
+(net (code 16) (name "mcu.swd_node.swclk")
+ (node (ref U2) (pin 37))
+ (node (ref J2) (pin 4)))
+(net (code 17) (name "mcu.reset_node")
+ (node (ref U2) (pin 7))
+ (node (ref J2) (pin 10)))
+(net (code 18) (name "mcu.swd.tdi")
+ (node (ref J2) (pin 8)))
+(net (code 19) (name "mcu.swd.swo")
+ (node (ref J2) (pin 6)))
+(net (code 20) (name "led.signal")
+ (node (ref U2) (pin 10))
+ (node (ref D1) (pin 2)))
+(net (code 21) (name "led.package.k")
+ (node (ref D1) (pin 1))
+ (node (ref R4) (pin 1)))
+(net (code 22) (name "sw.npx_din")
+ (node (ref D3) (pin 3))
+ (node (ref U3) (pin 4)))
+(net (code 23) (name "sw.npx_dout")
+ (node (ref D13) (pin 1)))
+(net (code 24) (name "sw.sw[0,0].npx_dout")
+ (node (ref D3) (pin 1))
+ (node (ref D5) (pin 3)))
+(net (code 25) (name "sw.sw[0,0].sw.com")
+ (node (ref SW1) (pin 2))
+ (node (ref D2) (pin 2)))
+(net (code 26) (name "sw.sw[1,0].npx_dout")
+ (node (ref D5) (pin 1))
+ (node (ref D9) (pin 3)))
+(net (code 27) (name "sw.sw[1,0].sw.com")
+ (node (ref SW2) (pin 2))
+ (node (ref D4) (pin 2)))
+(net (code 28) (name "sw.sw[0,1].npx_din")
+ (node (ref D7) (pin 3))
+ (node (ref D9) (pin 1)))
+(net (code 29) (name "sw.sw[0,1].npx_dout")
+ (node (ref D7) (pin 1))
+ (node (ref D11) (pin 3)))
+(net (code 30) (name "sw.sw[0,1].sw.com")
+ (node (ref SW3) (pin 2))
+ (node (ref D6) (pin 2)))
+(net (code 31) (name "sw.sw[1,1].sw.com")
+ (node (ref SW4) (pin 2))
+ (node (ref D8) (pin 2)))
+(net (code 32) (name "sw.sw[0,2].npx_dout")
+ (node (ref D11) (pin 1))
+ (node (ref D13) (pin 3)))
+(net (code 33) (name "sw.sw[0,2].sw.com")
+ (node (ref SW5) (pin 2))
+ (node (ref D10) (pin 2)))
+(net (code 34) (name "sw.sw[1,2].sw.com")
+ (node (ref SW6) (pin 2))
+ (node (ref D12) (pin 2)))
+(net (code 35) (name "npx_shift.input")
+ (node (ref U2) (pin 11))
+ (node (ref U3) (pin 2))))
+)
\ No newline at end of file
diff --git a/examples/TestBlinkyPinned/TestBlinkyPinned.svgpcb.js b/examples/TestBlinkyPinned/TestBlinkyPinned.svgpcb.js
new file mode 100644
index 000000000..367af44a0
--- /dev/null
+++ b/examples/TestBlinkyPinned/TestBlinkyPinned.svgpcb.js
@@ -0,0 +1,260 @@
+const board = new PCB();
+
+const sw = SwitchDiodeMatrixNeopixels_2_3_sw(pt(0.039, 0.039))
+// usb.conn
+const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, {
+ translate: pt(2.252, 0.165), rotate: 0,
+ id: 'J1'
+})
+// usb.cc_pull.cc1
+const R1 = board.add(R_0603_1608Metric, {
+ translate: pt(2.101, 0.420), rotate: 0,
+ id: 'R1'
+})
+// usb.cc_pull.cc2
+const R2 = board.add(R_0603_1608Metric, {
+ translate: pt(2.257, 0.420), rotate: 0,
+ id: 'R2'
+})
+// reg.ic
+const U1 = board.add(SOT_223_3_TabPin2, {
+ translate: pt(1.291, 0.935), rotate: 0,
+ id: 'U1'
+})
+// reg.in_cap.cap
+const C1 = board.add(C_0603_1608Metric, {
+ translate: pt(1.397, 1.145), rotate: 0,
+ id: 'C1'
+})
+// reg.out_cap.cap
+const C2 = board.add(C_1206_3216Metric, {
+ translate: pt(1.209, 1.162), rotate: 0,
+ id: 'C2'
+})
+// mcu.ic
+const U2 = board.add(LQFP_48_7x7mm_P0_5mm, {
+ translate: pt(1.321, 0.203), rotate: 0,
+ id: 'U2'
+})
+// mcu.pwr_cap[0].cap
+const C3 = board.add(C_0805_2012Metric, {
+ translate: pt(1.390, 0.483), rotate: 0,
+ id: 'C3'
+})
+// mcu.pwr_cap[1].cap
+const C4 = board.add(C_0603_1608Metric, {
+ translate: pt(1.554, 0.474), rotate: 0,
+ id: 'C4'
+})
+// mcu.pwr_cap[2].cap
+const C5 = board.add(C_0603_1608Metric, {
+ translate: pt(1.710, 0.474), rotate: 0,
+ id: 'C5'
+})
+// mcu.pwr_cap[3].cap
+const C6 = board.add(C_0603_1608Metric, {
+ translate: pt(1.866, 0.474), rotate: 0,
+ id: 'C6'
+})
+// mcu.vdda_cap_0.cap
+const C7 = board.add(C_0603_1608Metric, {
+ translate: pt(1.176, 0.647), rotate: 0,
+ id: 'C7'
+})
+// mcu.vdda_cap_1.cap
+const C8 = board.add(C_0603_1608Metric, {
+ translate: pt(1.332, 0.647), rotate: 0,
+ id: 'C8'
+})
+// mcu.crystal.package
+const X1 = board.add(Crystal_SMD_3225_4Pin_3_2x2_5mm, {
+ translate: pt(1.201, 0.512), rotate: 0,
+ id: 'X1'
+})
+// mcu.crystal.cap_a
+const C9 = board.add(C_0603_1608Metric, {
+ translate: pt(1.488, 0.647), rotate: 0,
+ id: 'C9'
+})
+// mcu.crystal.cap_b
+const C10 = board.add(C_0603_1608Metric, {
+ translate: pt(1.644, 0.647), rotate: 0,
+ id: 'C10'
+})
+// mcu.swd.conn
+const J2 = board.add(PinHeader_2x05_P1_27mm_Vertical_SMD, {
+ translate: pt(1.732, 0.146), rotate: 0,
+ id: 'J2'
+})
+// mcu.usb_pull.dp
+const R3 = board.add(R_0603_1608Metric, {
+ translate: pt(1.800, 0.647), rotate: 0,
+ id: 'R3'
+})
+// led.package
+const D1 = board.add(LED_0603_1608Metric, {
+ translate: pt(1.921, 0.823), rotate: 0,
+ id: 'D1'
+})
+// led.res
+const R4 = board.add(R_0603_1608Metric, {
+ translate: pt(1.920, 0.920), rotate: 0,
+ id: 'R4'
+})
+// npx_shift.ic
+const U3 = board.add(SOT_23_5, {
+ translate: pt(1.663, 0.861), rotate: 0,
+ id: 'U3'
+})
+// npx_shift.vdd_cap.cap
+const C17 = board.add(C_0603_1608Metric, {
+ translate: pt(1.641, 0.996), rotate: 0,
+ id: 'C17'
+})
+
+board.setNetlist([
+ {name: "usb.pwr", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["U1", "3"], ["C1", "1"], ["D3", "4"], ["C11", "1"], ["D5", "4"], ["C12", "1"], ["D7", "4"], ["C13", "1"], ["D9", "4"], ["C14", "1"], ["D11", "4"], ["C15", "1"], ["D13", "4"], ["C16", "1"], ["U3", "5"], ["C17", "1"]]},
+ {name: "usb.gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["U1", "1"], ["C1", "2"], ["C2", "2"], ["U2", "23"], ["U2", "35"], ["U2", "44"], ["U2", "47"], ["U2", "8"], ["C3", "2"], ["C4", "2"], ["C5", "2"], ["C6", "2"], ["C7", "2"], ["C8", "2"], ["X1", "2"], ["X1", "4"], ["C9", "2"], ["C10", "2"], ["J2", "3"], ["J2", "5"], ["J2", "9"], ["R4", "2"], ["D3", "2"], ["C11", "2"], ["D5", "2"], ["C12", "2"], ["D7", "2"], ["C13", "2"], ["D9", "2"], ["C14", "2"], ["D11", "2"], ["C15", "2"], ["D13", "2"], ["C16", "2"], ["U3", "1"], ["U3", "3"], ["C17", "2"]]},
+ {name: "usb.usb.dp", pads: [["J1", "A6"], ["J1", "B6"], ["U2", "33"], ["R3", "2"]]},
+ {name: "usb.usb.dm", pads: [["J1", "A7"], ["J1", "B7"], ["U2", "32"]]},
+ {name: "usb.conn.cc.cc1", pads: [["J1", "A5"], ["R1", "2"]]},
+ {name: "usb.conn.cc.cc2", pads: [["J1", "B5"], ["R2", "2"]]},
+ {name: "reg.pwr_out", pads: [["U1", "2"], ["C2", "1"], ["U2", "1"], ["U2", "24"], ["U2", "36"], ["U2", "48"], ["U2", "9"], ["C3", "1"], ["C4", "1"], ["C5", "1"], ["C6", "1"], ["C7", "1"], ["C8", "1"], ["J2", "1"], ["R3", "1"]]},
+ {name: "mcu.gpio.cols_0", pads: [["U2", "16"], ["SW1", "1"], ["SW3", "1"], ["SW5", "1"]]},
+ {name: "mcu.gpio.cols_1", pads: [["U2", "17"], ["SW2", "1"], ["SW4", "1"], ["SW6", "1"]]},
+ {name: "mcu.gpio.rows_0", pads: [["U2", "18"], ["D2", "1"], ["D4", "1"]]},
+ {name: "mcu.gpio.rows_1", pads: [["U2", "19"], ["D6", "1"], ["D8", "1"]]},
+ {name: "mcu.gpio.rows_2", pads: [["U2", "20"], ["D10", "1"], ["D12", "1"]]},
+ {name: "mcu.xtal_node.xi", pads: [["U2", "5"], ["X1", "1"], ["C9", "1"]]},
+ {name: "mcu.xtal_node.xo", pads: [["U2", "6"], ["X1", "3"], ["C10", "1"]]},
+ {name: "mcu.swd_node.swdio", pads: [["U2", "34"], ["J2", "2"]]},
+ {name: "mcu.swd_node.swclk", pads: [["U2", "37"], ["J2", "4"]]},
+ {name: "mcu.reset_node", pads: [["U2", "7"], ["J2", "10"]]},
+ {name: "mcu.swd.tdi", pads: [["J2", "8"]]},
+ {name: "mcu.swd.swo", pads: [["J2", "6"]]},
+ {name: "led.signal", pads: [["U2", "10"], ["D1", "2"]]},
+ {name: "led.package.k", pads: [["D1", "1"], ["R4", "1"]]},
+ {name: "sw.npx_din", pads: [["D3", "3"], ["U3", "4"]]},
+ {name: "sw.npx_dout", pads: [["D13", "1"]]},
+ {name: "sw.sw[0,0].npx_dout", pads: [["D3", "1"], ["D5", "3"]]},
+ {name: "sw.sw[0,0].sw.com", pads: [["SW1", "2"], ["D2", "2"]]},
+ {name: "sw.sw[1,0].npx_dout", pads: [["D5", "1"], ["D9", "3"]]},
+ {name: "sw.sw[1,0].sw.com", pads: [["SW2", "2"], ["D4", "2"]]},
+ {name: "sw.sw[0,1].npx_din", pads: [["D7", "3"], ["D9", "1"]]},
+ {name: "sw.sw[0,1].npx_dout", pads: [["D7", "1"], ["D11", "3"]]},
+ {name: "sw.sw[0,1].sw.com", pads: [["SW3", "2"], ["D6", "2"]]},
+ {name: "sw.sw[1,1].sw.com", pads: [["SW4", "2"], ["D8", "2"]]},
+ {name: "sw.sw[0,2].npx_dout", pads: [["D11", "1"], ["D13", "3"]]},
+ {name: "sw.sw[0,2].sw.com", pads: [["SW5", "2"], ["D10", "2"]]},
+ {name: "sw.sw[1,2].sw.com", pads: [["SW6", "2"], ["D12", "2"]]},
+ {name: "npx_shift.input", pads: [["U2", "11"], ["U3", "2"]]}
+])
+
+const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
+const limit1 = pt(2.5795275590551188, 2.1181102362204722);
+const xMin = Math.min(limit0[0], limit1[0]);
+const xMax = Math.max(limit0[0], limit1[0]);
+const yMin = Math.min(limit0[1], limit1[1]);
+const yMax = Math.max(limit0[1], limit1[1]);
+
+const filletRadius = 0.1;
+const outline = path(
+ [(xMin+xMax/2), yMax],
+ ["fillet", filletRadius, [xMax, yMax]],
+ ["fillet", filletRadius, [xMax, yMin]],
+ ["fillet", filletRadius, [xMin, yMin]],
+ ["fillet", filletRadius, [xMin, yMax]],
+ [(xMin+xMax/2), yMax],
+);
+board.addShape("outline", outline);
+
+renderPCB({
+ pcb: board,
+ layerColors: {
+ "F.Paste": "#000000ff",
+ "F.Mask": "#000000ff",
+ "B.Mask": "#000000ff",
+ "componentLabels": "#00e5e5e5",
+ "outline": "#002d00ff",
+ "padLabels": "#ffff99e5",
+ "B.Cu": "#ef4e4eff",
+ "F.Cu": "#ff8c00cc",
+ },
+ limits: {
+ x: [xMin, xMax],
+ y: [yMin, yMax]
+ },
+ background: "#00000000",
+ mmPerUnit: 25.4
+})
+
+function SwitchDiodeMatrixNeopixels_2_3_sw(xy, colSpacing=0.5, rowSpacing=0.5, diodeOffset=[0.25, 0]) {
+ // Circuit generator params
+ const ncols = 2
+ const nrows = 3
+
+ // Global params
+ const traceSize = 0.015
+ const viaTemplate = via(0.02, 0.035)
+
+ // Return object
+ const obj = {
+ footprints: {},
+ pts: {}
+ }
+
+ // Actual generator code
+ allColWirePoints = []
+ for (let yIndex=0; yIndex < nrows; yIndex++) {
+ colWirePoints = []
+ rowDiodeVias = []
+
+ for (let xIndex=0; xIndex < ncols; xIndex++) {
+ index = yIndex * ncols + xIndex + 1
+
+ buttonPos = [xy[0] + colSpacing * xIndex, xy[1] + rowSpacing * yIndex]
+ obj.footprints[`SW${1 + xIndex * nrows + yIndex}`] = button = board.add(
+ SW_Hotswap_Kailh_MX,
+ {
+ translate: buttonPos, rotate: 0,
+ id: `SW${1 + xIndex * nrows + yIndex}`
+ })
+
+ diodePos = [buttonPos[0] + diodeOffset[0], buttonPos[1] + diodeOffset[1]]
+ obj[`D${2 + xIndex * nrows + yIndex}`] = diode = board.add(
+ D_SOD_323,
+ {
+ translate: diodePos, rotate: 90,
+ id: `D${2 + xIndex * nrows + yIndex}`
+ })
+
+ // create stub wire for button -> column common line
+ colWirePoint = [buttonPos[0], button.padY("2")]
+ board.wire([colWirePoint, button.pad("2")], traceSize, "F.Cu")
+ colWirePoints.push(colWirePoint)
+
+ // create wire for button -> diode
+ board.wire([button.pad("1"), diode.pad("1")], traceSize, "F.Cu")
+ diodeViaPos = [diode.padX("2"), buttonPos[1] + rowSpacing / 2]
+ diodeVia = board.add(viaTemplate, {translate: diodeViaPos})
+ board.wire([diode.pad("2"), diodeVia.pos], traceSize)
+
+ if (rowDiodeVias.length > 0) {
+ board.wire([rowDiodeVias[rowDiodeVias.length - 1].pos, diodeVia.pos], traceSize, "B.Cu")
+ }
+ rowDiodeVias.push(diodeVia)
+ }
+ allColWirePoints.push(colWirePoints)
+ }
+
+ // Inter-row wiring
+ for (let xIndex=0; xIndex < allColWirePoints[0].length; xIndex++) {
+ board.wire([
+ allColWirePoints[0][xIndex],
+ allColWirePoints[allColWirePoints.length - 1][xIndex]
+ ], traceSize, "F.Cu")
+ }
+
+ return obj
+}
+
diff --git a/examples/TestBlinkyRegulated/TestBlinkyRegulated.net.ref b/examples/TestBlinkyRegulated/TestBlinkyRegulated.net.ref
new file mode 100644
index 000000000..8e8f86a3b
--- /dev/null
+++ b/examples/TestBlinkyRegulated/TestBlinkyRegulated.net.ref
@@ -0,0 +1,523 @@
+(export (version D)
+(components
+(comp (ref "J1")
+ (value "usb.conn")
+ (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11")
+ (property (name "Sheetname") (value "usb"))
+ (property (name "Sheetfile") (value "edg.parts.connector.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)"))
+ (property (name "edg_value") (value "COM-15111"))
+ (sheetpath (names "/usb/") (tstamps "/02aa014b/"))
+ (tstamps "042701af"))
+(comp (ref "R1")
+ (value "usb.cc_pull.cc1")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "cc_pull"))
+ (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
+ (property (name "edg_path") (value "usb.cc_pull.cc1"))
+ (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))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
+ (tstamps "022300f8"))
+(comp (ref "R2")
+ (value "usb.cc_pull.cc2")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "cc_pull"))
+ (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
+ (property (name "edg_path") (value "usb.cc_pull.cc2"))
+ (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))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
+ (tstamps "022400f9"))
+(comp (ref "U1")
+ (value "reg.ic")
+ (footprint "Package_TO_SOT_SMD:SOT-223-3_TabPin2")
+ (property (name "Sheetname") (value "reg"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (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 "AMS1117-3.3 (Advanced Monolithic Systems)"))
+ (property (name "edg_value") (value "AMS1117-3.3"))
+ (sheetpath (names "/reg/") (tstamps "/028a013f/"))
+ (tstamps "013700cd"))
+(comp (ref "C1")
+ (value "reg.in_cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "reg"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (property (name "edg_path") (value "reg.in_cap.cap"))
+ (property (name "edg_short_path") (value "reg.in_cap"))
+ (property (name "edg_refdes") (value "C1"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/reg/") (tstamps "/028a013f/"))
+ (tstamps "0879026b"))
+(comp (ref "C2")
+ (value "reg.out_cap")
+ (footprint "Capacitor_SMD:C_1206_3216Metric")
+ (property (name "Sheetname") (value "reg"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (property (name "edg_path") (value "reg.out_cap.cap"))
+ (property (name "edg_short_path") (value "reg.out_cap"))
+ (property (name "edg_refdes") (value "C2"))
+ (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/reg/") (tstamps "/028a013f/"))
+ (tstamps "0be902ec"))
+(comp (ref "U2")
+ (value "mcu.ic")
+ (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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)"))
+ (property (name "edg_value") (value "STM32F103xxT6"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "013700cd"))
+(comp (ref "C3")
+ (value "mcu.pwr_cap[0]")
+ (footprint "Capacitor_SMD:C_0805_2012Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C3"))
+ (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168703d5"))
+(comp (ref "C4")
+ (value "mcu.pwr_cap[1]")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C4"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168903d6"))
+(comp (ref "C5")
+ (value "mcu.pwr_cap[2]")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C5"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168b03d7"))
+(comp (ref "C6")
+ (value "mcu.pwr_cap[3]")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C6"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168d03d8"))
+(comp (ref "C7")
+ (value "mcu.vdda_cap_0")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C7"))
+ (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))"))
+ (property (name "edg_value") (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "15dc03c2"))
+(comp (ref "C8")
+ (value "mcu.vdda_cap_1")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C8"))
+ (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "15dd03c3"))
+(comp (ref "X1")
+ (value "mcu.crystal.package")
+ (footprint "Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.package"))
+ (property (name "edg_short_path") (value "mcu.crystal.package"))
+ (property (name "edg_refdes") (value "X1"))
+ (property (name "edg_part") (value "X32258MOB4SI (Yangxing Tech)"))
+ (property (name "edg_value") (value "8MHz SMD Crystal Resonator 12pF ±10ppm ±30ppm -40℃~+85℃ SMD3225-4P Crystals ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "0b4e02cd"))
+(comp (ref "C9")
+ (value "mcu.crystal.cap_a")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.cap_a"))
+ (property (name "edg_short_path") (value "mcu.crystal.cap_a"))
+ (property (name "edg_refdes") (value "C9"))
+ (property (name "edg_part") (value "CL10C100JB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 10pF C0G ±5% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "05e701f5"))
+(comp (ref "C10")
+ (value "mcu.crystal.cap_b")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.cap_b"))
+ (property (name "edg_short_path") (value "mcu.crystal.cap_b"))
+ (property (name "edg_refdes") (value "C10"))
+ (property (name "edg_part") (value "CL10C100JB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 10pF C0G ±5% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "05e801f6"))
+(comp (ref "J2")
+ (value "mcu.swd")
+ (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"))
+ (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)"))
+ (property (name "edg_value") (value "PinHeader1.27 Shrouded 2x5"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "02ae014f"))
+(comp (ref "R3")
+ (value "mcu.usb_pull")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (property (name "edg_path") (value "mcu.usb_pull.dp"))
+ (property (name "edg_short_path") (value "mcu.usb_pull"))
+ (property (name "edg_refdes") (value "R3"))
+ (property (name "edg_part") (value "0603WAF1501T5E (UNI-ROYAL(Uniroyal Elec))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1.5kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "0f5f0367"))
+(comp (ref "D1")
+ (value "led.package")
+ (footprint "LED_SMD:LED_0603_1608Metric")
+ (property (name "Sheetname") (value "led"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
+ (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
+ (tstamps "0b4e02cd"))
+(comp (ref "R4")
+ (value "led.res")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "led"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorLed"))
+ (property (name "edg_path") (value "led.res"))
+ (property (name "edg_short_path") (value "led.res"))
+ (property (name "edg_refdes") (value "R4"))
+ (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
+ (tstamps "0296014b"))
+(comp (ref "SW1")
+ (value "sw.sw[0,0].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,0].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].sw"))
+ (property (name "edg_refdes") (value "SW1"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
+ (tstamps "015f00eb"))
+(comp (ref "D2")
+ (value "sw.sw[0,0].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,0].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].d"))
+ (property (name "edg_refdes") (value "D2"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
+ (tstamps "00650065"))
+(comp (ref "SW2")
+ (value "sw.sw[1,0].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,0].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].sw"))
+ (property (name "edg_refdes") (value "SW2"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
+ (tstamps "015f00eb"))
+(comp (ref "D3")
+ (value "sw.sw[1,0].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,0].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].d"))
+ (property (name "edg_refdes") (value "D3"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
+ (tstamps "00650065"))
+(comp (ref "SW3")
+ (value "sw.sw[0,1].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,1].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].sw"))
+ (property (name "edg_refdes") (value "SW3"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
+ (tstamps "015f00eb"))
+(comp (ref "D4")
+ (value "sw.sw[0,1].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,1].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].d"))
+ (property (name "edg_refdes") (value "D4"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
+ (tstamps "00650065"))
+(comp (ref "SW4")
+ (value "sw.sw[1,1].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,1].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].sw"))
+ (property (name "edg_refdes") (value "SW4"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
+ (tstamps "015f00eb"))
+(comp (ref "D5")
+ (value "sw.sw[1,1].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,1].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].d"))
+ (property (name "edg_refdes") (value "D5"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
+ (tstamps "00650065"))
+(comp (ref "SW5")
+ (value "sw.sw[0,2].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,2].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].sw"))
+ (property (name "edg_refdes") (value "SW5"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
+ (tstamps "015f00eb"))
+(comp (ref "D6")
+ (value "sw.sw[0,2].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,2].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].d"))
+ (property (name "edg_refdes") (value "D6"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
+ (tstamps "00650065"))
+(comp (ref "SW6")
+ (value "sw.sw[1,2].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,2].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].sw"))
+ (property (name "edg_refdes") (value "SW6"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
+ (tstamps "015f00eb"))
+(comp (ref "D7")
+ (value "sw.sw[1,2].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,2].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].d"))
+ (property (name "edg_refdes") (value "D7"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
+ (tstamps "00650065")))
+(nets
+(net (code 1) (name "usb.pwr")
+ (node (ref J1) (pin A4))
+ (node (ref J1) (pin A9))
+ (node (ref J1) (pin B4))
+ (node (ref J1) (pin B9))
+ (node (ref U1) (pin 3))
+ (node (ref C1) (pin 1)))
+(net (code 2) (name "usb.gnd")
+ (node (ref J1) (pin A1))
+ (node (ref J1) (pin A12))
+ (node (ref J1) (pin B1))
+ (node (ref J1) (pin B12))
+ (node (ref J1) (pin S1))
+ (node (ref R1) (pin 1))
+ (node (ref R2) (pin 1))
+ (node (ref U1) (pin 1))
+ (node (ref C1) (pin 2))
+ (node (ref C2) (pin 2))
+ (node (ref U2) (pin 23))
+ (node (ref U2) (pin 35))
+ (node (ref U2) (pin 44))
+ (node (ref U2) (pin 47))
+ (node (ref U2) (pin 8))
+ (node (ref C3) (pin 2))
+ (node (ref C4) (pin 2))
+ (node (ref C5) (pin 2))
+ (node (ref C6) (pin 2))
+ (node (ref C7) (pin 2))
+ (node (ref C8) (pin 2))
+ (node (ref X1) (pin 2))
+ (node (ref X1) (pin 4))
+ (node (ref C9) (pin 2))
+ (node (ref C10) (pin 2))
+ (node (ref J2) (pin 3))
+ (node (ref J2) (pin 5))
+ (node (ref J2) (pin 9))
+ (node (ref R4) (pin 2)))
+(net (code 3) (name "usb.usb.dp")
+ (node (ref J1) (pin A6))
+ (node (ref J1) (pin B6))
+ (node (ref U2) (pin 33))
+ (node (ref R3) (pin 2)))
+(net (code 4) (name "usb.usb.dm")
+ (node (ref J1) (pin A7))
+ (node (ref J1) (pin B7))
+ (node (ref U2) (pin 32)))
+(net (code 5) (name "usb.conn.cc.cc1")
+ (node (ref J1) (pin A5))
+ (node (ref R1) (pin 2)))
+(net (code 6) (name "usb.conn.cc.cc2")
+ (node (ref J1) (pin B5))
+ (node (ref R2) (pin 2)))
+(net (code 7) (name "reg.pwr_out")
+ (node (ref U1) (pin 2))
+ (node (ref C2) (pin 1))
+ (node (ref U2) (pin 1))
+ (node (ref U2) (pin 24))
+ (node (ref U2) (pin 36))
+ (node (ref U2) (pin 48))
+ (node (ref U2) (pin 9))
+ (node (ref C3) (pin 1))
+ (node (ref C4) (pin 1))
+ (node (ref C5) (pin 1))
+ (node (ref C6) (pin 1))
+ (node (ref C7) (pin 1))
+ (node (ref C8) (pin 1))
+ (node (ref J2) (pin 1))
+ (node (ref R3) (pin 1)))
+(net (code 8) (name "mcu.gpio.cols_0")
+ (node (ref U2) (pin 11))
+ (node (ref SW1) (pin 1))
+ (node (ref SW3) (pin 1))
+ (node (ref SW5) (pin 1)))
+(net (code 9) (name "mcu.gpio.cols_1")
+ (node (ref U2) (pin 12))
+ (node (ref SW2) (pin 1))
+ (node (ref SW4) (pin 1))
+ (node (ref SW6) (pin 1)))
+(net (code 10) (name "mcu.gpio.rows_0")
+ (node (ref U2) (pin 13))
+ (node (ref D2) (pin 1))
+ (node (ref D3) (pin 1)))
+(net (code 11) (name "mcu.gpio.rows_1")
+ (node (ref U2) (pin 14))
+ (node (ref D4) (pin 1))
+ (node (ref D5) (pin 1)))
+(net (code 12) (name "mcu.gpio.rows_2")
+ (node (ref U2) (pin 15))
+ (node (ref D6) (pin 1))
+ (node (ref D7) (pin 1)))
+(net (code 13) (name "mcu.xtal_node.xi")
+ (node (ref U2) (pin 5))
+ (node (ref X1) (pin 1))
+ (node (ref C9) (pin 1)))
+(net (code 14) (name "mcu.xtal_node.xo")
+ (node (ref U2) (pin 6))
+ (node (ref X1) (pin 3))
+ (node (ref C10) (pin 1)))
+(net (code 15) (name "mcu.swd_node.swdio")
+ (node (ref U2) (pin 34))
+ (node (ref J2) (pin 2)))
+(net (code 16) (name "mcu.swd_node.swclk")
+ (node (ref U2) (pin 37))
+ (node (ref J2) (pin 4)))
+(net (code 17) (name "mcu.reset_node")
+ (node (ref U2) (pin 7))
+ (node (ref J2) (pin 10)))
+(net (code 18) (name "mcu.swd.tdi")
+ (node (ref J2) (pin 8)))
+(net (code 19) (name "mcu.swd.swo")
+ (node (ref J2) (pin 6)))
+(net (code 20) (name "led.signal")
+ (node (ref U2) (pin 10))
+ (node (ref D1) (pin 2)))
+(net (code 21) (name "led.package.k")
+ (node (ref D1) (pin 1))
+ (node (ref R4) (pin 1)))
+(net (code 22) (name "sw.sw[0,0].sw.com")
+ (node (ref SW1) (pin 2))
+ (node (ref D2) (pin 2)))
+(net (code 23) (name "sw.sw[1,0].sw.com")
+ (node (ref SW2) (pin 2))
+ (node (ref D3) (pin 2)))
+(net (code 24) (name "sw.sw[0,1].sw.com")
+ (node (ref SW3) (pin 2))
+ (node (ref D4) (pin 2)))
+(net (code 25) (name "sw.sw[1,1].sw.com")
+ (node (ref SW4) (pin 2))
+ (node (ref D5) (pin 2)))
+(net (code 26) (name "sw.sw[0,2].sw.com")
+ (node (ref SW5) (pin 2))
+ (node (ref D6) (pin 2)))
+(net (code 27) (name "sw.sw[1,2].sw.com")
+ (node (ref SW6) (pin 2))
+ (node (ref D7) (pin 2))))
+)
\ No newline at end of file
diff --git a/examples/TestBlinkyRegulated/TestBlinkyRegulated.svgpcb.js b/examples/TestBlinkyRegulated/TestBlinkyRegulated.svgpcb.js
new file mode 100644
index 000000000..fa527b5db
--- /dev/null
+++ b/examples/TestBlinkyRegulated/TestBlinkyRegulated.svgpcb.js
@@ -0,0 +1,242 @@
+const board = new PCB();
+
+const sw = SwitchDiodeMatrix_2_3_sw(pt(0.039, 0.039))
+// usb.conn
+const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, {
+ translate: pt(1.328, 0.958), rotate: 0,
+ id: 'J1'
+})
+// usb.cc_pull.cc1
+const R1 = board.add(R_0603_1608Metric, {
+ translate: pt(1.176, 1.213), rotate: 0,
+ id: 'R1'
+})
+// usb.cc_pull.cc2
+const R2 = board.add(R_0603_1608Metric, {
+ translate: pt(1.332, 1.213), rotate: 0,
+ id: 'R2'
+})
+// reg.ic
+const U1 = board.add(SOT_223_3_TabPin2, {
+ translate: pt(1.828, 0.935), rotate: 0,
+ id: 'U1'
+})
+// reg.in_cap.cap
+const C1 = board.add(C_0603_1608Metric, {
+ translate: pt(1.934, 1.145), rotate: 0,
+ id: 'C1'
+})
+// reg.out_cap.cap
+const C2 = board.add(C_1206_3216Metric, {
+ translate: pt(1.746, 1.162), rotate: 0,
+ id: 'C2'
+})
+// mcu.ic
+const U2 = board.add(LQFP_48_7x7mm_P0_5mm, {
+ translate: pt(1.321, 0.203), rotate: 0,
+ id: 'U2'
+})
+// mcu.pwr_cap[0].cap
+const C3 = board.add(C_0805_2012Metric, {
+ translate: pt(1.390, 0.483), rotate: 0,
+ id: 'C3'
+})
+// mcu.pwr_cap[1].cap
+const C4 = board.add(C_0603_1608Metric, {
+ translate: pt(1.554, 0.474), rotate: 0,
+ id: 'C4'
+})
+// mcu.pwr_cap[2].cap
+const C5 = board.add(C_0603_1608Metric, {
+ translate: pt(1.710, 0.474), rotate: 0,
+ id: 'C5'
+})
+// mcu.pwr_cap[3].cap
+const C6 = board.add(C_0603_1608Metric, {
+ translate: pt(1.866, 0.474), rotate: 0,
+ id: 'C6'
+})
+// mcu.vdda_cap_0.cap
+const C7 = board.add(C_0603_1608Metric, {
+ translate: pt(1.176, 0.647), rotate: 0,
+ id: 'C7'
+})
+// mcu.vdda_cap_1.cap
+const C8 = board.add(C_0603_1608Metric, {
+ translate: pt(1.332, 0.647), rotate: 0,
+ id: 'C8'
+})
+// mcu.crystal.package
+const X1 = board.add(Crystal_SMD_3225_4Pin_3_2x2_5mm, {
+ translate: pt(1.201, 0.512), rotate: 0,
+ id: 'X1'
+})
+// mcu.crystal.cap_a
+const C9 = board.add(C_0603_1608Metric, {
+ translate: pt(1.488, 0.647), rotate: 0,
+ id: 'C9'
+})
+// mcu.crystal.cap_b
+const C10 = board.add(C_0603_1608Metric, {
+ translate: pt(1.644, 0.647), rotate: 0,
+ id: 'C10'
+})
+// mcu.swd.conn
+const J2 = board.add(PinHeader_2x05_P1_27mm_Vertical_SMD, {
+ translate: pt(1.732, 0.146), rotate: 0,
+ id: 'J2'
+})
+// mcu.usb_pull.dp
+const R3 = board.add(R_0603_1608Metric, {
+ translate: pt(1.800, 0.647), rotate: 0,
+ id: 'R3'
+})
+// led.package
+const D1 = board.add(LED_0603_1608Metric, {
+ translate: pt(2.178, 0.823), rotate: 0,
+ id: 'D1'
+})
+// led.res
+const R4 = board.add(R_0603_1608Metric, {
+ translate: pt(2.178, 0.920), rotate: 0,
+ id: 'R4'
+})
+
+board.setNetlist([
+ {name: "usb.pwr", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["U1", "3"], ["C1", "1"]]},
+ {name: "usb.gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["U1", "1"], ["C1", "2"], ["C2", "2"], ["U2", "23"], ["U2", "35"], ["U2", "44"], ["U2", "47"], ["U2", "8"], ["C3", "2"], ["C4", "2"], ["C5", "2"], ["C6", "2"], ["C7", "2"], ["C8", "2"], ["X1", "2"], ["X1", "4"], ["C9", "2"], ["C10", "2"], ["J2", "3"], ["J2", "5"], ["J2", "9"], ["R4", "2"]]},
+ {name: "usb.usb.dp", pads: [["J1", "A6"], ["J1", "B6"], ["U2", "33"], ["R3", "2"]]},
+ {name: "usb.usb.dm", pads: [["J1", "A7"], ["J1", "B7"], ["U2", "32"]]},
+ {name: "usb.conn.cc.cc1", pads: [["J1", "A5"], ["R1", "2"]]},
+ {name: "usb.conn.cc.cc2", pads: [["J1", "B5"], ["R2", "2"]]},
+ {name: "reg.pwr_out", pads: [["U1", "2"], ["C2", "1"], ["U2", "1"], ["U2", "24"], ["U2", "36"], ["U2", "48"], ["U2", "9"], ["C3", "1"], ["C4", "1"], ["C5", "1"], ["C6", "1"], ["C7", "1"], ["C8", "1"], ["J2", "1"], ["R3", "1"]]},
+ {name: "mcu.gpio.cols_0", pads: [["U2", "11"], ["SW1", "1"], ["SW3", "1"], ["SW5", "1"]]},
+ {name: "mcu.gpio.cols_1", pads: [["U2", "12"], ["SW2", "1"], ["SW4", "1"], ["SW6", "1"]]},
+ {name: "mcu.gpio.rows_0", pads: [["U2", "13"], ["D2", "1"], ["D3", "1"]]},
+ {name: "mcu.gpio.rows_1", pads: [["U2", "14"], ["D4", "1"], ["D5", "1"]]},
+ {name: "mcu.gpio.rows_2", pads: [["U2", "15"], ["D6", "1"], ["D7", "1"]]},
+ {name: "mcu.xtal_node.xi", pads: [["U2", "5"], ["X1", "1"], ["C9", "1"]]},
+ {name: "mcu.xtal_node.xo", pads: [["U2", "6"], ["X1", "3"], ["C10", "1"]]},
+ {name: "mcu.swd_node.swdio", pads: [["U2", "34"], ["J2", "2"]]},
+ {name: "mcu.swd_node.swclk", pads: [["U2", "37"], ["J2", "4"]]},
+ {name: "mcu.reset_node", pads: [["U2", "7"], ["J2", "10"]]},
+ {name: "mcu.swd.tdi", pads: [["J2", "8"]]},
+ {name: "mcu.swd.swo", pads: [["J2", "6"]]},
+ {name: "led.signal", pads: [["U2", "10"], ["D1", "2"]]},
+ {name: "led.package.k", pads: [["D1", "1"], ["R4", "1"]]},
+ {name: "sw.sw[0,0].sw.com", pads: [["SW1", "2"], ["D2", "2"]]},
+ {name: "sw.sw[1,0].sw.com", pads: [["SW2", "2"], ["D3", "2"]]},
+ {name: "sw.sw[0,1].sw.com", pads: [["SW3", "2"], ["D4", "2"]]},
+ {name: "sw.sw[1,1].sw.com", pads: [["SW4", "2"], ["D5", "2"]]},
+ {name: "sw.sw[0,2].sw.com", pads: [["SW5", "2"], ["D6", "2"]]},
+ {name: "sw.sw[1,2].sw.com", pads: [["SW6", "2"], ["D7", "2"]]}
+])
+
+const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
+const limit1 = pt(2.3545275590551187, 2.1181102362204722);
+const xMin = Math.min(limit0[0], limit1[0]);
+const xMax = Math.max(limit0[0], limit1[0]);
+const yMin = Math.min(limit0[1], limit1[1]);
+const yMax = Math.max(limit0[1], limit1[1]);
+
+const filletRadius = 0.1;
+const outline = path(
+ [(xMin+xMax/2), yMax],
+ ["fillet", filletRadius, [xMax, yMax]],
+ ["fillet", filletRadius, [xMax, yMin]],
+ ["fillet", filletRadius, [xMin, yMin]],
+ ["fillet", filletRadius, [xMin, yMax]],
+ [(xMin+xMax/2), yMax],
+);
+board.addShape("outline", outline);
+
+renderPCB({
+ pcb: board,
+ layerColors: {
+ "F.Paste": "#000000ff",
+ "F.Mask": "#000000ff",
+ "B.Mask": "#000000ff",
+ "componentLabels": "#00e5e5e5",
+ "outline": "#002d00ff",
+ "padLabels": "#ffff99e5",
+ "B.Cu": "#ef4e4eff",
+ "F.Cu": "#ff8c00cc",
+ },
+ limits: {
+ x: [xMin, xMax],
+ y: [yMin, yMax]
+ },
+ background: "#00000000",
+ mmPerUnit: 25.4
+})
+
+function SwitchDiodeMatrix_2_3_sw(xy, colSpacing=0.5, rowSpacing=0.5, diodeOffset=[0.25, 0]) {
+ // Circuit generator params
+ const ncols = 2
+ const nrows = 3
+
+ // Global params
+ const traceSize = 0.015
+ const viaTemplate = via(0.02, 0.035)
+
+ // Return object
+ const obj = {
+ footprints: {},
+ pts: {}
+ }
+
+ // Actual generator code
+ allColWirePoints = []
+ for (let yIndex=0; yIndex < nrows; yIndex++) {
+ colWirePoints = []
+ rowDiodeVias = []
+
+ for (let xIndex=0; xIndex < ncols; xIndex++) {
+ index = yIndex * ncols + xIndex + 1
+
+ buttonPos = [xy[0] + colSpacing * xIndex, xy[1] + rowSpacing * yIndex]
+ obj.footprints[`SW${1 + xIndex * nrows + yIndex}`] = button = board.add(
+ SW_Hotswap_Kailh_MX,
+ {
+ translate: buttonPos, rotate: 0,
+ id: `SW${1 + xIndex * nrows + yIndex}`
+ })
+
+ diodePos = [buttonPos[0] + diodeOffset[0], buttonPos[1] + diodeOffset[1]]
+ obj[`D${2 + xIndex * nrows + yIndex}`] = diode = board.add(
+ D_SOD_323,
+ {
+ translate: diodePos, rotate: 90,
+ id: `D${2 + xIndex * nrows + yIndex}`
+ })
+
+ // create stub wire for button -> column common line
+ colWirePoint = [buttonPos[0], button.padY("2")]
+ board.wire([colWirePoint, button.pad("2")], traceSize, "F.Cu")
+ colWirePoints.push(colWirePoint)
+
+ // create wire for button -> diode
+ board.wire([button.pad("1"), diode.pad("1")], traceSize, "F.Cu")
+ diodeViaPos = [diode.padX("2"), buttonPos[1] + rowSpacing / 2]
+ diodeVia = board.add(viaTemplate, {translate: diodeViaPos})
+ board.wire([diode.pad("2"), diodeVia.pos], traceSize)
+
+ if (rowDiodeVias.length > 0) {
+ board.wire([rowDiodeVias[rowDiodeVias.length - 1].pos, diodeVia.pos], traceSize, "B.Cu")
+ }
+ rowDiodeVias.push(diodeVia)
+ }
+ allColWirePoints.push(colWirePoints)
+ }
+
+ // Inter-row wiring
+ for (let xIndex=0; xIndex < allColWirePoints[0].length; xIndex++) {
+ board.wire([
+ allColWirePoints[0][xIndex],
+ allColWirePoints[allColWirePoints.length - 1][xIndex]
+ ], traceSize, "F.Cu")
+ }
+
+ return obj
+}
+
diff --git a/examples/TestBlinkyRgb/TestBlinkyRgb.net.ref b/examples/TestBlinkyRgb/TestBlinkyRgb.net.ref
new file mode 100644
index 000000000..5627e034e
--- /dev/null
+++ b/examples/TestBlinkyRgb/TestBlinkyRgb.net.ref
@@ -0,0 +1,743 @@
+(export (version D)
+(components
+(comp (ref "J1")
+ (value "usb.conn")
+ (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11")
+ (property (name "Sheetname") (value "usb"))
+ (property (name "Sheetfile") (value "edg.parts.connector.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)"))
+ (property (name "edg_value") (value "COM-15111"))
+ (sheetpath (names "/usb/") (tstamps "/02aa014b/"))
+ (tstamps "042701af"))
+(comp (ref "R1")
+ (value "usb.cc_pull.cc1")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "cc_pull"))
+ (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
+ (property (name "edg_path") (value "usb.cc_pull.cc1"))
+ (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))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
+ (tstamps "022300f8"))
+(comp (ref "R2")
+ (value "usb.cc_pull.cc2")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "cc_pull"))
+ (property (name "Sheetfile") (value "edg.parts.connector.UsbPorts.UsbCcPulldownResistor"))
+ (property (name "edg_path") (value "usb.cc_pull.cc2"))
+ (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))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 5.1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/usb/cc_pull/") (tstamps "/02aa014b/0b4c02e3/"))
+ (tstamps "022400f9"))
+(comp (ref "U1")
+ (value "reg.ic")
+ (footprint "Package_TO_SOT_SMD:SOT-223-3_TabPin2")
+ (property (name "Sheetname") (value "reg"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (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 "AMS1117-3.3 (Advanced Monolithic Systems)"))
+ (property (name "edg_value") (value "AMS1117-3.3"))
+ (sheetpath (names "/reg/") (tstamps "/028a013f/"))
+ (tstamps "013700cd"))
+(comp (ref "C1")
+ (value "reg.in_cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "reg"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (property (name "edg_path") (value "reg.in_cap.cap"))
+ (property (name "edg_short_path") (value "reg.in_cap"))
+ (property (name "edg_refdes") (value "C1"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/reg/") (tstamps "/028a013f/"))
+ (tstamps "0879026b"))
+(comp (ref "C2")
+ (value "reg.out_cap")
+ (footprint "Capacitor_SMD:C_1206_3216Metric")
+ (property (name "Sheetname") (value "reg"))
+ (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ams1117"))
+ (property (name "edg_path") (value "reg.out_cap.cap"))
+ (property (name "edg_short_path") (value "reg.out_cap"))
+ (property (name "edg_refdes") (value "C2"))
+ (property (name "edg_part") (value "CL31A226KPHNNNE (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "10V 22uF X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/reg/") (tstamps "/028a013f/"))
+ (tstamps "0be902ec"))
+(comp (ref "U2")
+ (value "mcu.ic")
+ (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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)"))
+ (property (name "edg_value") (value "STM32F103xxT6"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "013700cd"))
+(comp (ref "C3")
+ (value "mcu.pwr_cap[0]")
+ (footprint "Capacitor_SMD:C_0805_2012Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C3"))
+ (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168703d5"))
+(comp (ref "C4")
+ (value "mcu.pwr_cap[1]")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C4"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168903d6"))
+(comp (ref "C5")
+ (value "mcu.pwr_cap[2]")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C5"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168b03d7"))
+(comp (ref "C6")
+ (value "mcu.pwr_cap[3]")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C6"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "168d03d8"))
+(comp (ref "C7")
+ (value "mcu.vdda_cap_0")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C7"))
+ (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))"))
+ (property (name "edg_value") (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "15dc03c2"))
+(comp (ref "C8")
+ (value "mcu.vdda_cap_1")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (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 "C8"))
+ (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "15dd03c3"))
+(comp (ref "X1")
+ (value "mcu.crystal.package")
+ (footprint "Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.package"))
+ (property (name "edg_short_path") (value "mcu.crystal.package"))
+ (property (name "edg_refdes") (value "X1"))
+ (property (name "edg_part") (value "X32258MOB4SI (Yangxing Tech)"))
+ (property (name "edg_value") (value "8MHz SMD Crystal Resonator 12pF ±10ppm ±30ppm -40℃~+85℃ SMD3225-4P Crystals ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "0b4e02cd"))
+(comp (ref "C9")
+ (value "mcu.crystal.cap_a")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.cap_a"))
+ (property (name "edg_short_path") (value "mcu.crystal.cap_a"))
+ (property (name "edg_refdes") (value "C9"))
+ (property (name "edg_part") (value "CL10C100JB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 10pF C0G ±5% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "05e701f5"))
+(comp (ref "C10")
+ (value "mcu.crystal.cap_b")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "crystal"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal"))
+ (property (name "edg_path") (value "mcu.crystal.cap_b"))
+ (property (name "edg_short_path") (value "mcu.crystal.cap_b"))
+ (property (name "edg_refdes") (value "C10"))
+ (property (name "edg_part") (value "CL10C100JB8NNNC (Samsung Electro-Mechanics)"))
+ (property (name "edg_value") (value "50V 10pF C0G ±5% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/"))
+ (tstamps "05e801f6"))
+(comp (ref "J2")
+ (value "mcu.swd")
+ (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"))
+ (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)"))
+ (property (name "edg_value") (value "PinHeader1.27 Shrouded 2x5"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "02ae014f"))
+(comp (ref "R3")
+ (value "mcu.usb_pull")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "mcu"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
+ (property (name "edg_path") (value "mcu.usb_pull.dp"))
+ (property (name "edg_short_path") (value "mcu.usb_pull"))
+ (property (name "edg_refdes") (value "R3"))
+ (property (name "edg_part") (value "0603WAF1501T5E (UNI-ROYAL(Uniroyal Elec))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1.5kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/mcu/") (tstamps "/02850146/"))
+ (tstamps "0f5f0367"))
+(comp (ref "D1")
+ (value "led.package")
+ (footprint "LED_SMD:LED_0603_1608Metric")
+ (property (name "Sheetname") (value "led"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
+ (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
+ (tstamps "0b4e02cd"))
+(comp (ref "R4")
+ (value "led.res")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "led"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorLed"))
+ (property (name "edg_path") (value "led.res"))
+ (property (name "edg_short_path") (value "led.res"))
+ (property (name "edg_refdes") (value "R4"))
+ (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
+ (tstamps "0296014b"))
+(comp (ref "SW1")
+ (value "sw.sw[0,0].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,0].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].sw"))
+ (property (name "edg_refdes") (value "SW1"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
+ (tstamps "015f00eb"))
+(comp (ref "D2")
+ (value "sw.sw[0,0].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,0].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].d"))
+ (property (name "edg_refdes") (value "D2"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
+ (tstamps "00650065"))
+(comp (ref "D3")
+ (value "sw.sw[0,0].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,0].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].npx.device"))
+ (property (name "edg_refdes") (value "D3"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[0,0]/npx/") (tstamps "/015f00eb/09be022f/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C11")
+ (value "sw.sw[0,0].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,0].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].npx.cap"))
+ (property (name "edg_refdes") (value "C11"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[0,0]/npx/") (tstamps "/015f00eb/09be022f/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW2")
+ (value "sw.sw[1,0].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,0].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].sw"))
+ (property (name "edg_refdes") (value "SW2"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
+ (tstamps "015f00eb"))
+(comp (ref "D4")
+ (value "sw.sw[1,0].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,0].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].d"))
+ (property (name "edg_refdes") (value "D4"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
+ (tstamps "00650065"))
+(comp (ref "D5")
+ (value "sw.sw[1,0].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,0].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].npx.device"))
+ (property (name "edg_refdes") (value "D5"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[1,0]/npx/") (tstamps "/015f00eb/09c20230/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C12")
+ (value "sw.sw[1,0].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,0].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].npx.cap"))
+ (property (name "edg_refdes") (value "C12"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[1,0]/npx/") (tstamps "/015f00eb/09c20230/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW3")
+ (value "sw.sw[0,1].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,1].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].sw"))
+ (property (name "edg_refdes") (value "SW3"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
+ (tstamps "015f00eb"))
+(comp (ref "D6")
+ (value "sw.sw[0,1].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,1].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].d"))
+ (property (name "edg_refdes") (value "D6"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
+ (tstamps "00650065"))
+(comp (ref "D7")
+ (value "sw.sw[0,1].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,1].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].npx.device"))
+ (property (name "edg_refdes") (value "D7"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[0,1]/npx/") (tstamps "/015f00eb/09c00230/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C13")
+ (value "sw.sw[0,1].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,1].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].npx.cap"))
+ (property (name "edg_refdes") (value "C13"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[0,1]/npx/") (tstamps "/015f00eb/09c00230/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW4")
+ (value "sw.sw[1,1].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,1].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].sw"))
+ (property (name "edg_refdes") (value "SW4"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
+ (tstamps "015f00eb"))
+(comp (ref "D8")
+ (value "sw.sw[1,1].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,1].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].d"))
+ (property (name "edg_refdes") (value "D8"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
+ (tstamps "00650065"))
+(comp (ref "D9")
+ (value "sw.sw[1,1].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,1].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].npx.device"))
+ (property (name "edg_refdes") (value "D9"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[1,1]/npx/") (tstamps "/015f00eb/09c40231/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C14")
+ (value "sw.sw[1,1].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,1].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].npx.cap"))
+ (property (name "edg_refdes") (value "C14"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[1,1]/npx/") (tstamps "/015f00eb/09c40231/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW5")
+ (value "sw.sw[0,2].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[0,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,2].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].sw"))
+ (property (name "edg_refdes") (value "SW5"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
+ (tstamps "015f00eb"))
+(comp (ref "D10")
+ (value "sw.sw[0,2].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[0,2].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].d"))
+ (property (name "edg_refdes") (value "D10"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
+ (tstamps "00650065"))
+(comp (ref "D11")
+ (value "sw.sw[0,2].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,2].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].npx.device"))
+ (property (name "edg_refdes") (value "D11"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[0,2]/npx/") (tstamps "/015f00eb/09c20231/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C15")
+ (value "sw.sw[0,2].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[0,2].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].npx.cap"))
+ (property (name "edg_refdes") (value "C15"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[0,2]/npx/") (tstamps "/015f00eb/09c20231/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "SW6")
+ (value "sw.sw[1,2].sw")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (property (name "Sheetname") (value "sw[1,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,2].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].sw"))
+ (property (name "edg_refdes") (value "SW6"))
+ (property (name "edg_part") (value "PG151101S11 (Kailh)"))
+ (property (name "edg_value") (value "PG151101S11"))
+ (sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
+ (tstamps "015f00eb"))
+(comp (ref "D12")
+ (value "sw.sw[1,2].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCellNeopixel"))
+ (property (name "edg_path") (value "sw.sw[1,2].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].d"))
+ (property (name "edg_refdes") (value "D12"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
+ (tstamps "00650065"))
+(comp (ref "D13")
+ (value "sw.sw[1,2].npx.device")
+ (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,2].npx.device"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].npx.device"))
+ (property (name "edg_refdes") (value "D13"))
+ (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)"))
+ (property (name "edg_value") (value "WS2812C-2020-V1"))
+ (sheetpath (names "/sw/sw[1,2]/npx/") (tstamps "/015f00eb/09c60232/02a50157/"))
+ (tstamps "08950271"))
+(comp (ref "C16")
+ (value "sw.sw[1,2].npx.cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx"))
+ (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020"))
+ (property (name "edg_path") (value "sw.sw[1,2].npx.cap.cap"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].npx.cap"))
+ (property (name "edg_refdes") (value "C16"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/sw/sw[1,2]/npx/") (tstamps "/015f00eb/09c60232/02a50157/"))
+ (tstamps "025e0135"))
+(comp (ref "U3")
+ (value "npx_shift.ic")
+ (footprint "Package_TO_SOT_SMD:SOT-23-5")
+ (property (name "Sheetname") (value "npx_shift"))
+ (property (name "Sheetfile") (value "edg.parts.logic.Logic_74Ahct.L74Ahct1g125"))
+ (property (name "edg_path") (value "npx_shift.ic"))
+ (property (name "edg_short_path") (value "npx_shift.ic"))
+ (property (name "edg_refdes") (value "U3"))
+ (property (name "edg_part") (value "74AHCT1G125W5-7 (Diodes Incorporated)"))
+ (property (name "edg_value") (value "74AHCT1G125W5-7"))
+ (sheetpath (names "/npx_shift/") (tstamps "/134303d4/"))
+ (tstamps "013700cd"))
+(comp (ref "C17")
+ (value "npx_shift.vdd_cap")
+ (footprint "Capacitor_SMD:C_0603_1608Metric")
+ (property (name "Sheetname") (value "npx_shift"))
+ (property (name "Sheetfile") (value "edg.parts.logic.Logic_74Ahct.L74Ahct1g125"))
+ (property (name "edg_path") (value "npx_shift.vdd_cap.cap"))
+ (property (name "edg_short_path") (value "npx_shift.vdd_cap"))
+ (property (name "edg_refdes") (value "C17"))
+ (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)"))
+ (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS"))
+ (sheetpath (names "/npx_shift/") (tstamps "/134303d4/"))
+ (tstamps "0b6402d2")))
+(nets
+(net (code 1) (name "usb.pwr")
+ (node (ref J1) (pin A4))
+ (node (ref J1) (pin A9))
+ (node (ref J1) (pin B4))
+ (node (ref J1) (pin B9))
+ (node (ref U1) (pin 3))
+ (node (ref C1) (pin 1))
+ (node (ref D3) (pin 4))
+ (node (ref C11) (pin 1))
+ (node (ref D5) (pin 4))
+ (node (ref C12) (pin 1))
+ (node (ref D7) (pin 4))
+ (node (ref C13) (pin 1))
+ (node (ref D9) (pin 4))
+ (node (ref C14) (pin 1))
+ (node (ref D11) (pin 4))
+ (node (ref C15) (pin 1))
+ (node (ref D13) (pin 4))
+ (node (ref C16) (pin 1))
+ (node (ref U3) (pin 5))
+ (node (ref C17) (pin 1)))
+(net (code 2) (name "usb.gnd")
+ (node (ref J1) (pin A1))
+ (node (ref J1) (pin A12))
+ (node (ref J1) (pin B1))
+ (node (ref J1) (pin B12))
+ (node (ref J1) (pin S1))
+ (node (ref R1) (pin 1))
+ (node (ref R2) (pin 1))
+ (node (ref U1) (pin 1))
+ (node (ref C1) (pin 2))
+ (node (ref C2) (pin 2))
+ (node (ref U2) (pin 23))
+ (node (ref U2) (pin 35))
+ (node (ref U2) (pin 44))
+ (node (ref U2) (pin 47))
+ (node (ref U2) (pin 8))
+ (node (ref C3) (pin 2))
+ (node (ref C4) (pin 2))
+ (node (ref C5) (pin 2))
+ (node (ref C6) (pin 2))
+ (node (ref C7) (pin 2))
+ (node (ref C8) (pin 2))
+ (node (ref X1) (pin 2))
+ (node (ref X1) (pin 4))
+ (node (ref C9) (pin 2))
+ (node (ref C10) (pin 2))
+ (node (ref J2) (pin 3))
+ (node (ref J2) (pin 5))
+ (node (ref J2) (pin 9))
+ (node (ref R4) (pin 2))
+ (node (ref D3) (pin 2))
+ (node (ref C11) (pin 2))
+ (node (ref D5) (pin 2))
+ (node (ref C12) (pin 2))
+ (node (ref D7) (pin 2))
+ (node (ref C13) (pin 2))
+ (node (ref D9) (pin 2))
+ (node (ref C14) (pin 2))
+ (node (ref D11) (pin 2))
+ (node (ref C15) (pin 2))
+ (node (ref D13) (pin 2))
+ (node (ref C16) (pin 2))
+ (node (ref U3) (pin 1))
+ (node (ref U3) (pin 3))
+ (node (ref C17) (pin 2)))
+(net (code 3) (name "usb.usb.dp")
+ (node (ref J1) (pin A6))
+ (node (ref J1) (pin B6))
+ (node (ref U2) (pin 33))
+ (node (ref R3) (pin 2)))
+(net (code 4) (name "usb.usb.dm")
+ (node (ref J1) (pin A7))
+ (node (ref J1) (pin B7))
+ (node (ref U2) (pin 32)))
+(net (code 5) (name "usb.conn.cc.cc1")
+ (node (ref J1) (pin A5))
+ (node (ref R1) (pin 2)))
+(net (code 6) (name "usb.conn.cc.cc2")
+ (node (ref J1) (pin B5))
+ (node (ref R2) (pin 2)))
+(net (code 7) (name "reg.pwr_out")
+ (node (ref U1) (pin 2))
+ (node (ref C2) (pin 1))
+ (node (ref U2) (pin 1))
+ (node (ref U2) (pin 24))
+ (node (ref U2) (pin 36))
+ (node (ref U2) (pin 48))
+ (node (ref U2) (pin 9))
+ (node (ref C3) (pin 1))
+ (node (ref C4) (pin 1))
+ (node (ref C5) (pin 1))
+ (node (ref C6) (pin 1))
+ (node (ref C7) (pin 1))
+ (node (ref C8) (pin 1))
+ (node (ref J2) (pin 1))
+ (node (ref R3) (pin 1)))
+(net (code 8) (name "mcu.gpio.cols_0")
+ (node (ref U2) (pin 12))
+ (node (ref SW1) (pin 1))
+ (node (ref SW3) (pin 1))
+ (node (ref SW5) (pin 1)))
+(net (code 9) (name "mcu.gpio.cols_1")
+ (node (ref U2) (pin 13))
+ (node (ref SW2) (pin 1))
+ (node (ref SW4) (pin 1))
+ (node (ref SW6) (pin 1)))
+(net (code 10) (name "mcu.gpio.rows_0")
+ (node (ref U2) (pin 14))
+ (node (ref D2) (pin 1))
+ (node (ref D4) (pin 1)))
+(net (code 11) (name "mcu.gpio.rows_1")
+ (node (ref U2) (pin 15))
+ (node (ref D6) (pin 1))
+ (node (ref D8) (pin 1)))
+(net (code 12) (name "mcu.gpio.rows_2")
+ (node (ref U2) (pin 16))
+ (node (ref D10) (pin 1))
+ (node (ref D12) (pin 1)))
+(net (code 13) (name "mcu.xtal_node.xi")
+ (node (ref U2) (pin 5))
+ (node (ref X1) (pin 1))
+ (node (ref C9) (pin 1)))
+(net (code 14) (name "mcu.xtal_node.xo")
+ (node (ref U2) (pin 6))
+ (node (ref X1) (pin 3))
+ (node (ref C10) (pin 1)))
+(net (code 15) (name "mcu.swd_node.swdio")
+ (node (ref U2) (pin 34))
+ (node (ref J2) (pin 2)))
+(net (code 16) (name "mcu.swd_node.swclk")
+ (node (ref U2) (pin 37))
+ (node (ref J2) (pin 4)))
+(net (code 17) (name "mcu.reset_node")
+ (node (ref U2) (pin 7))
+ (node (ref J2) (pin 10)))
+(net (code 18) (name "mcu.swd.tdi")
+ (node (ref J2) (pin 8)))
+(net (code 19) (name "mcu.swd.swo")
+ (node (ref J2) (pin 6)))
+(net (code 20) (name "led.signal")
+ (node (ref U2) (pin 10))
+ (node (ref D1) (pin 2)))
+(net (code 21) (name "led.package.k")
+ (node (ref D1) (pin 1))
+ (node (ref R4) (pin 1)))
+(net (code 22) (name "sw.npx_din")
+ (node (ref D3) (pin 3))
+ (node (ref U3) (pin 4)))
+(net (code 23) (name "sw.npx_dout")
+ (node (ref D13) (pin 1)))
+(net (code 24) (name "sw.sw[0,0].npx_dout")
+ (node (ref D3) (pin 1))
+ (node (ref D5) (pin 3)))
+(net (code 25) (name "sw.sw[0,0].sw.com")
+ (node (ref SW1) (pin 2))
+ (node (ref D2) (pin 2)))
+(net (code 26) (name "sw.sw[1,0].npx_dout")
+ (node (ref D5) (pin 1))
+ (node (ref D9) (pin 3)))
+(net (code 27) (name "sw.sw[1,0].sw.com")
+ (node (ref SW2) (pin 2))
+ (node (ref D4) (pin 2)))
+(net (code 28) (name "sw.sw[0,1].npx_din")
+ (node (ref D7) (pin 3))
+ (node (ref D9) (pin 1)))
+(net (code 29) (name "sw.sw[0,1].npx_dout")
+ (node (ref D7) (pin 1))
+ (node (ref D11) (pin 3)))
+(net (code 30) (name "sw.sw[0,1].sw.com")
+ (node (ref SW3) (pin 2))
+ (node (ref D6) (pin 2)))
+(net (code 31) (name "sw.sw[1,1].sw.com")
+ (node (ref SW4) (pin 2))
+ (node (ref D8) (pin 2)))
+(net (code 32) (name "sw.sw[0,2].npx_dout")
+ (node (ref D11) (pin 1))
+ (node (ref D13) (pin 3)))
+(net (code 33) (name "sw.sw[0,2].sw.com")
+ (node (ref SW5) (pin 2))
+ (node (ref D10) (pin 2)))
+(net (code 34) (name "sw.sw[1,2].sw.com")
+ (node (ref SW6) (pin 2))
+ (node (ref D12) (pin 2)))
+(net (code 35) (name "npx_shift.input")
+ (node (ref U2) (pin 11))
+ (node (ref U3) (pin 2))))
+)
\ No newline at end of file
diff --git a/examples/TestBlinkyRgb/TestBlinkyRgb.svgpcb.js b/examples/TestBlinkyRgb/TestBlinkyRgb.svgpcb.js
new file mode 100644
index 000000000..c39727ed8
--- /dev/null
+++ b/examples/TestBlinkyRgb/TestBlinkyRgb.svgpcb.js
@@ -0,0 +1,260 @@
+const board = new PCB();
+
+const sw = SwitchDiodeMatrixNeopixels_2_3_sw(pt(0.039, 0.039))
+// usb.conn
+const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, {
+ translate: pt(2.252, 0.165), rotate: 0,
+ id: 'J1'
+})
+// usb.cc_pull.cc1
+const R1 = board.add(R_0603_1608Metric, {
+ translate: pt(2.101, 0.420), rotate: 0,
+ id: 'R1'
+})
+// usb.cc_pull.cc2
+const R2 = board.add(R_0603_1608Metric, {
+ translate: pt(2.257, 0.420), rotate: 0,
+ id: 'R2'
+})
+// reg.ic
+const U1 = board.add(SOT_223_3_TabPin2, {
+ translate: pt(1.291, 0.935), rotate: 0,
+ id: 'U1'
+})
+// reg.in_cap.cap
+const C1 = board.add(C_0603_1608Metric, {
+ translate: pt(1.397, 1.145), rotate: 0,
+ id: 'C1'
+})
+// reg.out_cap.cap
+const C2 = board.add(C_1206_3216Metric, {
+ translate: pt(1.209, 1.162), rotate: 0,
+ id: 'C2'
+})
+// mcu.ic
+const U2 = board.add(LQFP_48_7x7mm_P0_5mm, {
+ translate: pt(1.321, 0.203), rotate: 0,
+ id: 'U2'
+})
+// mcu.pwr_cap[0].cap
+const C3 = board.add(C_0805_2012Metric, {
+ translate: pt(1.390, 0.483), rotate: 0,
+ id: 'C3'
+})
+// mcu.pwr_cap[1].cap
+const C4 = board.add(C_0603_1608Metric, {
+ translate: pt(1.554, 0.474), rotate: 0,
+ id: 'C4'
+})
+// mcu.pwr_cap[2].cap
+const C5 = board.add(C_0603_1608Metric, {
+ translate: pt(1.710, 0.474), rotate: 0,
+ id: 'C5'
+})
+// mcu.pwr_cap[3].cap
+const C6 = board.add(C_0603_1608Metric, {
+ translate: pt(1.866, 0.474), rotate: 0,
+ id: 'C6'
+})
+// mcu.vdda_cap_0.cap
+const C7 = board.add(C_0603_1608Metric, {
+ translate: pt(1.176, 0.647), rotate: 0,
+ id: 'C7'
+})
+// mcu.vdda_cap_1.cap
+const C8 = board.add(C_0603_1608Metric, {
+ translate: pt(1.332, 0.647), rotate: 0,
+ id: 'C8'
+})
+// mcu.crystal.package
+const X1 = board.add(Crystal_SMD_3225_4Pin_3_2x2_5mm, {
+ translate: pt(1.201, 0.512), rotate: 0,
+ id: 'X1'
+})
+// mcu.crystal.cap_a
+const C9 = board.add(C_0603_1608Metric, {
+ translate: pt(1.488, 0.647), rotate: 0,
+ id: 'C9'
+})
+// mcu.crystal.cap_b
+const C10 = board.add(C_0603_1608Metric, {
+ translate: pt(1.644, 0.647), rotate: 0,
+ id: 'C10'
+})
+// mcu.swd.conn
+const J2 = board.add(PinHeader_2x05_P1_27mm_Vertical_SMD, {
+ translate: pt(1.732, 0.146), rotate: 0,
+ id: 'J2'
+})
+// mcu.usb_pull.dp
+const R3 = board.add(R_0603_1608Metric, {
+ translate: pt(1.800, 0.647), rotate: 0,
+ id: 'R3'
+})
+// led.package
+const D1 = board.add(LED_0603_1608Metric, {
+ translate: pt(1.921, 0.823), rotate: 0,
+ id: 'D1'
+})
+// led.res
+const R4 = board.add(R_0603_1608Metric, {
+ translate: pt(1.920, 0.920), rotate: 0,
+ id: 'R4'
+})
+// npx_shift.ic
+const U3 = board.add(SOT_23_5, {
+ translate: pt(1.663, 0.861), rotate: 0,
+ id: 'U3'
+})
+// npx_shift.vdd_cap.cap
+const C17 = board.add(C_0603_1608Metric, {
+ translate: pt(1.641, 0.996), rotate: 0,
+ id: 'C17'
+})
+
+board.setNetlist([
+ {name: "usb.pwr", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["U1", "3"], ["C1", "1"], ["D3", "4"], ["C11", "1"], ["D5", "4"], ["C12", "1"], ["D7", "4"], ["C13", "1"], ["D9", "4"], ["C14", "1"], ["D11", "4"], ["C15", "1"], ["D13", "4"], ["C16", "1"], ["U3", "5"], ["C17", "1"]]},
+ {name: "usb.gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["U1", "1"], ["C1", "2"], ["C2", "2"], ["U2", "23"], ["U2", "35"], ["U2", "44"], ["U2", "47"], ["U2", "8"], ["C3", "2"], ["C4", "2"], ["C5", "2"], ["C6", "2"], ["C7", "2"], ["C8", "2"], ["X1", "2"], ["X1", "4"], ["C9", "2"], ["C10", "2"], ["J2", "3"], ["J2", "5"], ["J2", "9"], ["R4", "2"], ["D3", "2"], ["C11", "2"], ["D5", "2"], ["C12", "2"], ["D7", "2"], ["C13", "2"], ["D9", "2"], ["C14", "2"], ["D11", "2"], ["C15", "2"], ["D13", "2"], ["C16", "2"], ["U3", "1"], ["U3", "3"], ["C17", "2"]]},
+ {name: "usb.usb.dp", pads: [["J1", "A6"], ["J1", "B6"], ["U2", "33"], ["R3", "2"]]},
+ {name: "usb.usb.dm", pads: [["J1", "A7"], ["J1", "B7"], ["U2", "32"]]},
+ {name: "usb.conn.cc.cc1", pads: [["J1", "A5"], ["R1", "2"]]},
+ {name: "usb.conn.cc.cc2", pads: [["J1", "B5"], ["R2", "2"]]},
+ {name: "reg.pwr_out", pads: [["U1", "2"], ["C2", "1"], ["U2", "1"], ["U2", "24"], ["U2", "36"], ["U2", "48"], ["U2", "9"], ["C3", "1"], ["C4", "1"], ["C5", "1"], ["C6", "1"], ["C7", "1"], ["C8", "1"], ["J2", "1"], ["R3", "1"]]},
+ {name: "mcu.gpio.cols_0", pads: [["U2", "12"], ["SW1", "1"], ["SW3", "1"], ["SW5", "1"]]},
+ {name: "mcu.gpio.cols_1", pads: [["U2", "13"], ["SW2", "1"], ["SW4", "1"], ["SW6", "1"]]},
+ {name: "mcu.gpio.rows_0", pads: [["U2", "14"], ["D2", "1"], ["D4", "1"]]},
+ {name: "mcu.gpio.rows_1", pads: [["U2", "15"], ["D6", "1"], ["D8", "1"]]},
+ {name: "mcu.gpio.rows_2", pads: [["U2", "16"], ["D10", "1"], ["D12", "1"]]},
+ {name: "mcu.xtal_node.xi", pads: [["U2", "5"], ["X1", "1"], ["C9", "1"]]},
+ {name: "mcu.xtal_node.xo", pads: [["U2", "6"], ["X1", "3"], ["C10", "1"]]},
+ {name: "mcu.swd_node.swdio", pads: [["U2", "34"], ["J2", "2"]]},
+ {name: "mcu.swd_node.swclk", pads: [["U2", "37"], ["J2", "4"]]},
+ {name: "mcu.reset_node", pads: [["U2", "7"], ["J2", "10"]]},
+ {name: "mcu.swd.tdi", pads: [["J2", "8"]]},
+ {name: "mcu.swd.swo", pads: [["J2", "6"]]},
+ {name: "led.signal", pads: [["U2", "10"], ["D1", "2"]]},
+ {name: "led.package.k", pads: [["D1", "1"], ["R4", "1"]]},
+ {name: "sw.npx_din", pads: [["D3", "3"], ["U3", "4"]]},
+ {name: "sw.npx_dout", pads: [["D13", "1"]]},
+ {name: "sw.sw[0,0].npx_dout", pads: [["D3", "1"], ["D5", "3"]]},
+ {name: "sw.sw[0,0].sw.com", pads: [["SW1", "2"], ["D2", "2"]]},
+ {name: "sw.sw[1,0].npx_dout", pads: [["D5", "1"], ["D9", "3"]]},
+ {name: "sw.sw[1,0].sw.com", pads: [["SW2", "2"], ["D4", "2"]]},
+ {name: "sw.sw[0,1].npx_din", pads: [["D7", "3"], ["D9", "1"]]},
+ {name: "sw.sw[0,1].npx_dout", pads: [["D7", "1"], ["D11", "3"]]},
+ {name: "sw.sw[0,1].sw.com", pads: [["SW3", "2"], ["D6", "2"]]},
+ {name: "sw.sw[1,1].sw.com", pads: [["SW4", "2"], ["D8", "2"]]},
+ {name: "sw.sw[0,2].npx_dout", pads: [["D11", "1"], ["D13", "3"]]},
+ {name: "sw.sw[0,2].sw.com", pads: [["SW5", "2"], ["D10", "2"]]},
+ {name: "sw.sw[1,2].sw.com", pads: [["SW6", "2"], ["D12", "2"]]},
+ {name: "npx_shift.input", pads: [["U2", "11"], ["U3", "2"]]}
+])
+
+const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
+const limit1 = pt(2.5795275590551188, 2.1181102362204722);
+const xMin = Math.min(limit0[0], limit1[0]);
+const xMax = Math.max(limit0[0], limit1[0]);
+const yMin = Math.min(limit0[1], limit1[1]);
+const yMax = Math.max(limit0[1], limit1[1]);
+
+const filletRadius = 0.1;
+const outline = path(
+ [(xMin+xMax/2), yMax],
+ ["fillet", filletRadius, [xMax, yMax]],
+ ["fillet", filletRadius, [xMax, yMin]],
+ ["fillet", filletRadius, [xMin, yMin]],
+ ["fillet", filletRadius, [xMin, yMax]],
+ [(xMin+xMax/2), yMax],
+);
+board.addShape("outline", outline);
+
+renderPCB({
+ pcb: board,
+ layerColors: {
+ "F.Paste": "#000000ff",
+ "F.Mask": "#000000ff",
+ "B.Mask": "#000000ff",
+ "componentLabels": "#00e5e5e5",
+ "outline": "#002d00ff",
+ "padLabels": "#ffff99e5",
+ "B.Cu": "#ef4e4eff",
+ "F.Cu": "#ff8c00cc",
+ },
+ limits: {
+ x: [xMin, xMax],
+ y: [yMin, yMax]
+ },
+ background: "#00000000",
+ mmPerUnit: 25.4
+})
+
+function SwitchDiodeMatrixNeopixels_2_3_sw(xy, colSpacing=0.5, rowSpacing=0.5, diodeOffset=[0.25, 0]) {
+ // Circuit generator params
+ const ncols = 2
+ const nrows = 3
+
+ // Global params
+ const traceSize = 0.015
+ const viaTemplate = via(0.02, 0.035)
+
+ // Return object
+ const obj = {
+ footprints: {},
+ pts: {}
+ }
+
+ // Actual generator code
+ allColWirePoints = []
+ for (let yIndex=0; yIndex < nrows; yIndex++) {
+ colWirePoints = []
+ rowDiodeVias = []
+
+ for (let xIndex=0; xIndex < ncols; xIndex++) {
+ index = yIndex * ncols + xIndex + 1
+
+ buttonPos = [xy[0] + colSpacing * xIndex, xy[1] + rowSpacing * yIndex]
+ obj.footprints[`SW${1 + xIndex * nrows + yIndex}`] = button = board.add(
+ SW_Hotswap_Kailh_MX,
+ {
+ translate: buttonPos, rotate: 0,
+ id: `SW${1 + xIndex * nrows + yIndex}`
+ })
+
+ diodePos = [buttonPos[0] + diodeOffset[0], buttonPos[1] + diodeOffset[1]]
+ obj[`D${2 + xIndex * nrows + yIndex}`] = diode = board.add(
+ D_SOD_323,
+ {
+ translate: diodePos, rotate: 90,
+ id: `D${2 + xIndex * nrows + yIndex}`
+ })
+
+ // create stub wire for button -> column common line
+ colWirePoint = [buttonPos[0], button.padY("2")]
+ board.wire([colWirePoint, button.pad("2")], traceSize, "F.Cu")
+ colWirePoints.push(colWirePoint)
+
+ // create wire for button -> diode
+ board.wire([button.pad("1"), diode.pad("1")], traceSize, "F.Cu")
+ diodeViaPos = [diode.padX("2"), buttonPos[1] + rowSpacing / 2]
+ diodeVia = board.add(viaTemplate, {translate: diodeViaPos})
+ board.wire([diode.pad("2"), diodeVia.pos], traceSize)
+
+ if (rowDiodeVias.length > 0) {
+ board.wire([rowDiodeVias[rowDiodeVias.length - 1].pos, diodeVia.pos], traceSize, "B.Cu")
+ }
+ rowDiodeVias.push(diodeVia)
+ }
+ allColWirePoints.push(colWirePoints)
+ }
+
+ // Inter-row wiring
+ for (let xIndex=0; xIndex < allColWirePoints[0].length; xIndex++) {
+ board.wire([
+ allColWirePoints[0][xIndex],
+ allColWirePoints[allColWirePoints.length - 1][xIndex]
+ ], traceSize, "F.Cu")
+ }
+
+ return obj
+}
+
diff --git a/examples/TestBlinkySwitchMatrix/TestBlinkySwitchMatrix.net.ref b/examples/TestBlinkySwitchMatrix/TestBlinkySwitchMatrix.net.ref
new file mode 100644
index 000000000..e40440e54
--- /dev/null
+++ b/examples/TestBlinkySwitchMatrix/TestBlinkySwitchMatrix.net.ref
@@ -0,0 +1,237 @@
+(export (version D)
+(components
+(comp (ref "U1")
+ (value "mcu")
+ (footprint "Seeed Studio XIAO Series Library:XIAO-RP2040-SMD")
+ (property (name "Sheetname") (value ""))
+ (property (name "Sheetfile") (value ""))
+ (property (name "edg_path") (value "mcu.device"))
+ (property (name "edg_short_path") (value "mcu"))
+ (property (name "edg_refdes") (value "U1"))
+ (property (name "edg_part") (value "XIAO RP2040"))
+ (property (name "edg_value") (value "XIAO RP2040"))
+ (sheetpath (names "/") (tstamps "/"))
+ (tstamps "02850146"))
+(comp (ref "D1")
+ (value "led.package")
+ (footprint "LED_SMD:LED_0603_1608Metric")
+ (property (name "Sheetname") (value "led"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
+ (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
+ (tstamps "0b4e02cd"))
+(comp (ref "R1")
+ (value "led.res")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "led"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorLed"))
+ (property (name "edg_path") (value "led.res"))
+ (property (name "edg_short_path") (value "led.res"))
+ (property (name "edg_refdes") (value "R1"))
+ (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
+ (tstamps "0296014b"))
+(comp (ref "SW1")
+ (value "sw.sw[0,0].sw")
+ (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem")
+ (property (name "Sheetname") (value "sw[0,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,0].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].sw"))
+ (property (name "edg_refdes") (value "SW1"))
+ (property (name "edg_part") (value "5.1mm switch"))
+ (property (name "edg_value") (value "5.1mm switch"))
+ (sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
+ (tstamps "015f00eb"))
+(comp (ref "D2")
+ (value "sw.sw[0,0].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,0].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,0].d"))
+ (property (name "edg_refdes") (value "D2"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
+ (tstamps "00650065"))
+(comp (ref "SW2")
+ (value "sw.sw[1,0].sw")
+ (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem")
+ (property (name "Sheetname") (value "sw[1,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,0].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].sw"))
+ (property (name "edg_refdes") (value "SW2"))
+ (property (name "edg_part") (value "5.1mm switch"))
+ (property (name "edg_value") (value "5.1mm switch"))
+ (sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
+ (tstamps "015f00eb"))
+(comp (ref "D3")
+ (value "sw.sw[1,0].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,0]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,0].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,0].d"))
+ (property (name "edg_refdes") (value "D3"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
+ (tstamps "00650065"))
+(comp (ref "SW3")
+ (value "sw.sw[0,1].sw")
+ (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem")
+ (property (name "Sheetname") (value "sw[0,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,1].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].sw"))
+ (property (name "edg_refdes") (value "SW3"))
+ (property (name "edg_part") (value "5.1mm switch"))
+ (property (name "edg_value") (value "5.1mm switch"))
+ (sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
+ (tstamps "015f00eb"))
+(comp (ref "D4")
+ (value "sw.sw[0,1].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,1].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,1].d"))
+ (property (name "edg_refdes") (value "D4"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
+ (tstamps "00650065"))
+(comp (ref "SW4")
+ (value "sw.sw[1,1].sw")
+ (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem")
+ (property (name "Sheetname") (value "sw[1,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,1].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].sw"))
+ (property (name "edg_refdes") (value "SW4"))
+ (property (name "edg_part") (value "5.1mm switch"))
+ (property (name "edg_value") (value "5.1mm switch"))
+ (sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
+ (tstamps "015f00eb"))
+(comp (ref "D5")
+ (value "sw.sw[1,1].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,1]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,1].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,1].d"))
+ (property (name "edg_refdes") (value "D5"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
+ (tstamps "00650065"))
+(comp (ref "SW5")
+ (value "sw.sw[0,2].sw")
+ (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem")
+ (property (name "Sheetname") (value "sw[0,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,2].sw"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].sw"))
+ (property (name "edg_refdes") (value "SW5"))
+ (property (name "edg_part") (value "5.1mm switch"))
+ (property (name "edg_value") (value "5.1mm switch"))
+ (sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
+ (tstamps "015f00eb"))
+(comp (ref "D6")
+ (value "sw.sw[0,2].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[0,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[0,2].d"))
+ (property (name "edg_short_path") (value "sw.sw[0,2].d"))
+ (property (name "edg_refdes") (value "D6"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
+ (tstamps "00650065"))
+(comp (ref "SW6")
+ (value "sw.sw[1,2].sw")
+ (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem")
+ (property (name "Sheetname") (value "sw[1,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,2].sw"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].sw"))
+ (property (name "edg_refdes") (value "SW6"))
+ (property (name "edg_part") (value "5.1mm switch"))
+ (property (name "edg_value") (value "5.1mm switch"))
+ (sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
+ (tstamps "015f00eb"))
+(comp (ref "D7")
+ (value "sw.sw[1,2].d")
+ (footprint "Diode_SMD:D_SOD-323")
+ (property (name "Sheetname") (value "sw[1,2]"))
+ (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
+ (property (name "edg_path") (value "sw.sw[1,2].d"))
+ (property (name "edg_short_path") (value "sw.sw[1,2].d"))
+ (property (name "edg_refdes") (value "D7"))
+ (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
+ (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
+ (sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
+ (tstamps "00650065")))
+(nets
+(net (code 1) (name "mcu.gpio.cols_0")
+ (node (ref U1) (pin 8))
+ (node (ref SW1) (pin 1))
+ (node (ref SW3) (pin 1))
+ (node (ref SW5) (pin 1)))
+(net (code 2) (name "mcu.gpio.cols_1")
+ (node (ref U1) (pin 9))
+ (node (ref SW2) (pin 1))
+ (node (ref SW4) (pin 1))
+ (node (ref SW6) (pin 1)))
+(net (code 3) (name "mcu.gpio.rows_0")
+ (node (ref U1) (pin 11))
+ (node (ref D2) (pin 1))
+ (node (ref D3) (pin 1)))
+(net (code 4) (name "mcu.gpio.rows_1")
+ (node (ref U1) (pin 10))
+ (node (ref D4) (pin 1))
+ (node (ref D5) (pin 1)))
+(net (code 5) (name "mcu.gpio.rows_2")
+ (node (ref U1) (pin 5))
+ (node (ref D6) (pin 1))
+ (node (ref D7) (pin 1)))
+(net (code 6) (name "mcu.gnd")
+ (node (ref U1) (pin 13))
+ (node (ref R1) (pin 2)))
+(net (code 7) (name "mcu.pwr_out")
+ (node (ref U1) (pin 12)))
+(net (code 8) (name "mcu.vusb_out")
+ (node (ref U1) (pin 14)))
+(net (code 9) (name "led.signal")
+ (node (ref U1) (pin 7))
+ (node (ref D1) (pin 2)))
+(net (code 10) (name "led.package.k")
+ (node (ref D1) (pin 1))
+ (node (ref R1) (pin 1)))
+(net (code 11) (name "sw.sw[0,0].sw.com")
+ (node (ref SW1) (pin 2))
+ (node (ref D2) (pin 2)))
+(net (code 12) (name "sw.sw[1,0].sw.com")
+ (node (ref SW2) (pin 2))
+ (node (ref D3) (pin 2)))
+(net (code 13) (name "sw.sw[0,1].sw.com")
+ (node (ref SW3) (pin 2))
+ (node (ref D4) (pin 2)))
+(net (code 14) (name "sw.sw[1,1].sw.com")
+ (node (ref SW4) (pin 2))
+ (node (ref D5) (pin 2)))
+(net (code 15) (name "sw.sw[0,2].sw.com")
+ (node (ref SW5) (pin 2))
+ (node (ref D6) (pin 2)))
+(net (code 16) (name "sw.sw[1,2].sw.com")
+ (node (ref SW6) (pin 2))
+ (node (ref D7) (pin 2))))
+)
\ No newline at end of file
diff --git a/examples/TestBlinkySwitchMatrix/TestBlinkySwitchMatrix.svgpcb.js b/examples/TestBlinkySwitchMatrix/TestBlinkySwitchMatrix.svgpcb.js
new file mode 100644
index 000000000..1d828d5bc
--- /dev/null
+++ b/examples/TestBlinkySwitchMatrix/TestBlinkySwitchMatrix.svgpcb.js
@@ -0,0 +1,146 @@
+const board = new PCB();
+
+const sw = SwitchDiodeMatrix_2_3_sw(pt(0.039, 0.039))
+// mcu.device
+const U1 = board.add(XIAO_RP2040_SMD, {
+ translate: pt(1.466, 0.410), rotate: 0,
+ id: 'U1'
+})
+// led.package
+const D1 = board.add(LED_0603_1608Metric, {
+ translate: pt(1.995, 0.029), rotate: 0,
+ id: 'D1'
+})
+// led.res
+const R1 = board.add(R_0603_1608Metric, {
+ translate: pt(1.994, 0.126), rotate: 0,
+ id: 'R1'
+})
+
+board.setNetlist([
+ {name: "mcu.gpio.cols_0", pads: [["U1", "8"], ["SW1", "1"], ["SW3", "1"], ["SW5", "1"]]},
+ {name: "mcu.gpio.cols_1", pads: [["U1", "9"], ["SW2", "1"], ["SW4", "1"], ["SW6", "1"]]},
+ {name: "mcu.gpio.rows_0", pads: [["U1", "11"], ["D2", "1"], ["D3", "1"]]},
+ {name: "mcu.gpio.rows_1", pads: [["U1", "10"], ["D4", "1"], ["D5", "1"]]},
+ {name: "mcu.gpio.rows_2", pads: [["U1", "5"], ["D6", "1"], ["D7", "1"]]},
+ {name: "mcu.gnd", pads: [["U1", "13"], ["R1", "2"]]},
+ {name: "mcu.pwr_out", pads: [["U1", "12"]]},
+ {name: "mcu.vusb_out", pads: [["U1", "14"]]},
+ {name: "led.signal", pads: [["U1", "7"], ["D1", "2"]]},
+ {name: "led.package.k", pads: [["D1", "1"], ["R1", "1"]]},
+ {name: "sw.sw[0,0].sw.com", pads: [["SW1", "2"], ["D2", "2"]]},
+ {name: "sw.sw[1,0].sw.com", pads: [["SW2", "2"], ["D3", "2"]]},
+ {name: "sw.sw[0,1].sw.com", pads: [["SW3", "2"], ["D4", "2"]]},
+ {name: "sw.sw[1,1].sw.com", pads: [["SW4", "2"], ["D5", "2"]]},
+ {name: "sw.sw[0,2].sw.com", pads: [["SW5", "2"], ["D6", "2"]]},
+ {name: "sw.sw[1,2].sw.com", pads: [["SW6", "2"], ["D7", "2"]]}
+])
+
+const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
+const limit1 = pt(2.171062992125984, 2.1181102362204722);
+const xMin = Math.min(limit0[0], limit1[0]);
+const xMax = Math.max(limit0[0], limit1[0]);
+const yMin = Math.min(limit0[1], limit1[1]);
+const yMax = Math.max(limit0[1], limit1[1]);
+
+const filletRadius = 0.1;
+const outline = path(
+ [(xMin+xMax/2), yMax],
+ ["fillet", filletRadius, [xMax, yMax]],
+ ["fillet", filletRadius, [xMax, yMin]],
+ ["fillet", filletRadius, [xMin, yMin]],
+ ["fillet", filletRadius, [xMin, yMax]],
+ [(xMin+xMax/2), yMax],
+);
+board.addShape("outline", outline);
+
+renderPCB({
+ pcb: board,
+ layerColors: {
+ "F.Paste": "#000000ff",
+ "F.Mask": "#000000ff",
+ "B.Mask": "#000000ff",
+ "componentLabels": "#00e5e5e5",
+ "outline": "#002d00ff",
+ "padLabels": "#ffff99e5",
+ "B.Cu": "#ef4e4eff",
+ "F.Cu": "#ff8c00cc",
+ },
+ limits: {
+ x: [xMin, xMax],
+ y: [yMin, yMax]
+ },
+ background: "#00000000",
+ mmPerUnit: 25.4
+})
+
+function SwitchDiodeMatrix_2_3_sw(xy, colSpacing=0.5, rowSpacing=0.5, diodeOffset=[0.25, 0]) {
+ // Circuit generator params
+ const ncols = 2
+ const nrows = 3
+
+ // Global params
+ const traceSize = 0.015
+ const viaTemplate = via(0.02, 0.035)
+
+ // Return object
+ const obj = {
+ footprints: {},
+ pts: {}
+ }
+
+ // Actual generator code
+ allColWirePoints = []
+ for (let yIndex=0; yIndex < nrows; yIndex++) {
+ colWirePoints = []
+ rowDiodeVias = []
+
+ for (let xIndex=0; xIndex < ncols; xIndex++) {
+ index = yIndex * ncols + xIndex + 1
+
+ buttonPos = [xy[0] + colSpacing * xIndex, xy[1] + rowSpacing * yIndex]
+ obj.footprints[`SW${1 + xIndex * nrows + yIndex}`] = button = board.add(
+ SW_SPST_SKQG_WithoutStem,
+ {
+ translate: buttonPos, rotate: 0,
+ id: `SW${1 + xIndex * nrows + yIndex}`
+ })
+
+ diodePos = [buttonPos[0] + diodeOffset[0], buttonPos[1] + diodeOffset[1]]
+ obj[`D${2 + xIndex * nrows + yIndex}`] = diode = board.add(
+ D_SOD_323,
+ {
+ translate: diodePos, rotate: 90,
+ id: `D${2 + xIndex * nrows + yIndex}`
+ })
+
+ // create stub wire for button -> column common line
+ colWirePoint = [buttonPos[0], button.padY("2")]
+ board.wire([colWirePoint, button.pad("2")], traceSize, "F.Cu")
+ colWirePoints.push(colWirePoint)
+
+ // create wire for button -> diode
+ board.wire([button.pad("1"), diode.pad("1")], traceSize, "F.Cu")
+ diodeViaPos = [diode.padX("2"), buttonPos[1] + rowSpacing / 2]
+ diodeVia = board.add(viaTemplate, {translate: diodeViaPos})
+ board.wire([diode.pad("2"), diodeVia.pos], traceSize)
+
+ if (rowDiodeVias.length > 0) {
+ board.wire([rowDiodeVias[rowDiodeVias.length - 1].pos, diodeVia.pos], traceSize, "B.Cu")
+ }
+ rowDiodeVias.push(diodeVia)
+ }
+ allColWirePoints.push(colWirePoints)
+ }
+
+ // Inter-row wiring
+ for (let xIndex=0; xIndex < allColWirePoints[0].length; xIndex++) {
+ board.wire([
+ allColWirePoints[0][xIndex],
+ allColWirePoints[allColWirePoints.length - 1][xIndex]
+ ], traceSize, "F.Cu")
+ }
+
+ return obj
+}
+
diff --git a/examples/BasicKeyboard/BasicKeyboard.net.ref b/examples/TestBlinkySwitchMatrixRefined/TestBlinkySwitchMatrixRefined.net.ref
similarity index 76%
rename from examples/BasicKeyboard/BasicKeyboard.net.ref
rename to examples/TestBlinkySwitchMatrixRefined/TestBlinkySwitchMatrixRefined.net.ref
index 5cea2a5b3..dcdbfe931 100644
--- a/examples/BasicKeyboard/BasicKeyboard.net.ref
+++ b/examples/TestBlinkySwitchMatrixRefined/TestBlinkySwitchMatrixRefined.net.ref
@@ -12,9 +12,33 @@
(property (name "edg_value") (value "XIAO RP2040"))
(sheetpath (names "/") (tstamps "/"))
(tstamps "02850146"))
+(comp (ref "D1")
+ (value "led.package")
+ (footprint "LED_SMD:LED_0603_1608Metric")
+ (property (name "Sheetname") (value "led"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Led.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)"))
+ (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
+ (tstamps "0b4e02cd"))
+(comp (ref "R1")
+ (value "led.res")
+ (footprint "Resistor_SMD:R_0603_1608Metric")
+ (property (name "Sheetname") (value "led"))
+ (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorLed"))
+ (property (name "edg_path") (value "led.res"))
+ (property (name "edg_short_path") (value "led.res"))
+ (property (name "edg_refdes") (value "R1"))
+ (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))"))
+ (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS"))
+ (sheetpath (names "/led/") (tstamps "/02750136/"))
+ (tstamps "0296014b"))
(comp (ref "SW1")
(value "sw.sw[0,0].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[0,0]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[0,0].sw"))
@@ -24,21 +48,21 @@
(property (name "edg_value") (value "PG151101S11"))
(sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
(tstamps "015f00eb"))
-(comp (ref "D1")
+(comp (ref "D2")
(value "sw.sw[0,0].d")
(footprint "Diode_SMD:D_SOD-323")
(property (name "Sheetname") (value "sw[0,0]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[0,0].d"))
(property (name "edg_short_path") (value "sw.sw[0,0].d"))
- (property (name "edg_refdes") (value "D1"))
+ (property (name "edg_refdes") (value "D2"))
(property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
(property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
(sheetpath (names "/sw/sw[0,0]/") (tstamps "/015f00eb/09be022f/"))
(tstamps "00650065"))
(comp (ref "SW2")
(value "sw.sw[1,0].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[1,0]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[1,0].sw"))
@@ -48,21 +72,21 @@
(property (name "edg_value") (value "PG151101S11"))
(sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
(tstamps "015f00eb"))
-(comp (ref "D2")
+(comp (ref "D3")
(value "sw.sw[1,0].d")
(footprint "Diode_SMD:D_SOD-323")
(property (name "Sheetname") (value "sw[1,0]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[1,0].d"))
(property (name "edg_short_path") (value "sw.sw[1,0].d"))
- (property (name "edg_refdes") (value "D2"))
+ (property (name "edg_refdes") (value "D3"))
(property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
(property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
(sheetpath (names "/sw/sw[1,0]/") (tstamps "/015f00eb/09c20230/"))
(tstamps "00650065"))
(comp (ref "SW3")
(value "sw.sw[0,1].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[0,1]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[0,1].sw"))
@@ -72,21 +96,21 @@
(property (name "edg_value") (value "PG151101S11"))
(sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
(tstamps "015f00eb"))
-(comp (ref "D3")
+(comp (ref "D4")
(value "sw.sw[0,1].d")
(footprint "Diode_SMD:D_SOD-323")
(property (name "Sheetname") (value "sw[0,1]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[0,1].d"))
(property (name "edg_short_path") (value "sw.sw[0,1].d"))
- (property (name "edg_refdes") (value "D3"))
+ (property (name "edg_refdes") (value "D4"))
(property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
(property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
(sheetpath (names "/sw/sw[0,1]/") (tstamps "/015f00eb/09c00230/"))
(tstamps "00650065"))
(comp (ref "SW4")
(value "sw.sw[1,1].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[1,1]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[1,1].sw"))
@@ -96,21 +120,21 @@
(property (name "edg_value") (value "PG151101S11"))
(sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
(tstamps "015f00eb"))
-(comp (ref "D4")
+(comp (ref "D5")
(value "sw.sw[1,1].d")
(footprint "Diode_SMD:D_SOD-323")
(property (name "Sheetname") (value "sw[1,1]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[1,1].d"))
(property (name "edg_short_path") (value "sw.sw[1,1].d"))
- (property (name "edg_refdes") (value "D4"))
+ (property (name "edg_refdes") (value "D5"))
(property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
(property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
(sheetpath (names "/sw/sw[1,1]/") (tstamps "/015f00eb/09c40231/"))
(tstamps "00650065"))
(comp (ref "SW5")
(value "sw.sw[0,2].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[0,2]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[0,2].sw"))
@@ -120,21 +144,21 @@
(property (name "edg_value") (value "PG151101S11"))
(sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
(tstamps "015f00eb"))
-(comp (ref "D5")
+(comp (ref "D6")
(value "sw.sw[0,2].d")
(footprint "Diode_SMD:D_SOD-323")
(property (name "Sheetname") (value "sw[0,2]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[0,2].d"))
(property (name "edg_short_path") (value "sw.sw[0,2].d"))
- (property (name "edg_refdes") (value "D5"))
+ (property (name "edg_refdes") (value "D6"))
(property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
(property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
(sheetpath (names "/sw/sw[0,2]/") (tstamps "/015f00eb/09c20231/"))
(tstamps "00650065"))
(comp (ref "SW6")
(value "sw.sw[1,2].sw")
- (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
+ (footprint "PCM_Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX")
(property (name "Sheetname") (value "sw[1,2]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[1,2].sw"))
@@ -144,63 +168,70 @@
(property (name "edg_value") (value "PG151101S11"))
(sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
(tstamps "015f00eb"))
-(comp (ref "D6")
+(comp (ref "D7")
(value "sw.sw[1,2].d")
(footprint "Diode_SMD:D_SOD-323")
(property (name "Sheetname") (value "sw[1,2]"))
(property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.DiodeSwitchCell"))
(property (name "edg_path") (value "sw.sw[1,2].d"))
(property (name "edg_short_path") (value "sw.sw[1,2].d"))
- (property (name "edg_refdes") (value "D6"))
+ (property (name "edg_refdes") (value "D7"))
(property (name "edg_part") (value "1N5819WS (Guangdong Hottech)"))
(property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS"))
(sheetpath (names "/sw/sw[1,2]/") (tstamps "/015f00eb/09c60232/"))
(tstamps "00650065")))
(nets
-(net (code 1) (name "mcu.gpio.0_0")
- (node (ref U1) (pin 7))
+(net (code 1) (name "mcu.gpio.cols_0")
+ (node (ref U1) (pin 8))
(node (ref SW1) (pin 1))
(node (ref SW3) (pin 1))
(node (ref SW5) (pin 1)))
-(net (code 2) (name "mcu.gpio.0_1")
- (node (ref U1) (pin 8))
+(net (code 2) (name "mcu.gpio.cols_1")
+ (node (ref U1) (pin 9))
(node (ref SW2) (pin 1))
(node (ref SW4) (pin 1))
(node (ref SW6) (pin 1)))
-(net (code 3) (name "mcu.gpio.1_0")
- (node (ref U1) (pin 9))
- (node (ref D1) (pin 1))
- (node (ref D2) (pin 1)))
-(net (code 4) (name "mcu.gpio.1_1")
+(net (code 3) (name "mcu.gpio.rows_0")
(node (ref U1) (pin 11))
- (node (ref D3) (pin 1))
- (node (ref D4) (pin 1)))
-(net (code 5) (name "mcu.gpio.1_2")
+ (node (ref D2) (pin 1))
+ (node (ref D3) (pin 1)))
+(net (code 4) (name "mcu.gpio.rows_1")
(node (ref U1) (pin 10))
- (node (ref D5) (pin 1))
- (node (ref D6) (pin 1)))
+ (node (ref D4) (pin 1))
+ (node (ref D5) (pin 1)))
+(net (code 5) (name "mcu.gpio.rows_2")
+ (node (ref U1) (pin 5))
+ (node (ref D6) (pin 1))
+ (node (ref D7) (pin 1)))
(net (code 6) (name "mcu.gnd")
- (node (ref U1) (pin 13)))
+ (node (ref U1) (pin 13))
+ (node (ref R1) (pin 2)))
(net (code 7) (name "mcu.pwr_out")
(node (ref U1) (pin 12)))
(net (code 8) (name "mcu.vusb_out")
(node (ref U1) (pin 14)))
-(net (code 9) (name "sw.sw[0,0].sw.com")
- (node (ref SW1) (pin 2))
+(net (code 9) (name "led.signal")
+ (node (ref U1) (pin 7))
(node (ref D1) (pin 2)))
-(net (code 10) (name "sw.sw[1,0].sw.com")
- (node (ref SW2) (pin 2))
+(net (code 10) (name "led.package.k")
+ (node (ref D1) (pin 1))
+ (node (ref R1) (pin 1)))
+(net (code 11) (name "sw.sw[0,0].sw.com")
+ (node (ref SW1) (pin 2))
(node (ref D2) (pin 2)))
-(net (code 11) (name "sw.sw[0,1].sw.com")
- (node (ref SW3) (pin 2))
+(net (code 12) (name "sw.sw[1,0].sw.com")
+ (node (ref SW2) (pin 2))
(node (ref D3) (pin 2)))
-(net (code 12) (name "sw.sw[1,1].sw.com")
- (node (ref SW4) (pin 2))
+(net (code 13) (name "sw.sw[0,1].sw.com")
+ (node (ref SW3) (pin 2))
(node (ref D4) (pin 2)))
-(net (code 13) (name "sw.sw[0,2].sw.com")
- (node (ref SW5) (pin 2))
+(net (code 14) (name "sw.sw[1,1].sw.com")
+ (node (ref SW4) (pin 2))
(node (ref D5) (pin 2)))
-(net (code 14) (name "sw.sw[1,2].sw.com")
+(net (code 15) (name "sw.sw[0,2].sw.com")
+ (node (ref SW5) (pin 2))
+ (node (ref D6) (pin 2)))
+(net (code 16) (name "sw.sw[1,2].sw.com")
(node (ref SW6) (pin 2))
- (node (ref D6) (pin 2))))
+ (node (ref D7) (pin 2))))
)
\ No newline at end of file
diff --git a/examples/BasicKeyboard/BasicKeyboard.svgpcb.js b/examples/TestBlinkySwitchMatrixRefined/TestBlinkySwitchMatrixRefined.svgpcb.js
similarity index 70%
rename from examples/BasicKeyboard/BasicKeyboard.svgpcb.js
rename to examples/TestBlinkySwitchMatrixRefined/TestBlinkySwitchMatrixRefined.svgpcb.js
index 20fd95ab7..dd763386c 100644
--- a/examples/BasicKeyboard/BasicKeyboard.svgpcb.js
+++ b/examples/TestBlinkySwitchMatrixRefined/TestBlinkySwitchMatrixRefined.svgpcb.js
@@ -6,26 +6,38 @@ const U1 = board.add(XIAO_RP2040_SMD, {
translate: pt(1.466, 0.410), rotate: 0,
id: 'U1'
})
+// led.package
+const D1 = board.add(LED_0603_1608Metric, {
+ translate: pt(1.995, 0.029), rotate: 0,
+ id: 'D1'
+})
+// led.res
+const R1 = board.add(R_0603_1608Metric, {
+ translate: pt(1.994, 0.126), rotate: 0,
+ id: 'R1'
+})
board.setNetlist([
- {name: "mcu.gpio.0_0", pads: [["U1", "7"], ["SW1", "1"], ["SW3", "1"], ["SW5", "1"]]},
- {name: "mcu.gpio.0_1", pads: [["U1", "8"], ["SW2", "1"], ["SW4", "1"], ["SW6", "1"]]},
- {name: "mcu.gpio.1_0", pads: [["U1", "9"], ["D1", "1"], ["D2", "1"]]},
- {name: "mcu.gpio.1_1", pads: [["U1", "11"], ["D3", "1"], ["D4", "1"]]},
- {name: "mcu.gpio.1_2", pads: [["U1", "10"], ["D5", "1"], ["D6", "1"]]},
- {name: "mcu.gnd", pads: [["U1", "13"]]},
+ {name: "mcu.gpio.cols_0", pads: [["U1", "8"], ["SW1", "1"], ["SW3", "1"], ["SW5", "1"]]},
+ {name: "mcu.gpio.cols_1", pads: [["U1", "9"], ["SW2", "1"], ["SW4", "1"], ["SW6", "1"]]},
+ {name: "mcu.gpio.rows_0", pads: [["U1", "11"], ["D2", "1"], ["D3", "1"]]},
+ {name: "mcu.gpio.rows_1", pads: [["U1", "10"], ["D4", "1"], ["D5", "1"]]},
+ {name: "mcu.gpio.rows_2", pads: [["U1", "5"], ["D6", "1"], ["D7", "1"]]},
+ {name: "mcu.gnd", pads: [["U1", "13"], ["R1", "2"]]},
{name: "mcu.pwr_out", pads: [["U1", "12"]]},
{name: "mcu.vusb_out", pads: [["U1", "14"]]},
- {name: "sw.sw[0,0].sw.com", pads: [["SW1", "2"], ["D1", "2"]]},
- {name: "sw.sw[1,0].sw.com", pads: [["SW2", "2"], ["D2", "2"]]},
- {name: "sw.sw[0,1].sw.com", pads: [["SW3", "2"], ["D3", "2"]]},
- {name: "sw.sw[1,1].sw.com", pads: [["SW4", "2"], ["D4", "2"]]},
- {name: "sw.sw[0,2].sw.com", pads: [["SW5", "2"], ["D5", "2"]]},
- {name: "sw.sw[1,2].sw.com", pads: [["SW6", "2"], ["D6", "2"]]}
+ {name: "led.signal", pads: [["U1", "7"], ["D1", "2"]]},
+ {name: "led.package.k", pads: [["D1", "1"], ["R1", "1"]]},
+ {name: "sw.sw[0,0].sw.com", pads: [["SW1", "2"], ["D2", "2"]]},
+ {name: "sw.sw[1,0].sw.com", pads: [["SW2", "2"], ["D3", "2"]]},
+ {name: "sw.sw[0,1].sw.com", pads: [["SW3", "2"], ["D4", "2"]]},
+ {name: "sw.sw[1,1].sw.com", pads: [["SW4", "2"], ["D5", "2"]]},
+ {name: "sw.sw[0,2].sw.com", pads: [["SW5", "2"], ["D6", "2"]]},
+ {name: "sw.sw[1,2].sw.com", pads: [["SW6", "2"], ["D7", "2"]]}
])
const limit0 = pt(-0.07874015748031496, -0.07874015748031496);
-const limit1 = pt(1.936220472440945, 2.1181102362204722);
+const limit1 = pt(2.171062992125984, 2.1181102362204722);
const xMin = Math.min(limit0[0], limit1[0]);
const xMax = Math.max(limit0[0], limit1[0]);
const yMin = Math.min(limit0[1], limit1[1]);
@@ -95,11 +107,11 @@ function SwitchDiodeMatrix_2_3_sw(xy, colSpacing=0.5, rowSpacing=0.5, diodeOffse
})
diodePos = [buttonPos[0] + diodeOffset[0], buttonPos[1] + diodeOffset[1]]
- obj[`D${1 + xIndex * nrows + yIndex}`] = diode = board.add(
+ obj[`D${2 + xIndex * nrows + yIndex}`] = diode = board.add(
D_SOD_323,
{
translate: diodePos, rotate: 90,
- id: `D${1 + xIndex * nrows + yIndex}`
+ id: `D${2 + xIndex * nrows + yIndex}`
})
// create stub wire for button -> column common line
diff --git a/examples/TofArray/TofArray.net.ref b/examples/TofArray/TofArray.net.ref
index 41faab2a8..7b494f011 100644
--- a/examples/TofArray/TofArray.net.ref
+++ b/examples/TofArray/TofArray.net.ref
@@ -172,7 +172,7 @@
(value "mcu.ic")
(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 "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu.ic"))
(property (name "edg_short_path") (value "mcu.ic"))
(property (name "edg_refdes") (value "U2"))
@@ -184,7 +184,7 @@
(value "mcu.pwr_cap[0]")
(footprint "Capacitor_SMD:C_0805_2012Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "C3"))
@@ -196,7 +196,7 @@
(value "mcu.pwr_cap[1]")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "C4"))
@@ -208,7 +208,7 @@
(value "mcu.pwr_cap[2]")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "C5"))
@@ -220,7 +220,7 @@
(value "mcu.pwr_cap[3]")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "C6"))
@@ -232,7 +232,7 @@
(value "mcu.vdda_cap_0")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "C7"))
@@ -244,7 +244,7 @@
(value "mcu.vdda_cap_1")
(footprint "Capacitor_SMD:C_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(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 "C8"))
@@ -292,7 +292,7 @@
(value "mcu.swd")
(footprint "Connector:Tag-Connect_TC2030-IDC-FP_2x03_P1.27mm_Vertical")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu.swd.conn"))
(property (name "edg_short_path") (value "mcu.swd"))
(property (name "edg_refdes") (value "J3"))
@@ -304,7 +304,7 @@
(value "mcu.usb_pull")
(footprint "Resistor_SMD:R_0603_1608Metric")
(property (name "Sheetname") (value "mcu"))
- (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48"))
+ (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103"))
(property (name "edg_path") (value "mcu.usb_pull.dp"))
(property (name "edg_short_path") (value "mcu.usb_pull"))
(property (name "edg_refdes") (value "R3"))
diff --git a/examples/prerouted_blocks/Stm32f103.kicad_pcb b/examples/prerouted_blocks/Stm32f103.kicad_pcb
index eed2e2b42..f9cf707f2 100644
--- a/examples/prerouted_blocks/Stm32f103.kicad_pcb
+++ b/examples/prerouted_blocks/Stm32f103.kicad_pcb
@@ -1,982 +1,4004 @@
-(kicad_pcb (version 20221018) (generator pcbnew)
-
- (general
- (thickness 1.6)
- )
-
- (paper "A4")
- (layers
- (0 "F.Cu" signal "Front")
- (31 "B.Cu" signal "Back")
- (34 "B.Paste" user)
- (35 "F.Paste" user)
- (36 "B.SilkS" user "B.Silkscreen")
- (37 "F.SilkS" user "F.Silkscreen")
- (38 "B.Mask" user)
- (39 "F.Mask" user)
- (41 "Cmts.User" user "User.Comments")
- (44 "Edge.Cuts" user)
- (45 "Margin" user)
- (46 "B.CrtYd" user "B.Courtyard")
- (47 "F.CrtYd" user "F.Courtyard")
- (49 "F.Fab" user)
- )
-
- (setup
- (stackup
- (layer "F.SilkS" (type "Top Silk Screen"))
- (layer "F.Paste" (type "Top Solder Paste"))
- (layer "F.Mask" (type "Top Solder Mask") (thickness 0.01))
- (layer "F.Cu" (type "copper") (thickness 0.035))
- (layer "dielectric 1" (type "core") (thickness 1.51) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))
- (layer "B.Cu" (type "copper") (thickness 0.035))
- (layer "B.Mask" (type "Bottom Solder Mask") (thickness 0.01))
- (layer "B.Paste" (type "Bottom Solder Paste"))
- (layer "B.SilkS" (type "Bottom Silk Screen"))
- (copper_finish "None")
- (dielectric_constraints no)
- )
- (pad_to_mask_clearance 0)
- (aux_axis_origin 138 48)
- (pcbplotparams
- (layerselection 0x00010f0_ffffffff)
- (plot_on_all_layers_selection 0x0000000_00000000)
- (disableapertmacros false)
- (usegerberextensions false)
- (usegerberattributes false)
- (usegerberadvancedattributes false)
- (creategerberjobfile false)
- (dashed_line_dash_ratio 12.000000)
- (dashed_line_gap_ratio 3.000000)
- (svgprecision 6)
- (plotframeref false)
- (viasonmask false)
- (mode 1)
- (useauxorigin false)
- (hpglpennumber 1)
- (hpglpenspeed 20)
- (hpglpendiameter 15.000000)
- (dxfpolygonmode true)
- (dxfimperialunits true)
- (dxfusepcbnewfont true)
- (psnegative false)
- (psa4output false)
- (plotreference true)
- (plotvalue true)
- (plotinvisibletext false)
- (sketchpadsonfab false)
- (subtractmaskfromsilk false)
- (outputformat 1)
- (mirror false)
- (drillshape 0)
- (scaleselection 1)
- (outputdirectory "gerbers")
- )
- )
-
- (net 0 "")
- (net 1 "gnd")
- (net 2 "v3v3")
- (net 3 "mcu.adc.curr_1")
- (net 4 "mcu.adc.curr_3")
- (net 5 "mcu.adc.curr_2")
- (net 6 "mcu.gpio.bldc_reset")
- (net 7 "mcu.gpio.bldc_fault")
- (net 8 "mcu.gpio.boost_pwm")
- (net 9 "mcu.gpio.sw1")
- (net 10 "mcu.gpio.pd_int")
- (net 11 "mcu.swd.tdi")
- (net 12 "mcu.gpio.buck_pwm")
- (net 13 "mcu.adc.conv_sense")
- (net 14 "mcu.gpio.rgb")
- (net 15 "mcu.swd.swd.swo")
- (net 16 "mcu.crystal.crystal.b")
- (net 17 "usb_esd.usb.dm")
- (net 18 "bldc_drv.ens.2")
- (net 19 "bldc_drv.ins.1")
- (net 20 "mcu.gpio.bldc_in_2")
- (net 21 "mcu.gpio.bldc_in_3")
- (net 22 "i2c.i2c.sda")
- (net 23 "i2c_tp.io.scl")
- (net 24 "usb.usb.dp")
- (net 25 "bldc_drv.ens.1")
- (net 26 "mcu.gpio.bldc_en_3")
- (net 27 "mcu.swd.swd.swclk")
- (net 28 "mcu.ic.swd.swdio")
- (net 29 "mag.pins.2")
- (net 30 "mcu.swd.swd.reset")
- (net 31 "mcu.crystal.crystal.a")
-
- (footprint "Capacitor_SMD:C_0603_1608Metric" (layer "F.Cu")
- (tstamp 16d0ea69-4b6e-4754-b9bd-f33dfcb41b96)
- (at 141 84)
- (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
- (tags "capacitor")
- (property "Sheetfile" "electronics_abstract_parts.AbstractCrystal.OscillatorCrystal")
- (property "Sheetname" "crystal")
- (property "edg_part" "CL10C330JB8NNNC (Samsung Electro-Mechanics)")
- (property "edg_path" "mcu.crystal.cap_a")
- (property "edg_refdes" "C11")
- (property "edg_short_path" "mcu.crystal.cap_a")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-00000c1b0303/00000000-0000-0000-0000-000005e701f5")
- (attr smd)
- (fp_text reference "C11" (at 3 0) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 7bb17158-0f7c-4030-8421-73a49e957c81)
- )
- (fp_text value "C1663" (at 0 1.43) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 98bc2285-b41e-46dd-83e6-e3e614e849df)
- )
- (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
- (effects (font (size 0.4 0.4) (thickness 0.06)))
- (tstamp d18b4f43-06e7-4156-bf20-8cc9a44b24b1)
- )
- (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6873421e-736f-46f7-8d25-1524d2d45a73))
- (fp_line (start -0.14058 0.51) (end 0.14058 0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 0d698820-1d9d-4e7c-a969-0a468b1fca3d))
- (fp_line (start -1.48 -0.73) (end 1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp c463a28a-0d0c-461c-babe-d76283986022))
- (fp_line (start -1.48 0.73) (end -1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 434c7f3d-83e3-4854-87e2-f1685dd8fcc1))
- (fp_line (start 1.48 -0.73) (end 1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp e8b841e2-5a41-487c-be61-b570ff9d41e1))
- (fp_line (start 1.48 0.73) (end -1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1a5bfd75-e952-4239-8107-73565bacfab5))
- (fp_line (start -0.8 -0.4) (end 0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a047eb71-e16d-403b-833a-94f9b473d9ef))
- (fp_line (start -0.8 0.4) (end -0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 6d46551b-418c-474d-9c44-2f4be5beba6e))
- (fp_line (start 0.8 -0.4) (end 0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 5b05477e-4f2a-40ef-aaec-d5a845429719))
- (fp_line (start 0.8 0.4) (end -0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 35476de1-5e0a-4eeb-a171-62f6d2ec2f81))
- (pad "1" smd roundrect (at -0.775 0) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 31 "mcu.crystal.crystal.a") (tstamp 81fd4fdb-97b3-4588-90b6-76f9ac479bcb))
- (pad "2" smd roundrect (at 0.775 0) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp 0c9a7272-aabd-40c8-9440-19d2d86a4304))
- (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
- (offset (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (footprint "Capacitor_SMD:C_0805_2012Metric" (layer "F.Cu")
- (tstamp 35cb7aec-9df8-433f-89f0-84f67a29c313)
- (at 133 82 -90)
- (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
- (tags "capacitor")
- (property "Sheetfile" "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
- (property "Sheetname" "mcu")
- (property "edg_part" "CL21A475KAQNNNE (Samsung Electro-Mechanics)")
- (property "edg_path" "mcu.pwr_cap[0].cap")
- (property "edg_refdes" "C5")
- (property "edg_short_path" "mcu.pwr_cap[0]")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-0000168703d5")
- (attr smd)
- (fp_text reference "C5" (at -2.5 0 90) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp d8be7944-c310-42cb-a835-bd17e7089d24)
- )
- (fp_text value "C1779" (at 0 1.68 90) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 4bfa8046-83b0-4974-a67e-cd9a3f7de9ee)
- )
- (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab")
- (effects (font (size 0.5 0.5) (thickness 0.08)))
- (tstamp b1804141-8e31-47d2-8733-cc242d534b70)
- )
- (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 15a45565-4e6e-4e01-a7bc-9b7402a52483))
- (fp_line (start -0.261252 0.735) (end 0.261252 0.735)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7175902c-3980-45ad-81e1-a22879ef31e9))
- (fp_line (start -1.7 -0.98) (end 1.7 -0.98)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp b9a0e86b-5742-402c-a7a0-240662a56b4f))
- (fp_line (start -1.7 0.98) (end -1.7 -0.98)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 811fb607-df49-4f4b-b5c8-0fdbe78cc810))
- (fp_line (start 1.7 -0.98) (end 1.7 0.98)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 608fc29c-8f30-4f40-bdca-65d60a9f2260))
- (fp_line (start 1.7 0.98) (end -1.7 0.98)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 360c1896-ae9a-4f18-8255-c38b4cc6bd9e))
- (fp_line (start -1 -0.625) (end 1 -0.625)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 27b5b4b8-cf90-41ca-9f83-954f4626c40c))
- (fp_line (start -1 0.625) (end -1 -0.625)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 81db23d3-5a72-401e-8800-2120794055c2))
- (fp_line (start 1 -0.625) (end 1 0.625)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 1151e663-ec13-479f-87f1-81edad9a8ad7))
- (fp_line (start 1 0.625) (end -1 0.625)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp f1a63b5d-5764-46a8-b6ec-ee43312ec122))
- (pad "1" smd roundrect (at -0.95 0 270) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp d4dfac60-dea3-4e90-825d-d5e77960890b))
- (pad "2" smd roundrect (at 0.95 0 270) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp de0f76cb-a0ec-45ab-bad6-e6181114718c))
- (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl"
- (offset (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (footprint "Capacitor_SMD:C_0603_1608Metric" (layer "F.Cu")
- (tstamp 3aebd714-3f82-40d7-9eb7-94051e6cb1bb)
- (at 136 66 90)
- (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
- (tags "capacitor")
- (property "Sheetfile" "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
- (property "Sheetname" "mcu")
- (property "edg_part" "CC0603KRX7R9BB104 (YAGEO)")
- (property "edg_path" "mcu.pwr_cap[2].cap")
- (property "edg_refdes" "C7")
- (property "edg_short_path" "mcu.pwr_cap[2]")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-0000168b03d7")
- (attr smd)
- (fp_text reference "C7" (at -2.5 0 90) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 74e2d6ae-be9d-402d-add5-3152a5ed1a96)
- )
- (fp_text value "C14663" (at 0 1.43 90) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 2143f65b-d262-450a-9066-2a499428d800)
- )
- (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab")
- (effects (font (size 0.4 0.4) (thickness 0.06)))
- (tstamp af681a5c-a3b4-4221-a030-fe925b75cbfa)
- )
- (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a108d7f4-1c14-47d4-a475-de91a5384d33))
- (fp_line (start -0.14058 0.51) (end 0.14058 0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 26705285-92d5-4093-ac61-1da4e50e7f3d))
- (fp_line (start -1.48 -0.73) (end 1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 9cdb7fec-4403-4a7f-ab08-5726d1755f30))
- (fp_line (start -1.48 0.73) (end -1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1d0088a5-cc99-456d-95e7-4a5497b55590))
- (fp_line (start 1.48 -0.73) (end 1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 03f5e227-30b7-45c8-b149-213479eb5684))
- (fp_line (start 1.48 0.73) (end -1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 0ef27aad-d30a-438c-9c78-e9c781ff0f78))
- (fp_line (start -0.8 -0.4) (end 0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 445c991c-e66c-42b5-8a86-5204e9de79f1))
- (fp_line (start -0.8 0.4) (end -0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp a2bc3722-9209-43ce-bdfd-3efcc5f05131))
- (fp_line (start 0.8 -0.4) (end 0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 9e9562cf-c0c3-408e-919c-9bd55cd2e18f))
- (fp_line (start 0.8 0.4) (end -0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 5c42c7b3-3a63-4ccd-84f3-7b79e87b3a15))
- (pad "1" smd roundrect (at -0.775 0 90) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp b4b2dd8e-e2a4-4daa-8873-1b58fd9a0956))
- (pad "2" smd roundrect (at 0.775 0 90) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp bfc09661-ddc8-4dcb-a5c2-62ba9138f30e))
- (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
- (offset (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (footprint "Capacitor_SMD:C_0603_1608Metric" (layer "F.Cu")
- (tstamp 6a50108e-6aa3-43b3-a666-a97cf847ba8c)
- (at 146 66 90)
- (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
- (tags "capacitor")
- (property "Sheetfile" "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
- (property "Sheetname" "mcu")
- (property "edg_part" "CC0603KRX7R9BB104 (YAGEO)")
- (property "edg_path" "mcu.pwr_cap[1].cap")
- (property "edg_refdes" "C6")
- (property "edg_short_path" "mcu.pwr_cap[1]")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-0000168903d6")
- (attr smd)
- (fp_text reference "C6" (at -2.5 0 90) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp c710593e-a531-40ba-9f5d-e33c0d762c13)
- )
- (fp_text value "C14663" (at 0 1.43 90) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 94f2c6f9-043e-4de8-a977-4c1bded25bf9)
- )
- (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab")
- (effects (font (size 0.4 0.4) (thickness 0.06)))
- (tstamp 9b3eb0a2-75c7-42a3-bf86-4945f3b49f3f)
- )
- (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 191e2d8a-d66e-48b9-8891-54b8c41ac468))
- (fp_line (start -0.14058 0.51) (end 0.14058 0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 7fee9e37-ea3a-4ad5-a2df-16779d972f85))
- (fp_line (start -1.48 -0.73) (end 1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp f7da7ec0-c245-497e-be04-4b9109581e50))
- (fp_line (start -1.48 0.73) (end -1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 85459bb0-ee0c-4182-b4c9-0ed2e4018461))
- (fp_line (start 1.48 -0.73) (end 1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp a7d381a1-f9e8-4b01-aa69-4536d09ac9d4))
- (fp_line (start 1.48 0.73) (end -1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 92fb46c3-f133-4cfe-8dd0-8763a85b8e95))
- (fp_line (start -0.8 -0.4) (end 0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp bf357768-3a27-4582-a9eb-e3a4b17f4b7c))
- (fp_line (start -0.8 0.4) (end -0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp adf935f1-f515-44a5-9be6-a9cd1d09179b))
- (fp_line (start 0.8 -0.4) (end 0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 12a11b64-5ee1-4b41-8bcf-c2901b319232))
- (fp_line (start 0.8 0.4) (end -0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 2a38b4d0-1b56-4a1d-a902-30c947bdd5f3))
- (pad "1" smd roundrect (at -0.775 0 90) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp 3463d62c-cfe3-4866-9e70-3bdc9fe97be7))
- (pad "2" smd roundrect (at 0.775 0 90) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp aa31f544-ef98-43fc-be4a-561999c0923f))
- (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
- (offset (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (footprint "Capacitor_SMD:C_0603_1608Metric" (layer "F.Cu")
- (tstamp 6bae50ab-a422-454e-9931-57f8c30beb92)
- (at 146 82 -90)
- (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
- (tags "capacitor")
- (property "Sheetfile" "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
- (property "Sheetname" "mcu")
- (property "edg_part" "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))")
- (property "edg_path" "mcu.vdda_cap_0.cap")
- (property "edg_refdes" "C9")
- (property "edg_short_path" "mcu.vdda_cap_0")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-000015dc03c2")
- (attr smd)
- (fp_text reference "C9" (at -2.5 0 90) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 3b06f427-3e4e-44f6-a58d-f326243aa2e8)
- )
- (fp_text value "C57112" (at 0 1.43 90) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 815fda8c-18c7-4536-9e9e-20d9f416bd69)
- )
- (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab")
- (effects (font (size 0.4 0.4) (thickness 0.06)))
- (tstamp 92d25dc4-6e64-4951-b97d-ae53700d4889)
- )
- (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6cbec720-ed7e-4913-b326-61330d37918d))
- (fp_line (start -0.14058 0.51) (end 0.14058 0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 6f2639b2-46e3-4c3a-be52-7094d0fdda49))
- (fp_line (start -1.48 -0.73) (end 1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 564add34-091d-49fe-b110-c7e09582fc80))
- (fp_line (start -1.48 0.73) (end -1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp eebf4159-b18d-439f-979b-a797c96bf943))
- (fp_line (start 1.48 -0.73) (end 1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 42e6cde9-30a9-45f6-b7ce-63230c3cc687))
- (fp_line (start 1.48 0.73) (end -1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1e070f16-069b-431b-aa9d-8f1c3e592b8c))
- (fp_line (start -0.8 -0.4) (end 0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp eb61094b-6358-4773-8ca5-e16403b3f8d2))
- (fp_line (start -0.8 0.4) (end -0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 6b5218c2-b65e-4e06-affe-0e1b4f095f4c))
- (fp_line (start 0.8 -0.4) (end 0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 54af95af-ebb4-4f02-bf0b-220e6263207e))
- (fp_line (start 0.8 0.4) (end -0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp ec66e4e9-cce3-4612-a0f2-a56d652bd6d4))
- (pad "1" smd roundrect (at -0.775 0 270) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp 98724b38-d4cb-4457-b15a-949b57e76bf6))
- (pad "2" smd roundrect (at 0.775 0 270) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp e6c7d1da-e9ea-408b-9b8e-8afac2dac2e5))
- (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
- (offset (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (footprint "Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm" (layer "F.Cu")
- (tstamp 90631ca6-e25f-42db-a019-809b283b9dce)
- (at 141 87 -90)
- (descr "SMD Crystal SERIES SMD3225/4 http://www.txccrystal.com/images/pdf/7m-accuracy.pdf, 3.2x2.5mm^2 package")
- (tags "SMD SMT crystal")
- (property "Sheetfile" "electronics_abstract_parts.AbstractCrystal.OscillatorCrystal")
- (property "Sheetname" "crystal")
- (property "edg_part" "X322512MSB4SI (Yangxing Tech)")
- (property "edg_path" "mcu.crystal.package")
- (property "edg_refdes" "X1")
- (property "edg_short_path" "mcu.crystal.package")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-00000c1b0303/00000000-0000-0000-0000-00000b4e02cd")
- (attr smd)
- (fp_text reference "X1" (at 0 -2.45 -90) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 9a6a30d1-6033-435e-9ca9-9a16703a4df4)
- )
- (fp_text value "C9002" (at 0 2.45 -90) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 7369295c-9e68-43c9-976e-b44850ce90d8)
- )
- (fp_text user "${REFERENCE}" (at 0 0 -90) (layer "F.Fab")
- (effects (font (size 0.7 0.7) (thickness 0.105)))
- (tstamp 15cfb315-72ee-41b8-8d6a-c40dde4ef05b)
- )
- (fp_line (start -2 -1.65) (end -2 1.65)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 37a56074-cdd6-4509-81ed-cd8edc4ea73a))
- (fp_line (start -2 1.65) (end 2 1.65)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ba5ab1f2-8b67-4794-9c4b-5a392b14d154))
- (fp_line (start -2.1 -1.7) (end -2.1 1.7)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp dd3ca650-0334-4dbc-b606-9acdbd5a8d8b))
- (fp_line (start -2.1 1.7) (end 2.1 1.7)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 75063b83-1f05-4f3c-aeaf-a92b28dab66a))
- (fp_line (start 2.1 -1.7) (end -2.1 -1.7)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp fbc294ea-7ead-4de8-8629-c6e5138139bd))
- (fp_line (start 2.1 1.7) (end 2.1 -1.7)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 47d5592d-0948-4767-9f84-5fac5d7e8f95))
- (fp_line (start -1.6 -1.25) (end -1.6 1.25)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 93e054ba-b0c9-4464-8676-04f71c7b431e))
- (fp_line (start -1.6 0.25) (end -0.6 1.25)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 45229518-87dc-4696-b626-663dabbb98c5))
- (fp_line (start -1.6 1.25) (end 1.6 1.25)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 93fac30b-62e1-434d-8826-a2c8e7bd8ddf))
- (fp_line (start 1.6 -1.25) (end -1.6 -1.25)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7dfb2b61-35e1-4cd7-b9fd-9420209efbbb))
- (fp_line (start 1.6 1.25) (end 1.6 -1.25)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 0a9e70c6-bf76-481d-a780-03cf402d6b49))
- (pad "1" smd rect (at -1.1 0.85 270) (size 1.4 1.2) (layers "F.Cu" "F.Paste" "F.Mask")
- (net 31 "mcu.crystal.crystal.a") (tstamp 5b76a7e8-d62e-46b8-a635-b0a9b0516e18))
- (pad "2" smd rect (at 1.1 0.85 270) (size 1.4 1.2) (layers "F.Cu" "F.Paste" "F.Mask")
- (net 1 "gnd") (tstamp b508b1b8-e414-45ff-a1fe-a35d31e25cb1))
- (pad "3" smd rect (at 1.1 -0.85 270) (size 1.4 1.2) (layers "F.Cu" "F.Paste" "F.Mask")
- (net 16 "mcu.crystal.crystal.b") (tstamp 5311968b-6975-464b-9f72-55b9b683f8ac))
- (pad "4" smd rect (at -1.1 -0.85 270) (size 1.4 1.2) (layers "F.Cu" "F.Paste" "F.Mask")
- (net 1 "gnd") (tstamp 85e80086-0bdc-4c6f-9ce3-a78588515871))
- (model "${KICAD6_3DMODEL_DIR}/Crystal.3dshapes/Crystal_SMD_3225-4Pin_3.2x2.5mm.wrl"
- (offset (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (footprint "Capacitor_SMD:C_0603_1608Metric" (layer "F.Cu")
- (tstamp 975166e4-7cf6-40c6-9998-9d220186e659)
- (at 148 82 -90)
- (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
- (tags "capacitor")
- (property "Sheetfile" "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
- (property "Sheetname" "mcu")
- (property "edg_part" "CL10A105KB8NNNC (Samsung Electro-Mechanics)")
- (property "edg_path" "mcu.vdda_cap_1.cap")
- (property "edg_refdes" "C10")
- (property "edg_short_path" "mcu.vdda_cap_1")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-000015dd03c3")
- (attr smd)
- (fp_text reference "C10" (at -3 0 90) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 73d56008-da39-48a6-b4d8-3d8443a0cb60)
- )
- (fp_text value "C15849" (at 0 1.43 90) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp e04174ff-a9ac-4eb3-aa77-57034f7e266f)
- )
- (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab")
- (effects (font (size 0.4 0.4) (thickness 0.06)))
- (tstamp b82a8312-94bb-4a0a-b79f-66849ad66559)
- )
- (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 57b5c31a-771d-4c3e-9376-ecdd665fbfcc))
- (fp_line (start -0.14058 0.51) (end 0.14058 0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 8f3a4041-5000-49ff-95da-429b61453557))
- (fp_line (start -1.48 -0.73) (end 1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 2a4c13a8-1675-46ef-8b96-28ebb1a5d58d))
- (fp_line (start -1.48 0.73) (end -1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 87f3a5ae-e324-4baf-95bc-e783f61ab539))
- (fp_line (start 1.48 -0.73) (end 1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 8d5c1d0d-12c0-492a-b757-29e44213ff1f))
- (fp_line (start 1.48 0.73) (end -1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp ebe11735-5ea0-4092-9151-f3212c49e59d))
- (fp_line (start -0.8 -0.4) (end 0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp d3b998cf-a2cd-4f90-beeb-5d6f557e8b83))
- (fp_line (start -0.8 0.4) (end -0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7262ee22-9e57-46c7-956f-a3aa92864a96))
- (fp_line (start 0.8 -0.4) (end 0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 1ed6567b-63f0-4112-a2cb-1f7734be5f35))
- (fp_line (start 0.8 0.4) (end -0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 132d6795-7a00-432d-9930-1efcb7bb18a4))
- (pad "1" smd roundrect (at -0.775 0 270) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp b3afc816-d9b2-4c8c-b010-592ddbc16ffa))
- (pad "2" smd roundrect (at 0.775 0 270) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp 9304f30f-994c-4907-89b7-286fa333035f))
- (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
- (offset (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (footprint "Capacitor_SMD:C_0603_1608Metric" (layer "F.Cu")
- (tstamp 9a565ea9-18fc-466a-846e-b7432f1bfec8)
- (at 141 82 180)
- (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
- (tags "capacitor")
- (property "Sheetfile" "electronics_abstract_parts.AbstractCrystal.OscillatorCrystal")
- (property "Sheetname" "crystal")
- (property "edg_part" "CL10C330JB8NNNC (Samsung Electro-Mechanics)")
- (property "edg_path" "mcu.crystal.cap_b")
- (property "edg_refdes" "C12")
- (property "edg_short_path" "mcu.crystal.cap_b")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-00000c1b0303/00000000-0000-0000-0000-000005e801f6")
- (attr smd)
- (fp_text reference "C12" (at -3 0) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp fa7ce4b1-b6c6-4664-9fea-011f56104a22)
- )
- (fp_text value "C1663" (at 0 1.43) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp aa2b6522-6ff2-438b-abc2-c0d32f12d497)
- )
- (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
- (effects (font (size 0.4 0.4) (thickness 0.06)))
- (tstamp a4f3a099-a1de-4f8f-92fd-3c23dd281daa)
- )
- (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp e26ce60b-dabf-4e54-9656-0d09c8745c39))
- (fp_line (start -0.14058 0.51) (end 0.14058 0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4818b550-1f3b-461b-ad1c-f35265e68a8b))
- (fp_line (start -1.48 -0.73) (end 1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 8e42fce0-f725-4b68-accd-11fd4304aeb3))
- (fp_line (start -1.48 0.73) (end -1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp fecd0c2d-1548-45db-96da-ac775a5fe559))
- (fp_line (start 1.48 -0.73) (end 1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp ad17f3ff-8b20-4687-a4bc-95b15fd64047))
- (fp_line (start 1.48 0.73) (end -1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp fedb447a-1f69-49a0-846c-e2dab2eb7a8b))
- (fp_line (start -0.8 -0.4) (end 0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 65da7d8a-5c41-4c1e-b434-e373befa0d82))
- (fp_line (start -0.8 0.4) (end -0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 6df4f9a5-c4c2-42f1-bc8f-16ecc0a19752))
- (fp_line (start 0.8 -0.4) (end 0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp eb879da0-fa14-4b03-aa2b-a94cce292047))
- (fp_line (start 0.8 0.4) (end -0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 7bae6cee-bcab-4422-9c93-82e5cd042ef7))
- (pad "1" smd roundrect (at -0.775 0 180) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 16 "mcu.crystal.crystal.b") (tstamp 1d1aaffb-9d0c-48f2-aacf-37abfa952f6b))
- (pad "2" smd roundrect (at 0.775 0 180) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp adad975c-2c75-43cb-a68e-6f014cee6976))
- (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
- (offset (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (footprint "Capacitor_SMD:C_0603_1608Metric" (layer "F.Cu")
- (tstamp 9f1560db-15dd-45d5-95d6-a2e616eb29e8)
- (at 135 82 -90)
- (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
- (tags "capacitor")
- (property "Sheetfile" "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
- (property "Sheetname" "mcu")
- (property "edg_part" "CC0603KRX7R9BB104 (YAGEO)")
- (property "edg_path" "mcu.pwr_cap[3].cap")
- (property "edg_refdes" "C8")
- (property "edg_short_path" "mcu.pwr_cap[3]")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-0000168d03d8")
- (attr smd)
- (fp_text reference "C8" (at -2.5 0 90) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 3c170679-97ee-4f6e-9d8b-2b2289cee67b)
- )
- (fp_text value "C14663" (at 0 1.43 90) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp da7cca78-ad4f-49b2-93e6-30da69e22ffa)
- )
- (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab")
- (effects (font (size 0.4 0.4) (thickness 0.06)))
- (tstamp 5b15b69a-ea68-417d-9af9-0d51c997a226)
- )
- (fp_line (start -0.14058 -0.51) (end 0.14058 -0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp a9f9d173-096a-40dc-9e6f-fc960dedc8bd))
- (fp_line (start -0.14058 0.51) (end 0.14058 0.51)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 3a7c8ed8-5ded-4a1c-ac14-0bd0208f7daa))
- (fp_line (start -1.48 -0.73) (end 1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 8c84e01a-b9f5-4c24-938b-b0b9957b881f))
- (fp_line (start -1.48 0.73) (end -1.48 -0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 74f3c5e9-a070-44fd-8ad4-372d9e0912ef))
- (fp_line (start 1.48 -0.73) (end 1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 4cd074da-fb95-4843-bdb5-d2f55279d409))
- (fp_line (start 1.48 0.73) (end -1.48 0.73)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 108d8200-4977-4d49-9e5a-35424a7621f3))
- (fp_line (start -0.8 -0.4) (end 0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp de5f38d6-2d58-42b7-92a3-8709b87eb568))
- (fp_line (start -0.8 0.4) (end -0.8 -0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 9ef3052d-e69f-4629-9008-408abc6cdefe))
- (fp_line (start 0.8 -0.4) (end 0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 794943b7-48a6-4d41-a606-8079a765b3ec))
- (fp_line (start 0.8 0.4) (end -0.8 0.4)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp f180fc7a-3890-4814-9c62-a911a91d0c8d))
- (pad "1" smd roundrect (at -0.775 0 270) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp 632c4c34-c806-44c1-9098-0fd47609fd84))
- (pad "2" smd roundrect (at 0.775 0 270) (size 0.9 0.95) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp f17c1d6a-9c20-4bde-a2a4-3a16f712cd33))
- (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
- (offset (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (footprint "Connector:Tag-Connect_TC2050-IDC-FP_2x05_P1.27mm_Vertical" (layer "F.Cu")
- (tstamp d24cdbed-ee1c-4a08-9a39-31ea70d0cef7)
- (at 141 58 180)
- (descr "Tag-Connect programming header; http://www.tag-connect.com/Materials/TC2050-IDC-430%20Datasheet.pdf")
- (tags "tag connect programming header pogo pins")
- (property "Sheetfile" "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
- (property "Sheetname" "mcu")
- (property "edg_part" "")
- (property "edg_path" "mcu.swd")
- (property "edg_refdes" "J2")
- (property "edg_short_path" "mcu.swd")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-000002ae014f")
- (attr exclude_from_pos_files)
- (fp_text reference "J2" (at 0 2 180) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 5402c6f5-cb27-44ac-a54f-3fc7819e77ab)
- )
- (fp_text value "" (at 0 -4.8) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp c2962c4e-38dc-4884-bac7-bb5377b238df)
- )
- (fp_text user "KEEPOUT" (at 0 0) (layer "Cmts.User")
- (effects (font (size 0.4 0.4) (thickness 0.07)))
- (tstamp 60b4c290-2334-46e5-adfb-e6f7af3fbaf4)
- )
- (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp ff8073f4-056a-41ab-8935-91c82c27d0fd)
- )
- (fp_line (start -3.175 1.27) (end -3.175 0.635)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 85d6a4fa-ce0d-4048-a164-4d2c06bd49bd))
- (fp_line (start -2.54 1.27) (end -3.175 1.27)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp c34377d8-5968-4540-ae34-79fd07babe1d))
- (fp_line (start -5.5 -4.25) (end 4.75 -4.25)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp de1f6600-dc49-4b2a-986e-baa3fa8472f3))
- (fp_line (start -5.5 4.25) (end -5.5 -4.25)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 5e6eeba1-7075-417a-be2b-ad133749c0f9))
- (fp_line (start 4.75 -4.25) (end 4.75 4.25)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 858ff5fb-5a34-4756-82e4-abc1085324f9))
- (fp_line (start 4.75 4.25) (end -5.5 4.25)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp f095cc34-2369-4590-a63d-9535be055c52))
- (pad "" np_thru_hole circle (at -3.81 -2.54 180) (size 2.3749 2.3749) (drill 2.3749) (layers "*.Cu" "*.Mask") (tstamp 19a01d4a-7988-455f-aea6-22c90751a7ff))
- (pad "" np_thru_hole circle (at -3.81 0 180) (size 0.9906 0.9906) (drill 0.9906) (layers "*.Cu" "*.Mask") (tstamp 03c29b64-ad0b-4bf1-879a-94b5ae80e4e4))
- (pad "" np_thru_hole circle (at -3.81 2.54 180) (size 2.3749 2.3749) (drill 2.3749) (layers "*.Cu" "*.Mask") (tstamp ebd61935-4a31-4718-903d-6327bb4f0e57))
- (pad "" np_thru_hole circle (at 1.905 -2.54 180) (size 2.3749 2.3749) (drill 2.3749) (layers "*.Cu" "*.Mask") (tstamp 54f32dff-bf73-4a36-acf9-33144ca0936f))
- (pad "" np_thru_hole circle (at 1.905 2.54 180) (size 2.3749 2.3749) (drill 2.3749) (layers "*.Cu" "*.Mask") (tstamp d826d710-6d8f-40cf-a956-152caa95bf8a))
- (pad "" np_thru_hole circle (at 3.81 -1.016 180) (size 0.9906 0.9906) (drill 0.9906) (layers "*.Cu" "*.Mask") (tstamp b42db1d8-0c47-483c-8997-273e7c7b2b1b))
- (pad "" np_thru_hole circle (at 3.81 1.016 180) (size 0.9906 0.9906) (drill 0.9906) (layers "*.Cu" "*.Mask") (tstamp 357d5391-3474-4b71-b854-a1ff3db639e9))
- (pad "1" connect circle (at -2.54 0.635 180) (size 0.7874 0.7874) (layers "F.Cu" "F.Mask")
- (net 2 "v3v3") (tstamp 35eecd52-b456-4da1-94f3-ddb8eda6252b))
- (pad "2" connect circle (at -1.27 0.635 180) (size 0.7874 0.7874) (layers "F.Cu" "F.Mask")
- (net 1 "gnd") (tstamp 35675dc3-1501-403d-b11f-0803eda895f3))
- (pad "3" connect circle (at 0 0.635 180) (size 0.7874 0.7874) (layers "F.Cu" "F.Mask")
- (net 1 "gnd") (tstamp c128a11c-04ce-4b1f-9f1f-ac36515ea29d))
- (pad "4" connect circle (at 1.27 0.635 180) (size 0.7874 0.7874) (layers "F.Cu" "F.Mask") (tstamp 0f923acb-b9ea-49ae-a0d4-5f6be818a9a6))
- (pad "5" connect circle (at 2.54 0.635 180) (size 0.7874 0.7874) (layers "F.Cu" "F.Mask")
- (net 1 "gnd") (tstamp 60e0837d-6219-4671-a4ee-6db2a01620cd))
- (pad "6" connect circle (at 2.54 -0.635 180) (size 0.7874 0.7874) (layers "F.Cu" "F.Mask")
- (net 30 "mcu.swd.swd.reset") (tstamp f07b0370-2668-4830-9f4a-dc380a49d8cb))
- (pad "7" connect circle (at 1.27 -0.635 180) (size 0.7874 0.7874) (layers "F.Cu" "F.Mask")
- (net 11 "mcu.swd.tdi") (tstamp f5fd1606-3bbc-4047-9314-ed061baa6c1d))
- (pad "8" connect circle (at 0 -0.635 180) (size 0.7874 0.7874) (layers "F.Cu" "F.Mask")
- (net 15 "mcu.swd.swd.swo") (tstamp a3b9a888-25c6-4d47-b19c-4e95d582472b))
- (pad "9" connect circle (at -1.27 -0.635 180) (size 0.7874 0.7874) (layers "F.Cu" "F.Mask")
- (net 27 "mcu.swd.swd.swclk") (tstamp e3e4c983-44cf-4a0a-a046-32a3ba7004ac))
- (pad "10" connect circle (at -2.54 -0.635 180) (size 0.7874 0.7874) (layers "F.Cu" "F.Mask")
- (net 28 "mcu.ic.swd.swdio") (tstamp dba9ce69-21e9-4f74-8864-d99322472bc5))
- (zone (net 0) (net_name "") (layer "F.Cu") (tstamp 37150a3e-f00a-4f04-ba8a-86622f0b9a6e) (hatch full 0.508)
- (connect_pads (clearance 0))
- (min_thickness 0.254) (filled_areas_thickness no)
- (keepout (tracks allowed) (vias not_allowed) (pads allowed) (copperpour not_allowed) (footprints not_allowed))
- (fill (thermal_gap 0.508) (thermal_bridge_width 0.508))
- (polygon
- (pts
- (xy 143.54 57.365)
- (xy 138.46 57.365)
- (xy 138.46 58.635)
- (xy 143.54 58.635)
- )
- )
- )
- )
-
- (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm" (layer "F.Cu")
- (tstamp d5fdde7e-99d1-4a23-a830-676da53a3a31)
- (at 141 74 90)
- (descr "LQFP, 48 Pin (https://www.analog.com/media/en/technical-documentation/data-sheets/ltc2358-16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py")
- (tags "LQFP QFP")
- (property "Sheetfile" "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
- (property "Sheetname" "mcu")
- (property "edg_part" "STM32F103xxT6 (STMicroelectronics)")
- (property "edg_path" "mcu.ic")
- (property "edg_refdes" "U3")
- (property "edg_short_path" "mcu.ic")
- (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-0000013700cd")
- (attr smd)
- (fp_text reference "U3" (at 0 -5.85 90) (layer "F.SilkS")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp d019ddcf-dae2-4872-9f2b-c4642a9fb5a4)
- )
- (fp_text value "C8734" (at 0 5.85 90) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 6f64cdaf-5a6b-4b22-a2cf-5aeb1c54c1d8)
- )
- (fp_text user "${REFERENCE}" (at 0 0 90) (layer "F.Fab")
- (effects (font (size 1 1) (thickness 0.15)))
- (tstamp 6e28052c-c145-4731-84f9-30707b0229e7)
- )
- (fp_line (start -3.61 -3.61) (end -3.61 -3.16)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 29273be9-ab38-4966-95e2-0d12d82a928e))
- (fp_line (start -3.61 -3.16) (end -4.9 -3.16)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp b13b1cb0-5a31-46be-8cbb-faea8ea1cac3))
- (fp_line (start -3.61 3.61) (end -3.61 3.16)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 8f0a0b09-0306-4133-8245-d6af19bd7df6))
- (fp_line (start -3.16 -3.61) (end -3.61 -3.61)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 0cf2ffb1-1263-4c3e-b3c6-f1bdbd864afa))
- (fp_line (start -3.16 3.61) (end -3.61 3.61)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp cdb5b0f8-ff7a-41e4-bee6-eb1505359820))
- (fp_line (start 3.16 -3.61) (end 3.61 -3.61)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 17608267-074f-4583-b077-bfc0d495838a))
- (fp_line (start 3.16 3.61) (end 3.61 3.61)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 1f87d628-66e3-4d9a-9c7f-1e7af57875ef))
- (fp_line (start 3.61 -3.61) (end 3.61 -3.16)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp cbffd746-07c0-49dd-98d2-bf594ba545f4))
- (fp_line (start 3.61 3.61) (end 3.61 3.16)
- (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4f5e8f95-6331-4be3-b2d3-1cb817e84ee3))
- (fp_line (start -5.15 -3.15) (end -5.15 0)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1ca0da5f-ffe2-4cd1-aada-ebca4ccffb9b))
- (fp_line (start -5.15 3.15) (end -5.15 0)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp b5e227a0-ab11-4e7b-8459-681883384857))
- (fp_line (start -3.75 -3.75) (end -3.75 -3.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1213d7a3-f877-483f-8e5e-50459ea920a1))
- (fp_line (start -3.75 -3.15) (end -5.15 -3.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 22b2fdab-a45a-40aa-a46b-47868d6401a7))
- (fp_line (start -3.75 3.15) (end -5.15 3.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 8e01940a-7cc5-412c-b220-0fb93cc0f7a3))
- (fp_line (start -3.75 3.75) (end -3.75 3.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 993858dc-149e-46da-a99c-ec0bc2e117c6))
- (fp_line (start -3.15 -5.15) (end -3.15 -3.75)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 3ccd4646-716c-4495-ac5e-3f7146f8ee28))
- (fp_line (start -3.15 -3.75) (end -3.75 -3.75)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp ee2f3ac2-a51d-4dd9-8afe-a82f5b30d540))
- (fp_line (start -3.15 3.75) (end -3.75 3.75)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 7dde4c52-b9a5-4260-9618-929b9764767c))
- (fp_line (start -3.15 5.15) (end -3.15 3.75)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp f7307669-1eec-48a6-a003-b18b262f9966))
- (fp_line (start 0 -5.15) (end -3.15 -5.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 74e59f32-8155-4909-a945-17b8828931b8))
- (fp_line (start 0 -5.15) (end 3.15 -5.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 258777ee-9505-41e6-b27f-bb6214dd38c2))
- (fp_line (start 0 5.15) (end -3.15 5.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 79cfe0de-a420-4053-8fe6-e9254cecfcf5))
- (fp_line (start 0 5.15) (end 3.15 5.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 16faa268-610c-483b-beec-70ccf84e4912))
- (fp_line (start 3.15 -5.15) (end 3.15 -3.75)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp c9704ac4-7f19-4b50-bfea-673e2120034d))
- (fp_line (start 3.15 -3.75) (end 3.75 -3.75)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 2dc32cb6-ace0-42f3-803c-ff5248c03aa2))
- (fp_line (start 3.15 3.75) (end 3.75 3.75)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp b89c8af5-b834-4913-9c11-7483eb8c9792))
- (fp_line (start 3.15 5.15) (end 3.15 3.75)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 24daa533-7c9e-4a6d-959b-4c17650e3005))
- (fp_line (start 3.75 -3.75) (end 3.75 -3.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 9d1e12de-5254-41a3-b3bc-49d45c2e554f))
- (fp_line (start 3.75 -3.15) (end 5.15 -3.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp d5369598-cafa-4060-b8ac-427534aa4851))
- (fp_line (start 3.75 3.15) (end 5.15 3.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 87174331-4d62-48c1-904a-5a01c77dfbe0))
- (fp_line (start 3.75 3.75) (end 3.75 3.15)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp acbb7ea9-97a0-4129-b886-62b195c083cc))
- (fp_line (start 5.15 -3.15) (end 5.15 0)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 631fd876-98c8-418f-a8c6-03e7211750a9))
- (fp_line (start 5.15 3.15) (end 5.15 0)
- (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp a5b93785-accd-47cb-850a-e3033a56bcfb))
- (fp_line (start -3.5 -2.5) (end -2.5 -3.5)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 984e84c6-6a7c-48cc-8486-76ed511014dd))
- (fp_line (start -3.5 3.5) (end -3.5 -2.5)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 43bf9cc2-d203-4a63-a188-138c5e6a96bc))
- (fp_line (start -2.5 -3.5) (end 3.5 -3.5)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 9d2f3b4e-f244-4dfd-892d-bcbf0e11a663))
- (fp_line (start 3.5 -3.5) (end 3.5 3.5)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 78145cdd-d8f4-420b-8762-1d881f01878f))
- (fp_line (start 3.5 3.5) (end -3.5 3.5)
- (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp ec42d7d6-f914-4600-8546-2a3ae12cc231))
- (pad "1" smd roundrect (at -4.1625 -2.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp 96aa77a7-43ab-4235-9cb6-7ef934c6dfd2))
- (pad "2" smd roundrect (at -4.1625 -2.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 367748b3-8043-468a-800f-90eb4eab61ae))
- (pad "3" smd roundrect (at -4.1625 -1.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 014124ae-5fb6-4ff6-8f36-752883360c2f))
- (pad "4" smd roundrect (at -4.1625 -1.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 706b1d53-a4eb-4cac-9625-9faba85e9dfe))
- (pad "5" smd roundrect (at -4.1625 -0.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 31 "mcu.crystal.crystal.a") (tstamp c773a581-9b5e-45cb-a926-b19c03dc8f82))
- (pad "6" smd roundrect (at -4.1625 -0.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 16 "mcu.crystal.crystal.b") (tstamp 6e469894-98d3-4725-a3a4-d66c231002fa))
- (pad "7" smd roundrect (at -4.1625 0.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 30 "mcu.swd.swd.reset") (tstamp 1aaa0773-25f8-469d-a367-393c2c573ed0))
- (pad "8" smd roundrect (at -4.1625 0.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp f8d28925-d24e-4011-aa8e-451ef6c8434e))
- (pad "9" smd roundrect (at -4.1625 1.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp 4c6c972d-3181-41bc-bdaa-41e11dfbceb8))
- (pad "10" smd roundrect (at -4.1625 1.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 29 "mag.pins.2") (tstamp af71420f-455b-4867-ac3d-a57805c662e1))
- (pad "11" smd roundrect (at -4.1625 2.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 12 "mcu.gpio.buck_pwm") (tstamp d9a57817-5e75-48df-9902-6272c58d5ce6))
- (pad "12" smd roundrect (at -4.1625 2.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 8 "mcu.gpio.boost_pwm") (tstamp 95b362fe-411f-4c3c-a0a6-8bfb60de75ff))
- (pad "13" smd roundrect (at -2.75 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 13 "mcu.adc.conv_sense") (tstamp 75368005-040f-4ff6-bf73-3f6ead9c26bd))
- (pad "14" smd roundrect (at -2.25 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 5 "mcu.adc.curr_2") (tstamp d1be1e94-8b24-4770-b2ea-d5aaf55f9fd5))
- (pad "15" smd roundrect (at -1.75 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 3 "mcu.adc.curr_1") (tstamp ca4e8bf8-2b99-44e2-a858-a3174b5f033b))
- (pad "16" smd roundrect (at -1.25 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 4 "mcu.adc.curr_3") (tstamp 1c2bba14-48db-423d-806d-9578432b31fe))
- (pad "17" smd roundrect (at -0.75 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 19 "bldc_drv.ins.1") (tstamp d3d899de-ea42-4e5b-8a0e-1ce53012ad30))
- (pad "18" smd roundrect (at -0.25 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 25 "bldc_drv.ens.1") (tstamp f7dcd519-3952-4d73-a9dc-f4b33af36a76))
- (pad "19" smd roundrect (at 0.25 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 20 "mcu.gpio.bldc_in_2") (tstamp 711f293d-b1f9-404b-bbef-ae651fd02434))
- (pad "20" smd roundrect (at 0.75 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 18 "bldc_drv.ens.2") (tstamp b1b17019-9e7e-4f9b-b55b-3de2ccedab96))
- (pad "21" smd roundrect (at 1.25 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 21 "mcu.gpio.bldc_in_3") (tstamp 2678ea51-0a88-43d6-ba7f-999d4253d6c4))
- (pad "22" smd roundrect (at 1.75 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 26 "mcu.gpio.bldc_en_3") (tstamp 34ce9799-90a0-4d14-b3e0-c6f4c7247b06))
- (pad "23" smd roundrect (at 2.25 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp acdf3f13-a9d6-4368-9952-0b788e1a6f92))
- (pad "24" smd roundrect (at 2.75 4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp e2f2036a-5d62-4dce-b8b5-ba60ef768260))
- (pad "25" smd roundrect (at 4.1625 2.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 7 "mcu.gpio.bldc_fault") (tstamp 95f048c2-65ef-4a7a-bb24-607d38b17924))
- (pad "26" smd roundrect (at 4.1625 2.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 6 "mcu.gpio.bldc_reset") (tstamp 953c6948-33a5-4f10-9284-f734e458007f))
- (pad "27" smd roundrect (at 4.1625 1.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 486f2c09-033e-473b-ab16-a3a49d4ccd2c))
- (pad "28" smd roundrect (at 4.1625 1.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 766ce5a6-f413-4ce5-b295-493785ac1e5e))
- (pad "29" smd roundrect (at 4.1625 0.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 0f6be9f6-c07f-486d-989e-5363d8c8c8cf))
- (pad "30" smd roundrect (at 4.1625 0.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 5b0883a3-74b6-4624-b0ac-bcf28f1aca21))
- (pad "31" smd roundrect (at 4.1625 -0.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 82f6e6c0-80f1-4605-a459-412066dc00e8))
- (pad "32" smd roundrect (at 4.1625 -0.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 17 "usb_esd.usb.dm") (tstamp 7d1c239b-1e0a-405c-b3e8-fcfe6d9c68cf))
- (pad "33" smd roundrect (at 4.1625 -1.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 24 "usb.usb.dp") (tstamp 275f6b53-6c19-47cc-a380-dd1f6b19f5ba))
- (pad "34" smd roundrect (at 4.1625 -1.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 28 "mcu.ic.swd.swdio") (tstamp d2267ce7-27a0-4323-8ee4-edf4fee0fb32))
- (pad "35" smd roundrect (at 4.1625 -2.25 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp 6304bfb8-8088-47b2-b268-8c42dda4977a))
- (pad "36" smd roundrect (at 4.1625 -2.75 90) (size 1.475 0.3) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp ed8aadd5-794e-4c98-b408-9d1ce6b0042f))
- (pad "37" smd roundrect (at 2.75 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 27 "mcu.swd.swd.swclk") (tstamp 8c8574f3-6197-4d42-afcd-951cbbea49fb))
- (pad "38" smd roundrect (at 2.25 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 9 "mcu.gpio.sw1") (tstamp 94630d8a-4b7d-4c70-ab8a-50d9a0352e5d))
- (pad "39" smd roundrect (at 1.75 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 15 "mcu.swd.swd.swo") (tstamp 29103c59-8ce5-46dd-9e43-49119b9f9202))
- (pad "40" smd roundrect (at 1.25 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 14 "mcu.gpio.rgb") (tstamp fa9cc7bf-c7f5-45dc-8a51-d6fea1d4be1a))
- (pad "41" smd roundrect (at 0.75 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp 1d7c383e-b303-4276-b1ae-0473a3a7d933))
- (pad "42" smd roundrect (at 0.25 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 23 "i2c_tp.io.scl") (tstamp 0c7d622f-98c9-47fc-a230-266a7d42c29f))
- (pad "43" smd roundrect (at -0.25 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 22 "i2c.i2c.sda") (tstamp a3250968-71c2-4773-a98e-c01f90af4385))
- (pad "44" smd roundrect (at -0.75 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp 56c7eb5a-e878-482e-afc3-f04edc39be27))
- (pad "45" smd roundrect (at -1.25 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 10 "mcu.gpio.pd_int") (tstamp 62971e02-8fe8-428f-8d13-1152d681aeef))
- (pad "46" smd roundrect (at -1.75 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) (tstamp ad03fcdc-4174-47fa-8adf-59d545ff9482))
- (pad "47" smd roundrect (at -2.25 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 1 "gnd") (tstamp e8e8fa85-25a5-4185-8a32-9057d41f8cb4))
- (pad "48" smd roundrect (at -2.75 -4.1625 90) (size 0.3 1.475) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25)
- (net 2 "v3v3") (tstamp 0bc7eacd-aa40-4cbc-98dc-908cdb46c266))
- (model "${KICAD6_3DMODEL_DIR}/Package_QFP.3dshapes/LQFP-48_7x7mm_P0.5mm.wrl"
- (offset (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (segment (start 148 82.775) (end 146 82.775) (width 0.5) (layer "F.Cu") (net 1) (tstamp 068c8d2a-738c-4d78-9cc7-89015f99b1d9))
- (segment (start 140.225 82) (end 139.5 82) (width 0.2) (layer "F.Cu") (net 1) (tstamp 0877f30d-da22-4503-bc80-710e25164112))
- (segment (start 138.75 69.8375) (end 138.75 70.75) (width 0.2) (layer "F.Cu") (net 1) (tstamp 091011d4-33cb-41d2-aee9-6c9675a41ae5))
- (segment (start 136 65.225) (end 135.225 65.225) (width 0.5) (layer "F.Cu") (net 1) (tstamp 0f2f7f80-9d26-479b-8d26-8096c748e7d0))
- (segment (start 136.8375 76.25) (end 137.75 76.25) (width 0.2) (layer "F.Cu") (net 1) (tstamp 1396c729-7fb9-4cae-968b-9de9ff42b2d8))
- (segment (start 139.5 88.1) (end 139 87.6) (width 0.2) (layer "F.Cu") (net 1) (tstamp 19c93769-8d03-4e55-a9ad-236cb6368a70))
- (segment (start 134.05 82.95) (end 133 82.95) (width 0.5) (layer "F.Cu") (net 1) (tstamp 1f53b826-b639-4e4c-9184-44772226ffb0))
- (segment (start 146 65.225) (end 146.775 65.225) (width 0.5) (layer "F.Cu") (net 1) (tstamp 2134f188-1235-4268-9fe8-c720a554047f))
- (segment (start 137.75 76.25) (end 138.5 75.5) (width 0.2) (layer "F.Cu") (net 1) (tstamp 2efe80ca-cc94-431c-ab7f-13f0a1b1b1ef))
- (segment (start 144.25 71.75) (end 143.5 72.5) (width 0.2) (layer "F.Cu") (net 1) (tstamp 2ff69acc-60fb-4a01-99b2-852aef917832))
- (segment (start 146 82.775) (end 146.775 82.775) (width 0.5) (layer "F.Cu") (net 1) (tstamp 307a37e7-2984-40ff-a1e1-5ab509067e3b))
- (segment (start 139 87.6) (end 139 82.5) (width 0.2) (layer "F.Cu") (net 1) (tstamp 401ad00c-0775-469c-ad64-f78164ddffeb))
- (segment (start 141.85 84.075) (end 141.775 84) (width 0.2) (layer "F.Cu") (net 1) (tstamp 4f76b7ef-7465-421f-b35d-aaebfe681fa3))
- (segment (start 141.775 84) (end 142.5 84) (width 0.2) (layer "F.Cu") (net 1) (tstamp 58fd0018-a301-4c3b-9b41-d746ae45a444))
- (segment (start 135.225 65.225) (end 135 65) (width 0.5) (layer "F.Cu") (net 1) (tstamp 5d294bca-85d5-40ea-8e44-c49668dcbc18))
- (segment (start 139 82.5) (end 139.5 82) (width 0.2) (layer "F.Cu") (net 1) (tstamp 6ec08251-b217-4309-8077-d7f6dd7a4070))
- (segment (start 135 82.775) (end 134.225 82.775) (width 0.5) (layer "F.Cu") (net 1) (tstamp 77148fe3-b1bd-4f57-bb46-96bc59a5391d))
- (segment (start 146.775 65.225) (end 147 65) (width 0.5) (layer "F.Cu") (net 1) (tstamp 81fb6b63-3b00-43dc-bd3d-adba3ee0f2be))
- (segment (start 138.25 74.75) (end 138.5 74.5) (width 0.2) (layer "F.Cu") (net 1) (tstamp 87b65d94-0f61-454d-ad90-beadb9f2d86f))
- (segment (start 141.75 76.75) (end 142 76.5) (width 0.2) (layer "F.Cu") (net 1) (tstamp 89581a13-f3c5-4f4e-893f-a084b0fca244))
- (segment (start 141.85 85.9) (end 141.85 84.075) (width 0.2) (layer "F.Cu") (net 1) (tstamp 8d090ac7-dddd-42f5-ba80-6833dc8f2c1d))
- (segment (start 134.225 82.775) (end 134.05 82.95) (width 0.5) (layer "F.Cu") (net 1) (tstamp 945fbf96-3d29-4118-813e-dfe6fb865445))
- (segment (start 141.75 78.1625) (end 141.75 76.75) (width 0.2) (layer "F.Cu") (net 1) (tstamp 9e212324-aff4-432a-9845-d6eb5168ebf0))
- (segment (start 134.225 82.775) (end 134 83) (width 0.5) (layer "F.Cu") (net 1) (tstamp ae06492b-4e79-4841-977d-4918740ca329))
- (segment (start 145.1625 71.75) (end 144.25 71.75) (width 0.2) (layer "F.Cu") (net 1) (tstamp b8e01547-7812-4f79-9cad-3b035dfca399))
- (segment (start 136.8375 74.75) (end 138.25 74.75) (width 0.2) (layer "F.Cu") (net 1) (tstamp bc0f886b-76a2-4df5-8c43-c279fad61b62))
- (segment (start 146.775 82.775) (end 147 83) (width 0.5) (layer "F.Cu") (net 1) (tstamp dd32f3f1-d51b-4d1d-a6b4-b03474bb13dc))
- (segment (start 140.15 88.1) (end 139.5 88.1) (width 0.2) (layer "F.Cu") (net 1) (tstamp e4698f21-8a6a-4538-a0dc-b998a3018088))
- (segment (start 138.75 70.75) (end 139.5 71.5) (width 0.2) (layer "F.Cu") (net 1) (tstamp f6290150-8e73-4c9b-a6ec-46fbbf6e9681))
- (via (at 138.5 75.5) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp 14b6573f-ec08-43cf-828e-125b88a5eeaf))
- (via (at 135 65) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp 17551e9e-8f26-4689-8975-331dc0a6090b))
- (via (at 138.5 74.5) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp 1b407f5a-c04f-449c-8d4e-bade1c426861))
- (via (at 139.5 82) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp 1cdd4504-17e5-4073-a5de-8fbb4fe73ebe))
- (via (at 142 76.5) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp 2d293e82-5e2b-48a2-a326-469c72aed7b5))
- (via (at 134 83) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp 37b71817-aee7-4efc-8dc6-20ec8e00e102))
- (via (at 143.5 72.5) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp 48b646d9-6aef-418a-b7fc-84a6a5961ea1))
- (via (at 142.5 84) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp 93a74b95-f2fe-4a3e-b558-69d447127182))
- (via (at 147 83) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp c39e6290-115b-4f1d-ac9c-90623c4a1368))
- (via (at 147 65) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp d0107ef8-905b-4914-8db8-236458f4edb3))
- (via (at 139.5 71.5) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 1) (tstamp f73163c9-78f9-40b1-9f70-1ac8c5beaa58))
- (segment (start 143 76.5) (end 142.25 77.25) (width 0.2) (layer "F.Cu") (net 2) (tstamp 0068eae4-cc63-4c36-b213-95ce9f2d4603))
- (segment (start 138 77) (end 135 80) (width 0.2) (layer "F.Cu") (net 2) (tstamp 03c81079-5a62-4a46-aae9-f514827949fe))
- (segment (start 146 69) (end 144 71) (width 0.2) (layer "F.Cu") (net 2) (tstamp 09ebb47f-e4e2-4e75-944b-4d91d23d0729))
- (segment (start 138.25 77.25) (end 138 77) (width 0.2) (layer "F.Cu") (net 2) (tstamp 29f55f97-ef30-4bcb-b5ef-e1c1684f48cb))
- (segment (start 143.5 76.5) (end 138 71) (width 0.2) (layer "F.Cu") (net 2) (tstamp 3ed6fe64-65a4-49c4-8846-0d914629bf61))
- (segment (start 144 71) (end 138 77) (width 0.2) (layer "F.Cu") (net 2) (tstamp 49d9f0de-6b60-40c7-9ad3-460632f0798d))
- (segment (start 136.8375 76.75) (end 137.75 76.75) (width 0.2) (layer "F.Cu") (net 2) (tstamp 532ef4d8-d82a-4a5e-87c1-0c739bf17d26))
- (segment (start 143.5 76.5) (end 143 76.5) (width 0.2) (layer "F.Cu") (net 2) (tstamp 60f07ebf-1b48-4f76-8117-d1356e7c3ac7))
- (segment (start 144.25 71.25) (end 144 71) (width 0.2) (layer "F.Cu") (net 2) (tstamp 63af8ebf-e5da-4507-971a-8cca1206dbdb))
- (segment (start 146 78.857691) (end 146 81.225) (width 0.2) (layer "F.Cu") (net 2) (tstamp 665bfac7-375a-4bbb-a7f2-a8b812147dd7))
- (segment (start 142.25 77.25) (end 142.25 78.1625) (width 0.2) (layer "F.Cu") (net 2) (tstamp 67379501-3ba9-4298-bd68-66727e751b5e))
- (segment (start 146 66.775) (end 146 69) (width 0.2) (layer "F.Cu") (net 2) (tstamp 6bef903b-7b0c-431e-b8c9-e3fe904f2459))
- (segment (start 138 71) (end 136 69) (width 0.2) (layer "F.Cu") (net 2) (tstamp 6f184c36-248b-4ad4-9fb2-6769b68efb84))
- (segment (start 145.1625 71.25) (end 144.25 71.25) (width 0.2) (layer "F.Cu") (net 2) (tstamp 744b5831-9da5-4637-955f-6d339d0cf77b))
- (segment (start 135 81.225) (end 134.225 81.225) (width 0.5) (layer "F.Cu") (net 2) (tstamp 7c81ba76-763b-406a-befa-68201e6379ab))
- (segment (start 138.25 78.1625) (end 138.25 77.25) (width 0.2) (layer "F.Cu") (net 2) (tstamp 7fa826b3-43cf-4474-95fd-ceab95c474f5))
- (segment (start 148 81.225) (end 146 81.225) (width 0.5) (layer "F.Cu") (net 2) (tstamp 8ac0c51c-8727-4db0-96e6-523ce461b3e0))
- (segment (start 134.225 81.225) (end 134.05 81.05) (width 0.5) (layer "F.Cu") (net 2) (tstamp 9f918f89-b5f8-403a-bbcf-f95e345daa08))
- (segment (start 143.642309 76.5) (end 146 78.857691) (width 0.2) (layer "F.Cu") (net 2) (tstamp b31fe36f-83cf-4b1c-a6a8-e53bc62ca084))
- (segment (start 135 80) (end 135 81.225) (width 0.2) (layer "F.Cu") (net 2) (tstamp bfe6ab58-702e-4a85-b5ae-162531a5791d))
- (segment (start 136 66.775) (end 136 69) (width 0.2) (layer "F.Cu") (net 2) (tstamp ca6feaeb-1e5f-4d01-995d-d60b7f1ec6e4))
- (segment (start 137.75 76.75) (end 138 77) (width 0.2) (layer "F.Cu") (net 2) (tstamp ce173204-a5ac-4a11-8eb4-ef686bc5b916))
- (segment (start 138.25 70.75) (end 138 71) (width 0.2) (layer "F.Cu") (net 2) (tstamp d679d82d-9b39-4d98-b8b1-1f1c7ef2f37f))
- (segment (start 134.05 81.05) (end 133 81.05) (width 0.5) (layer "F.Cu") (net 2) (tstamp d86eb023-dd88-42c6-8738-79b7fde1b57f))
- (segment (start 138.25 69.8375) (end 138.25 70.75) (width 0.2) (layer "F.Cu") (net 2) (tstamp e78863de-2c7a-4909-bbbe-1f3581e019eb))
- (segment (start 143.5 76.5) (end 143.642309 76.5) (width 0.2) (layer "F.Cu") (net 2) (tstamp ed8bed9f-0d15-4f12-846d-e7eca28cc784))
- (via (at 143.5 76.5) (size 0.7) (drill 0.3) (layers "F.Cu" "B.Cu") (net 2) (tstamp 2062349f-97e9-4657-a553-8a3bae47fbaf))
- (via (at 135 78) (size 0.9) (drill 0.5) (layers "F.Cu" "B.Cu") (net 2) (tstamp 5ec538ec-e1ac-4ddd-8c8f-9330ece75b28))
- (segment (start 141.5 81) (end 141.5 80.5) (width 0.2) (layer "F.Cu") (net 16) (tstamp 572d1903-fa81-4a00-ae73-a605f9f3eb64))
- (segment (start 141.775 82) (end 141.775 82.725) (width 0.2) (layer "F.Cu") (net 16) (tstamp 6fc63ea0-037e-498a-a878-9808ab91bd67))
- (segment (start 140.75 79.75) (end 141.5 80.5) (width 0.2) (layer "F.Cu") (net 16) (tstamp 80ef314c-0e21-4a25-98a2-baef547c7d96))
- (segment (start 141.775 82.725) (end 141 83.5) (width 0.2) (layer "F.Cu") (net 16) (tstamp 9ddcb14a-4baa-409c-b0ba-8d1d48d51a32))
- (segment (start 141.775 81.275) (end 141.5 81) (width 0.2) (layer "F.Cu") (net 16) (tstamp a85a5b8f-0b80-40ce-9677-c4c3ac70d88f))
- (segment (start 141.775 82) (end 141.775 81.275) (width 0.2) (layer "F.Cu") (net 16) (tstamp b2648c58-3420-4e57-899e-eb6948ea23a1))
- (segment (start 140.75 78.1625) (end 140.75 79.75) (width 0.2) (layer "F.Cu") (net 16) (tstamp e38141b5-9c36-4dde-b5a7-8fb08cc685e5))
- (segment (start 141 87.25) (end 141.85 88.1) (width 0.2) (layer "F.Cu") (net 16) (tstamp f402f4be-c0d8-4ec9-93ac-b2ef498f2b01))
- (segment (start 141 83.5) (end 141 87.25) (width 0.2) (layer "F.Cu") (net 16) (tstamp f44f1bda-2e83-43d5-b028-0b41d317f4cc))
- (segment (start 140.25 78.1625) (end 140.25 79.75) (width 0.2) (layer "F.Cu") (net 31) (tstamp 0c252c82-d60c-45e5-8e3b-590f49676b7f))
- (segment (start 140.15 85.9) (end 140.15 84.075) (width 0.2) (layer "F.Cu") (net 31) (tstamp 11353363-f7ad-40ea-b9d5-d8388da7ecb0))
- (segment (start 140.15 84.075) (end 140.225 84) (width 0.2) (layer "F.Cu") (net 31) (tstamp 22456065-e204-43b6-8f5e-0c2e5e5b13dd))
- (segment (start 141 82.5) (end 141 80.5) (width 0.2) (layer "F.Cu") (net 31) (tstamp 3fc62bac-4d63-43e1-9881-e72edad01289))
- (segment (start 140.225 83.275) (end 141 82.5) (width 0.2) (layer "F.Cu") (net 31) (tstamp 561e7ac4-aa96-4c5b-8c6e-62a77a5e8a09))
- (segment (start 140.225 84) (end 140.225 83.275) (width 0.2) (layer "F.Cu") (net 31) (tstamp 7a2fc9bf-0b61-42b9-9152-fe5924acde61))
- (segment (start 140.25 79.75) (end 141 80.5) (width 0.2) (layer "F.Cu") (net 31) (tstamp 9e081e8f-72bd-4ab2-a9a9-7734ea26684b))
-
+(kicad_pcb
+ (version 20240108)
+ (generator "pcbnew")
+ (generator_version "8.0")
+ (general
+ (thickness 1.6)
+ (legacy_teardrops no)
+ )
+ (paper "A4")
+ (layers
+ (0 "F.Cu" signal "Front")
+ (31 "B.Cu" signal "Back")
+ (34 "B.Paste" user)
+ (35 "F.Paste" user)
+ (36 "B.SilkS" user "B.Silkscreen")
+ (37 "F.SilkS" user "F.Silkscreen")
+ (38 "B.Mask" user)
+ (39 "F.Mask" user)
+ (41 "Cmts.User" user "User.Comments")
+ (44 "Edge.Cuts" user)
+ (45 "Margin" user)
+ (46 "B.CrtYd" user "B.Courtyard")
+ (47 "F.CrtYd" user "F.Courtyard")
+ (49 "F.Fab" user)
+ )
+ (setup
+ (stackup
+ (layer "F.SilkS"
+ (type "Top Silk Screen")
+ )
+ (layer "F.Paste"
+ (type "Top Solder Paste")
+ )
+ (layer "F.Mask"
+ (type "Top Solder Mask")
+ (thickness 0.01)
+ )
+ (layer "F.Cu"
+ (type "copper")
+ (thickness 0.035)
+ )
+ (layer "dielectric 1"
+ (type "core")
+ (thickness 1.51)
+ (material "FR4")
+ (epsilon_r 4.5)
+ (loss_tangent 0.02)
+ )
+ (layer "B.Cu"
+ (type "copper")
+ (thickness 0.035)
+ )
+ (layer "B.Mask"
+ (type "Bottom Solder Mask")
+ (thickness 0.01)
+ )
+ (layer "B.Paste"
+ (type "Bottom Solder Paste")
+ )
+ (layer "B.SilkS"
+ (type "Bottom Silk Screen")
+ )
+ (copper_finish "None")
+ (dielectric_constraints no)
+ )
+ (pad_to_mask_clearance 0)
+ (allow_soldermask_bridges_in_footprints no)
+ (aux_axis_origin 138 48)
+ (pcbplotparams
+ (layerselection 0x00010f0_ffffffff)
+ (plot_on_all_layers_selection 0x0000000_00000000)
+ (disableapertmacros no)
+ (usegerberextensions no)
+ (usegerberattributes no)
+ (usegerberadvancedattributes no)
+ (creategerberjobfile no)
+ (dashed_line_dash_ratio 12.000000)
+ (dashed_line_gap_ratio 3.000000)
+ (svgprecision 6)
+ (plotframeref no)
+ (viasonmask no)
+ (mode 1)
+ (useauxorigin no)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15.000000)
+ (pdf_front_fp_property_popups yes)
+ (pdf_back_fp_property_popups yes)
+ (dxfpolygonmode yes)
+ (dxfimperialunits yes)
+ (dxfusepcbnewfont yes)
+ (psnegative no)
+ (psa4output no)
+ (plotreference yes)
+ (plotvalue yes)
+ (plotfptext yes)
+ (plotinvisibletext no)
+ (sketchpadsonfab no)
+ (subtractmaskfromsilk no)
+ (outputformat 1)
+ (mirror no)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory "gerbers")
+ )
+ )
+ (net 0 "")
+ (net 1 "gnd")
+ (net 2 "v3v3")
+ (net 3 "mcu.adc.curr_1")
+ (net 4 "mcu.adc.curr_3")
+ (net 5 "mcu.adc.curr_2")
+ (net 6 "mcu.gpio.bldc_reset")
+ (net 7 "mcu.gpio.bldc_fault")
+ (net 8 "mcu.gpio.boost_pwm")
+ (net 9 "mcu.gpio.sw1")
+ (net 10 "mcu.gpio.pd_int")
+ (net 11 "mcu.gpio.buck_pwm")
+ (net 12 "mcu.adc.conv_sense")
+ (net 13 "mcu.gpio.rgb")
+ (net 14 "mcu.swd.swd.swo")
+ (net 15 "mcu.crystal.crystal.b")
+ (net 16 "usb_esd.usb.dm")
+ (net 17 "bldc_drv.ens.2")
+ (net 18 "bldc_drv.ins.1")
+ (net 19 "mcu.gpio.bldc_in_2")
+ (net 20 "mcu.gpio.bldc_in_3")
+ (net 21 "i2c.i2c.sda")
+ (net 22 "i2c_tp.io.scl")
+ (net 23 "usb.usb.dp")
+ (net 24 "bldc_drv.ens.1")
+ (net 25 "mcu.gpio.bldc_en_3")
+ (net 26 "mcu.swd.swd.swclk")
+ (net 27 "mcu.ic.swd.swdio")
+ (net 28 "mag.pins.2")
+ (net 29 "mcu.swd.swd.reset")
+ (net 30 "mcu.crystal.crystal.a")
+ (footprint "Capacitor_SMD:C_0603_1608Metric"
+ (layer "F.Cu")
+ (uuid "16d0ea69-4b6e-4754-b9bd-f33dfcb41b96")
+ (at 141 84)
+ (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C11"
+ (at 3 0 0)
+ (layer "F.SilkS")
+ (uuid "7bb17158-0f7c-4030-8421-73a49e957c81")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "C1663"
+ (at 0 1.43 0)
+ (layer "F.Fab")
+ (uuid "98bc2285-b41e-46dd-83e6-e3e614e849df")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "00893962-7ae6-4442-afd9-d0769d89cedc")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "2f8b3159-0d7f-40e1-97e7-9ef452996fae")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "6935e9ab-5522-49c6-be5a-5b199528cc68")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_part" "CL10C330JB8NNNC (Samsung Electro-Mechanics)"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "0fc87ec4-a829-4412-a447-1238c23c3708")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_path" "mcu.crystal.cap_a"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "897be737-16d3-493e-a8bf-55151ee292d5")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_refdes" "C11"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "2c0b7c70-bd8a-4200-a148-b7d4b3935d4b")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_short_path" "mcu.crystal.cap_a"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "4ab06e38-3b12-4ee8-b7b5-cccc74280beb")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-00000c1b0303/00000000-0000-0000-0000-000005e701f5")
+ (sheetname "crystal")
+ (sheetfile "electronics_abstract_parts.AbstractCrystal.OscillatorCrystal")
+ (attr smd)
+ (fp_line
+ (start -0.14058 -0.51)
+ (end 0.14058 -0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "6873421e-736f-46f7-8d25-1524d2d45a73")
+ )
+ (fp_line
+ (start -0.14058 0.51)
+ (end 0.14058 0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "0d698820-1d9d-4e7c-a969-0a468b1fca3d")
+ )
+ (fp_line
+ (start -1.48 -0.73)
+ (end 1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "c463a28a-0d0c-461c-babe-d76283986022")
+ )
+ (fp_line
+ (start -1.48 0.73)
+ (end -1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "434c7f3d-83e3-4854-87e2-f1685dd8fcc1")
+ )
+ (fp_line
+ (start 1.48 -0.73)
+ (end 1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "e8b841e2-5a41-487c-be61-b570ff9d41e1")
+ )
+ (fp_line
+ (start 1.48 0.73)
+ (end -1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "1a5bfd75-e952-4239-8107-73565bacfab5")
+ )
+ (fp_line
+ (start -0.8 -0.4)
+ (end 0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "a047eb71-e16d-403b-833a-94f9b473d9ef")
+ )
+ (fp_line
+ (start -0.8 0.4)
+ (end -0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "6d46551b-418c-474d-9c44-2f4be5beba6e")
+ )
+ (fp_line
+ (start 0.8 -0.4)
+ (end 0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "5b05477e-4f2a-40ef-aaec-d5a845429719")
+ )
+ (fp_line
+ (start 0.8 0.4)
+ (end -0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "35476de1-5e0a-4eeb-a171-62f6d2ec2f81")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (uuid "d18b4f43-06e7-4156-bf20-8cc9a44b24b1")
+ (effects
+ (font
+ (size 0.4 0.4)
+ (thickness 0.06)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.775 0)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 30 "mcu.crystal.crystal.a")
+ (uuid "81fd4fdb-97b3-4588-90b6-76f9ac479bcb")
+ )
+ (pad "2" smd roundrect
+ (at 0.775 0)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "0c9a7272-aabd-40c8-9440-19d2d86a4304")
+ )
+ (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0805_2012Metric"
+ (layer "F.Cu")
+ (uuid "35cb7aec-9df8-433f-89f0-84f67a29c313")
+ (at 133 82 -90)
+ (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C5"
+ (at -2.5 0 90)
+ (layer "F.SilkS")
+ (uuid "d8be7944-c310-42cb-a835-bd17e7089d24")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "C1779"
+ (at 0 1.68 90)
+ (layer "F.Fab")
+ (uuid "4bfa8046-83b0-4974-a67e-cd9a3f7de9ee")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "807afe86-001f-41ef-8bf1-4f2b54343d49")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "2e8931a2-061a-4ae4-a9d4-444dfe26f9dc")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "7bea6d05-c4d6-4979-ad20-51a4756789f8")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_part" "CL21A475KAQNNNE (Samsung Electro-Mechanics)"
+ (at 51 215 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "34fad79e-545f-4ae8-bac6-358bce7ae6f3")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_path" "mcu.pwr_cap[0].cap"
+ (at 51 215 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "9310f13b-f144-4aae-8978-3e55e4931cf4")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_refdes" "C5"
+ (at 51 215 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "e6b2bed4-b4bb-435f-8abd-cd032b54ef2b")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_short_path" "mcu.pwr_cap[0]"
+ (at 51 215 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "f7e8d8d3-5b44-4f2e-a8c7-2a47bfd1e3b6")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-0000168703d5")
+ (sheetname "mcu")
+ (sheetfile "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
+ (attr smd)
+ (fp_line
+ (start -0.261252 0.735)
+ (end 0.261252 0.735)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "7175902c-3980-45ad-81e1-a22879ef31e9")
+ )
+ (fp_line
+ (start -0.261252 -0.735)
+ (end 0.261252 -0.735)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "15a45565-4e6e-4e01-a7bc-9b7402a52483")
+ )
+ (fp_line
+ (start -1.7 0.98)
+ (end -1.7 -0.98)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "811fb607-df49-4f4b-b5c8-0fdbe78cc810")
+ )
+ (fp_line
+ (start 1.7 0.98)
+ (end -1.7 0.98)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "360c1896-ae9a-4f18-8255-c38b4cc6bd9e")
+ )
+ (fp_line
+ (start -1.7 -0.98)
+ (end 1.7 -0.98)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "b9a0e86b-5742-402c-a7a0-240662a56b4f")
+ )
+ (fp_line
+ (start 1.7 -0.98)
+ (end 1.7 0.98)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "608fc29c-8f30-4f40-bdca-65d60a9f2260")
+ )
+ (fp_line
+ (start -1 0.625)
+ (end -1 -0.625)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "81db23d3-5a72-401e-8800-2120794055c2")
+ )
+ (fp_line
+ (start 1 0.625)
+ (end -1 0.625)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "f1a63b5d-5764-46a8-b6ec-ee43312ec122")
+ )
+ (fp_line
+ (start -1 -0.625)
+ (end 1 -0.625)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "27b5b4b8-cf90-41ca-9f83-954f4626c40c")
+ )
+ (fp_line
+ (start 1 -0.625)
+ (end 1 0.625)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "1151e663-ec13-479f-87f1-81edad9a8ad7")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "b1804141-8e31-47d2-8733-cc242d534b70")
+ (effects
+ (font
+ (size 0.5 0.5)
+ (thickness 0.08)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.95 0 270)
+ (size 1 1.45)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "d4dfac60-dea3-4e90-825d-d5e77960890b")
+ )
+ (pad "2" smd roundrect
+ (at 0.95 0 270)
+ (size 1 1.45)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "de0f76cb-a0ec-45ab-bad6-e6181114718c")
+ )
+ (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0603_1608Metric"
+ (layer "F.Cu")
+ (uuid "3aebd714-3f82-40d7-9eb7-94051e6cb1bb")
+ (at 136 66 90)
+ (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C7"
+ (at -2.5 0 90)
+ (layer "F.SilkS")
+ (uuid "74e2d6ae-be9d-402d-add5-3152a5ed1a96")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "C14663"
+ (at 0 1.43 90)
+ (layer "F.Fab")
+ (uuid "2143f65b-d262-450a-9066-2a499428d800")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "a0d2a8d4-f165-4fc5-b99d-a2791d2646b0")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "90d801b6-aecc-441f-b7c1-7d5c97707de3")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "0502e111-541a-4d2e-b7db-2a32ba73ecf4")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_part" "CC0603KRX7R9BB104 (YAGEO)"
+ (at 202 -70 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "22f3c462-4489-4525-b02f-774479b4ce7a")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_path" "mcu.pwr_cap[2].cap"
+ (at 202 -70 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "1594ebc5-bdd7-42fd-a07a-1d8024586d86")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_refdes" "C7"
+ (at 202 -70 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "51a2d415-d98e-46f6-80ef-0926d5783600")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_short_path" "mcu.pwr_cap[2]"
+ (at 202 -70 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "6cf1bf2f-e684-4ccc-865d-caca3ae29208")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-0000168b03d7")
+ (sheetname "mcu")
+ (sheetfile "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
+ (attr smd)
+ (fp_line
+ (start -0.14058 -0.51)
+ (end 0.14058 -0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "a108d7f4-1c14-47d4-a475-de91a5384d33")
+ )
+ (fp_line
+ (start -0.14058 0.51)
+ (end 0.14058 0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "26705285-92d5-4093-ac61-1da4e50e7f3d")
+ )
+ (fp_line
+ (start 1.48 -0.73)
+ (end 1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "03f5e227-30b7-45c8-b149-213479eb5684")
+ )
+ (fp_line
+ (start -1.48 -0.73)
+ (end 1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "9cdb7fec-4403-4a7f-ab08-5726d1755f30")
+ )
+ (fp_line
+ (start 1.48 0.73)
+ (end -1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "0ef27aad-d30a-438c-9c78-e9c781ff0f78")
+ )
+ (fp_line
+ (start -1.48 0.73)
+ (end -1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "1d0088a5-cc99-456d-95e7-4a5497b55590")
+ )
+ (fp_line
+ (start 0.8 -0.4)
+ (end 0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "9e9562cf-c0c3-408e-919c-9bd55cd2e18f")
+ )
+ (fp_line
+ (start -0.8 -0.4)
+ (end 0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "445c991c-e66c-42b5-8a86-5204e9de79f1")
+ )
+ (fp_line
+ (start 0.8 0.4)
+ (end -0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "5c42c7b3-3a63-4ccd-84f3-7b79e87b3a15")
+ )
+ (fp_line
+ (start -0.8 0.4)
+ (end -0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "a2bc3722-9209-43ce-bdfd-3efcc5f05131")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "af681a5c-a3b4-4221-a030-fe925b75cbfa")
+ (effects
+ (font
+ (size 0.4 0.4)
+ (thickness 0.06)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.775 0 90)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "b4b2dd8e-e2a4-4daa-8873-1b58fd9a0956")
+ )
+ (pad "2" smd roundrect
+ (at 0.775 0 90)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "bfc09661-ddc8-4dcb-a5c2-62ba9138f30e")
+ )
+ (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0603_1608Metric"
+ (layer "F.Cu")
+ (uuid "6a50108e-6aa3-43b3-a666-a97cf847ba8c")
+ (at 146 66 90)
+ (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C6"
+ (at -2.5 0 90)
+ (layer "F.SilkS")
+ (uuid "c710593e-a531-40ba-9f5d-e33c0d762c13")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "C14663"
+ (at 0 1.43 90)
+ (layer "F.Fab")
+ (uuid "94f2c6f9-043e-4de8-a977-4c1bded25bf9")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "b839f137-158b-4788-97c1-3665b7034391")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "0305db9f-c723-4316-8c14-871815fa8b5a")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "fa43d1fd-5e9e-49b5-adf3-728e4aeb2c9f")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_part" "CC0603KRX7R9BB104 (YAGEO)"
+ (at 212 -80 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "cdf74afb-dfad-498a-91e9-7025f7d9cacc")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_path" "mcu.pwr_cap[1].cap"
+ (at 212 -80 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "b42bc317-aa4a-409e-acf9-d70b607090a2")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_refdes" "C6"
+ (at 212 -80 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "d889260a-a17e-4859-a081-ee58cc4040b8")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_short_path" "mcu.pwr_cap[1]"
+ (at 212 -80 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "c05417a3-fb64-4a35-beee-1ff5376e4c5f")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-0000168903d6")
+ (sheetname "mcu")
+ (sheetfile "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
+ (attr smd)
+ (fp_line
+ (start -0.14058 -0.51)
+ (end 0.14058 -0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "191e2d8a-d66e-48b9-8891-54b8c41ac468")
+ )
+ (fp_line
+ (start -0.14058 0.51)
+ (end 0.14058 0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "7fee9e37-ea3a-4ad5-a2df-16779d972f85")
+ )
+ (fp_line
+ (start 1.48 -0.73)
+ (end 1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "a7d381a1-f9e8-4b01-aa69-4536d09ac9d4")
+ )
+ (fp_line
+ (start -1.48 -0.73)
+ (end 1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "f7da7ec0-c245-497e-be04-4b9109581e50")
+ )
+ (fp_line
+ (start 1.48 0.73)
+ (end -1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "92fb46c3-f133-4cfe-8dd0-8763a85b8e95")
+ )
+ (fp_line
+ (start -1.48 0.73)
+ (end -1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "85459bb0-ee0c-4182-b4c9-0ed2e4018461")
+ )
+ (fp_line
+ (start 0.8 -0.4)
+ (end 0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "12a11b64-5ee1-4b41-8bcf-c2901b319232")
+ )
+ (fp_line
+ (start -0.8 -0.4)
+ (end 0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "bf357768-3a27-4582-a9eb-e3a4b17f4b7c")
+ )
+ (fp_line
+ (start 0.8 0.4)
+ (end -0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "2a38b4d0-1b56-4a1d-a902-30c947bdd5f3")
+ )
+ (fp_line
+ (start -0.8 0.4)
+ (end -0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "adf935f1-f515-44a5-9be6-a9cd1d09179b")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "9b3eb0a2-75c7-42a3-bf86-4945f3b49f3f")
+ (effects
+ (font
+ (size 0.4 0.4)
+ (thickness 0.06)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.775 0 90)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "3463d62c-cfe3-4866-9e70-3bdc9fe97be7")
+ )
+ (pad "2" smd roundrect
+ (at 0.775 0 90)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "aa31f544-ef98-43fc-be4a-561999c0923f")
+ )
+ (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0603_1608Metric"
+ (layer "F.Cu")
+ (uuid "6bae50ab-a422-454e-9931-57f8c30beb92")
+ (at 146 82 -90)
+ (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C9"
+ (at -2.5 0 90)
+ (layer "F.SilkS")
+ (uuid "3b06f427-3e4e-44f6-a58d-f326243aa2e8")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "C57112"
+ (at 0 1.43 90)
+ (layer "F.Fab")
+ (uuid "815fda8c-18c7-4536-9e9e-20d9f416bd69")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "25bd9669-846c-49a3-a3e2-cddba485c0ad")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "85758be0-fe23-452a-9dee-5f81ba304c58")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "1b218155-108f-471b-9a3e-fbf747f03c06")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_part" "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))"
+ (at 64 228 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "aac452fb-2903-4933-a4ab-6502c6e3e383")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_path" "mcu.vdda_cap_0.cap"
+ (at 64 228 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "db9a48e7-8a61-44a0-8048-3ea244d89af3")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_refdes" "C9"
+ (at 64 228 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "24c83916-87a0-4ca7-ba0b-6c48b7c0f200")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_short_path" "mcu.vdda_cap_0"
+ (at 64 228 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "df058b6b-7ce8-4637-bf16-a6588f15a6c0")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-000015dc03c2")
+ (sheetname "mcu")
+ (sheetfile "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
+ (attr smd)
+ (fp_line
+ (start -0.14058 0.51)
+ (end 0.14058 0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "6f2639b2-46e3-4c3a-be52-7094d0fdda49")
+ )
+ (fp_line
+ (start -0.14058 -0.51)
+ (end 0.14058 -0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "6cbec720-ed7e-4913-b326-61330d37918d")
+ )
+ (fp_line
+ (start -1.48 0.73)
+ (end -1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "eebf4159-b18d-439f-979b-a797c96bf943")
+ )
+ (fp_line
+ (start 1.48 0.73)
+ (end -1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "1e070f16-069b-431b-aa9d-8f1c3e592b8c")
+ )
+ (fp_line
+ (start -1.48 -0.73)
+ (end 1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "564add34-091d-49fe-b110-c7e09582fc80")
+ )
+ (fp_line
+ (start 1.48 -0.73)
+ (end 1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "42e6cde9-30a9-45f6-b7ce-63230c3cc687")
+ )
+ (fp_line
+ (start -0.8 0.4)
+ (end -0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "6b5218c2-b65e-4e06-affe-0e1b4f095f4c")
+ )
+ (fp_line
+ (start 0.8 0.4)
+ (end -0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "ec66e4e9-cce3-4612-a0f2-a56d652bd6d4")
+ )
+ (fp_line
+ (start -0.8 -0.4)
+ (end 0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "eb61094b-6358-4773-8ca5-e16403b3f8d2")
+ )
+ (fp_line
+ (start 0.8 -0.4)
+ (end 0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "54af95af-ebb4-4f02-bf0b-220e6263207e")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "92d25dc4-6e64-4951-b97d-ae53700d4889")
+ (effects
+ (font
+ (size 0.4 0.4)
+ (thickness 0.06)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.775 0 270)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "98724b38-d4cb-4457-b15a-949b57e76bf6")
+ )
+ (pad "2" smd roundrect
+ (at 0.775 0 270)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "e6c7d1da-e9ea-408b-9b8e-8afac2dac2e5")
+ )
+ (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm"
+ (layer "F.Cu")
+ (uuid "90631ca6-e25f-42db-a019-809b283b9dce")
+ (at 141 87 -90)
+ (descr "SMD Crystal SERIES SMD3225/4 http://www.txccrystal.com/images/pdf/7m-accuracy.pdf, 3.2x2.5mm^2 package")
+ (tags "SMD SMT crystal")
+ (property "Reference" "X1"
+ (at 0 -2.45 -90)
+ (layer "F.SilkS")
+ (uuid "9a6a30d1-6033-435e-9ca9-9a16703a4df4")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "C9002"
+ (at 0 2.45 -90)
+ (layer "F.Fab")
+ (uuid "7369295c-9e68-43c9-976e-b44850ce90d8")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "c8d6b97a-b91d-469a-9f99-8a19421c78f0")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "86870f29-5fb4-43b8-8ecf-1b5baf074214")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "202fb9ca-742d-4b90-bdd0-eb3cce29896f")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_part" "X322512MSB4SI (Yangxing Tech)"
+ (at 54 228 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "e63f2fa1-4763-41a1-8228-9eeaf92c63f6")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_path" "mcu.crystal.package"
+ (at 54 228 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "24dab89a-341c-425b-9d2a-afbd0d365526")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_refdes" "X1"
+ (at 54 228 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "45851ad2-78c7-4e16-b838-9310d687281f")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_short_path" "mcu.crystal.package"
+ (at 54 228 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "873b479c-41f9-46cf-a878-8851def2b57a")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-00000c1b0303/00000000-0000-0000-0000-00000b4e02cd")
+ (sheetname "crystal")
+ (sheetfile "electronics_abstract_parts.AbstractCrystal.OscillatorCrystal")
+ (attr smd)
+ (fp_line
+ (start -2 1.65)
+ (end 2 1.65)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "ba5ab1f2-8b67-4794-9c4b-5a392b14d154")
+ )
+ (fp_line
+ (start -2 -1.65)
+ (end -2 1.65)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "37a56074-cdd6-4509-81ed-cd8edc4ea73a")
+ )
+ (fp_line
+ (start -2.1 1.7)
+ (end 2.1 1.7)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "75063b83-1f05-4f3c-aeaf-a92b28dab66a")
+ )
+ (fp_line
+ (start 2.1 1.7)
+ (end 2.1 -1.7)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "47d5592d-0948-4767-9f84-5fac5d7e8f95")
+ )
+ (fp_line
+ (start -2.1 -1.7)
+ (end -2.1 1.7)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "dd3ca650-0334-4dbc-b606-9acdbd5a8d8b")
+ )
+ (fp_line
+ (start 2.1 -1.7)
+ (end -2.1 -1.7)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "fbc294ea-7ead-4de8-8629-c6e5138139bd")
+ )
+ (fp_line
+ (start -1.6 1.25)
+ (end 1.6 1.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "93fac30b-62e1-434d-8826-a2c8e7bd8ddf")
+ )
+ (fp_line
+ (start 1.6 1.25)
+ (end 1.6 -1.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "0a9e70c6-bf76-481d-a780-03cf402d6b49")
+ )
+ (fp_line
+ (start -1.6 0.25)
+ (end -0.6 1.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "45229518-87dc-4696-b626-663dabbb98c5")
+ )
+ (fp_line
+ (start -1.6 -1.25)
+ (end -1.6 1.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "93e054ba-b0c9-4464-8676-04f71c7b431e")
+ )
+ (fp_line
+ (start 1.6 -1.25)
+ (end -1.6 -1.25)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "7dfb2b61-35e1-4cd7-b9fd-9420209efbbb")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (uuid "15cfb315-72ee-41b8-8d6a-c40dde4ef05b")
+ (effects
+ (font
+ (size 0.7 0.7)
+ (thickness 0.105)
+ )
+ )
+ )
+ (pad "1" smd rect
+ (at -1.1 0.85 270)
+ (size 1.4 1.2)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (net 30 "mcu.crystal.crystal.a")
+ (uuid "5b76a7e8-d62e-46b8-a635-b0a9b0516e18")
+ )
+ (pad "2" smd rect
+ (at 1.1 0.85 270)
+ (size 1.4 1.2)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (net 1 "gnd")
+ (uuid "b508b1b8-e414-45ff-a1fe-a35d31e25cb1")
+ )
+ (pad "3" smd rect
+ (at 1.1 -0.85 270)
+ (size 1.4 1.2)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (net 15 "mcu.crystal.crystal.b")
+ (uuid "5311968b-6975-464b-9f72-55b9b683f8ac")
+ )
+ (pad "4" smd rect
+ (at -1.1 -0.85 270)
+ (size 1.4 1.2)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (net 1 "gnd")
+ (uuid "85e80086-0bdc-4c6f-9ce3-a78588515871")
+ )
+ (model "${KICAD6_3DMODEL_DIR}/Crystal.3dshapes/Crystal_SMD_3225-4Pin_3.2x2.5mm.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0603_1608Metric"
+ (layer "F.Cu")
+ (uuid "975166e4-7cf6-40c6-9998-9d220186e659")
+ (at 148 82 -90)
+ (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C10"
+ (at -3 0 90)
+ (layer "F.SilkS")
+ (uuid "73d56008-da39-48a6-b4d8-3d8443a0cb60")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "C15849"
+ (at 0 1.43 90)
+ (layer "F.Fab")
+ (uuid "e04174ff-a9ac-4eb3-aa77-57034f7e266f")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "f155b439-12a0-49df-9903-f96157b351b6")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "3f047a98-034c-4ffb-8931-f91a4cf422c4")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "e2b7f7dc-b5f5-47f9-a0ce-49a4845bd6bc")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_part" "CL10A105KB8NNNC (Samsung Electro-Mechanics)"
+ (at 66 230 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "371da397-fab3-4bd0-96a7-9c08857ed4f2")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_path" "mcu.vdda_cap_1.cap"
+ (at 66 230 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "59d601e1-10cb-408f-9b29-ec012e166474")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_refdes" "C10"
+ (at 66 230 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "0fa57e73-ee3e-4d04-8df3-7dc7729bb022")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_short_path" "mcu.vdda_cap_1"
+ (at 66 230 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "063afe04-e740-43fa-839e-f710ca00ede0")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-000015dd03c3")
+ (sheetname "mcu")
+ (sheetfile "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
+ (attr smd)
+ (fp_line
+ (start -0.14058 0.51)
+ (end 0.14058 0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "8f3a4041-5000-49ff-95da-429b61453557")
+ )
+ (fp_line
+ (start -0.14058 -0.51)
+ (end 0.14058 -0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "57b5c31a-771d-4c3e-9376-ecdd665fbfcc")
+ )
+ (fp_line
+ (start -1.48 0.73)
+ (end -1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "87f3a5ae-e324-4baf-95bc-e783f61ab539")
+ )
+ (fp_line
+ (start 1.48 0.73)
+ (end -1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "ebe11735-5ea0-4092-9151-f3212c49e59d")
+ )
+ (fp_line
+ (start -1.48 -0.73)
+ (end 1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "2a4c13a8-1675-46ef-8b96-28ebb1a5d58d")
+ )
+ (fp_line
+ (start 1.48 -0.73)
+ (end 1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "8d5c1d0d-12c0-492a-b757-29e44213ff1f")
+ )
+ (fp_line
+ (start -0.8 0.4)
+ (end -0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "7262ee22-9e57-46c7-956f-a3aa92864a96")
+ )
+ (fp_line
+ (start 0.8 0.4)
+ (end -0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "132d6795-7a00-432d-9930-1efcb7bb18a4")
+ )
+ (fp_line
+ (start -0.8 -0.4)
+ (end 0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "d3b998cf-a2cd-4f90-beeb-5d6f557e8b83")
+ )
+ (fp_line
+ (start 0.8 -0.4)
+ (end 0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "1ed6567b-63f0-4112-a2cb-1f7734be5f35")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "b82a8312-94bb-4a0a-b79f-66849ad66559")
+ (effects
+ (font
+ (size 0.4 0.4)
+ (thickness 0.06)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.775 0 270)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "b3afc816-d9b2-4c8c-b010-592ddbc16ffa")
+ )
+ (pad "2" smd roundrect
+ (at 0.775 0 270)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "9304f30f-994c-4907-89b7-286fa333035f")
+ )
+ (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0603_1608Metric"
+ (layer "F.Cu")
+ (uuid "9a565ea9-18fc-466a-846e-b7432f1bfec8")
+ (at 141 82 180)
+ (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C12"
+ (at -3 0 0)
+ (layer "F.SilkS")
+ (uuid "fa7ce4b1-b6c6-4664-9fea-011f56104a22")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "C1663"
+ (at 0 1.43 0)
+ (layer "F.Fab")
+ (uuid "aa2b6522-6ff2-438b-abc2-c0d32f12d497")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 180)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "b2c7b336-ffce-4be2-af75-b6b9e49950fe")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 180)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "7f543dc5-8d88-4198-a110-4513a4397423")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 180)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "3a68a896-a4f9-43b8-b7f5-4e8d6a869d3c")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_part" "CL10C330JB8NNNC (Samsung Electro-Mechanics)"
+ (at 282 164 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "a6098b47-32a5-4ffe-b7aa-bd39073a6df6")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_path" "mcu.crystal.cap_b"
+ (at 282 164 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "9fc97fc9-2c0a-4f4a-91b6-83480d772003")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_refdes" "C12"
+ (at 282 164 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "ae9faf19-44ff-4647-8b77-9d2bbf3bbbe6")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_short_path" "mcu.crystal.cap_b"
+ (at 282 164 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "fcb24636-8a7a-4471-81f8-43e115d053af")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-00000c1b0303/00000000-0000-0000-0000-000005e801f6")
+ (sheetname "crystal")
+ (sheetfile "electronics_abstract_parts.AbstractCrystal.OscillatorCrystal")
+ (attr smd)
+ (fp_line
+ (start -0.14058 0.51)
+ (end 0.14058 0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "4818b550-1f3b-461b-ad1c-f35265e68a8b")
+ )
+ (fp_line
+ (start -0.14058 -0.51)
+ (end 0.14058 -0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "e26ce60b-dabf-4e54-9656-0d09c8745c39")
+ )
+ (fp_line
+ (start 1.48 0.73)
+ (end -1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "fedb447a-1f69-49a0-846c-e2dab2eb7a8b")
+ )
+ (fp_line
+ (start 1.48 -0.73)
+ (end 1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "ad17f3ff-8b20-4687-a4bc-95b15fd64047")
+ )
+ (fp_line
+ (start -1.48 0.73)
+ (end -1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "fecd0c2d-1548-45db-96da-ac775a5fe559")
+ )
+ (fp_line
+ (start -1.48 -0.73)
+ (end 1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "8e42fce0-f725-4b68-accd-11fd4304aeb3")
+ )
+ (fp_line
+ (start 0.8 0.4)
+ (end -0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "7bae6cee-bcab-4422-9c93-82e5cd042ef7")
+ )
+ (fp_line
+ (start 0.8 -0.4)
+ (end 0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "eb879da0-fa14-4b03-aa2b-a94cce292047")
+ )
+ (fp_line
+ (start -0.8 0.4)
+ (end -0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "6df4f9a5-c4c2-42f1-bc8f-16ecc0a19752")
+ )
+ (fp_line
+ (start -0.8 -0.4)
+ (end 0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "65da7d8a-5c41-4c1e-b434-e373befa0d82")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 0)
+ (layer "F.Fab")
+ (uuid "a4f3a099-a1de-4f8f-92fd-3c23dd281daa")
+ (effects
+ (font
+ (size 0.4 0.4)
+ (thickness 0.06)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.775 0 180)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 15 "mcu.crystal.crystal.b")
+ (uuid "1d1aaffb-9d0c-48f2-aacf-37abfa952f6b")
+ )
+ (pad "2" smd roundrect
+ (at 0.775 0 180)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "adad975c-2c75-43cb-a68e-6f014cee6976")
+ )
+ (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Capacitor_SMD:C_0603_1608Metric"
+ (layer "F.Cu")
+ (uuid "9f1560db-15dd-45d5-95d6-a2e616eb29e8")
+ (at 135 82 -90)
+ (descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf), generated with kicad-footprint-generator")
+ (tags "capacitor")
+ (property "Reference" "C8"
+ (at -2.5 0 90)
+ (layer "F.SilkS")
+ (uuid "3c170679-97ee-4f6e-9d8b-2b2289cee67b")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "C14663"
+ (at 0 1.43 90)
+ (layer "F.Fab")
+ (uuid "da7cca78-ad4f-49b2-93e6-30da69e22ffa")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "edd0e61f-ac02-405f-900c-07b48a447823")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "b0446c42-0a89-4853-ad3a-5ba31f285567")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 -90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "b0f7d909-03d4-4682-a726-bec6463470c4")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_part" "CC0603KRX7R9BB104 (YAGEO)"
+ (at 53 217 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "a7a56eba-72d3-4dc2-80a5-287ab632ad8c")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_path" "mcu.pwr_cap[3].cap"
+ (at 53 217 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "44509bdb-650e-40d1-9a1e-04ad8715bbdd")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_refdes" "C8"
+ (at 53 217 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "e551652f-82a1-4597-b838-c92bdfbfc26e")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_short_path" "mcu.pwr_cap[3]"
+ (at 53 217 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "0fe92772-6ff5-41c0-8efc-09f716336171")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-0000168d03d8")
+ (sheetname "mcu")
+ (sheetfile "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
+ (attr smd)
+ (fp_line
+ (start -0.14058 0.51)
+ (end 0.14058 0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "3a7c8ed8-5ded-4a1c-ac14-0bd0208f7daa")
+ )
+ (fp_line
+ (start -0.14058 -0.51)
+ (end 0.14058 -0.51)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "a9f9d173-096a-40dc-9e6f-fc960dedc8bd")
+ )
+ (fp_line
+ (start -1.48 0.73)
+ (end -1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "74f3c5e9-a070-44fd-8ad4-372d9e0912ef")
+ )
+ (fp_line
+ (start 1.48 0.73)
+ (end -1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "108d8200-4977-4d49-9e5a-35424a7621f3")
+ )
+ (fp_line
+ (start -1.48 -0.73)
+ (end 1.48 -0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "8c84e01a-b9f5-4c24-938b-b0b9957b881f")
+ )
+ (fp_line
+ (start 1.48 -0.73)
+ (end 1.48 0.73)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "4cd074da-fb95-4843-bdb5-d2f55279d409")
+ )
+ (fp_line
+ (start -0.8 0.4)
+ (end -0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "9ef3052d-e69f-4629-9008-408abc6cdefe")
+ )
+ (fp_line
+ (start 0.8 0.4)
+ (end -0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "f180fc7a-3890-4814-9c62-a911a91d0c8d")
+ )
+ (fp_line
+ (start -0.8 -0.4)
+ (end 0.8 -0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "de5f38d6-2d58-42b7-92a3-8709b87eb568")
+ )
+ (fp_line
+ (start 0.8 -0.4)
+ (end 0.8 0.4)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "794943b7-48a6-4d41-a606-8079a765b3ec")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "5b15b69a-ea68-417d-9af9-0d51c997a226")
+ (effects
+ (font
+ (size 0.4 0.4)
+ (thickness 0.06)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -0.775 0 270)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "632c4c34-c806-44c1-9098-0fd47609fd84")
+ )
+ (pad "2" smd roundrect
+ (at 0.775 0 270)
+ (size 0.9 0.95)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "f17c1d6a-9c20-4bde-a2a4-3a16f712cd33")
+ )
+ (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0603_1608Metric.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm"
+ (layer "F.Cu")
+ (uuid "d5fdde7e-99d1-4a23-a830-676da53a3a31")
+ (at 141 74 90)
+ (descr "LQFP, 48 Pin (https://www.analog.com/media/en/technical-documentation/data-sheets/ltc2358-16.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py")
+ (tags "LQFP QFP")
+ (property "Reference" "U3"
+ (at 0 -5.85 90)
+ (layer "F.SilkS")
+ (uuid "d019ddcf-dae2-4872-9f2b-c4642a9fb5a4")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Value" "C8734"
+ (at 0 5.85 90)
+ (layer "F.Fab")
+ (uuid "6f64cdaf-5a6b-4b22-a2cf-5aeb1c54c1d8")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Footprint" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "4e43496a-63d0-4457-b9a5-54f9e3c15caf")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Datasheet" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "c41875ca-a950-403f-9003-b77aa0be57a1")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "Description" ""
+ (at 0 0 90)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "9def67bf-d809-4bdb-99fd-a1eb20551389")
+ (effects
+ (font
+ (size 1.27 1.27)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_part" "STM32F103xxT6 (STMicroelectronics)"
+ (at 215 -67 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "714e2f4e-3340-43dc-9969-5a7bd420653b")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_path" "mcu.ic"
+ (at 215 -67 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "f0fd643d-b5e2-41d4-a448-33d43422a08d")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_refdes" "U3"
+ (at 215 -67 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "e5107701-de5e-472a-af20-964e1989dbf7")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (property "edg_short_path" "mcu.ic"
+ (at 215 -67 0)
+ (layer "F.Fab")
+ (hide yes)
+ (uuid "6ee8e431-0ba8-4297-bdcb-e3f51c017517")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (path "/00000000-0000-0000-0000-000002850146/00000000-0000-0000-0000-0000013700cd")
+ (sheetname "mcu")
+ (sheetfile "electronics_lib.Microcontroller_Stm32f103.Stm32f103_48")
+ (attr smd)
+ (fp_line
+ (start 3.61 -3.61)
+ (end 3.61 -3.16)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "cbffd746-07c0-49dd-98d2-bf594ba545f4")
+ )
+ (fp_line
+ (start 3.16 -3.61)
+ (end 3.61 -3.61)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "17608267-074f-4583-b077-bfc0d495838a")
+ )
+ (fp_line
+ (start -3.16 -3.61)
+ (end -3.61 -3.61)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "0cf2ffb1-1263-4c3e-b3c6-f1bdbd864afa")
+ )
+ (fp_line
+ (start -3.61 -3.61)
+ (end -3.61 -3.16)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "29273be9-ab38-4966-95e2-0d12d82a928e")
+ )
+ (fp_line
+ (start -3.61 -3.16)
+ (end -4.9 -3.16)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "b13b1cb0-5a31-46be-8cbb-faea8ea1cac3")
+ )
+ (fp_line
+ (start 3.61 3.61)
+ (end 3.61 3.16)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "4f5e8f95-6331-4be3-b2d3-1cb817e84ee3")
+ )
+ (fp_line
+ (start 3.16 3.61)
+ (end 3.61 3.61)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "1f87d628-66e3-4d9a-9c7f-1e7af57875ef")
+ )
+ (fp_line
+ (start -3.16 3.61)
+ (end -3.61 3.61)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "cdb5b0f8-ff7a-41e4-bee6-eb1505359820")
+ )
+ (fp_line
+ (start -3.61 3.61)
+ (end -3.61 3.16)
+ (stroke
+ (width 0.12)
+ (type solid)
+ )
+ (layer "F.SilkS")
+ (uuid "8f0a0b09-0306-4133-8245-d6af19bd7df6")
+ )
+ (fp_line
+ (start 3.15 -5.15)
+ (end 3.15 -3.75)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "c9704ac4-7f19-4b50-bfea-673e2120034d")
+ )
+ (fp_line
+ (start 0 -5.15)
+ (end 3.15 -5.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "258777ee-9505-41e6-b27f-bb6214dd38c2")
+ )
+ (fp_line
+ (start 0 -5.15)
+ (end -3.15 -5.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "74e59f32-8155-4909-a945-17b8828931b8")
+ )
+ (fp_line
+ (start -3.15 -5.15)
+ (end -3.15 -3.75)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "3ccd4646-716c-4495-ac5e-3f7146f8ee28")
+ )
+ (fp_line
+ (start 3.75 -3.75)
+ (end 3.75 -3.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "9d1e12de-5254-41a3-b3bc-49d45c2e554f")
+ )
+ (fp_line
+ (start 3.15 -3.75)
+ (end 3.75 -3.75)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "2dc32cb6-ace0-42f3-803c-ff5248c03aa2")
+ )
+ (fp_line
+ (start -3.15 -3.75)
+ (end -3.75 -3.75)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "ee2f3ac2-a51d-4dd9-8afe-a82f5b30d540")
+ )
+ (fp_line
+ (start -3.75 -3.75)
+ (end -3.75 -3.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "1213d7a3-f877-483f-8e5e-50459ea920a1")
+ )
+ (fp_line
+ (start 5.15 -3.15)
+ (end 5.15 0)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "631fd876-98c8-418f-a8c6-03e7211750a9")
+ )
+ (fp_line
+ (start 3.75 -3.15)
+ (end 5.15 -3.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "d5369598-cafa-4060-b8ac-427534aa4851")
+ )
+ (fp_line
+ (start -3.75 -3.15)
+ (end -5.15 -3.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "22b2fdab-a45a-40aa-a46b-47868d6401a7")
+ )
+ (fp_line
+ (start -5.15 -3.15)
+ (end -5.15 0)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "1ca0da5f-ffe2-4cd1-aada-ebca4ccffb9b")
+ )
+ (fp_line
+ (start 5.15 3.15)
+ (end 5.15 0)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "a5b93785-accd-47cb-850a-e3033a56bcfb")
+ )
+ (fp_line
+ (start 3.75 3.15)
+ (end 5.15 3.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "87174331-4d62-48c1-904a-5a01c77dfbe0")
+ )
+ (fp_line
+ (start -3.75 3.15)
+ (end -5.15 3.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "8e01940a-7cc5-412c-b220-0fb93cc0f7a3")
+ )
+ (fp_line
+ (start -5.15 3.15)
+ (end -5.15 0)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "b5e227a0-ab11-4e7b-8459-681883384857")
+ )
+ (fp_line
+ (start 3.75 3.75)
+ (end 3.75 3.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "acbb7ea9-97a0-4129-b886-62b195c083cc")
+ )
+ (fp_line
+ (start 3.15 3.75)
+ (end 3.75 3.75)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "b89c8af5-b834-4913-9c11-7483eb8c9792")
+ )
+ (fp_line
+ (start -3.15 3.75)
+ (end -3.75 3.75)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "7dde4c52-b9a5-4260-9618-929b9764767c")
+ )
+ (fp_line
+ (start -3.75 3.75)
+ (end -3.75 3.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "993858dc-149e-46da-a99c-ec0bc2e117c6")
+ )
+ (fp_line
+ (start 3.15 5.15)
+ (end 3.15 3.75)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "24daa533-7c9e-4a6d-959b-4c17650e3005")
+ )
+ (fp_line
+ (start 0 5.15)
+ (end 3.15 5.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "16faa268-610c-483b-beec-70ccf84e4912")
+ )
+ (fp_line
+ (start 0 5.15)
+ (end -3.15 5.15)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "79cfe0de-a420-4053-8fe6-e9254cecfcf5")
+ )
+ (fp_line
+ (start -3.15 5.15)
+ (end -3.15 3.75)
+ (stroke
+ (width 0.05)
+ (type solid)
+ )
+ (layer "F.CrtYd")
+ (uuid "f7307669-1eec-48a6-a003-b18b262f9966")
+ )
+ (fp_line
+ (start 3.5 -3.5)
+ (end 3.5 3.5)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "78145cdd-d8f4-420b-8762-1d881f01878f")
+ )
+ (fp_line
+ (start -2.5 -3.5)
+ (end 3.5 -3.5)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "9d2f3b4e-f244-4dfd-892d-bcbf0e11a663")
+ )
+ (fp_line
+ (start -3.5 -2.5)
+ (end -2.5 -3.5)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "984e84c6-6a7c-48cc-8486-76ed511014dd")
+ )
+ (fp_line
+ (start 3.5 3.5)
+ (end -3.5 3.5)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "ec42d7d6-f914-4600-8546-2a3ae12cc231")
+ )
+ (fp_line
+ (start -3.5 3.5)
+ (end -3.5 -2.5)
+ (stroke
+ (width 0.1)
+ (type solid)
+ )
+ (layer "F.Fab")
+ (uuid "43bf9cc2-d203-4a63-a188-138c5e6a96bc")
+ )
+ (fp_text user "${REFERENCE}"
+ (at 0 0 90)
+ (layer "F.Fab")
+ (uuid "6e28052c-c145-4731-84f9-30707b0229e7")
+ (effects
+ (font
+ (size 1 1)
+ (thickness 0.15)
+ )
+ )
+ )
+ (pad "1" smd roundrect
+ (at -4.1625 -2.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "96aa77a7-43ab-4235-9cb6-7ef934c6dfd2")
+ )
+ (pad "2" smd roundrect
+ (at -4.1625 -2.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (uuid "367748b3-8043-468a-800f-90eb4eab61ae")
+ )
+ (pad "3" smd roundrect
+ (at -4.1625 -1.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (uuid "014124ae-5fb6-4ff6-8f36-752883360c2f")
+ )
+ (pad "4" smd roundrect
+ (at -4.1625 -1.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (uuid "706b1d53-a4eb-4cac-9625-9faba85e9dfe")
+ )
+ (pad "5" smd roundrect
+ (at -4.1625 -0.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 30 "mcu.crystal.crystal.a")
+ (uuid "c773a581-9b5e-45cb-a926-b19c03dc8f82")
+ )
+ (pad "6" smd roundrect
+ (at -4.1625 -0.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 15 "mcu.crystal.crystal.b")
+ (uuid "6e469894-98d3-4725-a3a4-d66c231002fa")
+ )
+ (pad "7" smd roundrect
+ (at -4.1625 0.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 29 "mcu.swd.swd.reset")
+ (uuid "1aaa0773-25f8-469d-a367-393c2c573ed0")
+ )
+ (pad "8" smd roundrect
+ (at -4.1625 0.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "f8d28925-d24e-4011-aa8e-451ef6c8434e")
+ )
+ (pad "9" smd roundrect
+ (at -4.1625 1.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "4c6c972d-3181-41bc-bdaa-41e11dfbceb8")
+ )
+ (pad "10" smd roundrect
+ (at -4.1625 1.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 28 "mag.pins.2")
+ (uuid "af71420f-455b-4867-ac3d-a57805c662e1")
+ )
+ (pad "11" smd roundrect
+ (at -4.1625 2.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 11 "mcu.gpio.buck_pwm")
+ (uuid "d9a57817-5e75-48df-9902-6272c58d5ce6")
+ )
+ (pad "12" smd roundrect
+ (at -4.1625 2.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 8 "mcu.gpio.boost_pwm")
+ (uuid "95b362fe-411f-4c3c-a0a6-8bfb60de75ff")
+ )
+ (pad "13" smd roundrect
+ (at -2.75 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 12 "mcu.adc.conv_sense")
+ (uuid "75368005-040f-4ff6-bf73-3f6ead9c26bd")
+ )
+ (pad "14" smd roundrect
+ (at -2.25 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 5 "mcu.adc.curr_2")
+ (uuid "d1be1e94-8b24-4770-b2ea-d5aaf55f9fd5")
+ )
+ (pad "15" smd roundrect
+ (at -1.75 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 3 "mcu.adc.curr_1")
+ (uuid "ca4e8bf8-2b99-44e2-a858-a3174b5f033b")
+ )
+ (pad "16" smd roundrect
+ (at -1.25 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 4 "mcu.adc.curr_3")
+ (uuid "1c2bba14-48db-423d-806d-9578432b31fe")
+ )
+ (pad "17" smd roundrect
+ (at -0.75 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 18 "bldc_drv.ins.1")
+ (uuid "d3d899de-ea42-4e5b-8a0e-1ce53012ad30")
+ )
+ (pad "18" smd roundrect
+ (at -0.25 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 24 "bldc_drv.ens.1")
+ (uuid "f7dcd519-3952-4d73-a9dc-f4b33af36a76")
+ )
+ (pad "19" smd roundrect
+ (at 0.25 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 19 "mcu.gpio.bldc_in_2")
+ (uuid "711f293d-b1f9-404b-bbef-ae651fd02434")
+ )
+ (pad "20" smd roundrect
+ (at 0.75 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 17 "bldc_drv.ens.2")
+ (uuid "b1b17019-9e7e-4f9b-b55b-3de2ccedab96")
+ )
+ (pad "21" smd roundrect
+ (at 1.25 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 20 "mcu.gpio.bldc_in_3")
+ (uuid "2678ea51-0a88-43d6-ba7f-999d4253d6c4")
+ )
+ (pad "22" smd roundrect
+ (at 1.75 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 25 "mcu.gpio.bldc_en_3")
+ (uuid "34ce9799-90a0-4d14-b3e0-c6f4c7247b06")
+ )
+ (pad "23" smd roundrect
+ (at 2.25 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "acdf3f13-a9d6-4368-9952-0b788e1a6f92")
+ )
+ (pad "24" smd roundrect
+ (at 2.75 4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "e2f2036a-5d62-4dce-b8b5-ba60ef768260")
+ )
+ (pad "25" smd roundrect
+ (at 4.1625 2.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 7 "mcu.gpio.bldc_fault")
+ (uuid "95f048c2-65ef-4a7a-bb24-607d38b17924")
+ )
+ (pad "26" smd roundrect
+ (at 4.1625 2.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 6 "mcu.gpio.bldc_reset")
+ (uuid "953c6948-33a5-4f10-9284-f734e458007f")
+ )
+ (pad "27" smd roundrect
+ (at 4.1625 1.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (uuid "486f2c09-033e-473b-ab16-a3a49d4ccd2c")
+ )
+ (pad "28" smd roundrect
+ (at 4.1625 1.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (uuid "766ce5a6-f413-4ce5-b295-493785ac1e5e")
+ )
+ (pad "29" smd roundrect
+ (at 4.1625 0.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (uuid "0f6be9f6-c07f-486d-989e-5363d8c8c8cf")
+ )
+ (pad "30" smd roundrect
+ (at 4.1625 0.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (uuid "5b0883a3-74b6-4624-b0ac-bcf28f1aca21")
+ )
+ (pad "31" smd roundrect
+ (at 4.1625 -0.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (uuid "82f6e6c0-80f1-4605-a459-412066dc00e8")
+ )
+ (pad "32" smd roundrect
+ (at 4.1625 -0.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 16 "usb_esd.usb.dm")
+ (uuid "7d1c239b-1e0a-405c-b3e8-fcfe6d9c68cf")
+ )
+ (pad "33" smd roundrect
+ (at 4.1625 -1.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 23 "usb.usb.dp")
+ (uuid "275f6b53-6c19-47cc-a380-dd1f6b19f5ba")
+ )
+ (pad "34" smd roundrect
+ (at 4.1625 -1.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 27 "mcu.ic.swd.swdio")
+ (uuid "d2267ce7-27a0-4323-8ee4-edf4fee0fb32")
+ )
+ (pad "35" smd roundrect
+ (at 4.1625 -2.25 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "6304bfb8-8088-47b2-b268-8c42dda4977a")
+ )
+ (pad "36" smd roundrect
+ (at 4.1625 -2.75 90)
+ (size 1.475 0.3)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "ed8aadd5-794e-4c98-b408-9d1ce6b0042f")
+ )
+ (pad "37" smd roundrect
+ (at 2.75 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 26 "mcu.swd.swd.swclk")
+ (uuid "8c8574f3-6197-4d42-afcd-951cbbea49fb")
+ )
+ (pad "38" smd roundrect
+ (at 2.25 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 9 "mcu.gpio.sw1")
+ (uuid "94630d8a-4b7d-4c70-ab8a-50d9a0352e5d")
+ )
+ (pad "39" smd roundrect
+ (at 1.75 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 14 "mcu.swd.swd.swo")
+ (uuid "29103c59-8ce5-46dd-9e43-49119b9f9202")
+ )
+ (pad "40" smd roundrect
+ (at 1.25 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 13 "mcu.gpio.rgb")
+ (uuid "fa9cc7bf-c7f5-45dc-8a51-d6fea1d4be1a")
+ )
+ (pad "41" smd roundrect
+ (at 0.75 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (uuid "1d7c383e-b303-4276-b1ae-0473a3a7d933")
+ )
+ (pad "42" smd roundrect
+ (at 0.25 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 22 "i2c_tp.io.scl")
+ (uuid "0c7d622f-98c9-47fc-a230-266a7d42c29f")
+ )
+ (pad "43" smd roundrect
+ (at -0.25 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 21 "i2c.i2c.sda")
+ (uuid "a3250968-71c2-4773-a98e-c01f90af4385")
+ )
+ (pad "44" smd roundrect
+ (at -0.75 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "56c7eb5a-e878-482e-afc3-f04edc39be27")
+ )
+ (pad "45" smd roundrect
+ (at -1.25 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 10 "mcu.gpio.pd_int")
+ (uuid "62971e02-8fe8-428f-8d13-1152d681aeef")
+ )
+ (pad "46" smd roundrect
+ (at -1.75 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (uuid "ad03fcdc-4174-47fa-8adf-59d545ff9482")
+ )
+ (pad "47" smd roundrect
+ (at -2.25 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 1 "gnd")
+ (uuid "e8e8fa85-25a5-4185-8a32-9057d41f8cb4")
+ )
+ (pad "48" smd roundrect
+ (at -2.75 -4.1625 90)
+ (size 0.3 1.475)
+ (layers "F.Cu" "F.Paste" "F.Mask")
+ (roundrect_rratio 0.25)
+ (net 2 "v3v3")
+ (uuid "0bc7eacd-aa40-4cbc-98dc-908cdb46c266")
+ )
+ (model "${KICAD6_3DMODEL_DIR}/Package_QFP.3dshapes/LQFP-48_7x7mm_P0.5mm.wrl"
+ (offset
+ (xyz 0 0 0)
+ )
+ (scale
+ (xyz 1 1 1)
+ )
+ (rotate
+ (xyz 0 0 0)
+ )
+ )
+ )
+ (segment
+ (start 148 82.775)
+ (end 146 82.775)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "068c8d2a-738c-4d78-9cc7-89015f99b1d9")
+ )
+ (segment
+ (start 140.225 82)
+ (end 139.5 82)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "0877f30d-da22-4503-bc80-710e25164112")
+ )
+ (segment
+ (start 138.75 69.8375)
+ (end 138.75 70.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "091011d4-33cb-41d2-aee9-6c9675a41ae5")
+ )
+ (segment
+ (start 136 65.225)
+ (end 135.225 65.225)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "0f2f7f80-9d26-479b-8d26-8096c748e7d0")
+ )
+ (segment
+ (start 136.8375 76.25)
+ (end 137.75 76.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "1396c729-7fb9-4cae-968b-9de9ff42b2d8")
+ )
+ (segment
+ (start 139.5 88.1)
+ (end 139 87.6)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "19c93769-8d03-4e55-a9ad-236cb6368a70")
+ )
+ (segment
+ (start 134.05 82.95)
+ (end 133 82.95)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "1f53b826-b639-4e4c-9184-44772226ffb0")
+ )
+ (segment
+ (start 146 65.225)
+ (end 146.775 65.225)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "2134f188-1235-4268-9fe8-c720a554047f")
+ )
+ (segment
+ (start 137.75 76.25)
+ (end 138.5 75.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "2efe80ca-cc94-431c-ab7f-13f0a1b1b1ef")
+ )
+ (segment
+ (start 144.25 71.75)
+ (end 143.5 72.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "2ff69acc-60fb-4a01-99b2-852aef917832")
+ )
+ (segment
+ (start 146 82.775)
+ (end 146.775 82.775)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "307a37e7-2984-40ff-a1e1-5ab509067e3b")
+ )
+ (segment
+ (start 139 87.6)
+ (end 139 82.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "401ad00c-0775-469c-ad64-f78164ddffeb")
+ )
+ (segment
+ (start 141.85 84.075)
+ (end 141.775 84)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "4f76b7ef-7465-421f-b35d-aaebfe681fa3")
+ )
+ (segment
+ (start 141.775 84)
+ (end 142.5 84)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "58fd0018-a301-4c3b-9b41-d746ae45a444")
+ )
+ (segment
+ (start 135.225 65.225)
+ (end 135 65)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "5d294bca-85d5-40ea-8e44-c49668dcbc18")
+ )
+ (segment
+ (start 139 82.5)
+ (end 139.5 82)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "6ec08251-b217-4309-8077-d7f6dd7a4070")
+ )
+ (segment
+ (start 135 82.775)
+ (end 134.225 82.775)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "77148fe3-b1bd-4f57-bb46-96bc59a5391d")
+ )
+ (segment
+ (start 146.775 65.225)
+ (end 147 65)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "81fb6b63-3b00-43dc-bd3d-adba3ee0f2be")
+ )
+ (segment
+ (start 138.25 74.75)
+ (end 138.5 74.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "87b65d94-0f61-454d-ad90-beadb9f2d86f")
+ )
+ (segment
+ (start 141.75 76.75)
+ (end 142 76.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "89581a13-f3c5-4f4e-893f-a084b0fca244")
+ )
+ (segment
+ (start 141.85 85.9)
+ (end 141.85 84.075)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "8d090ac7-dddd-42f5-ba80-6833dc8f2c1d")
+ )
+ (segment
+ (start 134.225 82.775)
+ (end 134.05 82.95)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "945fbf96-3d29-4118-813e-dfe6fb865445")
+ )
+ (segment
+ (start 141.75 78.1625)
+ (end 141.75 76.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "9e212324-aff4-432a-9845-d6eb5168ebf0")
+ )
+ (segment
+ (start 134.225 82.775)
+ (end 134 83)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "ae06492b-4e79-4841-977d-4918740ca329")
+ )
+ (segment
+ (start 145.1625 71.75)
+ (end 144.25 71.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "b8e01547-7812-4f79-9cad-3b035dfca399")
+ )
+ (segment
+ (start 136.8375 74.75)
+ (end 138.25 74.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "bc0f886b-76a2-4df5-8c43-c279fad61b62")
+ )
+ (segment
+ (start 146.775 82.775)
+ (end 147 83)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "dd32f3f1-d51b-4d1d-a6b4-b03474bb13dc")
+ )
+ (segment
+ (start 140.15 88.1)
+ (end 139.5 88.1)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "e4698f21-8a6a-4538-a0dc-b998a3018088")
+ )
+ (segment
+ (start 138.75 70.75)
+ (end 139.5 71.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 1)
+ (uuid "f6290150-8e73-4c9b-a6ec-46fbbf6e9681")
+ )
+ (via
+ (at 138.5 75.5)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "14b6573f-ec08-43cf-828e-125b88a5eeaf")
+ )
+ (via
+ (at 135 65)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "17551e9e-8f26-4689-8975-331dc0a6090b")
+ )
+ (via
+ (at 138.5 74.5)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "1b407f5a-c04f-449c-8d4e-bade1c426861")
+ )
+ (via
+ (at 139.5 82)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "1cdd4504-17e5-4073-a5de-8fbb4fe73ebe")
+ )
+ (via
+ (at 142 76.5)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "2d293e82-5e2b-48a2-a326-469c72aed7b5")
+ )
+ (via
+ (at 134 83)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "37b71817-aee7-4efc-8dc6-20ec8e00e102")
+ )
+ (via
+ (at 143.5 72.5)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "48b646d9-6aef-418a-b7fc-84a6a5961ea1")
+ )
+ (via
+ (at 142.5 84)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "93a74b95-f2fe-4a3e-b558-69d447127182")
+ )
+ (via
+ (at 147 83)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "c39e6290-115b-4f1d-ac9c-90623c4a1368")
+ )
+ (via
+ (at 147 65)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "d0107ef8-905b-4914-8db8-236458f4edb3")
+ )
+ (via
+ (at 139.5 71.5)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 1)
+ (uuid "f73163c9-78f9-40b1-9f70-1ac8c5beaa58")
+ )
+ (segment
+ (start 143 76.5)
+ (end 142.25 77.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "0068eae4-cc63-4c36-b213-95ce9f2d4603")
+ )
+ (segment
+ (start 143.5 76.5)
+ (end 146 79)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "032c3ed3-2ce2-4b00-bb5f-ba77a5c68b93")
+ )
+ (segment
+ (start 138 77)
+ (end 135 80)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "03c81079-5a62-4a46-aae9-f514827949fe")
+ )
+ (segment
+ (start 146 69)
+ (end 144 71)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "09ebb47f-e4e2-4e75-944b-4d91d23d0729")
+ )
+ (segment
+ (start 138.25 77.25)
+ (end 138 77)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "29f55f97-ef30-4bcb-b5ef-e1c1684f48cb")
+ )
+ (segment
+ (start 143.5 76.5)
+ (end 138 71)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "3ed6fe64-65a4-49c4-8846-0d914629bf61")
+ )
+ (segment
+ (start 144 71)
+ (end 138 77)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "49d9f0de-6b60-40c7-9ad3-460632f0798d")
+ )
+ (segment
+ (start 136.8375 76.75)
+ (end 137.75 76.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "532ef4d8-d82a-4a5e-87c1-0c739bf17d26")
+ )
+ (segment
+ (start 143.5 76.5)
+ (end 143 76.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "60f07ebf-1b48-4f76-8117-d1356e7c3ac7")
+ )
+ (segment
+ (start 144.25 71.25)
+ (end 144 71)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "63af8ebf-e5da-4507-971a-8cca1206dbdb")
+ )
+ (segment
+ (start 142.25 77.25)
+ (end 142.25 78.1625)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "67379501-3ba9-4298-bd68-66727e751b5e")
+ )
+ (segment
+ (start 146 66.775)
+ (end 146 69)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "6bef903b-7b0c-431e-b8c9-e3fe904f2459")
+ )
+ (segment
+ (start 138 71)
+ (end 136 69)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "6f184c36-248b-4ad4-9fb2-6769b68efb84")
+ )
+ (segment
+ (start 145.1625 71.25)
+ (end 144.25 71.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "744b5831-9da5-4637-955f-6d339d0cf77b")
+ )
+ (segment
+ (start 135 81.225)
+ (end 134.225 81.225)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "7c81ba76-763b-406a-befa-68201e6379ab")
+ )
+ (segment
+ (start 138.25 78.1625)
+ (end 138.25 77.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "7fa826b3-43cf-4474-95fd-ceab95c474f5")
+ )
+ (segment
+ (start 148 81.225)
+ (end 146 81.225)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "8ac0c51c-8727-4db0-96e6-523ce461b3e0")
+ )
+ (segment
+ (start 134.225 81.225)
+ (end 134.05 81.05)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "9f918f89-b5f8-403a-bbcf-f95e345daa08")
+ )
+ (segment
+ (start 146 79)
+ (end 146 81.225)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "a08dd2d8-76cd-4c89-b989-d4957a3756be")
+ )
+ (segment
+ (start 135 80)
+ (end 135 81.225)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "bfe6ab58-702e-4a85-b5ae-162531a5791d")
+ )
+ (segment
+ (start 136 66.775)
+ (end 136 69)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "ca6feaeb-1e5f-4d01-995d-d60b7f1ec6e4")
+ )
+ (segment
+ (start 137.75 76.75)
+ (end 138 77)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "ce173204-a5ac-4a11-8eb4-ef686bc5b916")
+ )
+ (segment
+ (start 138.25 70.75)
+ (end 138 71)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "d679d82d-9b39-4d98-b8b1-1f1c7ef2f37f")
+ )
+ (segment
+ (start 134.05 81.05)
+ (end 133 81.05)
+ (width 0.5)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "d86eb023-dd88-42c6-8738-79b7fde1b57f")
+ )
+ (segment
+ (start 138.25 69.8375)
+ (end 138.25 70.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 2)
+ (uuid "e78863de-2c7a-4909-bbbe-1f3581e019eb")
+ )
+ (via
+ (at 143.5 76.5)
+ (size 0.7)
+ (drill 0.3)
+ (layers "F.Cu" "B.Cu")
+ (net 2)
+ (uuid "2062349f-97e9-4657-a553-8a3bae47fbaf")
+ )
+ (segment
+ (start 141.5 81)
+ (end 141.5 80.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "572d1903-fa81-4a00-ae73-a605f9f3eb64")
+ )
+ (segment
+ (start 141.775 82)
+ (end 141.775 82.725)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "6fc63ea0-037e-498a-a878-9808ab91bd67")
+ )
+ (segment
+ (start 140.75 79.75)
+ (end 141.5 80.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "80ef314c-0e21-4a25-98a2-baef547c7d96")
+ )
+ (segment
+ (start 141.775 82.725)
+ (end 141 83.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "9ddcb14a-4baa-409c-b0ba-8d1d48d51a32")
+ )
+ (segment
+ (start 141.775 81.275)
+ (end 141.5 81)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "a85a5b8f-0b80-40ce-9677-c4c3ac70d88f")
+ )
+ (segment
+ (start 141.775 82)
+ (end 141.775 81.275)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "b2648c58-3420-4e57-899e-eb6948ea23a1")
+ )
+ (segment
+ (start 140.75 78.1625)
+ (end 140.75 79.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "e38141b5-9c36-4dde-b5a7-8fb08cc685e5")
+ )
+ (segment
+ (start 141 87.25)
+ (end 141.85 88.1)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "f402f4be-c0d8-4ec9-93ac-b2ef498f2b01")
+ )
+ (segment
+ (start 141 83.5)
+ (end 141 87.25)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 15)
+ (uuid "f44f1bda-2e83-43d5-b028-0b41d317f4cc")
+ )
+ (segment
+ (start 140.25 78.1625)
+ (end 140.25 79.75)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 30)
+ (uuid "0c252c82-d60c-45e5-8e3b-590f49676b7f")
+ )
+ (segment
+ (start 140.15 85.9)
+ (end 140.15 84.075)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 30)
+ (uuid "11353363-f7ad-40ea-b9d5-d8388da7ecb0")
+ )
+ (segment
+ (start 140.15 84.075)
+ (end 140.225 84)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 30)
+ (uuid "22456065-e204-43b6-8f5e-0c2e5e5b13dd")
+ )
+ (segment
+ (start 141 82.5)
+ (end 141 80.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 30)
+ (uuid "3fc62bac-4d63-43e1-9881-e72edad01289")
+ )
+ (segment
+ (start 140.225 83.275)
+ (end 141 82.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 30)
+ (uuid "561e7ac4-aa96-4c5b-8c6e-62a77a5e8a09")
+ )
+ (segment
+ (start 140.225 84)
+ (end 140.225 83.275)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 30)
+ (uuid "7a2fc9bf-0b61-42b9-9152-fe5924acde61")
+ )
+ (segment
+ (start 140.25 79.75)
+ (end 141 80.5)
+ (width 0.2)
+ (layer "F.Cu")
+ (net 30)
+ (uuid "9e081e8f-72bd-4ab2-a9a9-7734ea26684b")
+ )
)
diff --git a/examples/test_basickeyboard.py b/examples/test_basickeyboard.py
deleted file mode 100644
index bbd85b4b0..000000000
--- a/examples/test_basickeyboard.py
+++ /dev/null
@@ -1,41 +0,0 @@
-"""
-Simple mechanical keyboard example design, using a socketed dev board
-
-Relies on footprints from external libraries.
-In the KiCad Plugin and Content Manager, install the Keyswitch Kicad Library,
-also on GitHub here https://github.com/perigoso/keyswitch-kicad-library
-The project is set up to reference the third party library as installed by the KiCad
-Plugin Manager, it does not need to be in your global library table.
-"""
-
-import unittest
-
-from typing_extensions import override
-
-from edg import *
-from .util import run_test_board
-
-
-class BasicKeyboard(SimpleBoardTop):
- @override
- def contents(self) -> None:
- super().contents()
-
- self.mcu = self.Block(Xiao_Rp2040())
-
- self.sw = self.Block(SwitchMatrix(nrows=3, ncols=2))
- self.connect(self.sw.cols, self.mcu.gpio.request_vector())
- self.connect(self.sw.rows, self.mcu.gpio.request_vector())
-
- @override
- def refinements(self) -> Refinements:
- return super().refinements() + Refinements(
- class_refinements=[
- (Switch, KailhSocket),
- ],
- )
-
-
-class BasicKeyboardTestCase(unittest.TestCase):
- def test_design(self) -> None:
- run_test_board(BasicKeyboard)
diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py
index 50f73dd29..4939c79dd 100644
--- a/examples/test_ble_joystick.py
+++ b/examples/test_ble_joystick.py
@@ -254,15 +254,6 @@ def refinements(self) -> Refinements:
(["btns", "ioe"], Ch32v003),
(["reg_3v3"], Xc6206p),
(["bumper_sw", "package"], SmtSwitchRa),
- # TODO debug why class refinements not working
- (["btns", "sw[0]", "package"], SmtSwitch),
- (["btns", "sw[1]", "package"], SmtSwitch),
- (["btns", "sw[2]", "package"], SmtSwitch),
- (["btns", "sw[3]", "package"], SmtSwitch),
- (["btns", "sw[4]", "package"], SmtSwitch),
- (["btns", "sw[5]", "package"], SmtSwitch),
- (["btns", "sw[6]", "package"], SmtSwitch),
- (["btns", "sw[7]", "package"], SmtSwitch),
],
instance_values=[
(["refdes_prefix"], "J"), # unique refdes for panelization
@@ -310,7 +301,7 @@ def refinements(self) -> Refinements:
(TagConnect, TagConnectNonLegged),
(PassiveConnector, PinHeader2mm),
(Neopixel, Ws2812c_2020),
- (TactileSwitch, SmtSwitch),
+ (Switch, SmtSwitch),
],
class_values=[
(ProtectionZenerDiode, ["diode", "footprint_spec"], "Diode_SMD:D_SOD-123"),
diff --git a/examples/test_blinky.py b/examples/test_blinky.py
index 32c8ef706..49b47daf3 100644
--- a/examples/test_blinky.py
+++ b/examples/test_blinky.py
@@ -16,154 +16,202 @@ def contents(self) -> None:
self.src = self.Block(DummyDigitalSource()).connected(self.led.signal)
+class TestBlinkyEmpty(SimpleBoardTop):
+ pass
+
+
class TestBlinkyBasic(SimpleBoardTop):
"""The simplest circuit, a microcontroller dev board with a LED.
This also tests the dev board wrapper concept."""
@override
def contents(self) -> None:
+ super().contents()
self.mcu = self.Block(Xiao_Rp2040())
self.led = self.Block(IndicatorLed())
-
- self.connect(self.led.signal, self.mcu.gpio.request())
self.connect(self.mcu.gnd, self.led.gnd)
+ self.connect(self.mcu.gpio.request("led"), self.led.signal)
-class TestBlinkyEmpty(SimpleBoardTop):
- pass
-
-
-class TestBlinkyBasicBattery(SimpleBoardTop):
- """The simplest circuit, a microcontroller dev board with a LED, powered from a battery"""
+class TestBlinkySwitchMatrix(SimpleBoardTop):
+ """The simplest circuit, a microcontroller dev board with a LED.
+ This also tests the dev board wrapper concept."""
@override
def contents(self) -> None:
- self.bat = self.Block(AaBatteryStack(4))
+ super().contents()
self.mcu = self.Block(Xiao_Rp2040())
self.led = self.Block(IndicatorLed())
-
- self.connect(self.mcu.pwr_vin, self.bat.pwr)
- self.connect(self.mcu.gnd, self.bat.gnd)
- self.connect(self.led.signal, self.mcu.gpio.request())
self.connect(self.mcu.gnd, self.led.gnd)
+ self.connect(self.mcu.gpio.request("led"), self.led.signal)
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector("cols"))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector("rows"))
-class TestBlinkyIncomplete(SimpleBoardTop):
+
+class TestBlinkySwitchMatrixRefined(SimpleBoardTop):
@override
def contents(self) -> None:
super().contents()
- self.usb = self.Block(UsbCReceptacle())
- self.mcu = self.Block(Stm32f103_48())
+ self.mcu = self.Block(Xiao_Rp2040())
self.led = self.Block(IndicatorLed())
- self.connect(self.usb.gnd, self.mcu.gnd, self.led.gnd)
- self.connect(self.usb.pwr, self.mcu.pwr)
+ self.connect(self.mcu.gnd, self.led.gnd)
self.connect(self.mcu.gpio.request("led"), self.led.signal)
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector("cols"))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector("rows"))
-class TestBlinkyRegulated(SimpleBoardTop):
+ @override
+ def refinements(self) -> Refinements:
+ return super().refinements() + Refinements(
+ class_refinements=[
+ (Switch, KailhSocket),
+ ],
+ )
+
+
+class TestBlinkyIncomplete(SimpleBoardTop):
@override
def contents(self) -> None:
super().contents()
- self.usb = self.Block(UsbCReceptacle())
- self.reg = self.Block(VoltageRegulator(3.3 * Volt(tol=0.05)))
- self.mcu = self.Block(Stm32f103_48())
+ self.mcu = self.Block(IoController())
self.led = self.Block(IndicatorLed())
- self.connect(self.usb.gnd, self.reg.gnd, self.mcu.gnd, self.led.gnd)
- self.connect(self.usb.pwr, self.reg.pwr_in)
- self.connect(self.reg.pwr_out, self.mcu.pwr)
+ self.connect(self.mcu.gnd, self.led.gnd)
self.connect(self.mcu.gpio.request("led"), self.led.signal)
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector("cols"))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector("rows"))
+
+ @override
+ def refinements(self) -> Refinements:
+ return super().refinements() + Refinements(
+ class_refinements=[
+ (IoController, Stm32f103),
+ (Switch, KailhSocket),
+ ],
+ )
+
-class TestBlinkyComplete(SimpleBoardTop):
+class TestBlinkyInvalid(SimpleBoardTop):
@override
def contents(self) -> None:
super().contents()
+
self.usb = self.Block(UsbCReceptacle())
- self.reg = self.Block(VoltageRegulator(3.3 * Volt(tol=0.05)))
- self.mcu = self.Block(Stm32f103_48())
+
+ self.mcu = self.Block(IoController())
+ self.connect(self.usb.gnd, self.mcu.gnd)
+ self.connect(self.usb.pwr, self.mcu.pwr)
+ self.connect(self.usb.usb, self.mcu.usb.request("usb"))
+
self.led = self.Block(IndicatorLed())
- self.connect(self.usb.gnd, self.reg.gnd, self.mcu.gnd, self.led.gnd)
- self.connect(self.usb.pwr, self.reg.pwr_in)
- self.connect(self.reg.pwr_out, self.mcu.pwr)
+ self.connect(self.mcu.gnd, self.led.gnd)
self.connect(self.mcu.gpio.request("led"), self.led.signal)
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector("cols"))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector("rows"))
+
@override
def refinements(self) -> Refinements:
return super().refinements() + Refinements(
- instance_refinements=[
- (["reg"], Tps561201),
- ]
+ class_refinements=[
+ (IoController, Stm32f103),
+ (Switch, KailhSocket),
+ ],
)
-class TestBlinkyExpanded(SimpleBoardTop):
+class TestBlinkyRegulated(SimpleBoardTop):
@override
def contents(self) -> None:
super().contents()
+
self.usb = self.Block(UsbCReceptacle())
- self.reg = self.Block(VoltageRegulator(3.3 * Volt(tol=0.05)))
- self.mcu = self.Block(Stm32f103_48())
- self.connect(self.usb.gnd, self.reg.gnd, self.mcu.gnd)
+
+ self.reg = self.Block(LinearRegulator(3.3 * Volt(tol=0.05)))
+ self.connect(self.usb.gnd, self.reg.gnd)
self.connect(self.usb.pwr, self.reg.pwr_in)
+
+ self.mcu = self.Block(IoController())
+ self.connect(self.usb.gnd, self.mcu.gnd)
self.connect(self.reg.pwr_out, self.mcu.pwr)
+ self.connect(self.usb.usb, self.mcu.usb.request("usb"))
- self.sw = self.Block(DigitalSwitch())
- self.connect(self.mcu.gpio.request("sw"), self.sw.out)
- self.connect(self.usb.gnd, self.sw.gnd)
+ self.led = self.Block(IndicatorLed())
+ self.connect(self.mcu.gnd, self.led.gnd)
+ self.connect(self.mcu.gpio.request("led"), self.led.signal)
- self.led = ElementDict[IndicatorLed]()
- for i in range(4):
- self.led[i] = self.Block(IndicatorLed())
- self.connect(self.mcu.gpio.request(f"led{i}"), self.led[i].signal)
- self.connect(self.usb.gnd, self.led[i].gnd)
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector("cols"))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector("rows"))
@override
def refinements(self) -> Refinements:
return super().refinements() + Refinements(
- instance_refinements=[
- (["reg"], Tps561201),
- ]
+ class_refinements=[
+ (IoController, Stm32f103),
+ (Switch, KailhSocket),
+ ],
)
-class TestBlinkyImplicit(SimpleBoardTop):
+class TestBlinkyRgb(SimpleBoardTop):
@override
def contents(self) -> None:
super().contents()
+
self.usb = self.Block(UsbCReceptacle())
- self.reg = self.Block(VoltageRegulator(3.3 * Volt(tol=0.05)))
+
+ self.reg = self.Block(LinearRegulator(3.3 * Volt(tol=0.05)))
self.connect(self.usb.gnd, self.reg.gnd)
self.connect(self.usb.pwr, self.reg.pwr_in)
- with self.implicit_connect(
- ImplicitConnect(self.reg.pwr_out, [Power]),
- ImplicitConnect(self.reg.gnd, [Common]),
- ) as imp:
- self.mcu = imp.Block(Stm32f103_48())
+ self.mcu = self.Block(IoController())
+ self.connect(self.usb.gnd, self.mcu.gnd)
+ self.connect(self.reg.pwr_out, self.mcu.pwr)
+ self.connect(self.usb.usb, self.mcu.usb.request("usb"))
- self.sw = imp.Block(DigitalSwitch())
- self.connect(self.mcu.gpio.request("sw"), self.sw.out)
+ self.led = self.Block(IndicatorLed())
+ self.connect(self.mcu.gnd, self.led.gnd)
+ self.connect(self.mcu.gpio.request("led"), self.led.signal)
- self.led = ElementDict[IndicatorLed]()
- for i in range(4):
- self.led[i] = imp.Block(IndicatorLed())
- self.connect(self.mcu.gpio.request(f"led{i}"), self.led[i].signal)
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector("cols"))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector("rows"))
+
+ sw_npx = self.sw.with_mixin(SwitchMatrixNeopixels(npx_order="row_snake"))
+ self.connect(self.usb.gnd, sw_npx.npx_gnd)
+ self.connect(self.usb.pwr, sw_npx.npx_pwr)
+
+ self.npx_shift = self.Block(L74Ahct1g125())
+ self.connect(self.usb.gnd, self.npx_shift.gnd)
+ self.connect(self.usb.pwr, self.npx_shift.pwr)
+ self.connect(self.mcu.gpio.request("npx"), self.npx_shift.input)
+ self.connect(self.npx_shift.output, sw_npx.npx_din)
@override
def refinements(self) -> Refinements:
return super().refinements() + Refinements(
- instance_refinements=[
- (["reg"], Tps561201),
- ]
+ class_refinements=[
+ (IoController, Stm32f103),
+ (Switch, KailhSocket),
+ (Neopixel, Ws2812c_2020),
+ ],
)
-class TestBlinkyChain(SimpleBoardTop):
+class TestBlinkyImplicit(SimpleBoardTop):
@override
def contents(self) -> None:
super().contents()
+
self.usb = self.Block(UsbCReceptacle())
- self.reg = self.Block(VoltageRegulator(3.3 * Volt(tol=0.05)))
+
+ self.reg = self.Block(LinearRegulator(3.3 * Volt(tol=0.05)))
self.connect(self.usb.gnd, self.reg.gnd)
self.connect(self.usb.pwr, self.reg.pwr_in)
@@ -171,29 +219,47 @@ def contents(self) -> None:
ImplicitConnect(self.reg.pwr_out, [Power]),
ImplicitConnect(self.reg.gnd, [Common]),
) as imp:
- self.mcu = imp.Block(Stm32f103_48())
+ self.mcu = imp.Block(IoController())
+ self.connect(self.usb.usb, self.mcu.usb.request("usb"))
- (self.sw,), _ = self.chain(imp.Block(DigitalSwitch()), self.mcu.gpio.request("sw"))
+ self.led = imp.Block(IndicatorLed())
+ self.connect(self.mcu.gpio.request("led"), self.led.signal)
- self.led = ElementDict[IndicatorLed]()
- for i in range(4):
- (self.led[i],), _ = self.chain(self.mcu.gpio.request(f"led{i}"), imp.Block(IndicatorLed()))
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector("cols"))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector("rows"))
+
+ with self.implicit_connect(
+ ImplicitConnect(self.usb.pwr, [Power]),
+ ImplicitConnect(self.usb.gnd, [Common]),
+ ) as imp:
+ sw_npx = self.sw.with_mixin(SwitchMatrixNeopixels(npx_order="row_snake"))
+ self.connect(self.usb.gnd, sw_npx.npx_gnd)
+ self.connect(self.usb.pwr, sw_npx.npx_pwr)
+
+ self.npx_shift = imp.Block(L74Ahct1g125())
+ self.connect(self.mcu.gpio.request("npx"), self.npx_shift.input)
+ self.connect(self.npx_shift.output, sw_npx.npx_din)
@override
def refinements(self) -> Refinements:
return super().refinements() + Refinements(
- instance_refinements=[
- (["reg"], Tps561201),
- ]
+ class_refinements=[
+ (IoController, Stm32f103),
+ (Switch, KailhSocket),
+ (Neopixel, Ws2812c_2020),
+ ],
)
-class TestBlinkyMicro(SimpleBoardTop):
+class TestBlinkyPinned(SimpleBoardTop):
@override
def contents(self) -> None:
super().contents()
+
self.usb = self.Block(UsbCReceptacle())
- self.reg = self.Block(VoltageRegulator(3.3 * Volt(tol=0.05)))
+
+ self.reg = self.Block(LinearRegulator(3.3 * Volt(tol=0.05)))
self.connect(self.usb.gnd, self.reg.gnd)
self.connect(self.usb.pwr, self.reg.pwr_in)
@@ -202,28 +268,45 @@ def contents(self) -> None:
ImplicitConnect(self.reg.gnd, [Common]),
) as imp:
self.mcu = imp.Block(IoController())
+ self.connect(self.usb.usb, self.mcu.usb.request("usb"))
- (self.sw,), _ = self.chain(imp.Block(DigitalSwitch()), self.mcu.gpio.request("sw"))
+ self.led = imp.Block(IndicatorLed())
+ self.connect(self.mcu.gpio.request("led"), self.led.signal)
- self.led = ElementDict[IndicatorLed]()
- for i in range(4):
- (self.led[i],), _ = self.chain(self.mcu.gpio.request(f"led{i}"), imp.Block(IndicatorLed()))
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector("cols"))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector("rows"))
+
+ with self.implicit_connect(
+ ImplicitConnect(self.usb.pwr, [Power]),
+ ImplicitConnect(self.usb.gnd, [Common]),
+ ) as imp:
+ sw_npx = self.sw.with_mixin(SwitchMatrixNeopixels(npx_order="row_snake"))
+ self.connect(self.usb.gnd, sw_npx.npx_gnd)
+ self.connect(self.usb.pwr, sw_npx.npx_pwr)
+
+ self.npx_shift = imp.Block(L74Ahct1g125())
+ self.connect(self.mcu.gpio.request("npx"), self.npx_shift.input)
+ self.connect(self.npx_shift.output, sw_npx.npx_din)
@override
def refinements(self) -> Refinements:
return super().refinements() + Refinements(
- instance_refinements=[
- (["reg"], Tps561201),
- (["mcu"], Esp32_Wroom_32),
+ class_refinements=[
+ (IoController, Stm32f103),
+ (Switch, KailhSocket),
+ (Neopixel, Ws2812c_2020),
],
instance_values=[
(
["mcu", "pin_assigns"],
[
- "led0=26",
- "led1=27",
- "led2=28",
- "led3=29",
+ "led=10",
+ "cols_0=16",
+ "cols_1=17",
+ "rows_0=18",
+ "rows_1=19",
+ "rows_2=20",
],
)
],
@@ -625,37 +708,37 @@ class BlinkyTestCase(unittest.TestCase):
def test_led(self) -> None:
run_test_board(TestLed)
- def test_design_basic(self) -> None:
- run_test_board(TestBlinkyBasic) # generate this netlist as a test
-
def test_design_empty(self) -> None:
run_test_board(TestBlinkyEmpty)
- def test_design_battery(self) -> None:
- run_test_board(TestBlinkyBasicBattery)
+ def test_design_basic(self) -> None:
+ run_test_board(TestBlinkyBasic)
+
+ def test_design_switchmatrix(self) -> None:
+ run_test_board(TestBlinkySwitchMatrix)
+
+ def test_design_switchmatrix_refined(self) -> None:
+ run_test_board(TestBlinkySwitchMatrixRefined)
def test_design_incomplete(self) -> None:
with self.assertRaises(CompilerCheckError):
compile_board_inplace(TestBlinkyIncomplete, False)
- def test_design_regulated(self) -> None:
+ def test_design_invalid(self) -> None:
with self.assertRaises(CompilerCheckError):
- compile_board_inplace(TestBlinkyRegulated, False)
+ compile_board_inplace(TestBlinkyInvalid, False)
- def test_design_complete(self) -> None:
- run_test_board(TestBlinkyComplete)
+ def test_design_regulated(self) -> None:
+ run_test_board(TestBlinkyRegulated)
- def test_design_expnaded(self) -> None:
- run_test_board(TestBlinkyExpanded)
+ def test_design_rgb(self) -> None:
+ run_test_board(TestBlinkyRgb)
def test_design_implicit(self) -> None:
run_test_board(TestBlinkyImplicit)
- def test_design_chain(self) -> None:
- run_test_board(TestBlinkyChain) # generate this netlist as a test
-
- def test_design_micro(self) -> None:
- run_test_board(TestBlinkyMicro)
+ def test_design_pinned(self) -> None:
+ run_test_board(TestBlinkyPinned)
def test_design_library(self) -> None:
run_test_board(TestBlinkyWithLibrary)
diff --git a/examples/test_robotcrawler.py b/examples/test_robotcrawler.py
index 8f2b3110f..d68e6c5e8 100644
--- a/examples/test_robotcrawler.py
+++ b/examples/test_robotcrawler.py
@@ -172,7 +172,7 @@ def refinements(self) -> Refinements:
return super().refinements() + Refinements(
instance_refinements=[
(["mcu"], Esp32s3_Wroom_1),
- (["mcu_servo"], Stm32f103_48),
+ (["mcu_servo"], Stm32f103),
(["mcu_test"], Rp2040),
(["reg_3v3"], Ap7215),
(["reg_2v5"], Xc6206p),
diff --git a/examples/test_swd_debugger.py b/examples/test_swd_debugger.py
index 1df1ab7cf..923237d54 100644
--- a/examples/test_swd_debugger.py
+++ b/examples/test_swd_debugger.py
@@ -163,7 +163,7 @@ def contents(self) -> None:
def refinements(self) -> Refinements:
return super().refinements() + Refinements(
instance_refinements=[
- (["mcu"], Stm32f103_48),
+ (["mcu"], Stm32f103),
(["mcu", "crystal"], Cstne),
(["usb_reg"], Ap2204k),
(["target_reg"], Ap2204k),
diff --git a/examples/test_tofarray.py b/examples/test_tofarray.py
index 8dca22d0a..fad9df4e6 100644
--- a/examples/test_tofarray.py
+++ b/examples/test_tofarray.py
@@ -130,7 +130,7 @@ def multipack(self) -> None:
def refinements(self) -> Refinements:
return super().refinements() + Refinements(
instance_refinements=[
- (["mcu"], Stm32f103_48),
+ (["mcu"], Stm32f103),
(["reg_3v3"], Ldl1117), # TBD find one that is in stock
(["spk", "conn"], JstPhKVertical),
(["can", "conn"], MolexSl),
diff --git a/getting-started.md b/getting-started.md
index 39c719b20..7509d91cd 100644
--- a/getting-started.md
+++ b/getting-started.md
@@ -1,90 +1,97 @@
# Getting Started Tutorial
+Introductory tutorial and example starter project, building towards a basic mechanical keyboard macropad.
+
+
+## Goals
+The main goal of this HDL are:
+- enable libraries of subcircuits, through concepts supporting direct (without modification) reuse of subcircuit blocks, even in projects with different requirements
+- automate straightforward calculations, like resistor sizing
+- automate passive parts selections, like choosing resistors from a parts table
+- automate common correctness checks, including voltage limits, current limits, and logic level compatibility
+
+These capabilities will be shown throughout this tutorial.
+
+
## Core concepts
-The core abstraction is the hierarchical block diagram, which we will explain using an example design of a microcontroller driving an LED.
+The core abstraction is the hierarchical block diagram, shown here using an example design of a microcontroller driving an LED.
In conventional schematic tools, such a design could be a flat schematic, consisting of the microcontroller module, LED, and resistor:

-Many modern tools have the concept of hierarchy blocks, where a block could be a subcircuit:
+Modern tools have the concept of hierarchy blocks, where a block could be a subcircuit:

In the example above, the LED-resistor subcircuit is contained within a block, which can be manipulated as a unit, and exposes ports (circles on the diagram) while encapsulating internal pins.
-(note: in mainstream schematic tools with this feature, the subcircuit is usually presented in its own sheet, instead of having its contents displayed in the block)
Generalizing this model, components are blocks too, and component pins are also block ports:

-The main concepts our model extends on top of the simple hierarchy blocks above are **parameters**, **links**, and **generators**.
+The main concepts our model extends on top of the simple hierarchy blocks above are **parameters** and **generators**.
**Parameters** are variables that can be attached to blocks and ports.
-For example, a digital IO, like `digital[0]` in the example above, would have parameters like input voltage tolerance, output voltage range, and logic thresholds.
-This allows for a more powerful design correctness check (think ERC++), and provides a foundation for generators.
+For example, a digital IO, like the `mcu`'s `digital[0]` in the example above, would have parameters like voltage limits, output voltage range, and logic thresholds.
+This allows for automated design correctness check of basic datasheet parameters (think ERC++) and provides a foundation for generators.
**Generators** allow a block's internal contents to be constructed by code, possibly based on parameters on it and its ports.
For example, the `IndicatorLed` block automatically sizes the resistor based on the input voltage on the `sig` pin, and the DC-DC converter block automatically sizes inductors and capacitors based on the target output voltage and current.
-Finally, in the internal model (mainly relevant for compiler writers and library builders), the connections between ports expand into **links** which defines how parameters propagate between those ports and any constraints on them.
-Continuing the digital IO example, the link would check the output thresholds against the input thresholds, and provide the worst-case voltage levels given all connected drivers.
-These could be viewed as a block-like object (diamonds on the diagram) instead of direct wire connections:
+ Under the hood: from connections to links
+
+While the user-facing HDL design model is connections between ports, the internal model expands these connections into **links**.
+Links are a block-like construct (diamonds in the diagram) that define how parameters propagate between ports and constraints on them.

-> In the user-facing HDL design model, links are inferred based on the types of connected ports and not explicit.
-> Being aware of links can be useful for debugging, but this is mainly relevant for compiler writers and library builders.
+Continuing the digital IO example, the link checks the output thresholds against the input thresholds and calculates the full range of voltage levels given all connected drivers.
+These could be viewed as a block-like object (diamonds on the diagram) instead of direct wire connections:
-We'll put these concepts into practice in the rest of this tutorial by building a variation of the blinky example above, then defining a custom part.
+All links are fully defined in the same HDL code, and you can inspect the link definitions of included port types to see how they work and what they check.
+You can also write custom links and ports, though this will be unnecessary for most users.
+
+
### Setup
Instructions for setting up the IDE and compiler are in the [setup document](setup.md).
+The rest of this tutorial requires that you have this `edg` package (available on `pip`) installed.
+
### Reference Document
While this getting started guide is meant to be self-contained, you may also find the [reference document](reference.md) helpful, especially as you build designs outside this tutorial.
-The reference document includes a short overview of all the core primitives and common library elements.
### Hardware Description Language (HDL)
To support user-defined computation of parameters and generator blocks, the design system is implemented as a _hardware description language_ (HDL).
That is, blocks are "placed" or instantiated, and their ports are connected, through lines in code instead of GUI actions in a graphical schematic.
-There are a couple of basic operations, which you'll get to try in the tutorial:
-- **Block Definition**: blocks are defined as Python classes which extend (subclass, including indirectly) `Block`.
-- **Block Instantiation**: creates a sub-block in the current block
- - For example, `self.led = self.Block(IndicatorLed())` instantiates an `IndicatorLed` block and names it `led` in the current block
-- **Port Instantiation**: creates an exterior port in the current block, used for building library blocks.
- - For example, `self.vdd = self.Port(VoltageSink(voltage_limits=(2.3, 5.5)*Volt, current_draw=(0, 15)*uAmp))` instantiates a port of type `VoltageSink` (voltage input) with defined voltage limits and current draw ranges, and names it `vdd`.
- - Ports are not allowed on top-level blocks.
-- **Connect**: connects two (or more) ports.
- - For example, `self.connect(self.mcu.gnd, self.led.gnd)` connects the `gnd` ports on `mcu` and `led`
-
-
-### Graphical Editor and Integrated Development Environment (IDE)
-While an HDL is needed to support parameter computation and programmatic construction, some operations (like building a top-level design with an LED connected to a microcontroller) may not require the full power provided by an HDL and may be more intuitive or familiar within a graphical environment.
-However, because this design makes use of generator blocks (the LED), and because blocks may also take parameters (such as the target output voltage of a DC-DC converter), the HDL is still the primary design input.
-To help with these more basic operations and to support those more familiar with a graphical schematic capture flow, an IDE helps bridge the graphical schematic-like and HDL code representations. Specifically, it:
-- provides a block diagram visualization of the design
+### Optional Integrated Development Environment (IDE) with Graphical Editor
+We have also built a basic IDE (as a PyCharm plugin, must be compiled locally) that provides some basic graphical integrations for working with HDL.
+Specifically, it:
+- generates a block diagram visualization of the design
- allows inspection of solved / computed parameters in the design
-- generates and inserts HDL code from schematic editor-like actions
+- provides schematic-like graphical edit actions to insert HDL
+
+The graphical edit actions have significant limitations (and probably bugs / unhandled edge cases) compared to the full HDL and are best suited for simple designs or as a learning tool.
+**Consider it more of a tech demonstrator and proof-of-concept** but do give it a try.

The IDE has these major components:
-- **Block Diagram Visualization**: shows the compiled design visualized as a block diagram here.
+- **Block Diagram Visualization**: shows the compiled design visualized as a block diagram.
- **Design Tree**: shows the compiled design as a tree structure of the block hierarchy.
- **Library Browser**: shows all the library blocks, ports, and links.
The text box at the top allows filtering by keyword.
- The preview box on the right shows more information on the selected library block, including docstring (if available), instantiation parameters, and block diagram preview.
- **Compiler / Run Console**: shows the compilation log, including any errors and prints from Python as HDL runs.
-The rest of this tutorial will focus on the HDL, but will also describe how the equivalent code could be generated by GUI actions.
-**As you go through the tutorial, you can write the code shown in the code blocks or follow the graphical actions described immediately afterward.**
-However, you can't do both (since they would duplicate the same results), but you can try the graphical actions if you remove the code.
+The rest of this tutorial focuses on the HDL, but equivalent graphical edit actions (where possible) are described in expandable boxes.
+**As you go through the tutorial, you can write the code shown in the code blocks or follow the graphical actions.**
## A top-level design: Blinky
-_In this example, we will create a circuit consisting of a LED and switch connected to a microcontroller._
+_In this example, we will create a basic LED controlled by a microcontroller._
Start by creating a `blinky.py`, and filling it with this skeleton code:
@@ -93,81 +100,88 @@ from edg import *
class BlinkyExample(SimpleBoardTop):
- def contents(self) -> None:
- super().contents()
- # your implementation here
+ def contents(self) -> None:
+ super().contents()
+ # your implementation here
if __name__ == "__main__":
- compile_board_inplace(BlinkyExample)
+ compile_board_inplace(BlinkyExample)
```
-> If using the IDE, `blinky.py` must be within the project directory.
-> Make sure you've set up the project according to the [setup document](setup.md).
->
-> If using the command line, `blinky.py` can be created anywhere.
-
- `from edg import *` brings in the base classes for circuit construction, like `SimpleBoardTop`.
-- `class BlinkyExample` contains the (top-level) circuit you're going to build, and it extends the top-level hierarchical block base class `SimpleBoardTop`.
+- `class BlinkyExample` contains the (top-level) circuit you're going to build, and it extends the top-level block base class `SimpleBoardTop`.
It's empty for now, but we'll fill it in the next section.
- - `SimpleBoardTop` has definitions which make this tutorial easier but which may not be desirable in a production environment, in which case you should use `BoardTop`.
- Currently, this is just ignoring the frequency specification for inductor, since that data isn't available in the parts table.
+ - `SimpleBoardTop` provides some default component mappings and relaxes some strict constraints that do not matter for maker-type boards.
- `compile_board_inplace(...)` invokes the circuit generator given the top-level design (`BlinkyExample`).
This is the starting point that allows the file to run as a Python script, and you can treat it as magic.
Try building the example now.
-**If using the IDE**: look for the run icon  in the gutter (with the line numbers) next to `class BlinkyExample`:
-
-1. Click it.
+**If using the command line**:
+1. Run `python blinky.py`.
+ If all worked, this should create a folder `BlinkyExample` with a netlist `BlinkyExample.net` inside.
+
+**If using the IDE**:
+1. Click the run icon  in the gutter (with the line numbers) next to `class BlinkyExample`:
+
+ 
+
_Make sure that you're using the run icon associated with `class BlinkyExample`, not the file, and not `if __name__ == "__main__"`._
2. Then from the menu, click the Run option.

> **Tip**: Next time, you can rebuild the design by re-running the last selected run configuration with hotkey **Shift+F10** (Windows) or **Ctrl+R** (MacOS).
- > **Note on re-compiling behavior**: The IDE only re-compiles block classes when its source (or the source of superclasses) has changed, but this does not catch all functional changes.
- > If changes aren't recompiling, try making a change to the class code.
- > Alternatively, you can clear all compiled blocks through main menu > Tools > Empty Block Cache.
- >
- > In particular, these changes may not trigger a recompile:
+ > **Recompilation caching behavior**: the IDE only re-compiles block classes when it detects changes in its source (including some dependencies), but this misses edge cases including:
+ >
> - Any changes outside the class, even if the code is called by the class.
> - Changes to supporting files (such as part tables and imported schematics), even if they are referenced in the class.
- > - Changes to `__init__` do not re-compile instantiating classes, even if default values have been updated.
+ > - Changes to default values of `__init__` arguments.
+ >
+ > You can clear all compiled blocks through main menu > Tools > Empty Block Cache.
3. The design should build, and you should get a run log that looks something like:
```
Starting compilation of blinky.BlinkyExample
Using interpreter from configured SDK [...]
[... lots of compilation output here ...]
Completed: generate netlist: wrote [...]
+ Completed: generate BOM: write [...]
+ Done
```
4. Some options (like where the netlist is generated into) can be modified via the run options at the top right:

- If not using the IDE
-
-Run `python blinky.py` from the command line.
-If all worked, this should create a folder `BlinkyExample` with a netlist `BlinkyExample.net` inside.
-
-
- Resolving common errors
-
-- If you get an error along the lines of `ModuleNotFoundError: No module named 'deprecated'` or `ModuleNotFoundError: No module named 'google'`, this is because the Python dependencies haven't been installed.
-See the [setup document](setup.md) for instructions on installing dependencies.
-
### Creating the microcontroller and LED
-For this simple example, we connect an LED to a STM32F103 microcontroller, and have everything powered by a USB type-C receptacle.
+For this simple example, we connect an LED to a self-powered Xiao Rp2040 microcontroller dev board.
+
+**Make these changes** to the `contents` method:
+```diff
+ def contents(self) -> None:
+ super().contents()
+- # your implementation here
++ self.mcu = self.Block(Xiao_Rp2040())
++ self.led = self.Block(IndicatorLed())
+```
+
+ Alternatively, with IDE graphical edit actions
Let's start by instantiating the USB type-C receptacle through graphical operations in the IDE.
-1. In the Library Browser, search for the block (here, `UsbCReceptable`) using the Filter textbox:
- 
+1. In the Library Browser, search for the block (here, `Xiao_Rp2040`) using the Filter textbox:
+ 
+
+ > The library icons have these meanings:
+ > -  (category): this "block" is actually a category organizer and cannot be instantiated.
+ > -  (abstract type): this block is an abstract type.
+ > Abstract blocks can be instantiated and will be discussed more later.
+
2. Double-click the library entry.
This will insert the code to instantiate the block as a _live template_, code with template fields you can fill in:
- 
+ 
**Editing outside the currently active template field (boxed in blue) will break off and cancel the template.**
**Moving the cursor outside the currently active template field, either using the mouse or keyboard arrows, is discouraged.**
-3. Name the block `usb`, by typing it into the first template field.
- 
+3. Name the block `mcu`, by typing it into the first template field.
+ 
4. Then press [Tab] through the end of the template (leaving the other fields empty, they're optional).
5. Once you commit the live template, the block will appear in the block diagram visualizer.
- The hatched pattern (diagonal lines) in the block diagram visualizer indicates that the block may be out-of-sync with the code until the next re-compile.
@@ -182,27 +196,14 @@ Let's start by instantiating the USB type-C receptacle through graphical operati
> - Press [Esc] to cancel the template, ending the editing but leaving the code in place.
> Canceling a blank template deletes the inserted code.
-> `self.Block(...)` creates a sub-block in `self` (the current hierarchy block being defined).
-> It must be assigned to an instance variable (in this case, `mcu`), which is used as the name sub-block.
-
-> The library icons have these meanings:
-> -  (category): this "block" is actually a category organizer and should not be instantiated.
-> -  (abstract type): this block is an abstract type.
-> Abstract blocks will be discussed more later.
-> - Most will not have an icon, which means that they're none of the above. These blocks can be instantiated.
+**Repeat for the LED** (`IndicatorLed`, named `led`).
-**Repeat for the microcontroller** (`Stm32f103_48`, named `mcu`) **and LED** (`IndicatorLed`, named `led`).
+
-If all was done correctly, your changes to the skeleton code might look like:
-```diff
- super().contents()
-- # your implementation here
-+ self.usb = self.Block(UsbCReceptacle())
-+ self.mcu = self.Block(Stm32f103_48())
-+ self.led = self.Block(IndicatorLed())
-```
+`self.Block(...)` creates a sub-block in `self` (the current hierarchy block being defined).
+It must be assigned to an instance variable (in this case, `mcu`), which is used as the name sub-block.
-If you're using the IDE, once you recompile the block diagram should look like:
+If using the IDE: the compiled block diagram should look like:

With something on your screen now, you can zoom in and out of the visualization using the mousewheel, or pan by clicking and dragging.
@@ -212,610 +213,455 @@ We'll fix that next.
### Connecting blocks
Blocks alone aren't very interesting, and they must be connected to be useful.
-First, we need to connect the power and ground between the devices, which we can also do with graphical operations in the IDE:
-1. Double click any of the ground ports (say, `usb.gnd`).
+First, we need to connect the power and ground between the devices.
+
+**Make these changes** to the `contents` method:
+```diff
+ def contents(self) -> None:
+ super().contents()
+ self.mcu = self.Block(Xiao_Rp2040())
+ self.led = self.Block(IndicatorLed())
++ self.connect(self.mcu.gnd, self.led.gnd)
+```
+
+ Alternatively, with IDE graphical edit actions
+
+1. Double click any of the ground ports (say, `mcu.gnd`).
This starts a connection operation, which dims out the ports that cannot be connected:

-2. Select (single click) on all the other ground ports to be connected (here, `mcu.gnd` and `led.gnd`):
- 
- - The order in which you select additional ports determines the order of the ports in the generated code.
-3. Double-click anywhere (within a block) to insert the connections as a live template.
+2. Select (single click) the other ports to be connected (here, just `led.gnd`).
+3. Double-click anywhere (within a block) to complete and insert the connections as a live template.

- > - You can double-click on a port to simultaneously select that port and insert the connection.
- > - You can cancel a connect operation by pressing [Esc] while the block diagram visualizer is selected.
+ > - Double-click on a port to simultaneously select that port and complete and insert the connection.
+ > - Alternatively, cancel a connect operation by pressing [Esc] while the block diagram visualizer is selected.
4. The name template field is optional, leave it blank and [Tab] past it.
- - Like the block instantiation, you can move the live template with [Alt+Click].
+ > - Like the block instantiation, you can move the live template with [Alt+Click].
5. Once you commit the live template, the connection will appear in the block diagram visualizer.
-> `self.connect(...)` connects all the argument ports together.
-> Connections are strongly typed based on the port types: the system will try to infer a _link_ based on the argument port types and count.
+
+
+`self.connect(...)` connects all the argument ports together.
+Connections are strongly typed based on the port types: the system will try to infer a _link_ based on the argument port types and count.
-**Repeat for the power line** (connect `usb.pwr` to `mcu.pwr`).
+Then, we need to connect the LED to a GPIO on the microcontroller.
+Make these changes to the `contents` method:
-If all was done correctly, your changes to the skeleton code might look like:
```diff
- self.usb = self.Block(UsbCReceptacle())
- self.mcu = self.Block(Stm32f103_48())
- self.led = self.Block(IndicatorLed())
-+ self.connect(self.usb.pwr, self.mcu.pwr)
-+ self.connect(self.usb.gnd, self.mcu.gnd, self.led.gnd)
+ def contents(self) -> None:
+ super().contents()
+ self.mcu = self.Block(Xiao_Rp2040())
+ self.led = self.Block(IndicatorLed())
+ self.connect(self.mcu.gnd, self.led.gnd)
++ self.connect(self.mcu.gpio.request('led'), self.led.signal)
```
-> `self.connect(...)` connects all the argument ports together.
-> Connections are strongly typed based on the port types: the system will try to infer a _link_ based on the argument port types and count.
+ Alternatively, with IDE graphical edit actions
-If you're using the IDE, once you recompile the block diagram should look like:
-
+1. **Repeat the previous connect process**, but with `mcu.gpio` to `led.signal`.
+ The microcontroller GPIO port  looks different as it is a dynamically sized port array.
+ Connections into it  `request(...)` a new element from the array.
-Then, we need to connect the LED to a GPIO on the microcontroller, so **repeat the connect process** (connect `mcu.gpio` to `led.signal`).
+ Graphical port array connect operations are buggy.
+2. Give the GPIO pin an (optional) name `led` by modifying the generated code:
+ ```diff
+ - self.connect(self.mcu.gpio.request(), self.led.signal)
+ + self.connect(self.mcu.gpio.request('led'), self.led.signal)
+ ```
+
+ Port array element naming has no graphical operation.
-If all was done correctly, your changes to the skeleton code might look like:
-```diff
- self.connect(self.usb.pwr, self.mcu.pwr)
- self.connect(self.usb.gnd, self.mcu.gnd, self.led.gnd)
-+ self.connect(self.mcu.gpio.request(), self.led.signal)
-```
+
-Give the GPIO pin an (optional) name `led` by modifying the generated code:
-```diff
-- self.connect(self.mcu.gpio.request(), self.led.signal)
-+ self.connect(self.mcu.gpio.request('led'), self.led.signal)
-```
+Microcontroller GPIOs (and other IOs like SPI and UART) are _port arrays_, which are dynamically sized.
+Here, we `request(...)` a new GPIO from the GPIO port array, then connect it to the LED.
+`request(...)` takes an optional name parameter, the meaning of which depends on the block.
-> Microcontroller GPIOs (and other IOs like SPI and UART) are  _port arrays_, which are dynamically sized.
-> Here, we  `request(...)` a new GPIO from the GPIO port array, then connect it to the LED.
-> `request(...)` takes an optional name parameter, the meaning of which depends on the block.
->
-> By default, these connections are arbitrarily assigned to microcontroller pins.
-> However pin assignments can also be manually specified (using this name parameter) to simplify board layout - this will be covered at the end of this tutorial.
->
-> Port arrays can be connected as a unit, which also propagates the length, though this isn't yet supported with graphical operations.
->
-> Port arrays behave differently when viewed externally (as we're doing here) and internally (for library builders).
-> Internal usage of port arrays will be covered later in the library building section.
-
-Recompiling in the IDE yields this block diagram:
-
+By default, these connections are arbitrarily assigned to microcontroller pins.
+However pin assignments can also be manually specified (using this name parameter) to simplify board layout - this will be covered at the end of this tutorial.
+
+Port arrays can be connected as a unit, which also propagates the length, though this isn't yet supported with graphical operations.
+
+Port arrays behave differently when viewed externally (as we're doing here) and internally (for library builders).
+Internal usage of port arrays will be covered later in the library building section.
->
-> At this point, your HDL might look like...
->
-> ```python
-> class BlinkyExample(SimpleBoardTop):
-> def contents(self) -> None:
-> super().contents()
-> self.usb = self.Block(UsbCReceptacle())
-> self.mcu = self.Block(Stm32f103_48())
-> self.led = self.Block(IndicatorLed())
-> self.connect(self.usb.gnd, self.mcu.gnd, self.led.gnd)
-> self.connect(self.usb.pwr, self.mcu.pwr)
-> self.connect(self.mcu.gpio.request('led'), self.led.signal)
-> ```
->
-
-
-## Fixing Blinky
-_In this section, we will explore and fix the remaining compiler errors to get to a clean design._
-
-While the design is now structurally complete, we still have errors in the form of failed assertions.
-Assertions are checks on the electronics model, in this case it's detecting a voltage incompatibility between the USB's 5v out and the STM32's 3.3v tolerant power inputs.
-
-If you're in the IDE, errors will show up in the compilation log and in the errors tab:
-
-You can also inspect the details of the power connection by mousing over it:
-
-
-### Adding a Voltage Regulator
-To run the STM32 within its rated voltage limits, we'll need a voltage regulator to lower the 5v from USB to the common 3.3v power expected by modern devices.
-
-**Repeat the add block flow** with a `VoltageRegulator` block and name it `reg`.
-Unlike the prior blocks, we actually need to specify a target output voltage here: use `3.3*Volt(tol=0.05)` for 3.3V ± 5%.
-If using live templates, you can write it into the `output_voltage` template field.
-**Place this between the USB connector and the microcontroller** (you can use Alt+click to move the template position, while it's active).
-
-
-> The `VoltageRegulator` block is parameterized - configured by additional data specified as constructor arguments.
->
-> Many blocks in the library are parameterized, allowing them to be used in a wide range of situations.
-> See each block's definition or documentation for what those parameters mean.
+This should now compile without errors.
+The LED subcircuit automatically calculates the resistor specification from the connected microcontroller's GPIO voltage and a builtin wide target current range (1-10mA).
+The resistor in the LED subcircuit then chooses a suitable resistor from its parts table.
-**Repeat the connect flow** to connect `reg.gnd` to the existing ground net.
-If using graphical operations, you can start by double-clicking on any port you want to connect.
-**Try merging the new connect into the prior ground connect statement by re-positioning (Alt+click) the template into the prior ground connect**.
-
+If using the IDE: the compiled block diagram should look like:
+
-You'll also need to splice the regulator into the power connection between the USB and the microcontroller.
-Since graphical operations don't support connection delete, you'll have to **delete the power connection in the code, then recompile**:
-```diff
- self.usb = self.Block(UsbCReceptacle())
- self.reg = self.Block(VoltageRegulator(3.3*Volt(tol=0.05)))
- self.mcu = self.Block(Stm32f103_48())
- self.led = self.Block(IndicatorLed())
- self.connect(self.usb.gnd, self.mcu.gnd, self.led.gnd)
-- self.connect(self.usb.pwr, self.mcu.pwr)
- self.connect(self.mcu.gpio.request('led'), self.led.signal)
-```
-From here, you can **repeat the connect flow** to connect the regulator input and output.
+## To KiCad Layout
-When all is done, your changes to the skeleton code might look like:
-```diff
- self.usb = self.Block(UsbCReceptacle())
-+ self.reg = self.Block(VoltageRegulator(3.3*Volt(tol=0.05)))
- self.mcu = self.Block(Stm32f103_48())
- self.led = self.Block(IndicatorLed())
-- self.connect(self.usb.gnd, self.mcu.gnd, self.led.gnd)
-- self.connect(self.usb.pwr, self.mcu.pwr)
-+ self.connect(self.usb.gnd, self.mcu.gnd, self.led.gnd, self.reg.gnd)
-+ self.connect(self.usb.pwr, self.reg.pwr_in)
-+ self.connect(self.reg.pwr_out, self.mcu.pwr)
- self.connect(self.mcu.gpio.request('led'), self.led.signal)
-```
+If you have KiCad installed, you can import the design into the layout editor. _KiCad 6.0+ is required, the netlist format is not compatible with 5.x or lower!_
-If you try recompiling it, it will give you an error because `VoltageRegulator` is an _abstract block_ (it does not have an implementation) and was automatically substituted with an ideal model (which does not have a circuit implementation, but allows compilation to continue).
-Abstract blocks are useful for two reasons:
-1. It allows your design to be more general and allows you to defer implementation choices until later.
- This is more relevant for library builders, where you may want to give the system designer the choice of, for example, whether to use a surface-mount or through-hole resistor.
-2. It can help preserve design intent more precisely and keep HDL readable.
- For example, saying that we want a voltage regulator can be more intuitive than directly instantiating a TPS561201 block.
+The example-so-far needs the Seeed Studio KiCad footprint library: https://github.com/Seeed-Studio/OPL_Kicad_Library
+Don't worry about installing it, in a few sections this will be replaced with a standard STM32.
-Unlike in software, we can instantiate abstract blocks here, but they won't actually place down a useful circuit.
-We can _refine_ those abstract blocks to give them a _concrete_ subclass by **adding a refinements block in the top-level design class**.
-```diff
- class BlinkyExample(SimpleBoardTop):
- def contents(self) -> None:
- ...
+In the KiCad standalone PCB Editor (layout tool), go to File > Import > Netlist..., and open the netlist file generated.
+KiCad will produce an initial placement that roughly clusters components according to their hierarchical grouping:
+
-+ def refinements(self) -> Refinements:
-+ return super().refinements() + Refinements(
-+ instance_refinements=[
-+ (['reg'], Tps561201),
-+ ])
-```
+The generated netlist preserves the design hierarchy.
+This works with KiCad 10+'s native design blocks feature (which is somewhat heavyweight) as well as the [Sublayout plugin](https://github.com/ducky64/sublayout) (more lightweight and limited).
+Once you complete this keyboard example, check out the [hierarchical layout tutorial](getting_started_hierarchy_layout.md) for hierarchical layout replication.
+Some plugins (like Replicate Layout) require a schematic for equivalence validation and cannot be used with this flow.
-> `BoardTop` defines default refinements for some common types, such has choosing surface-mount components for `Resistor` and `Capacitor`.
-> You can override these with a refinement in your HDL, for example choosing `AxialResistor`.
+By default, each footprint's value field is set to the block's full path name, on the F.Fab layer.
+This can be useful during placement to understand the function of each component.
-> If using the IDE, refinements can be done through the library browser.
-> 1. Select (single click) on the block you want to refine.
-> 2. In the Library Browser, search for the class you want to refine into.
-> If you don't know, you can filter by the abstract type and see what options are under it.
-> 3. Right-click the subclass in the Library Browser, and click "Refine instance...".
-> - Refine instance only affects the single selected block.
-> - Refine class affects all classes of the selected block.
-> This may be useful, for example, if you wanted to do a design-wide replacement of all generic resistors with a specific type.
-> 4. The corresponding refinement block should be inserted, or if it already exists, a new refinement entry will be added.
+As you continue to modify HDL, the unique component identifiers (tstamps) are stable and allows you to update a partial layout with a new netlist.
+**Unique component identifiers are generated from Block names, so if HDL names change those footprints will not update.**
-Recompiling in the IDE yields this block diagram and no errors:
-
+Component refdeses are generated in order of block instantiation, depth-first.
->
-> At this point, your HDL might look like...
->
-> ```python
-> class BlinkyExample(SimpleBoardTop):
-> def contents(self) -> None:
-> super().contents()
-> self.usb = self.Block(UsbCReceptacle())
-> self.reg = self.Block(VoltageRegulator(3.3*Volt(tol=0.05)))
-> self.mcu = self.Block(Stm32f103_48())
-> self.led = self.Block(IndicatorLed())
-> self.connect(self.usb.gnd, self.reg.gnd, self.mcu.gnd, self.led.gnd)
-> self.connect(self.usb.pwr, self.reg.pwr_in)
-> self.connect(self.reg.pwr_out, self.mcu.pwr)
-> self.connect(self.mcu.gpio.request('led'), self.led.signal)
->
-> def refinements(self) -> Refinements:
-> return super().refinements() + Refinements(
-> instance_refinements=[
-> (['reg'], Tps561201),
-> ])
-> ```
->
-### Deeper Inspection
-Here, we were able to place down a buck converter - a non-trivial subcircuit - with just one line of code.
-A major benefit of this HDL-based design flow is the design automation that is encapsulated in the libraries.
-The library writer has done the hard work of figuring out how to size the capacitors and inductors, and wrapped it into this neat `VoltageRegulator` block.
+## Adding a Switch Matrix Generator
+__Now, we'll add a 3x2 switch matrix with just a few lines of code, this is where generators really shine!__
-You may want to inspect the results.
-In the IDE, you can hover over the output line and see that it is at 3.3v ±4.47%.
-Why?
-You can dig into the converter subcircuit by double-clicking on it:
-
+**Make these changes** to the `contents` method:
+```diff
+ def contents(self) -> None:
+ super().contents()
+ self.mcu = self.Block(Xiao_Rp2040())
+ self.led = self.Block(IndicatorLed())
+ self.connect(self.mcu.gnd, self.led.gnd)
+ self.connect(self.mcu.gpio.request('led'), self.led.signal)
+
++ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
++ self.connect(self.sw.cols, self.mcu.gpio.request_vector('cols'))
++ self.connect(self.sw.rows, self.mcu.gpio.request_vector('rows'))
+```
-The implementation uses a feedback voltage divider, and if you mouseover this it will show the generated ratio of 0.23.
-The converter's output voltage reflects the actual expected output voltage, accounting for resistor tolerance and the chip's feedback reference tolerance.
-
+Array-array connect operations are not supported with graphical edit actions.
-Similarly, mousing over the other components like the resistors and capacitors shows their details.
+`SwitchMatrix` is a generator block that takes the number of columns (width) and rows (height) as parameters and generates the switch matrix (including diodes for multi-key detection).
+For keyboard enthusiasts, this generates COL2ROW circuits.
-To zoom out, double-click on the topmost block.
+`SwitchMatrix` has two ports, `cols` and `rows`, both of which are port arrays.
+Unlike microcontrollers, where the array is defined by its incoming connections (are elements sinks), `SwitchMatrix` port arrays are internally defined (are elements sources) based on the parameters.
-## KiCad Import
-If you have KiCad installed, you can import this full design into the layout editor. _KiCad 6.0+ is required, the netlist format is not compatible with 5.x or lower!_
+Port arrays can be connected to other arrays, forming a parallel connection.
+Here, we connect `cols` (and `rows`) to the microcontroller, using `request_vector(...)` to request a new GPIOs the size of the incoming connection.
-In the KiCad PCB Editor (layout tool), go to File > Import > Netlist..., and open the netlist file generated.
-KiCad will produce an initial placement that roughly clusters components according to their hierarchical grouping:
-
+If we load the netlist into KiCad, we get this:
+
-The block hierarchy will appear to KiCad as a sheet hierarchy.
-You can, for example, right click one of the footprints > Select > Items in Same Hierarchical Sheet, and it will select all footprints in that sub-block.
-
-As you continue to write HDL, tstamps (an unique per-footprint ID used by KiCad to match netlist components to layout footprints) are stable and allows you to update a partial layout with a new netlist.
-**tstamps are generated from Block names, so if HDL names change those footprints will not update.**
+## Abstract Parts and Refinements
+_Tactile switches are probably not what we want for a mechanical keyboard, so we'll fix that here._
-When you're ready for production, you can toggle traditional refdes generation (R1, R2, instead of current hierarchical path).
-While refdes generation is deterministic (the same design will produce the same refdes assignments), small changes to the design can significantly change refdes assignments.
+Internally, SwitchMatrix uses the abstract `Switch` block, and `SimpleBoardTop` defines a global default mapping `Switch` to a 5.1mm tactile switch.
+**Make these changes** to the `contents` method:
+```diff
+ class BlinkyExample(SimpleBoardTop):
+ def contents(self) -> None:
+ ...
+
++ def refinements(self) -> Refinements:
++ return super().refinements() + Refinements(
++ class_refinements=[
++ (Switch, KailhSocket),
++ ],
++ )
+```
-## Expanding Blinky
-**_This section goes over some additional quality-of-life features that can make the HDL more elegant and powerful, but does not introduce any significantly new constructs._**
+ Alternatively, with IDE graphical edit actions
-_In this section, we will add a tactile switch and three more LEDs._
+1. **Navigate into the switch in the switch matrix hierarchy and select it**.
+ It is currently refined to a JlcSwitch, the tactile 5.1mm switch that is part of the JLC basic parts library.
-### Adding a Switch
-A tactile switch with a digital output can be instantiated as `DigitalSwitch()` which has an `out` port.
-Using what you've learned above, instantiate a switch and connect it to the microcontroller.
+ 
+2. **In the library, search for KailhSocket**, then right-click it and select "Refine class Switch to KailhSocket"
-### Arraying LEDs
-While you certainly can copy-paste the above LED instantiation 4 times, that's no fun given that we're in a programming language with `for` loops.
+ 
-**Replace your single LED instantiation and connections with**:
-```diff
- ...
-- self.led = self.Block(IndicatorLed())
-- self.connect(self.usb.gnd, self.reg.gnd, self.mcu.gnd, self.led.gnd)
-+ self.connect(self.usb.gnd, self.reg.gnd, self.mcu.gnd)
- ...
-- self.connect(self.mcu.gpio.request('led'), self.led.signal)
- ...
-+ self.led = ElementDict[IndicatorLed]()
-+ for i in range(4):
-+ self.led[i] = self.Block(IndicatorLed())
-+ self.connect(self.mcu.gpio.request(f'led{i}'), self.led[i].signal)
-+ self.connect(self.usb.gnd, self.led[i].gnd)
-```
-
-> ElementDict creates a naming space that is an extension of the parent and is needed to give a unique, arrayed name for the LED being created.
-> The square brackets provide the type parameter for the value type, which is necessary when using static analysis tools like mypy.
+
-> The IDE cannot produce code that programmatically generates hardware.
-> In general, code offers you a lot more power than can be achieved through the GUI.
->
-> However, the visualizer will run fine.
+Refinements allow specifying, at the top level, modifications across the design hierarchy.
+Here, we override the default Switch refinement to use a mechanical keyswitch socket.
-Recompiling in the IDE yields this block diagram:
-
+If we load the netlist into KiCad, we get more reasonable components:
+
->
-> At this point, your HDL might look like...
->
-> ```python
-> class BlinkyExample(SimpleBoardTop):
-> def contents(self) -> None:
-> super().contents()
-> self.usb = self.Block(UsbCReceptacle())
-> self.reg = self.Block(VoltageRegulator(3.3*Volt(tol=0.05)))
-> self.mcu = self.Block(Stm32f103_48())
-> self.connect(self.usb.gnd, self.reg.gnd, self.mcu.gnd)
-> self.connect(self.usb.pwr, self.reg.pwr_in)
-> self.connect(self.reg.pwr_out, self.mcu.pwr)
->
-> self.sw = self.Block(DigitalSwitch())
-> self.connect(self.mcu.gpio.request('sw'), self.sw.out)
-> self.connect(self.usb.gnd, self.sw.gnd)
->
-> self.led = ElementDict[IndicatorLed]()
-> for i in range(4):
-> self.led[i] = self.Block(IndicatorLed())
-> self.connect(self.mcu.gpio.request(f'led{i}'), self.led[i].signal)
-> self.connect(self.usb.gnd, self.led[i].gnd)
->
-> def refinements(self) -> Refinements:
-> return super().refinements() + Refinements(
-> instance_refinements=[
-> (['reg'], Tps561201),
-> ])
-> ```
->
+After finishing this tutorial, see the [hierarchical layout tutorial](getting_started_hierarchy_layout.md) for speeding up layout using hierarchical layout replication.
+You could place and route this board now, get it fabbed, and it will (probably) work.
+This design requires footprints from the Keyswitch KiCad Library, available in the KiCad Plugin and Content Manager.
-## Syntactic sugar
-_Syntactic sugar refers to syntax within programming languages that makes things more usable._
-_In this section, we clean up the prior example by consolidating some repetitive connections through implicit scopes._
-> Similar to arraying LEDs, the IDE does not have any special support for generating these operations.
-> However, the visualizer will continue to run fine.
+## Towards a Discrete Microcontroller
+_So far, we have used a microcontroller development board, which while convenient, may not be the best choice from a cost and size perspective. Here, we'll replace it with a discrete chip and supporting component._
-### Implicit Connections
-Because some connections (like power and ground) are very common, the HDL provides the idea of an implicit connection scope to automatically make them when a block is instantiated.
-The implicit scope defines the connections to make and the conditions for which ports to connect (through tags):
+Because blocks encapsulate their subcircuits, using a discrete microcontroller is as easy as a development board from an HDL perspective.
-```python
-with self.implicit_connect(
- ImplicitConnect(self.reg.pwr_out, [Power]),
- ImplicitConnect(self.reg.gnd, [Common]),
-) as imp:
- # any blocks here instantiated with imp.Block(...) instead of self.Block(...)
- # will have Power-tagged ports connected to self.reg.pwr_out
- # and Common-tagged ports connected to self.reg.gnd
+**Make these changes** to the design:
+```diff
+ class BlinkyExample(SimpleBoardTop):
+ def contents(self) -> None:
+ super().contents()
+- self.mcu = self.Block(Xiao_Rp2040())
++ self.mcu = self.Block(IoController())
+ self.led = self.Block(IndicatorLed())
+ self.connect(self.mcu.gnd, self.led.gnd)
+ self.connect(self.mcu.gpio.request('led'), self.led.signal)
+
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector('cols'))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector('rows'))
+
+ def refinements(self) -> Refinements:
+ return super().refinements() + Refinements(
+ class_refinements=[
++ (IoController, Stm32f103),
+ (Switch, KailhSocket),
+ ],
+ )
```
-> When blocks define ports, they can associate tags with them to specify implicit connectivity.
-> To prevent errors, all ports with tags are required to be connected, either implicitly (as in this section) or explicitly (through `connect` statements).
->
-> The most common tags are `Power` (for a general positive voltage rail) and `Common` (for ground).
+Refactoring and delete operations are not supported with graphical edit actions.
+However, you can delete lines of code, then recompile, then insert new blocks and connections using the graphical edits flow.
+
+Instead of directly replacing the microcontroller, we replace it with the `IoController` abstract block, which all microcontrollers implement.
+Then, we refine that to a specific microcontroller, here the STM32F103.
+
+If we recompile this now, it will give errors since the microcontroller has no power source.
-In our example, we can get rid of the explicit power and ground connections.
-Start by **adding an implicit scope** to tie Power-tagged ports to `self.reg.pwr_out` and Common- (ground) tagged ports to `self.reg.gnd`, and **move the microcontroller, switch, and LED into the implicit scope**
+### Adding Supporting Components
+We'll add in the USB type-C port that was previously part of the Xiao, and connect its power and data lines.
+**Make these changes** to the `contents` method:
```diff
- ...
- self.reg = self.Block(VoltageRegulator(3.3*Volt(tol=0.05)))
-
-+ with self.implicit_connect(
-+ ImplicitConnect(self.reg.pwr_out, [Power]),
-+ ImplicitConnect(self.reg.gnd, [Common]),
-+ ) as imp:
- self.mcu = self.Block(IoController())
- self.connect(self.usb.gnd, self.reg.gnd, self.mcu.gnd)
- self.connect(self.usb.pwr, self.reg.pwr_in)
- self.connect(self.reg.pwr_out, self.mcu.pwr)
+ class BlinkyExample(SimpleBoardTop):
+ def contents(self) -> None:
+ super().contents()
+
++ self.usb = self.Block(UsbCReceptacle())
+
+ self.mcu = self.Block(IoController())
++ self.connect(self.usb.gnd, self.mcu.gnd)
++ self.connect(self.usb.pwr, self.mcu.pwr)
++ self.connect(self.usb.usb, self.mcu.usb.request('usb'))
- self.sw = self.Block(DigitalSwitch())
- self.connect(self.mcu.gpio.request('sw'), self.sw.out)
- self.connect(self.usb.gnd, self.sw.gnd)
+ self.led = self.Block(IndicatorLed())
+ self.connect(self.mcu.gnd, self.led.gnd)
+ self.connect(self.mcu.gpio.request('led'), self.led.signal)
+
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector('cols'))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector('rows'))
+```
+
+We will still get errors if we recompile, since USB provides 5v, while the STM32F103 is a 3.3v part.
+We'll insert a simple linear regulator, a step-down voltage converter.
+**Make these changes** to the `contents` method:
+```diff
+ class BlinkyExample(SimpleBoardTop):
+ def contents(self) -> None:
+ super().contents()
+
+ self.usb = self.Block(UsbCReceptacle())
+
++ self.reg = self.Block(LinearRegulator(3.3*Volt(tol=0.05)))
++ self.connect(self.usb.gnd, self.reg.gnd)
++ self.connect(self.usb.pwr, self.reg.pwr_in)
+
+ self.mcu = self.Block(IoController())
+ self.connect(self.usb.gnd, self.mcu.gnd)
+- self.connect(self.usb.pwr, self.mcu.pwr)
++ self.connect(self.reg.pwr_out, self.mcu.pwr)
+ self.connect(self.usb.usb, self.mcu.usb.request('usb'))
- self.led = ElementDict[IndicatorLed]()
- for i in range(4):
- self.led[i] = self.Block(IndicatorLed())
- self.connect(self.mcu.gpio.request(f'led{i}'), self.led[i].signal)
- self.connect(self.usb.gnd, self.led[i].gnd)
+ self.led = self.Block(IndicatorLed())
+ self.connect(self.mcu.gnd, self.led.gnd)
+ self.connect(self.mcu.gpio.request('led'), self.led.signal)
+
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector('cols'))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector('rows'))
```
-Inside an implicit connection block, only blocks instantiated with `imp.Block(...)` have implicit connections made.
-**Replace the microcontroller, switch, and LED `self.Block(...)` instantiations with `imp.Block(...)` instantiations**, then **delete the redundant power and ground connections** (remember that the USB to regulator ground would need to be separated out):
+Once we recompile, it should complete with no errors.
+
+If we load the netlist into KiCad, we get the discrete microcontroller and its bundles of capacitors.
+Because we used USB, the microcontroller subcircuit also automatically generated a crystal to meet USB timing requirements.
+
+
+After finishing this tutorial, see the [hierarchical layout tutorial](getting_started_hierarchy_layout.md) for speeding up layout by loading an existing microcontroller block layout.
+
+## Adding addressable RGBs with Mixins
+Electronics sometimes have variations-on-a-theme with a common base, for example adding addressable RGBs to the switch matrix without redefining it completely.
+This is supported through **mixins**.
+
+**Make these changes** to the `contents` method:
```diff
- ...
- self.reg = self.Block(VoltageRegulator(3.3*Volt(tol=0.05)))
-+ self.connect(self.usb.gnd, self.reg.gnd)
-+ self.connect(self.usb.pwr, self.reg.pwr_in)
- with self.implicit_connect(
- ImplicitConnect(self.reg.pwr_out, [Power]),
- ImplicitConnect(self.reg.gnd, [Common]),
- ) as imp:
-- self.mcu = self.Block(IoController())
-+ self.mcu = imp.Block(IoController())
-- self.connect(self.usb.gnd, self.reg.gnd, self.mcu.gnd)
-- self.connect(self.usb.pwr, self.reg.pwr_in)
-- self.connect(self.reg.pwr_out, self.mcu.pwr)
+ class BlinkyExample(SimpleBoardTop):
+ def contents(self) -> None:
+ super().contents()
+
+ self.usb = self.Block(UsbCReceptacle())
+
+ self.reg = self.Block(LinearRegulator(3.3*Volt(tol=0.05)))
+ self.connect(self.usb.gnd, self.reg.gnd)
+ self.connect(self.usb.pwr, self.reg.pwr_in)
+
+ self.mcu = self.Block(IoController())
+ self.connect(self.usb.gnd, self.mcu.gnd)
+ self.connect(self.reg.pwr_out, self.mcu.pwr)
+ self.connect(self.usb.usb, self.mcu.usb.request('usb'))
-- self.sw = self.Block(DigitalSwitch())
-+ self.sw = imp.Block(DigitalSwitch())
- self.connect(self.mcu.gpio.request('sw'), self.sw.out)
-- self.connect(self.usb.gnd, self.sw.gnd)
+ self.led = self.Block(IndicatorLed())
+ self.connect(self.mcu.gnd, self.led.gnd)
+ self.connect(self.mcu.gpio.request('led'), self.led.signal)
+
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector('cols'))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector('rows'))
+
++ sw_npx = self.sw.with_mixin(SwitchMatrixNeopixels(npx_order="row_snake"))
++ self.connect(self.usb.gnd, sw_npx.npx_gnd)
++ self.connect(self.usb.pwr, sw_npx.npx_pwr)
- self.led = ElementDict[IndicatorLed]()
- for i in range(4):
-- self.led[i] = self.Block(IndicatorLed())
-+ self.led[i] = imp.Block(IndicatorLed())
- self.connect(self.mcu.gpio.request(f'led{i}'), self.led[i].signal)
-- self.connect(self.usb.gnd, self.led[i].gnd)
-```
++ self.npx_shift = self.Block(L74Ahct1g125())
++ self.connect(self.usb.gnd, self.npx_shift.gnd)
++ self.connect(self.usb.pwr, self.npx_shift.pwr)
++ self.connect(self.mcu.gpio.request('npx'), self.npx_shift.input)
++ self.connect(self.npx_shift.output, sw_npx.npx_din)
->
-> At this point, your HDL might look like...
->
-> ```python
-> class BlinkyExample(SimpleBoardTop):
-> def contents(self) -> None:
-> super().contents()
-> self.usb = self.Block(UsbCReceptacle())
-> self.reg = self.Block(VoltageRegulator(3.3*Volt(tol=0.05)))
-> self.connect(self.usb.gnd, self.reg.gnd)
-> self.connect(self.usb.pwr, self.reg.pwr_in)
->
-> with self.implicit_connect(
-> ImplicitConnect(self.reg.pwr_out, [Power]),
-> ImplicitConnect(self.reg.gnd, [Common]),
-> ) as imp:
-> self.mcu = imp.Block(Stm32f103_48())
->
-> self.sw = imp.Block(DigitalSwitch())
-> self.connect(self.mcu.gpio.request('sw'), self.sw.out)
->
-> self.led = ElementDict[IndicatorLed]()
-> for i in range(4):
-> self.led[i] = imp.Block(IndicatorLed())
-> self.connect(self.mcu.gpio.request(f'led{i}'), self.led[i].signal)
->
-> def refinements(self) -> Refinements:
-> return super().refinements() + Refinements(
-> instance_refinements=[
-> (['reg'], Tps561201),
-> ])
-> ```
->
-
-### Chain Connects
-Another shorthand is for chained connections of blocks with inline declarations of blocks.
-We could, **inside the implicit scope, replace the LED and switch instantiations and connections, with**:
-```diff
- ...
-- self.sw = imp.Block(DigitalSwitch())
-- self.connect(self.mcu.gpio.request('sw'), self.sw.out)
-+ (self.sw, ), _ = self.chain(imp.Block(DigitalSwitch()), self.mcu.gpio.request('sw'))
- ...
- for i in range(4):
-- self.led[i] = imp.Block(IndicatorLed())
-- self.connect(self.mcu.gpio.request(f'led{i}'), self.led[i].signal)
-+ (self.led[i], ), _ = self.chain(self.mcu.gpio.request(f'led{i}'), imp.Block(IndicatorLed()))
+ def refinements(self) -> Refinements:
+ return super().refinements() + Refinements(
+ class_refinements=[
+ (IoController, Stm32f103),
+ (Switch, KailhSocket),
++ (Neopixel, Ws2812c_2020),
+ ],
+ )
```
-`chain` takes blocks and ports as arguments, from left to right as inputs to outputs, and does `connects` to chain them together.
-The first argument is treated as the initial input, and the last element is treated as the final output.
-Blocks in the middle (if any) have the previous link connected to their `Input`-tagged ports and present their `Output`-tagged ports for the next element, or attach their `InOut`-tagged port to the previous link which is also presented to the next element.
-Only one pin per block may be tagged with `Input`, `Output`, and `InOut`.
+Mixins are not supported with graphical edit actions.
-`chain` returns a chain object, which can be unpacked into a tuple of blocks that are part of the chain and the chain object itself.
-The tuple of blocks can be used to name inline blocks declared in the chain (which is done in the blinky example to name the LED and switch), and the chain object can be used to name the links.
+Mixins are a way to require additional functionality (including ports and parameters) on a base abstract block.
-> As a more complicated example, running `self.chain(Port1, Block1, Block2, Block3, Block4)` (with the block definitions written as are shown below) would produce this block diagram:
-> 
-> The chain starts at Port1.
-> Block1 and Block2 have both an Input and Output port, so the chain goes "through" those blocks.
-> Block3 has an InOut port, so it is attached to the previous connection, but the chain goes not go "through" it.
-> Because Block4 is the last in the chain, it only needs an Input port.
+Mixins are also used elsewhere, such as adding optional IO types to IoController (like CAN or the requirement for onboard WiFi) or adding requiring a switch port on a rotary encoder.
->
-> At this point, your HDL might look like...
->
-> ```python
-> class BlinkyExample(SimpleBoardTop):
-> def contents(self) -> None:
-> super().contents()
-> self.usb = self.Block(UsbCReceptacle())
-> self.reg = self.Block(VoltageRegulator(3.3*Volt(tol=0.05)))
-> self.connect(self.usb.gnd, self.reg.gnd)
-> self.connect(self.usb.pwr, self.reg.pwr_in)
->
-> with self.implicit_connect(
-> ImplicitConnect(self.reg.pwr_out, [Power]),
-> ImplicitConnect(self.reg.gnd, [Common]),
-> ) as imp:
-> self.mcu = imp.Block(Stm32f103_48())
->
-> (self.sw, ), _ = self.chain(imp.Block(DigitalSwitch()), self.mcu.gpio.request('sw'))
->
-> self.led = ElementDict[IndicatorLed]()
-> for i in range(4):
-> (self.led[i], ), _ = self.chain(self.mcu.gpio.request(f'led{i}'), imp.Block(IndicatorLed()))
->
-> def refinements(self) -> Refinements:
-> return super().refinements() + Refinements(
-> instance_refinements=[
-> (['reg'], Tps561201),
-> ])
-> ```
->
+We have also added a buffer (`L74Ahct1g125`) to shift the 3.3v logic level of the microcontroller to the higher data voltage required by the addressable RGBs.
+The RGBs datasheet defines their input thresholds as incompatible with 3.3v and this will generate ERC errors without the buffer.
+Go ahead and try it!
+We also add a refinement to use the `Ws2812c_2020`, an 0808-size addressable RGB LED.
+The `SK6812-Mini-E`, a through-board addressable LED commonly used on mechanical keyboards, is also part of the HDL library, but requires the [examples footprint library](examples/edg.pretty).
-## Changing the Microcontroller
-_Finally, let's put the finishing touches on this design by changing the microcontroller and specifying a pin assignment._
-### Using the IoController Abstract Class
-Like the `VoltageRegulator`, there is actually an abstract class for microcontrollers, `IoController`.
-`Stm32f103_48` extends this class and adheres to its interface, so we can **change the type of `mcu` to `IoController`**, then **add a refinement to `Stm32f103_48`**.
+## Implicit Connections
+_The code is starting to get a bit long and tedious. We'll refactor that using implicit scopes, a syntactic sugar construct, to make it shorter and more readable._
-```diff
- class BlinkyExample(SimpleBoardTop):
+**Replace** the `contents` method:
+```python
+class BlinkyExample(SimpleBoardTop):
def contents(self) -> None:
- ...
- with self.implicit_connect(
- ...
- ) as imp:
-- self.mcu = imp.Block(Stm32f103_48())
-+ self.mcu = imp.Block(IoController())
-
- def refinements(self) -> Refinements:
- return super().refinements() + Refinements(
- instance_refinements=[
- ...
-+ (['mcu'], Stm32f103_48),
- ])
+ super().contents()
+
+ self.usb = self.Block(UsbCReceptacle())
+
+ self.reg = self.Block(LinearRegulator(3.3*Volt(tol=0.05)))
+ self.connect(self.usb.gnd, self.reg.gnd)
+ self.connect(self.usb.pwr, self.reg.pwr_in)
+
+ with self.implicit_connect(
+ ImplicitConnect(self.reg.pwr_out, [Power]),
+ ImplicitConnect(self.reg.gnd, [Common]),
+ ) as imp:
+ self.mcu = imp.Block(IoController())
+ self.connect(self.usb.usb, self.mcu.usb.request('usb'))
+
+ self.led = imp.Block(IndicatorLed())
+ self.connect(self.mcu.gpio.request('led'), self.led.signal)
+
+ self.sw = self.Block(SwitchMatrix(ncols=2, nrows=3))
+ self.connect(self.sw.cols, self.mcu.gpio.request_vector('cols'))
+ self.connect(self.sw.rows, self.mcu.gpio.request_vector('rows'))
+
+ with self.implicit_connect(
+ ImplicitConnect(self.usb.pwr, [Power]),
+ ImplicitConnect(self.usb.gnd, [Common]),
+ ) as imp:
+ sw_npx = self.sw.with_mixin(SwitchMatrixNeopixels(npx_order="row_snake"))
+ self.connect(self.usb.gnd, sw_npx.npx_gnd)
+ self.connect(self.usb.pwr, sw_npx.npx_pwr)
+
+ self.npx_shift = imp.Block(L74Ahct1g125())
+ self.connect(self.mcu.gpio.request('npx'), self.npx_shift.input)
+ self.connect(self.npx_shift.output, sw_npx.npx_din)
```
-> `IoController` defines an interface of a power and ground pin, then an array of common IOs including GPIO, ADC, SPI, I2C, and UART.
-> Not all devices that implement it have all those capabilities (or the number of IOs requested), in which case they will fail with a compilation error.
-> This interface generalizes beyond microcontrollers to anything that can control IOs, such as FPGAs.
+Refactoring operations are not supported with graphical edit actions.
+The IDE is not implicit-scope-aware for graphical edit actions.
-With the abstract block in place, we can now easily change it to something else.
-Perhaps we want a microcontroller with built-in wifi, so
-**change the refinement to an `Esp32_Wroom_32`**.
+The implicit scope defines the connections to make and the conditions for which ports to connect (through tags):
+
+```python
+with self.implicit_connect(
+ ImplicitConnect(self.reg.pwr_out, [Power]),
+ ImplicitConnect(self.reg.gnd, [Common]),
+) as imp:
+ # any blocks here instantiated with imp.Block(...) instead of self.Block(...)
+ # will have Power-tagged ports connected to self.reg.pwr_out
+ # and Common-tagged ports connected to self.reg.gnd
+```
+
+> When blocks define ports, they can associate tags with them to specify implicit connectivity.
+> To prevent errors, all ports with tags are required to be connected, either implicitly (as in this section) or explicitly (through `connect` statements).
+>
+> The most common tags are `Power` (for a general positive voltage rail) and `Common` (for ground).
+
+Inside an implicit connection block, only blocks instantiated with `imp.Block(...)` have implicit connections made.
+
+There is also a more complex `self.chain(...)` construct allowing for very compact HDL, detailed in the [reference document](reference.md).
-> If using the IDE, refinements can be changed the same way they are defined.
-> The IDE will update the existing refinement instead of inserting a new entry.
### Explicit Pin Assignments
-While `IoController` can assign peripherals like SPI pins according to the capabilities of each chip, it does not have access to layout data to do physically-based pin assignment.
-However, it does define a `pin_assigns` parameter (as an array-of-strings) which allows specifying a pin number (on the footprint) or pin name (eg, `PC_13` - format specific to each microcontroller) for each requested pin.
+While `IoController` automatically assigns IO pinnings according to the capabilities of each chip, it does not have access to layout data to do physically-based pin assignment.
+However, it does define a `pin_assigns` parameter (as an array-of-strings) which allows specifying a pin number (on the footprint) or pin name (eg, `GPIO3` - format specific to each microcontroller) for each requested pin.
We can also force parameter values through the refinements system, using `instance_values`.
-Let's arbitrarily choose pins 26-29 for the LEDs.
-**Add a pin assignment for the ESP32 in the refinements section**:
+Let's arbitrarily choose sequential pins:
+**Add a pin assignment for the STM32 in the refinements section**:
```diff
class BlinkyExample(SimpleBoardTop):
- def refinements(self) -> Refinements:
- return super().refinements() + Refinements(
- instance_refinements=[
+ def contents(self) -> None:
...
-+ ],
-+ instance_values=[
-+ (['mcu', 'pin_assigns'], [
-+ 'led0=26',
-+ 'led1=27',
-+ 'led2=28',
-+ 'led3=29',
-+ ])
- ])
-
+
+ def refinements(self) -> Refinements:
+ return super().refinements() + Refinements(
+ ...
++ instance_values=[
++ (['mcu', 'pin_assigns'], [
++ 'led=10',
++ 'cols_0=16',
++ 'cols_1=17',
++ 'rows_0=18',
++ 'rows_1=19',
++ 'rows_2=20',
++ ])
+ ])
```
->
-> At this point, your HDL might look like...
->
-> ```python
-> class BlinkyExample(SimpleBoardTop):
-> def contents(self) -> None:
-> super().contents()
-> self.usb = self.Block(UsbCReceptacle())
-> self.reg = self.Block(VoltageRegulator(3.3*Volt(tol=0.05)))
-> self.connect(self.usb.gnd, self.reg.gnd)
-> self.connect(self.usb.pwr, self.reg.pwr_in)
->
-> with self.implicit_connect(
-> ImplicitConnect(self.reg.pwr_out, [Power]),
-> ImplicitConnect(self.reg.gnd, [Common]),
-> ) as imp:
-> self.mcu = imp.Block(IoController())
->
-> (self.sw, ), _ = self.chain(imp.Block(DigitalSwitch()), self.mcu.gpio.request('sw'))
->
-> self.led = ElementDict[IndicatorLed]()
-> for i in range(4):
-> (self.led[i], ), _ = self.chain(self.mcu.gpio.request(f'led{i}'), imp.Block(IndicatorLed()))
->
-> def refinements(self) -> Refinements:
-> return super().refinements() + Refinements(
-> instance_refinements=[
-> (['reg'], Tps561201),
-> (['mcu'], Esp32_Wroom_32),
-> ],
-> instance_values=[
-> (['mcu', 'pin_assigns'], [
-> 'led0=26',
-> 'led1=27',
-> 'led2=28',
-> 'led3=29',
-> ])
-> ])
-> ```
->
-
-And that's it for system-level (top-level, as opposed to library construction) PCB design!
-You can import the netlist into KiCad if you'd like.
-Good luck with building PCBs!
-
-
-## Defining Library Parts
-Continue to [the next part of the tutorial](getting_started_schimport.md) on defining a library Block with a KiCad schematic.
+Each pin assignment entry is specified as `pin=num`.
+`pin` is the name of the requested pin (the `request(...)` argument for single element requests, or the argument plus a `_index` for vector requests).
+
+
+## Next: Hierarchical Layout
+Continue to the [hierarchical layout tutorial](getting_started_hierarchy_layout.md) for importing the generated netlist into KiCad PCB layout and using the hierarchical structure to speed up layout through reuse.
+
+Or, continue to [the library block definition tutorial using KiCad schematic import](getting_started_schimport.md).
+
### Additional Resources
-If you want to some more complex examples of boards designed in this HDL, check out:
-- [LED Matrix](examples/test_ledmatrix.py): a charlieplexed LED matrix.
- Ignore the implementation of the charlieplexing LED matrix library block for now, just look at the top-leve design.
+For some more complex examples of boards designed in this HDL, check out:
+- [Keyboard](examples/test_keyboard.py): the fabbed-out version of this example, with a few more features and different choices of parts.
+- [LED Matrix](examples/test_ledmatrix.py): a charlieplexed LED matrix, using a parameterized charlieplexing LED array generator.
+- [Seven Segment Clock](examples/test_seven_segment.py): an IoT (ESP32S3) seven-segment LED clock, using individually-addressable RGBs for each segment.
- [Simon Game](examples/test_simon.py): an implementation of the Simon electronic game, that uses 12v dome buttons and includes the needed power conversion circuitry.
-- [CANdapter](examples/test_can_adapter.py): an USB to isolated CAN adapter, with a bunch of onboard LEDs and an LCD display.
diff --git a/getting_started_advanced.md b/getting_started_advanced.md
index c3a87aaa4..73604eeba 100644
--- a/getting_started_advanced.md
+++ b/getting_started_advanced.md
@@ -1,7 +1,14 @@
# Getting Started Tutorial: Advanced Library Construction
-_In this section, we will convert the four-LED array into an n-LED array block and go through the advanced constructs of generators and port arrays._
+_In this section, we will build a re-usable n-LED array Block, going through the advanced constructs of generators and port arrays._
-As a refresher, in the first part of the getting started tutorial, we dropped 4 LEDs directly in our top-level design sign with a `for` loop in:
+> The IDE does not support graphical operations for programmatic circuit construction.
+> However, you can continue to use the IDE for visualization.
+
+
+## The Naive (but Broken) Approach
+
+The HDL provides the ElementDict construct for giving unique names to a dynamically-sized array of blocks.
+An array of LEDs looks like:
```python
self.led = ElementDict[IndicatorLed]()
for i in range(4):
@@ -9,14 +16,6 @@ for i in range(4):
...
```
-However, arrays of LEDs are common enough that they would make sense as a library block, and it would condense these three lines of code here into just one.
-
-> The IDE does not support graphical operations for programmatic constructing circuits.
-> However, you can continue to use the IDE for visualization.
-
-
-## The Naive (but Broken) Approach
-
You might be tempted to drop the above into a Block and pipe the `int` through as a constructor argument:
```python
# DON'T DO THIS - THIS WON'T WORK
@@ -57,23 +56,18 @@ First, we'll need to define the block such that it can take a parameter.
This is actually only slight twist on the naive approach:
```python
class LedArray(Block):
- @init_in_parent
def __init__(self, count: IntLike) -> None:
super().__init__()
```
Instead of the constructor argument being a Python type that defines a value like `int`, we use an expression-type.
This defines the type of the parameter being passed but not the value.
-`@init_in_parent` is needed whenever a Block defines constructor parameters.
> The expression type is a way to refer to the parameter but without giving it a concrete value.
> This is needed since the value is resolved in the compiler and therefore not available in the HDL to the constructor.
>
> Note that the type is not `IntExpr`, but `IntLike`, which also includes `int`.
> This allows calling the constructor with an `int` value directly, if we just have a static parameterization.
-> However, because of the required `@init_in_parent`, the actual value seem by the constructor will be a new `IntExpr`.
->
-> `@init_in_parent` does some processing on the function itself, for example inspecting the constructor argument list and turning those into parameters, and translating the values passed in from the constructor call into references to the block's own parameters.
### Port Arrays - Definition
@@ -110,15 +104,20 @@ class LedArray(GeneratorBlock):
super().__init__()
self.ios = self.Port(Vector(DigitalSink.empty()), [Input])
self.gnd = self.Port(Ground.empty(), [Common])
- self.generator(self.generate, count)
+ self.count = self.ArgParameter(count)
+ self.generator_param(self.count)
- def generate(self, count: int) -> None:
+ def generate(self) -> None:
+ super().generate()
...
```
> While here we use generators as a way to get a concrete value for circuit generation (the LED count), generators can also be used to do calculations beyond the operations available with the parameters.
> For example, while we can add two `IntExpr`s (which produces another `IntExpr`), something more complex like square root is not provided.
-> For those cases, use a generator to get the parameter's value, where you have access to the full power of Python.
+> For those cases, use a generator to get the parameter's concrete value, where you have access to the full power of Python.
+>
+> Generator parameters must be explicitly defined using `self.generator_param(...)`.
+> Within `generate`, you can get the concrete value of a generator parameter using `self.get(...)`.
### Port Arrays - Internal
So far, the port array is still empty, so we must define its elements.
@@ -126,8 +125,9 @@ With the count available as an int, we can use the `for` loop structure from bef
```python
class LedArray(GeneratorBlock):
...
- def generate(self, count: int) -> None:
- for i in range(count):
+ def generate(self) -> None:
+ super().generate()
+ for i in range(self.get(self.count)):
self.ios.append_elt(DigitalSink.empty())
...
```
@@ -158,11 +158,13 @@ Instantiate the LEDs and connect them to the IO pin and ground as needed.
> super().__init__()
> self.ios = self.Port(Vector(DigitalSink.empty()), [Input])
> self.gnd = self.Port(Ground.empty(), [Common])
-> self.generator(self.generate, count)
+> self.count = self.ArgParameter(count)
+> self.generator_param(self.count)
>
-> def generate(self, count: int) -> None:
+> def generate(self) -> None:
+> super().generate()
> self.led = ElementDict[IndicatorLed]()
-> for i in range(count):
+> for i in range(self.get(self.count)):
> io = self.ios.append_elt(DigitalSink.empty())
> self.led[i] = self.Block(IndicatorLed())
> self.connect(io, self.led[i].signal)
@@ -186,18 +188,6 @@ class BlinkyExample(SimpleBoardTop):
self.connect(self.mcu.gpio.request_vector('led'), self.led.ios)
```
-Or, since we added the implicit tag `Input` to the IOs port, we can use `chain` to combine the instantiation and connection:
-```python
-class BlinkyExample(SimpleBoardTop):
- def contents(self) -> None:
- ...
- with self.implicit_connect(
- ...
- ) as imp:
- ...
- (self.led, ), _ = self.chain(self.mcu.gpio.request_vector('led'), imp.Block(LedArray(4)))
-```
-
As shown above, port arrays can be directly connected together to make parallel connections, and we can request sub-arrays from a port array.
When connecting port arrays together, exactly one must define the array width, which is automatically propagated to the others in the connection.
As a result, the single LED count parameter also drives the connection width and the pins requested from the microcontroller.
@@ -232,52 +222,6 @@ class BlinkyExample(SimpleBoardTop):
```
->
-> At this point, your HDL might look like...
->
-> ```python
-> class BlinkyExample(SimpleBoardTop):
-> def contents(self) -> None:
-> super().contents()
-> self.usb = self.Block(UsbCReceptacle())
-> self.buck = self.Block(BuckConverter(3.3*Volt(tol=0.05)))
-> self.connect(self.usb.gnd, self.buck.gnd)
-> self.connect(self.usb.pwr, self.buck.pwr_in)
->
-> with self.implicit_connect(
-> ImplicitConnect(self.buck.pwr_out, [Power]),
-> ImplicitConnect(self.buck.gnd, [Common]),
-> ) as imp:
-> self.mcu = imp.Block(IoController())
->
-> (self.sw, ), _ = self.chain(imp.Block(DigitalSwitch()), self.mcu.gpio.request('sw'))
->
-> (self.led, ), _ = self.chain(self.mcu.gpio.request_vector('led'), imp.Block(LedArray(4)))
->
-> # optionally, you may have also instantiated your magnetic sensor
->
-> def refinements(self) -> Refinements:
-> return super().refinements() + Refinements(
-> instance_refinements=[
-> (['buck'], Tps561201),
-> (['mcu'], Esp32_Wroom_32),
-> ],
-> instance_values=[
-> (['mcu', 'pin_assigns'], [
-> 'led_0=26',
-> 'led_1=27',
-> 'led_2=28',
-> 'led_3=29',
-> ])
-> ])
-> ```
->
-
-
-## Board Optimization
-
-Continue to [the next part of the tutorial](getting_started_optimization.md) on optimizing the board using packed components.
-
### Additional Resources
Check out these examples of generators:
- [Charlieplexing LED generator](examples/test_ledmatrix.py): a much more advanced version of the LED array that minimizes IO pins to drive LEDs, by allowing one IO pin to drive both a column and row of LEDs.
diff --git a/getting_started_hierarchy_layout.md b/getting_started_hierarchy_layout.md
new file mode 100644
index 000000000..a5ca9cd63
--- /dev/null
+++ b/getting_started_hierarchy_layout.md
@@ -0,0 +1,177 @@
+# Hierarchical Layout Tutorial
+
+Hierarchical layout tips and tricks, using the macropad circuit from the [introductory tutorial](getting-started.md) as an example.
+
+This assumes familiarity with KiCad PCB layout.
+If you're new to KiCad, there are plenty of excellent tutorials online, go through one of those, then come back.
+
+
+## Requirements
+
+The example uses the Keyswitch Kicad Library, available on the KiCad Plugin and Content Manager.
+
+
+
+For hierarchical loading and replication, you have a few options:
+
+- Use the Sublayout plugin (KiCad 8+), also available on the KiCad Plugin and Content Manager.
+
+ 
+ - This was designed to work with netlist-based flows and automatically detects grouping based on hierarchy data in the netlist.
+ - This works with KiCad 10+, but zones will not be replicated.
+- Use KiCad's native design blocks feature (KiCad 10+).
+ - This tutorial covers hierarchical replication, but hierarchical loading is not covered.
+ - The design blocks flow is heavyweight (requires local library creation) and (at least for netlist driven flows, like this one) requires you to group footprints within a block manually.
+- Use KiCad's Multi-Channel and Placement Rule Area feature.
+ - This tutorial does not cover this.
+ - This seems brittle to other traces overlapping the placement rule area and does not seem grouping-aware.
+
+> ⚠️ Replicate Layout, Save/Restore Layout, and HierarchicalPCB will **NOT work**.
+> These require and validate against schematic files, which are not generated in this HDL flow.
+
+
+## Netlist Import
+
+1. Start the PCB Editor (standalone)
+
+ 
+2. Open Import Netlist from the toolbar:
+
+ 
+ > If you launched the PCB Editor from a KiCad project, this will not be on the toolbar (you will have "Update PCB from Schematic" instead).
+ > You can still access it from the menu: File > Import > Netlist...
+3. Select the generated netlist file, likely `BlinkyExample/BlinkyExample.net` in wherever you ran your HDL script, then click Load and Test Netlist.
+ It should load with no errors, but there may be some warnings about missing pins.
+
+ 
+
+ > In KiCad 10, uncheck "Group footprints based on symbol group".
+ > This ignores hierarchical data in the netlist and removes footprint grouping.
+
+4. Click "Update PCB" to place the components on the board.
+ Drop them anywhere for now.
+
+ 
+ - This may give you error(s) about missing pins, which you can ignore.
+
+
+## Switch Matrix Placement and Replication
+
+The switch, diode, LED, and LED capacitor are all part of a SwitchCell hierarchical sheet in the netlist, which allows the layout to be replicated for each switch.
+
+Start by arranging all the switch footprints in a grid.
+This can be done by selecting all the switch footprints, then right-clicking and selecting Create from Selection > Create Array...
+Set the grid array size (here, 2x3 as consistent with the HDL parameters) and spacing (19.05mm typical for mechanical keyboard switch spacing).
+Set Item Source to Arrange selection (move the footprints, instead of creating new ones), and the Grid Position to Source items remain in place.
+
+
+
+
+
+You may need to swap components to get the right ordering.
+
+
+
+> You may also use external plugins to arrange the footprints.
+
+Then, lay out a single switch cell, including the switch, diode, LED, LED capacitor, and traces.
+Here is an example layout:
+
+
+
+In this layout, I've allocated the top layer to run horizontal traces (rows and LEDs) and the bottom layer to run vertical traces (columns).
+
+> Tip: use the footprint pathname on the F.Fab layer to find the footprints that are part of the same block.
+> For example, find all the footprints starting with `sw.sw[0,0]`.
+
+> Right-click > Select > Items in Same Hierarchical Sheet only selects items _strictly_ in the same sheet, not recursively.
+> For example, selecting the hierarchical sheet for the switch includes the diode, but not the LED or LED capacitor, which are in a sub-sheet.
+
+Group the switch cell footprints: select them, right click, Grouping > Group Items.
+
+
+
+### Option 1: Sublayout Plugin
+
+1. Enter into the switch cell footprint group you just created and select the switch.
+
+ 
+
+ The group defines the objects to replicate, while the selected footprint defines the _anchor footprint_, the matching component in the other sheets that other footprints are placed around.
+
+2. Run the Sublayout plugin and select all the instances (bottom list box).
+
+ 
+
+ The Sublayout plugin automatically detects all instances of the same hierarchical sheet (HDL block, by name) and lists them.
+
+3. Press Replicate, and the plugin will replicate the layout, including footprint positions, traces, and groupings.
+
+ 
+
+4. You can re-replicate if you change the switch cell layout, it will update the other instances including clearing out the previous traces.
+
+### Option 2: KiCad Design Blocks
+
+_KiCad 10+ required._
+
+1. Open the Design Blocks panel: main menu > View > Panels > Design Blocks.
+
+ 
+2. If you don't already have a testing library: create a new library.
+ Right click > New Library, and select a location for it.
+
+ 
+3. Select the switch cell footprint group, and save it.
+ Right click on the design blocks library, > Save Selection as Design Block...
+
+ 
+
+ It should show up as a new entry in the library:
+
+ 
+4. If you inspect the group properties of the reference layout (select group, `E` hotkey), you'll see the Library link.
+ This links the group to the design block.
+
+ 
+5. Group the other switch cells footprints (switches, diodes, LEDs, capacitors), one group per switch cell instance.
+ For each group, set the library link to the same as the reference group.
+
+ 
+6. To replicate: right-click the group and select Apply Design Block Layout.
+
+ 
+
+ > This may shift the position of footprints and you may need to reposition the group.
+
+### Snaking
+
+The LEDs are connected in a snaking pattern, which means every other row reverses the LED connection order.
+You may want to have a different switch cell for the odd rows, which flips the LED rotation so data flows from right-to-left.
+
+
+## Loading a Stock Microcontroller Layout
+
+_The tutorial only covers using the Sublayout plugin._
+_Some pre-routed blocks are provided in [examples/prerouted_blocks](examples/prerouted_blocks) which are Sublayout-compatible .kicad_pcb files._
+_You can open those files as boards to inspect the layout snippet._
+
+1. Select the STM32F103 footprint and run the Sublayout plugin.
+ 
+
+2. Press Restore and select the pre-routed block, here [examples/prerouted_blocks/Stm32f103.kicad_pcb](examples/prerouted_blocks/Stm32f103.kicad_pcb).
+ It will complete with warnings about missing footprints (R3, the USB pullup resistor, and J2, the programming header) which are not included in the prerouted block.
+ However, it will place the rest of your components including the crystal oscillator.
+
+ 
+
+> Footprints are positioned exactly as they appear in the prerouted block, even if they are different footprints (e.g., using 1206 instead of 0603, or choosing a different crystal package).
+> The Sublayout plugin allows restoring a prerouted block with different footprints, but you will probably need to do some fix-up work.
+> In this case, consider it as a first-pass layout.
+
+
+## Finishing the Board
+
+With the switch matrix and microcontroller done, that's a huge chunk of the work of laying out this board.
+
+You will still need to place and route the USB connector (including the CC pulldown resistors for passive power delivery negotiation), programming header, voltage regulator, and debugging LED.
diff --git a/getting_started_library.md b/getting_started_library.md
index 402153b9c..9e5e1809f 100644
--- a/getting_started_library.md
+++ b/getting_started_library.md
@@ -6,6 +6,13 @@ _We do this in two stages, first defining a `FootprintBlock` for the chip itself
> In schematic terms, think of `FootprintBlock` as analogous to a schematic symbol, while `Block` is closer to a hierarchy sheet.
+### Dragons be Ahead
+Library block definition is a less polished and more complex experience than building boards using existing library blocks.
+
+This tutorial only walks through the basics and constructs.
+The next best place is to look through the parts libraries for how these work in practice.
+
+
## Creating a part
Block definitions correspond to classes, and a new block can be defined by creating a new class.
**Create the class for `Lf21215tmr_Device`** by inserting:
@@ -20,14 +27,7 @@ class Lf21215tmr_Device(FootprintBlock):
# block implementation (subblocks, internal connections, footprint) here
```
-> While you can edit block definitions in the IDE, it must be part of a valid top-level design.
-> It currently is not possible to set a non-BoardTop block as the top level.
-> However, you can instantiate this block in your design, then double-click into it, and edit from there.
->
-> If you want to instantiate the new block from the GUI, you will need to recompile first.
->
-> IDE support for library construction is very limited.
-> You currently can't create Blocks or insert Ports from the IDE.
+> IDE support for graphical edit actions for library construction is very limited and is not recommended.
> `__init__` is meant to define the interface of a block (all Ports and Parameters), while `contents` is meant to define the contents of a block (largely Blocks, connections, and constraints).
> This split is not enforced (and there are cases where it is desirable to mix them into just `__init__`), but the main benefits of this are performance (avoid building the full design tree unnecessarily) and separation for readability.
@@ -76,8 +76,8 @@ For `DigitalSource`, while we could write the parameters explicitly:
```python
# DON'T DO THIS - BETTER STYLE BELOW
self.vout = self.Port(DigitalSource(
- voltage_out=(self.gnd.link().voltage.lower(),
- self.vcc.link().voltage.upper()),
+ voltage=(self.gnd.link().voltage.lower(),
+ self.vcc.link().voltage.upper()),
current_limits=(-9, 9)*mAmp,
output_thresholds=(self.gnd.link().voltage.upper() + 0.2 * Volt,
self.vcc.link().voltage.lower() - 0.3 * Volt)
@@ -149,38 +149,6 @@ class Lf21215tmr_Device(FootprintBlock):
> 3. Pinning: a dict associating a pin number to a port.
> 4. Additional data like `mfr`, `part`, and `datasheet`, which is generated in the netlist and may eventually be used for BoM generation.
-> If using the IDE, the footprint and pinning can be set from the KiCad panel.
->
-> You will need to make sure the KiCad footprint directory is properly set.
-> 1. Open up IntelliJ settings: main menu > File > Settings (Windows) or Main > Preferences (MacOS).
-> 2. In the settings panel, go to Tools > EDG IDE.
-> 3. Set the KiCad Footprint Directory.
-> - On Windows, this may be: `C:\Program Files\KiCad\6.0\share\kicad\footprints`
-> - On MacOS, this may be: `/Applications/KiCad/KiCad.app/Contents/SharedSupport/footprints`
-> 4. Restart the IDE.
->
-> To set the footprint from the GUI:
-> 1. Switch to the KiCad tab (from the Library Browser).
-> 2. Select the corresponding block in the block diagram.
-> - Remember that GUI edits are only allowed on blocks that are part of the current top-level design.
-> You may need to instantiate your block to be able to set a footprint from the GUI.
-> 3. Position the caret where you want to insert the code, such as inside `def contents()`
-> 4. Search for the footprint you want to use, in this case `Package_TO_SOT_SMD.pretty:SOT-23.kicad_mod`
-> 5. Double-click the footprint entry to insert the code.
-> - If the caret is in an existing `self.footprint` call, it will be edited to use the new footprint
-> 6. At this point, you have an empty `footprint(...)` call.
-> Fill in the manufacturer, part number, and datasheet URL fields as follows:
-> - Manufacturer: `Littelfuse`
-> - Part: `LF21215TMR`
-> - Datasheet: `https://www.littelfuse.com/~/media/electronics/datasheets/magnetic_sensors_and_reed_switches/littelfuse_tmr_switch_lf21215tmr_datasheet.pdf.pdf`
-> 7. Double-click on the footprint pins to set the ports.
-> Here, assign as follows:
-> - Pin 1: `vcc`
-> - Pin 2: `vout`
-> - Pin 3: `gnd`
->
-> 
-
>
> At this point, your HDL might look like...
>
@@ -226,10 +194,6 @@ Since this won't be a footprint, it should extend `Block` directly, and you can
> In contrast to definition we just wrote, this drops the `_Device` postfix we used to indicate a footprint block.
-
-
-
-
As indicated by the application circuit, this block would have the same ports as the device (two **VoltageSink** and one **DigitalSource**). It would have two parts, the `Lf21215tmr_Device` we just defined, and a `DecouplingCapacitor`.
**Instantiate them both, then connect them together**.
```python
@@ -240,7 +204,7 @@ class Lf21215tmr(Block):
self.cap = self.Block(DecouplingCapacitor(capacitance=0.1*uFarad(tol=0.2)))
```
-> Our design model requires a tolerance for all parts.
+> The design model requires a tolerance for all parts.
> We've chosen a default loose 20% tolerance for decoupling capacitors.
For the ports, because these are intermediate ports, they must not have parameters (be `empty()`).
@@ -345,50 +309,6 @@ class BlinkyExample(SimpleBoardTop):
self.connect(self.mcu.gpio.request('mag'), self.mag.out)
```
->
-> At this point, your HDL might look like...
->
-> ```python
-> class BlinkyExample(SimpleBoardTop):
-> def contents(self) -> None:
-> super().contents()
-> self.usb = self.Block(UsbCReceptacle())
-> self.buck = self.Block(BuckConverter(3.3*Volt(tol=0.05)))
-> self.connect(self.usb.gnd, self.buck.gnd)
-> self.connect(self.usb.pwr, self.buck.pwr_in)
->
-> with self.implicit_connect(
-> ImplicitConnect(self.buck.pwr_out, [Power]),
-> ImplicitConnect(self.buck.gnd, [Common]),
-> ) as imp:
-> self.mcu = imp.Block(IoController())
->
-> (self.sw, ), _ = self.chain(imp.Block(DigitalSwitch()), self.mcu.gpio.request('sw'))
->
-> self.led = ElementDict[IndicatorLed]()
-> for i in range(4):
-> (self.led[i], ), _ = self.chain(self.mcu.gpio.request(f'led{i}'), imp.Block(IndicatorLed()))
->
-> self.mag = imp.Block(Lf21215tmr())
-> self.connect(self.mcu.gpio.request('mag'), self.mag.out)
->
-> def refinements(self) -> Refinements:
-> return super().refinements() + Refinements(
-> instance_refinements=[
-> (['buck'], Tps561201),
-> (['mcu'], Esp32_Wroom_32),
-> ],
-> instance_values=[
-> (['mcu', 'pin_assigns'], [
-> 'led0=26',
-> 'led1=27',
-> 'led2=28',
-> 'led3=29',
-> ])
-> ])
-> ```
->
-
## Advanced Library Construction
diff --git a/getting_started_optimization.md b/getting_started_optimization.md
deleted file mode 100644
index 6f8ade281..000000000
--- a/getting_started_optimization.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# Getting Started: Optimization
-_This short tutorial puts the finishing touches on your design, by multipacking the resistors into a quad-pack device._
-
-
-## Multipack
-_Multipacking allows multiple components, potentially spread across the design hierarchy, to be combined into one component._
-_This is an optimization that may save board area and cost._
-
-### Creating Packed Blocks
-Multipacking in our HDL model is similar to refinements in that it is a top-level design operation and targets parts that can be anywhere in the design hierarchy.
-Multipacking starts by defining a PackedBlock:
-
-```python
-class BlinkyExample(SimpleBoardTop):
- ...
- def multipack(self) -> None:
- self.res_pack = self.PackedBlock(ResistorArray())
-```
-
-> The `multipack()` method is similar to `contents()` in that you can create and pack `PackedBlock`s in there, similar to how you create and connect normal `Block`s.
-> `self.PackedBlock(...)` also behaves similarly to `self.Block(...)`
-
-### Packing Blocks
-With a packed block, you can now fill its parts with blocks from across the design hierarchy:
-
-```python
-class BlinkyExample(SimpleBoardTop):
- ...
- def multipack(self) -> None:
- self.res_pack = self.PackedBlock(ResistorArray())
- self.pack(self.res_pack.elements.request('0'), ['led', 'led[0]', 'res'])
- self.pack(self.res_pack.elements.request('1'), ['led', 'led[1]', 'res'])
- self.pack(self.res_pack.elements.request('2'), ['led', 'led[2]', 'res'])
- self.pack(self.res_pack.elements.request('3'), ['led', 'led[3]', 'res'])
-```
-
-> `self.pack(...)` takes two arguments, the first is the part in the `PackedBlock`, and the second is the `Block` in the design hierarchy to be backed.
-> Since `Block`s arbitrarily deep in the design hierarchy may not be known when the top-level HDL is initially compiled, this is specified as a path as a list of strings.
-
-> Packed blocks can have parts that are either single instances or arrays.
-> The above is an example of a part array, which similar to port arrays are dynamically sized and can be `request`ed from.
-> Like port arrays, even though they are dynamically sized, there may be restrictions from what parts are available, for example you'd be hard-pressed to find an 8-resistor array anywhere.
-
-If you import this into KiCad, you should be able to see the quad-pack resistor instead of single resistors per LED.
-Here, it is shown on the bottom left, next to the switch:
-
-
-
-## Definition
-
-Creation of multipack devices is current out of the scope of this tutorial series.
-However, you can see some examples:
-- [Resistor array](electronics_abstract_parts/AbstractResistorArray.py): how the resistor array used above is implemented, though this is a base class intended to be subclassed by a parts table parser.
-- [RGB LED](electronics_abstract_parts/AbstractLed.py): an RGB LED packed from individual discrete LED, that also show how shared pins can be handled.
- This is also an example of a `PackedBlock` that uses single instance parts, the component R, G, and B LEDs.
diff --git a/getting_started_schimport.md b/getting_started_schimport.md
index b880c6f74..7ad0b1626 100644
--- a/getting_started_schimport.md
+++ b/getting_started_schimport.md
@@ -10,6 +10,10 @@ _In this section, we build a graphical-schematic-defined HX711-based load cell a
> Schematic-defined blocks can make use of HDL library blocks (as schematic components), including all the automation (like automatic parts selection from a parts table) those libraries provide.
+### Dragons be Ahead
+Library block definition is a less polished and more complex experience than building boards using existing library blocks.
+
+
## Schematic Definition
**Start by drawing the application schematic for the HX711**, as described in Figure 4 of its [datasheet](https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf).
diff --git a/reference.md b/reference.md
index 5febe3fb4..7a5dccdf4 100644
--- a/reference.md
+++ b/reference.md
@@ -1,216 +1,310 @@
# Quick Reference
-A simplified EDG EDSL guide, primarily as a reference for those who have been through the [getting started guide](getting-started.md).
-_Some documentation may be out of date._
+A short reference for writing HDL for (top-level) board designs.
-## Core Primitives
+New? Consider reading through the [getting started guide](getting-started.md).
-### Parameters
-- `BoolExpr`: boolean (true / false) variable
- - Supports standard boolean operations
-- `FloatExpr`: numeric variable
- - Suppers standard numeric operations
-- `RangeExpr`: range (interval) variable
- - Supports standard numeric operations (multiplication and division are undefined), some set operations (`.within(other)`, `.contains(other)`, `.intersect(other)`), and get operations (`.lower()`, `.upper()`)
-- `StringExpr`: string (text) variable
- - Supports equality operations only
+Also see the [reference for building subcircuit / part library blocks](reference_library.md).
-### Blocks
-Blocks represent a subcircuit (or hierarchical schematic sheet), and consist of boundary ports and internal subblocks and connections (links) between ports on those subblocks.
-Skeleton structure:
+### DesignTop Block
+`Block`s represent a subcircuit (including the top-level circuit) and contain inner blocks and connections between them.
+
```python
-class MyBlock(Block):
- def __init__(self) -> None:
- super().__init__() # essential to call the superclass method beforehand to initialize state
- # declare ports here, and subblocks whose ports are exported
-
- def contents(self) -> None:
- super().contents() # essential to call the superclass method beforehand to initialize state
- # declare subblocks and connections here
+class MyBoard(SimpleBoardTop):
+ def contents(self) -> None:
+ # declare subblocks and connections here
+ super().contents() # required to call this superclass method first
+ self.mcu = self.Block(IoController())
+ self.led = self.Block(IndicatorLed())
+ self.connect(self.mcu.gpio.request("led"), self.led.signal)
+ self.connect(self.mcu.gnd, self.led.gnd)
+ self.sw = self.Block(DigitalSwitch())
+ self.connect(self.mcu.gpio.request("sw"), self.sw.out)
+ self.connect(self.mcu.gnd, self.sw.gnd)
+
+ def refinements(self) -> Refinements:
+ # refinements describe modifications across the design hierarchy
+ return super().refinements() + Refinements(
+ class_refinements=[
+ (IoController, Esp32c3), # replace all abstract IoController with Esp32c3
+ ],
+ instance_values=[
+ (["mcu", "pin_assigns"], ["led=3", "sw=6"]) # assign to footprint pins 3 and 6
+ ],
+ )
```
-These are properties of Blocks:
-- The Block type hierarchy defines allowed refinements
-- `@abstract_block` decorates a block as abstract, which will error on netlisting
-
-These can be called inside `__init__(...)`:
-- `self.Parameter(ParameterType(optional_value))`: declare parameters, optionally with a value
-- `self.Port(PortType(...))`: declare ports
- - Optional arguments: `tags=[ImplicitTags], optional=False`
- - `self.Export(self.subblock.port)`: export a subblock's port
-- `@init_in_parent` decorator is needed if `__init__(...)` takes Parameter arguments and must generate constraints in the parent Block
-
-These can be called inside `contents()`:
-- `self.Block(BlockType(...))`: declare sub-blocks
- - Also allowed inside `__init__(...)`, to allow the use of `Export`s
-- `self.constrain(...)`: constrain some `BoolExpr` (which can be an inline expression, eg `self.param1 == self.param2`) to be true
-- `self.connect(self.subblock1.port, self.subblock2.port, ...)`: connect own ports and/or subblock's ports
- - Naming is optional.
-- `with self.implicit_connect(...) as imp:`: open an implicit connection scope
- - Implicit connection arguments of the form `ImplicitConnect(connect_to_port, [MatchingTags])`
- - `imp.Block(BlockType(...))`: similar to `self.Block(...)` but implicitly connects ports with matching tags
-- `self.chain(self.Block(BlockType(...)), self.Block(BlockType(...)), ...)`: chain-connect between blocks, in `contents`
- - Return of `self.chain` can be unpacked into a tuple of chained blocks, and the chain object (itself).
- Naming of the chain object is optional.
- - Elements are chained from left (outputs) to right (inputs)
- - The first argument to chain may be a port or block with an `InOut` or `Output`-tagged port.
- - Middle elements must be a block with an `InOut`-tagged port, or `Input`- and `Output`-tagged ports.
- - The last argument to chain may be a port or block with an `InOut` or `Input`-tageed port.
-- Assign names to components by assigning the object to a `self` variable:
- - `self.subblock_name = self.Block(BlockType(...))`
- - `(self.subblock_name1, self.subblock_name2, ...), self.chain_name = self.chain(...)`
-
-### Generators
-Generators allow some Python code to run that has access to the solved values of some parameters.
-TODO - write this section pending generator refactoring, in the meantime see the port array section of the getting started tutorial.
-
-
-### Footprint
-FootprintBlock is a block that is associated with a PCB footprint.
-
-All primitives that can be called inside `Block`'s `__init__(...)` can be called inside `__init__(...)`
-
-These can be called inside `contents()`:
-- `self.footprint(refdes='R', footprint='Resistor_SMD:R_0603_1608Metric', pinning={...})`: associates a footprint with this block
- - Pinning argument format: `{'pin_name': self.port, ...}`: associates footprint pins with ports or subports
- - Optional arguments: `mfr='Manufacturer A', part='Part Number', value='1kOhm', datasheet='www.example.net'`
-
-
-## Port and Link Libraries
-
-### Single-wire Ports
-- `VoltageLink`: voltage rail
- - `VoltageSource(voltage_out, current_limits)`: voltage source
- - `VoltageSink(voltage_limits, current_draw)`: voltage sink (power input)
-- `DigitalLink`: low-speed (up to ~100 MHz) digital signals, modeling voltage limits and input / output thresholds
- - `DigitalSource(voltage_out, current_limits, output_thresholds)`: digital output-only pin
- - `output_thresholds` is the range of (maximum low output, minimum high output)
- - `DigitalSink(voltage_limits, current_draw, input_thresholds)`: digital input-only pin
- - `input_thresholds` is the range of (maximum low input, minimum high input)
- - `DigitalBidir(...)`: digital bidirectional (eg, GPIO) pin
- - Has all arguments of `DigitalSource` and `DigitalSink`
-- `AnalogLink`: analog signal that models input and output impedance
- - `AnalogSource(voltage_out, current_limits, impedance)`: analog output
- - `AnalogSink(voltage_limits, current_draw, impedance)`: analog signal input
-- `PassiveLink`: connected copper that contains no additional data
- - `Passive`: single wire port that contains no additional data, but can be adapted to other types (eg, with `.as_voltage_source(...)`).
- Useful for low-level elements (eg, resistors) that can be used in several ways in higher-level constructs (eg, pull-up resistor for digital applications).
-
-### Bundle Ports
-- `I2cLink`: I2C net, consisting of `.scl` and `.sda` Digital sub-ports.
- - `I2CMaster(model)`: I2C master port
- - `model`: DigitalBidir model for both SCL and SDA sub-ports
- - `I2CSlave(model)`: I2C slave port
-- `SpiLink`: SPI net, consisting of `.sck`, `.miso`, and `.mosi` Digital sub-ports. CS must be handled separately.
- - `SpiMaster(model, frequency)`: SPI master port
- - `frequency`: range of allowable frequencies, generally including zero
- - `SpiSlave(model, frequency)`: SPI slave port
-- `UartLink`: UART net, consisting of `.tx` and `.rx` Digital sub-ports in a crossover point-to-point connection.
- - `UartPort(model)`: UART port
-- `UsbLink`: USB data net, consisting of `.dp` (D+) and `.dm` (D-) Digital sub-ports in a point-to-point connection.
- - `UsbHostPort`: USB host
- - `UsbDevicePort`: USB device
- - `UsbPassivePort`: other components (eg, TVS diode) on the USB line
-- `CanLogicLink`: CAN logic-level (TXD/RXD) net, consisting of `.txd` and `.rxd` Digital sub-ports in a point-to-point connection.
- - `CanControllerPort(model)`: CAN controller-side port
- - `CanTransceiverPort(model)`: CAN transceiver-side port
-- `CanDiffLink`: CAN differential (CANH/CANL) net, consisting of `.canh` and `.canl` Digital sub-ports in a bus connection.
- - `CanDiffPort(model)`: CAN node port
-- `SwdLink`: SWD programming net, consisting of `.swdio`, `.swclk`, `.swo`, and `.reset` Digital sub-ports in a point-to-point connection.
- - `SwdHostPort(model)`: SWD host-side (programmer) port
- - `SwdTargetPort(model)`: SWD target-side (DUT) port
-- `CrystalLink`: crystal net, consisting of `.xi` and `.xo` sub-ports in a point-to-point connection.
- - `CrystalDriver(frequency_limits, voltage_out)`: driver-side port
- - `CrystalPort(frequency)`: crystal-side port, indicating the frequency of the crystal
-
-
-## Block Libraries
-The IDE's library tab provides a categorized list of available library blocks.
-Many blocks also have a short descriptive docstring.
-
-
-## Advanced Core Primitives
-These are core primitives needed to model new ports and links
-
-### Ports
-Ports can have parameters and may be connected to each other via a Link.
-
-Skeleton structure:
+- `SimpleBoardTop` maps abstract passive components to the JLC parts library and relaxes some strict constraints that do not matter for maker-type boards.
+- Alternatively, use `DesignTop` (which has no default mappings) or `JlcBoardTop` (which has JLC part mappings).
+
+
+### Block definition
+
+Internal blocks are created using `self.Block(...)` and must be assigned a unique name (in `self`) for netlist stability.
+
```python
-class MyPort(Port[MyPortLinkType]):
- link_type = MyPortLinkType # required
- bridge_type = MyPortBridgeType # optional, if a bridge is needed
-
- def __init__(self) -> None:
- super().__init__() # essential to call the superclass method beforehand to initialize state
- # declare elements like parameters here
+self.block_name = self.Block(BlockType(...))
```
-These are properties of Ports:
-- The Port type hierarchy currently is not used. However, inheritance may still be useful for code re-use / de-duplication.
+- Some blocks may take arguments, see their `__init__` for details.
+- Builtin parts (like ICs) are in [the parts folder](edg/parts) and builtin circuits are in [the circuits folder](edg/circuits).
+- See [the examples](examples/) for common blocks and how they're used.
+- Abstract blocks can be instantiated, but require a refinement in the top-level design.
+ - Some DesignTop subclasses like `SimpleBoardTop` provide default refinements.
-These can be called inside `__init__(...)`:
-- `__init__(...)` may take arguments, and no decorators (as with Block) are needed
-- `self.Parameter(ParameterType(optional_value))`: declare parameters, optionally with a value
+#### Range Arguments
-### Bundles
-Bundles are a special type of Port that is made up of constituent sub-Ports.
+Blocks commonly take arguments as a range-like type, typically a specification for an allowable range accounting for tolerance stackup.
-Skeleton structure:
```python
-class MyBundle(Bundle):
- link_type = MyBundleLinkType
- bridge_type = MyBundleBridgeType # optional, if a bridge is needed
-
- def __init__(self) -> None:
- super().__init__() # essential to call the superclass method beforehand to initialize state
- # declare elements like parameters here
+self.reg = self.Block(LinearRegulator(3.3 * Volt(tol=0.05)))
```
-In addition to the primitives that can be called inside `Port`'s `__init__(...)`, these can be called inside `Bundle`'s `__init__(...)`:
-- `self.Port(PortType(...))`: declare bundle sub-port
+#### ElementDict
+
+`ElementDict` creates an internal namespace, providing an unique name for elements in an array of blocks by attaching their index to the name.
+
+```python
+self.block_name = ElementDict[IndicatorLed]()
+for i in range(4):
+ self.block_name[i] = self.Block(IndicatorLed())
+```
+
+
+### Connections
+
+`self.connect` connects ports on blocks, inferring the link type from the port types in the connection.
+
+```python
+self.connect(self.block1.port, self.block2.port, ...)
+```
+
+- `self.connect` returns a `Connection` object, which can be used in connections.
+- Optionally assign a name to the `Connection` by assigning to a `self` variable.
+- Connections must be between ports of compatible type.
+ Typed ports (like `Ground` or `VoltageSink`) are distinct from `Passive` ports and not connectable without adapters.
+- Only the block's ports and inner blocks' ports can be connected.
+ Connections cannot be made arbitrarily deep in the block hierarchy.
+
+#### Implicit Connection Blocks
+
+`self.implicit_connect` creates a scope for implicit connections, typically for power and ground.
+
+```python
+with self.implicit_connect(
+ ImplicitConnect(self.pwr, [Power]),
+ ImplicitConnect(self.gnd, [Common]),
+) as imp:
+ self.block_name = imp.Block(BlockType(...))
+```
+
+- Port matching is done against the block's ports' tags using tag objects `Power` and `Common`.
+
+#### Chain Connections
+
+`self.chain` connects ports (and ports on blocks) in a chain, from left to right.
+
+```python
+(self.led,), _ = self.chain(imp.Block(IndicatorSinkLed()), self.mcu.gpio.request("led"))
+```
+
+- `self.chain` returns a nested tuple of `((blocks...), chain)`.
+ Blocks must be named, the chain object can be optionally named to name the interior nets.
+- In the example above:
+ - The trailing comma in `(self.led, )` unpacks the single-element blocks tuple to name it.
+ - The `_` discards (does not name) the chain object.
+- Blocks in the chain are connected to:
+ - their `Input` tagged port, for an incoming connection from the left,
+ - their `Output` tagged port, for an outgoing connection to the right,
+ - their `InOut` tagged port, for both incoming and outgoing connections (tapped connection).
+
+#### .connected(...)
+
+Some (but far from all) blocks define a `.connected(...)` as a shorthand connection method, see each class's API for details.
+These return the block itself, allowing it to be assigned to a name.
+
+```python
+self.tp_gnd = self.Block(GroundTestPoint()).connected(self.gnd)
+```
+
+
+### Refinements
+
+Refinements allow specifying, at the top level, modifications across the design hierarchy.
+
+```python
+def refinements(self) -> Refinements:
+ return super().refinements() + Refinements(
+ class_refinements=[
+ (IoController, Esp32c3),
+ ],
+ instance_refinements=[
+ (["mcu"], Esp32c3),
+ ],
+ instance_values=[
+ (["mcu", "pin_assigns"], ["led=3"])
+ ],
+ class_values=[
+ (SelectorArea, ["footprint_area"], Range.from_lower(1.5)),
+ ]
+ )
+```
+
+- `class_refinements` replaces all instances of a block type with a subclass.
+- `instance_refinements` replaces a specific instance of a block with a subclass.
+ The instance is specified as a path, as a list of block names from the root.
+- `instance_values` sets a parameter value on a specific instance of a block, specified as a path.
+- `class_values` sets a parameter value on all instances of a block type.
+ It is specified as a class, then a sub-path to the parameter.
+
+
+### Parts Table Parts
+
+- Some blocks, particularly discrete components like `Resistor`s and `Fet`s, are implemented as automatic selection from a parts table.
+- These are some common top-level refinements:
+ - Class refinement `(SelectorArea, ["footprint_area"], Range.from_lower(1.5))`: require a minimum footprint courtyard area, in mm²
+ - Common minimum areas for passives, in mm²: 01005=0.72, 0201=0.98, 0402=1.74, 0603=4.32, 0805=6.38, 1206=10.21.
+ - Instance refinement `(["part_table_block", "excluded_parts"], ["1N2127"])`: exclude parts from selection, e.g., if they're out-of-stock.
+ - Instance refinement `(["part_table_block", "part"], "1N2127")`: require a particular part.
+ - Instance refinement `(["part_table_block", "footprint_spec"], "Diode_SMD:D_SMA")`: require a particular footprint.
+
+
+### IoController
+
+`IoController` is an abstract class for any programmable IO controller, typically microcontrollers, but also including FPGAs.
+
+```python
+self.mcu = imp.Block(IoController())
+self.connect(self.mcu.gpio.request("led"), self.led.signal)
+```
+
+- `IoController`s have `gnd` and `pwr` input power ports, and `gpio`, `adc`, `spi`, `i2c`, `uart`, and `usb` Vector IO ports which elements can be requested from.
+- Not all `IoController`s support all IO types, see each class's API for details.
+- The `request(...)` name is used in the `pin_assigns` refinement, with each entry specified as either `led=3` (by footprint pin number) or `led=GPIO4` (by IO name, see each class's API for details).
+- These request types are available, and their pin assignment entries are:
+
+ | Request Type | Request Syntax | Pin Assignment Entries |
+ |-------------------------|------------------------------------------|--------------------------------------------------------|
+ | Single Element | `self.mcu.gpio.request("my_io")` | `"my_io=3"` |
+ | Vector | `self.mcu.gpio.request_vector("my_ios")` | `"my_ios_0=3", "my_ios_1=4", ...` (underscore-indexed) |
+ | Bundle (e.g., SPI, I2C) | `self.mcu.spi.request("my_spi")` | `"my_spi.sck=3", "my_spi.mosi=4", ...` (dot-indexed) |
+ | Unnamed | `self.mcu.gpio.request()` | Arbitrarily named, don't rely on this |
+
+
+### Mixins
+
+Mixins are a way to require additional functionality (or ports) on an abstract block, they restrict refinements to concrete classes that implement the mixin.
+
+```python
+# require additional ports defined by a mixin
+self.connect(self.can.controller, self.mcu.with_mixin(IoControllerCan()).can.request("can"))
+
+# require a mixin as a refinement constraint only
+self.mcu.with_mixin(IoControllerWifi())
+```
+
+- IoController has these mixins:
+ - defining IO ports: `IoControllerDac`, `IoControllerI2cTarget`, `IoControllerSpiPeripheral`, `IoControllerTouchDriver`, `IoControllerCan`, `IoControllerUsbCc`, `IoControllerI2s`, `IoControllerDvp8`
+ - connectivity requirements only: `IoControllerWifi`, `IoControllerBluetooth`, `IoControllerBle`
+ - defining power ports, typically for microcontroller dev boards: `IoControllerPowerOut`, `IoControllerUsbOut`, `IoControllerVin`
+
+
+### Connector Blocks
+
+Custom connectors are implemented as a `Block` with ports representing its IOs.
+
+```python
+class CustomUartConnector(Block):
+ def __init__(self) -> None:
+ super().__init__()
+ self.gnd = self.Port(Ground(), [Common])
+ self.pwr = self.Port(VoltageSink(), [Power])
+ self.uart = self.Port(UartPort())
+
+ self.conn = self.Block(PassiveConnector(length=4)).connected(
+ {
+ "1": self.gnd,
+ "2": self.pwr,
+ "3": self.uart.tx,
+ "4": self.uart.rx,
+ }
+ )
+```
+
+- `self.port_name = self.Port(...)` defines a port on the block.
+- Ports must be typed, the `Passive` port type is not automatically connectable to typed single-wire ports like `Ground` or `VoltageSink` without adapters.
+- Ports take electrical modeling parameters (like voltage and current limits) as parameters, empty parameter generally means an ideal port.
+- `PassiveConnector` is an abstract class for connectors with a parameterizable number of passive-typed pins, including 2.54mm headers, FPCs, and more.
+- `PassiveConnector.connected(...)` automatically adapts typed ports to the connector's Passive ports.
+
+### Multipacking
+
+Multipacking allows multiple components, potentially spread across the design hierarchy, to be combined into one component.
+This is an optimization that may save board area and cost.
+Example: quad-pack resistor networks, dual-pack opamps, RGB LEDs.
+
+```python
+class MyBoard(SimpleBoardTop):
+ def contents(self) -> None:
+ ...
+
+ def multipack(self) -> None:
+ self.res_pack = self.PackedBlock(ResistorArray())
+ self.pack(self.res_pack.elements.request('0'), ['led[0]', 'res'])
+ self.pack(self.res_pack.elements.request('1'), ['led[1]', 'res'])
+ self.pack(self.res_pack.elements.request('2'), ['led[2]', 'res'])
+ self.pack(self.res_pack.elements.request('3'), ['led[3]', 'res'])
+```
+
+- `multipack()` is a blend of `contents()` (in that `PackedBlocks` are declared within) and `refinements()` (in that it uses `List[str]` to reference blocks in the design hierarchy).
+- `self.PackedBlock(...)` is similar to `self.Block(...)`.
+- `self.pack(...)` takes two arguments:
+ - `multipack_part`: the multipack element that is part of the packed block, either a block or an element of a dynamically-sized packed block array.
+ - `path`: the path to the block which this replaces, as a list of strings.
+- This remains correct ERC model-wise, elements of the packed block are modeled as being 'inside' the replaced block.
+- Each multipack element has its own ports, including for shared pins like the common power pins of a dualpack opamp.
+ A compiler assertion checks that these are all connected to the same netlist net.
+- Multipacking can only be defined at the BoardTop level.
+
+### Sub-boards and Connector Pairs
+
+Subboards are `Block`s that define a subcircuit that is its own board (generates a separate netlist).
+
+```python
+class LedSubboard(SubboardBlock):
+ def __init__(self) -> None:
+ super().__init__()
+
+ self.led = self.Block(IndicatorLed())
+ self.gnd = self.Export(self.led.gnd, [Common])
+ self.signal = self.Export(self.led.signal, [Input])
+
+ self.conn = self.Block(Fpc050SocketTabPair(2), external=True)
+ self.export_tap(self.gnd.net, self.conn.pins.request("1"))
+ self.export_tap(self.signal.net, self.conn.pins.request("2"))
+```
+
+- These are defined `Block`s that have their subcircuits inside and exported ports crossing the physical board boundary.
+- These use a `SubboardConnectorPair` block (like `Fpc050SocketTabPair`) to define the physical connector pair.
+ - `SubboardConnectorPair` are similar to `PassiveConnector`, with `Passive` typed ports.
+ - Typed ports (like `Ground` or `VoltageSink`) internally contain a `Passive` `net` which can be attached to the connector's `Passive` ports.
+ - `self.Export(...)` creates a Port on the Block that is connected to (and takes on the type) of the inner port.
+ - `self.export_tap` behaves similar to `self.connect`, but attaches the inner port to the outer port without propagating parameter values (non-physical attachment).
+ Conceptually, the connector taps onto (or hangs off) the parameter-propagating Export connection.
+
+
+### Overriding Values / "Waiving" ERCs
-### Links
-Links define propagation rules for connected Ports.
+Some of the electrical modeling may have overly strict limits or overly broad operating parameters resulting in compiler errors from ERC failures, use refinements to override their values.
-Links are structured the same as Blocks, with similar primitives (see the Block documentation for details):
```python
-class MyPortLink(Link):
- def __init__(self) -> None:
- super().__init__() # essential to call the superclass method beforehand to initialize state
- # declare ports here
-
- def contents(self) -> None:
- super().contents() # essential to call the superclass method beforehand to initialize state
- # declare constraints and internal connections here
+class_refinements=[
+ (Neopixel, ["pwr", "voltage_limits"], Range(3.0, 5.5)), # kinda works-ish at 3.3v
+]
```
-These are properties of Links:
-- Each Port can have one type of associated link.
-- The Link type hierarchy currently is not used. However, inheritance may still be useful for code re-use / de-duplication.
-- Extend `CircuitLink` instead of `Link` to copper-connect all ports.
-
-These can be called inside `__init__()`:
-- `__init__()` cannot have arguments, since links are always inferred
-- `self.Parameter(ParameterType(optional_value))`
-- `self.Port(PortType(...))` (without tags, but can have optional)
-
-These can be called inside `contents()`:
-- `self.connect(self.port1.subport, self.port2.subport, ...)`: for Bundle ports, connect sub-ports and infer inner link
- - Naming is optional.
-- `self.constrain(...)`
-
-### Bridges
-Bridges are a special type of `Block` that adapts from a Link-facing (inner, `self.inner_link`) port to a Block edge (outer, `self.outer_port`) port.
-Extend `CircuitPortBridge` instead of `PortBridge` to copper-connect all ports.
-
-In `__init__()` (may not take arguments), declare these two required ports.
-In `contents()`, add constraints as needed.
-
-### Adapters
-PortAdapters are a special type of `Block` that adapts / converts from a source (`self.src`) port to a destination (`self.dst`) port.
-Extend `CircuitPortAdapter` instead of `PortAdapter` to copper-connect all ports.
-
-In `__init__(...)` (may take arguments, must decorate with `@init_in_parent` if arguments), declare these two required ports.
-In `contents()`, add constraints as needed.
+- Values can be inspected via:
+ - CLI compiler error messages for values failing constraints,
+ - the IDE,
+ - or, the .json generated during compilation which contains the entire compiled / solved design.
diff --git a/reference_library.md b/reference_library.md
new file mode 100644
index 000000000..ff018df3f
--- /dev/null
+++ b/reference_library.md
@@ -0,0 +1,227 @@
+# Quick Reference, Library Construction
+
+A short reference specifically for building subcircuit / part library blocks.
+
+New? Consider reading through the [getting started guide](getting-started.md), including the subsequent sections on building library blocks.
+
+Also see the [top-level board design reference](reference.md).
+
+
+## Dragons be Ahead
+
+The library design experience is much less polished and more intricate than the top-level board design experience.
+
+## Under Construction
+
+Parts of this reference are outdated.
+
+
+## Parameters
+- `BoolExpr`: boolean (true / false) variable
+ - Supports standard boolean operations
+- `FloatExpr`: numeric variable
+ - Supports standard numeric operations
+- `RangeExpr`: range (interval) variable
+ - Supports standard numeric operations (multiplication and division are undefined), some set operations (`.within(other)`, `.contains(other)`, `.intersect(other)`), and get operations (`.lower()`, `.upper()`)
+- `StringExpr`: string (text) variable
+ - Supports equality operations only
+
+## Blocks
+Blocks represent a subcircuit (or hierarchical schematic sheet), and consist of boundary ports and internal subblocks and connections (links) between ports on those subblocks.
+
+Skeleton structure:
+```python
+class MyBlock(Block):
+ def __init__(self) -> None:
+ super().__init__() # essential to call the superclass method beforehand to initialize state
+ # declare ports here, and subblocks whose ports are exported
+
+ def contents(self) -> None:
+ super().contents() # essential to call the superclass method beforehand to initialize state
+ # declare subblocks and connections here
+```
+
+These are properties of Blocks:
+- The Block type hierarchy defines allowed refinements
+- `@abstract_block` decorates a block as abstract, which will error on netlisting
+
+These can be called inside `__init__(...)`:
+- `self.Parameter(ParameterType(optional_value))`: declare parameters, optionally with a value
+- `self.Port(PortType(...))`: declare ports
+ - Optional arguments: `tags=[ImplicitTags], optional=False`
+ - `self.Export(self.subblock.port)`: export a subblock's port
+- `@init_in_parent` decorator is needed if `__init__(...)` takes Parameter arguments and must generate constraints in the parent Block
+
+These can be called inside `contents()`:
+- `self.Block(BlockType(...))`: declare sub-blocks
+ - Also allowed inside `__init__(...)`, to allow the use of `Export`s
+- `self.constrain(...)`: constrain some `BoolExpr` (which can be an inline expression, eg `self.param1 == self.param2`) to be true
+- `self.connect(self.subblock1.port, self.subblock2.port, ...)`: connect own ports and/or subblock's ports
+ - Naming is optional.
+- `with self.implicit_connect(...) as imp:`: open an implicit connection scope
+ - Implicit connection arguments of the form `ImplicitConnect(connect_to_port, [MatchingTags])`
+ - `imp.Block(BlockType(...))`: similar to `self.Block(...)` but implicitly connects ports with matching tags
+- `self.chain(self.Block(BlockType(...)), self.Block(BlockType(...)), ...)`: chain-connect between blocks, in `contents`
+ - Return of `self.chain` can be unpacked into a tuple of chained blocks, and the chain object (itself).
+ Naming of the chain object is optional.
+ - Elements are chained from left (outputs) to right (inputs)
+ - The first argument to chain may be a port or block with an `InOut` or `Output`-tagged port.
+ - Middle elements must be a block with an `InOut`-tagged port, or `Input`- and `Output`-tagged ports.
+ - The last argument to chain may be a port or block with an `InOut` or `Input`-tagged port.
+- Assign names to components by assigning the object to a `self` variable:
+ - `self.subblock_name = self.Block(BlockType(...))`
+ - `(self.subblock_name1, self.subblock_name2, ...), self.chain_name = self.chain(...)`
+
+### Generators
+Generators allow some Python code to run that has access to the solved values of some parameters.
+TODO - write this section pending generator refactoring, in the meantime see the port array section of the getting started tutorial.
+
+
+### Footprint
+FootprintBlock is a block that is associated with a PCB footprint.
+
+All primitives that can be called inside `Block`'s `__init__(...)` can be called inside `__init__(...)`
+
+These can be called inside `contents()`:
+- `self.footprint(refdes='R', footprint='Resistor_SMD:R_0603_1608Metric', pinning={...})`: associates a footprint with this block
+ - Pinning argument format: `{'pin_name': self.port, ...}`: associates footprint pins with ports or subports
+ - Optional arguments: `mfr='Manufacturer A', part='Part Number', value='1kOhm', datasheet='www.example.net'`
+
+
+## Port and Link Libraries
+
+### Single-wire Ports
+- `VoltageLink`: voltage rail
+ - `VoltageSource(voltage, current_limits)`: voltage source
+ - `VoltageSink(voltage_limits, current_draw)`: voltage sink (power input)
+- `DigitalLink`: low-speed (up to ~100 MHz) digital signals, modeling voltage limits and input / output thresholds
+ - `DigitalSource(voltage, current_limits, output_thresholds)`: digital output-only pin
+ - `output_thresholds` is the range of (maximum low output, minimum high output)
+ - `DigitalSink(voltage_limits, current_draw, input_thresholds)`: digital input-only pin
+ - `input_thresholds` is the range of (maximum low input, minimum high input)
+ - `DigitalBidir(...)`: digital bidirectional (eg, GPIO) pin
+ - Has all arguments of `DigitalSource` and `DigitalSink`
+- `AnalogLink`: analog signal that models input and output impedance
+ - `AnalogSource(voltage, current_limits, impedance)`: analog output
+ - `AnalogSink(voltage_limits, current_draw, impedance)`: analog signal input
+- `PassiveLink`: connected copper that contains no additional data
+ - `Passive`: single wire port that contains no additional data, but can be adapted to other types (eg, with `.as_voltage_source(...)`).
+ Useful for low-level elements (eg, resistors) that can be used in several ways in higher-level constructs (eg, pull-up resistor for digital applications).
+
+### Bundle Ports
+- `I2cLink`: I2C net, consisting of `.scl` and `.sda` Digital sub-ports.
+ - `I2CMaster(model)`: I2C master port
+ - `model`: DigitalBidir model for both SCL and SDA sub-ports
+ - `I2CSlave(model)`: I2C slave port
+- `SpiLink`: SPI net, consisting of `.sck`, `.miso`, and `.mosi` Digital sub-ports. CS must be handled separately.
+ - `SpiMaster(model, frequency)`: SPI master port
+ - `frequency`: range of allowable frequencies, generally including zero
+ - `SpiSlave(model, frequency)`: SPI slave port
+- `UartLink`: UART net, consisting of `.tx` and `.rx` Digital sub-ports in a crossover point-to-point connection.
+ - `UartPort(model)`: UART port
+- `UsbLink`: USB data net, consisting of `.dp` (D+) and `.dm` (D-) Digital sub-ports in a point-to-point connection.
+ - `UsbHostPort`: USB host
+ - `UsbDevicePort`: USB device
+ - `UsbPassivePort`: other components (eg, TVS diode) on the USB line
+- `CanLogicLink`: CAN logic-level (TXD/RXD) net, consisting of `.txd` and `.rxd` Digital sub-ports in a point-to-point connection.
+ - `CanControllerPort(model)`: CAN controller-side port
+ - `CanTransceiverPort(model)`: CAN transceiver-side port
+- `CanDiffLink`: CAN differential (CANH/CANL) net, consisting of `.canh` and `.canl` Digital sub-ports in a bus connection.
+ - `CanDiffPort(model)`: CAN node port
+- `SwdLink`: SWD programming net, consisting of `.swdio`, `.swclk`, `.swo`, and `.reset` Digital sub-ports in a point-to-point connection.
+ - `SwdHostPort(model)`: SWD host-side (programmer) port
+ - `SwdTargetPort(model)`: SWD target-side (DUT) port
+- `CrystalLink`: crystal net, consisting of `.xi` and `.xo` sub-ports in a point-to-point connection.
+ - `CrystalDriver(frequency_limits, voltage_out)`: driver-side port
+ - `CrystalPort(frequency)`: crystal-side port, indicating the frequency of the crystal
+
+
+## Block Libraries
+The IDE's library tab provides a categorized list of available library blocks.
+Many blocks also have a short descriptive docstring.
+
+
+## Advanced Core Primitives
+These are core primitives needed to model new ports and links
+
+### Ports
+Ports can have parameters and may be connected to each other via a Link.
+
+Skeleton structure:
+```python
+class MyPort(Port[MyPortLinkType]):
+ link_type = MyPortLinkType # required
+ bridge_type = MyPortBridgeType # optional, if a bridge is needed
+
+ def __init__(self) -> None:
+ super().__init__() # essential to call the superclass method beforehand to initialize state
+ # declare elements like parameters here
+```
+
+These are properties of Ports:
+- The Port type hierarchy currently is not used. However, inheritance may still be useful for code re-use / de-duplication.
+
+These can be called inside `__init__(...)`:
+- `__init__(...)` may take arguments, and no decorators (as with Block) are needed
+- `self.Parameter(ParameterType(optional_value))`: declare parameters, optionally with a value
+
+### Bundles
+Bundles are a special type of Port that is made up of constituent sub-Ports.
+
+Skeleton structure:
+```python
+class MyBundle(Bundle):
+ link_type = MyBundleLinkType
+ bridge_type = MyBundleBridgeType # optional, if a bridge is needed
+
+ def __init__(self) -> None:
+ super().__init__() # essential to call the superclass method beforehand to initialize state
+ # declare elements like parameters here
+```
+
+In addition to the primitives that can be called inside `Port`'s `__init__(...)`, these can be called inside `Bundle`'s `__init__(...)`:
+- `self.Port(PortType(...))`: declare bundle sub-port
+
+### Links
+Links define propagation rules for connected Ports.
+
+Links are structured the same as Blocks, with similar primitives (see the Block documentation for details):
+```python
+class MyPortLink(Link):
+ def __init__(self) -> None:
+ super().__init__() # essential to call the superclass method beforehand to initialize state
+ # declare ports here
+
+ def contents(self) -> None:
+ super().contents() # essential to call the superclass method beforehand to initialize state
+ # declare constraints and internal connections here
+```
+
+These are properties of Links:
+- Each Port can have one type of associated link.
+- The Link type hierarchy currently is not used. However, inheritance may still be useful for code re-use / de-duplication.
+- Extend `CircuitLink` instead of `Link` to copper-connect all ports.
+
+These can be called inside `__init__()`:
+- `__init__()` cannot have arguments, since links are always inferred
+- `self.Parameter(ParameterType(optional_value))`
+- `self.Port(PortType(...))` (without tags, but can have optional)
+
+These can be called inside `contents()`:
+- `self.connect(self.port1.subport, self.port2.subport, ...)`: for Bundle ports, connect sub-ports and infer inner link
+ - Naming is optional.
+- `self.constrain(...)`
+
+### Bridges
+Bridges are a special type of `Block` that adapts from a Link-facing (inner, `self.inner_link`) port to a Block edge (outer, `self.outer_port`) port.
+Extend `CircuitPortBridge` instead of `PortBridge` to copper-connect all ports.
+
+In `__init__()` (may not take arguments), declare these two required ports.
+In `contents()`, add constraints as needed.
+
+### Adapters
+PortAdapters are a special type of `Block` that adapts / converts from a source (`self.src`) port to a destination (`self.dst`) port.
+Extend `CircuitPortAdapter` instead of `PortAdapter` to copper-connect all ports.
+
+In `__init__(...)` (may take arguments, must decorate with `@init_in_parent` if arguments), declare these two required ports.
+In `contents()`, add constraints as needed.