From 6760ecb8d2eef8619bf5b16b7b633421069d17b6 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Wed, 3 Jun 2026 01:24:36 -0700 Subject: [PATCH 01/13] Create Ch32v003.py --- edg/parts/microcontroller/Ch32v003.py | 288 ++++++++++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 edg/parts/microcontroller/Ch32v003.py diff --git a/edg/parts/microcontroller/Ch32v003.py b/edg/parts/microcontroller/Ch32v003.py new file mode 100644 index 000000000..1b9c1bd15 --- /dev/null +++ b/edg/parts/microcontroller/Ch32v003.py @@ -0,0 +1,288 @@ +from typing import * + +from typing_extensions import override + +from ...circuits import * +from ...vendor_parts.jlc.JlcPart import JlcPart + + +class Ch32v003_Device( + IoControllerI2cTarget, + InternalSubcircuit, + BaseIoControllerPinmapGenerator, + GeneratorBlock, + JlcPart, + FootprintBlock, +): + _PIN_MAPPING = { + # "PC13": "2", + # "PC14": "3", + # "PC15": "4", + # "PA0": "10", + # "PA1": "11", + # "PA2": "12", + # "PA3": "13", + # "PA4": "14", + # "PA5": "15", + # "PA6": "16", + # "PA7": "17", + # "PB0": "18", + # "PB1": "19", + # "PB2": "20", + # "PB10": "21", + # "PB11": "22", + # "PB12": "25", + # "PB13": "26", + # "PB14": "27", + # "PB15": "28", + # "PA8": "29", + # "PA9": "30", + # "PA10": "31", + # "PA11": "32", + # "PA12": "33", + # "PA13": "34", + # "PA14": "37", + # "PA15": "38", + # "PB3": "39", + # "PB4": "40", + # "PB5": "41", + # "PB6": "42", + # "PB7": "43", + # "PB8": "45", + # "PB9": "46", + } + + # def __init__(self, **kwargs: Any) -> None: + # super().__init__(**kwargs) + # + # # Additional ports (on top of BaseIoController) + # self.pwr = self.Port( + # VoltageSink( + # voltage_limits=(3.0, 3.6) + # * Volt, # TODO relaxed range down to 2.0 if ADC not used, or 2.4 if USB not used + # current_draw=(0, 50.3) * mAmp + self.io_current_draw.upper(), # Table 13 + # ), + # [Power], + # ) + # self.gnd = self.Port(Ground(), [Common]) + # + # self.nrst = self.Port( + # DigitalSink.from_supply( + # self.gnd, + # self.pwr, + # voltage_limit_tolerance=(-0.3, 0.3) + # * Volt, # Table 5.3.1, general operating conditions TODO: FT IO, BOOT0 IO + # input_threshold_abs=(0.8, 2) * Volt, + # pullup_capable=True, + # ), + # optional=True, + # ) # note, internal pull-up resistor, 30-50 kOhm by Table 35 + # + # # TODO need to pass through to pin mapper + # # self.osc32 = self.Port(CrystalDriver(frequency_limits=32.768*kHertz(tol=0), # TODO actual tolerances + # # voltage_out=self.pwr.link().voltage), + # # optional=True) # TODO other specs from Table 23 + # self.osc = self.Port( + # CrystalDriver(frequency_limits=(4, 16) * MHertz, voltage_out=self.pwr.link().voltage), optional=True + # ) # Table 22 + # + # self.swd = self.Port(SwdTargetPort.empty()) + # self._io_ports.insert(0, self.swd) + + @override + def _system_pinmap(self) -> Mapping[Union[Iterable[str], str], Union[Passive, HasPassivePort]]: + # return { + # "1": self.pwr, # Vbat + # "9": self.pwr, # VddA + # "8": self.gnd, # VssA + # ("23", "35", "47"): self.gnd, # Vss + # ("24", "36", "48"): self.pwr, # Vdd + # "44": self.gnd, # BOOT0 + # "5": self.osc.xtal_in, # TODO remappable to PD0 + # "6": self.osc.xtal_out, # TODO remappable to PD1 + # "7": self.nrst, + # } + + @override + def _io_pinmap(self) -> PinMapUtil: + # # Port models + # dio_ft_model = DigitalBidir.from_supply( + # self.gnd, + # self.pwr, + # voltage_limit_abs=(-0.3, 5.2) * Volt, # Table 5.3.1, general operating conditions, TODO relaxed for Vdd>2v + # current_limits=(-20, 20) * mAmp, # Section 5.3.13 Output driving current, TODO loose with relaxed VOL/VOH + # input_threshold_factor=(0.35, 0.65), # TODO relaxed (but more complex) bounds available + # pullup_capable=True, + # pulldown_capable=True, + # ) + # dio_std_model = DigitalBidir.from_supply( + # self.gnd, + # self.pwr, + # voltage_limit_tolerance=(-0.3, 0.3) * Volt, # Table 5.3.1, general operating conditions + # current_limits=(-20, 20) * mAmp, # Section 5.3.13 Output driving current, TODO loose with relaxed VOL/VOH + # input_threshold_factor=(0.35, 0.65), # TODO relaxed (but more complex) bounds available + # pullup_capable=True, + # pulldown_capable=True, + # ) + # dio_pc_13_14_15_model = DigitalBidir.from_supply( + # self.gnd, + # self.pwr, + # voltage_limit_tolerance=(-0.3, 0.3) * Volt, # Table 5.3.1, general operating conditions + # current_limits=(-3, 3) * mAmp, # Section 5.3.13 Output driving current + # input_threshold_factor=(0.35, 0.65), # TODO relaxed (but more complex) bounds available + # pullup_capable=True, + # pulldown_capable=True, + # ) + # + # adc_model = AnalogSink.from_supply( + # self.gnd, + # self.pwr, + # voltage_limit_tolerance=(-0.3, 0.3) * Volt, # general operating conditions, IO input voltage + # signal_limit_tolerance=(0, 0), # conversion voltage range, 0 to Vref+ (assumed VddA) + # impedance=(100, float("inf")) * kOhm, + # ) + # + # uart_model = UartPort(DigitalBidir.empty()) + # spi_model = SpiController(DigitalBidir.empty()) + # # TODO SPI peripherals, which have fixed-pin CS lines + # i2c_model = I2cController(DigitalBidir.empty()) + # i2c_target_model = I2cTarget(DigitalBidir.empty()) + # + # return PinMapUtil( + # [ # Table 5, partial table for 48-pin only + # PinResource("PA0", {"PA0": dio_std_model, "ADC12_IN0": adc_model}), + # PinResource("PA1", {"PA1": dio_std_model, "ADC12_IN1": adc_model}), + # PinResource("PA2", {"PA2": dio_std_model, "ADC12_IN2": adc_model}), + # PinResource("PA3", {"PA3": dio_std_model, "ADC12_IN3": adc_model}), + # PinResource("PA4", {"PA4": dio_std_model, "ADC12_IN4": adc_model}), + # PinResource("PA5", {"PA5": dio_std_model, "ADC12_IN5": adc_model}), + # PinResource("PA6", {"PA6": dio_std_model, "ADC12_IN6": adc_model}), + # PinResource("PA7", {"PA7": dio_std_model, "ADC12_IN7": adc_model}), + # PinResource("PB0", {"PB0": dio_std_model, "ADC12_IN8": adc_model}), + # PinResource("PB1", {"PB1": dio_std_model, "ADC12_IN9": adc_model}), + # PinResource("PB2", {"PB2": dio_ft_model}), # BOOT1 + # PinResource("PB10", {"PB10": dio_ft_model}), + # PinResource("PB11", {"PB11": dio_ft_model}), + # PinResource("PB12", {"PB12": dio_ft_model}), + # PinResource("PB13", {"PB13": dio_ft_model}), + # PinResource("PB14", {"PB14": dio_ft_model}), + # PinResource("PB15", {"PB15": dio_ft_model}), + # PinResource("PA8", {"PA8": dio_ft_model}), + # PinResource("PA9", {"PA9": dio_ft_model}), + # PinResource("PA10", {"PA10": dio_ft_model}), + # PinResource("PA11", {"PA11": dio_ft_model}), + # PinResource("PA12", {"PA12": dio_ft_model}), + # # PinResource('PA13', {'PA13': dio_ft_model}), # forced SWDIO default is JTMS/SWDIO + # # PinResource('PA14', {'PA14': dio_ft_model}), # forced SWCLK, default is JTCK/SWCLK + # PinResource("PA15", {"PA15": dio_ft_model}), # default is JTDI + # PinResource("PB3", {"PB3": dio_ft_model}), # SWO, default is JTDO + # PinResource("PB4", {"PB4": dio_ft_model}), # default is JNTRST + # PinResource("PB5", {"PB5": dio_std_model}), + # PinResource("PB6", {"PB6": dio_ft_model}), + # PinResource("PB7", {"PB7": dio_ft_model}), + # PinResource("PB8", {"PB8": dio_ft_model}), + # PinResource("PB9", {"PB9": dio_ft_model}), + # # PinResource('NRST', {'NRST': dio_std_model}), # non-mappable to IO! + # # de-prioritize these for auto-assignment since they're low-current + # PinResource("PC13", {"PC13": dio_pc_13_14_15_model}), + # PinResource("PC14", {"PC14": dio_pc_13_14_15_model, "OSC32_IN": Passive()}), + # PinResource("PC15", {"PC15": dio_pc_13_14_15_model, "OSC32_OUT": Passive()}), + # PeripheralFixedResource("USART2", uart_model, {"tx": ["PA2", "PD5"], "rx": ["PA3", "PD6"]}), + # PeripheralFixedResource( + # "SPI1", spi_model, {"sck": ["PA5", "PB3"], "miso": ["PA6", "PB4"], "mosi": ["PA7", "PB5"]} + # ), + # PeripheralFixedResource( + # "USART3", uart_model, {"tx": ["PB10", "PD8", "PC10"], "rx": ["PB11", "PD9", "PC11"]} + # ), + # PeripheralFixedResource("I2C2", i2c_model, {"scl": ["PB10"], "sda": ["PB11"]}), + # PeripheralFixedResource( + # "I2C2_T", + # i2c_target_model, + # {"scl": ["PB10"], "sda": ["PB11"]}, # TODO shared resource w/ I2C controller + # ), + # PeripheralFixedResource("SPI2", spi_model, {"sck": ["PB13"], "miso": ["PB14"], "mosi": ["PB15"]}), + # PeripheralFixedResource("USART1", uart_model, {"tx": ["PA9", "PB6"], "rx": ["PA10", "PB7"]}), + # PeripheralFixedResource( + # "CAN", + # CanControllerPort(DigitalBidir.empty()), + # {"txd": ["PA12", "PD1", "PB9"], "rxd": ["PA11", "PD0", "PB8"]}, + # ), + # PeripheralFixedResource("USB", UsbDevicePort(DigitalBidir.empty()), {"dm": ["PA11"], "dp": ["PA12"]}), + # PeripheralFixedPin( + # "SWD", + # SwdTargetPort(dio_std_model), + # { # TODO most are FT pins + # "swdio": "PA13", + # "swclk": "PA14", # note: SWO is PB3 + # }, + # ), + # PeripheralFixedResource("I2C1", i2c_model, {"scl": ["PB6", "PB8"], "sda": ["PB7", "PB9"]}), + # PeripheralFixedResource( + # "I2C1_T", + # i2c_target_model, + # {"scl": ["PB6", "PB8"], "sda": ["PB7", "PB9"]}, # TODO shared resource w/ I2C controller + # ), + # ] + # ).remap_pins(self._PIN_MAPPING) + + @override + def generate(self) -> None: + super().generate() + + # self.footprint( + # "U", + # "Package_QFP:LQFP-48_7x7mm_P0.5mm", + # self._make_pinning(), + # mfr="STMicroelectronics", + # part="STM32F103xxT6", + # datasheet="https://www.st.com/resource/en/datasheet/stm32f103c8.pdf", + # pnp_rot=-90, + # ) + # self.assign(self.lcsc_part, "C8304") # max memory CBT6 variant + # self.assign(self.actual_basic_part, False) + + + +class Ch32v003( + Resettable, + IoControllerI2cTarget, + Microcontroller, + IoControllerWithSwdTargetConnector, + WithCrystalGenerator, + IoControllerPowerRequired, + GeneratorBlock, +): + """Low-cost, bare bones RISC-V microcontroller""" + DEFAULT_CRYSTAL_FREQUENCY = 8 * MHertz(tol=0.005) # as in common dev boards / eval boards + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self.generator_param( + self.reset.is_connected(), + self.pin_assigns, + self.gpio.requested(), + ) + + @override + def generate(self) -> None: + super().generate() + + with self.implicit_connect(ImplicitConnect(self.pwr, [Power]), ImplicitConnect(self.gnd, [Common])) as imp: + self.ic = imp.Block(Ch32v003_Device(pin_assigns=ArrayStringExpr())) + self._wrap_inner(self.ic) + # self.connect(self.xtal_node, self.ic.osc) + # self.connect(self.swd_node, self.ic.swd) + # self.connect(self.reset_node, self.ic.nrst) + # + # self.pwr_cap = ElementDict[DecouplingCapacitor]() + # # one 0.1uF cap each for Vdd1-5 and one bulk 4.7uF cap + # self.pwr_cap[0] = imp.Block(DecouplingCapacitor(4.7 * uFarad(tol=0.2))) + # for i in range(1, 4): + # self.pwr_cap[i] = imp.Block(DecouplingCapacitor(0.1 * uFarad(tol=0.2))) + # + # # one 10nF and 1uF cap for VddA TODO generate the same cap if a different Vref is used + # self.vdda_cap_0 = imp.Block(DecouplingCapacitor(10 * nFarad(tol=0.2))) + # self.vdda_cap_1 = imp.Block(DecouplingCapacitor(1 * uFarad(tol=0.2))) + + if self.get(self.reset.is_connected()): + self.connect(self.reset, self.ic.nrst) From 99020f62ee7b8cce3ceaf8126f3726e142086d43 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Thu, 4 Jun 2026 23:48:16 -0700 Subject: [PATCH 02/13] everything except for peripheral maps --- edg/parts/microcontroller/Ch32v003.py | 325 +++++++++++++------------- 1 file changed, 167 insertions(+), 158 deletions(-) diff --git a/edg/parts/microcontroller/Ch32v003.py b/edg/parts/microcontroller/Ch32v003.py index 1b9c1bd15..847e4698c 100644 --- a/edg/parts/microcontroller/Ch32v003.py +++ b/edg/parts/microcontroller/Ch32v003.py @@ -4,6 +4,52 @@ from ...circuits import * from ...vendor_parts.jlc.JlcPart import JlcPart +from ..connector.Headers import PinHeader254 +from ..connector.TagConnect import TagConnect + + +@abstract_block_default(lambda: Ch32VSdiHeader254) +class Ch32vSdiHeader(ProgrammingConnector): + """Abstract programming header for the CH32V using the one-pin SDI interface with SWIO pin..""" + + def __init__(self) -> None: + super().__init__() + + self.pwr = self.Port(VoltageSink.empty(), [Power]) + self.gnd = self.Port(Ground.empty(), [Common]) + self.swio = self.Port(DigitalBidir.empty()) + self.reset = self.Port(DigitalBidir.empty(), optional=True) # may not be connected internally + + +class Ch32VSdiHeader254(Ch32vSdiHeader): + """3-pin minimal programming header for CH32V.""" + + @override + def contents(self) -> None: + super().contents() + + self.gnd.init_from(Ground()) + self.pwr.init_from(VoltageSink()) + self.swio.init_from(DigitalBidir()) + self.reset.init_from(DigitalBidir()) + + self.conn = self.Block(PinHeader254()).connected({"1": self.pwr, "2": self.gnd, "3": self.swio}) + + +class Ch32VSdiTc2030(Ch32vSdiHeader): + """UNOFFICIAL tag connect header, based on the SWD pinout and mapping SWDIO to SWIO.""" + + @override + def contents(self) -> None: + super().contents() + + self.gnd.init_from(Ground()) + self.pwr.init_from(VoltageSink()) + self.swio.init_from(DigitalBidir()) + self.reset.init_from(DigitalBidir()) + + self.conn = self.Block(TagConnect(6)).connected({"1": self.pwr, "5": self.gnd, "2": self.swio, "3": self.reset}) + # unused: 4 = swclk, 6 = swo class Ch32v003_Device( @@ -14,140 +60,113 @@ class Ch32v003_Device( JlcPart, FootprintBlock, ): - _PIN_MAPPING = { - # "PC13": "2", - # "PC14": "3", - # "PC15": "4", - # "PA0": "10", - # "PA1": "11", - # "PA2": "12", - # "PA3": "13", - # "PA4": "14", - # "PA5": "15", - # "PA6": "16", - # "PA7": "17", - # "PB0": "18", - # "PB1": "19", - # "PB2": "20", - # "PB10": "21", - # "PB11": "22", - # "PB12": "25", - # "PB13": "26", - # "PB14": "27", - # "PB15": "28", - # "PA8": "29", - # "PA9": "30", - # "PA10": "31", - # "PA11": "32", - # "PA12": "33", - # "PA13": "34", - # "PA14": "37", - # "PA15": "38", - # "PB3": "39", - # "PB4": "40", - # "PB5": "41", - # "PB6": "42", - # "PB7": "43", - # "PB8": "45", - # "PB9": "46", + _PIN_MAPPING = { # F4P6 version, TSSOP-20 + "PD4": "1", + "PD5": "2", + "PD6": "3", + # "PD7": "4", # NRST + # "PA1": "5", # OSCI + # "PA2": "6", # OSCO + "PD0": "8", + "PC0": "10", + "PC1": "11", + "PC2": "12", + "PC3": "13", + "PC4": "14", + "PC5": "15", + "PC6": "16", + "PC7": "17", + # "PD1": "18", # SWIO + "PD2": "19", + "PD3": "20", } - # def __init__(self, **kwargs: Any) -> None: - # super().__init__(**kwargs) - # - # # Additional ports (on top of BaseIoController) - # self.pwr = self.Port( - # VoltageSink( - # voltage_limits=(3.0, 3.6) - # * Volt, # TODO relaxed range down to 2.0 if ADC not used, or 2.4 if USB not used - # current_draw=(0, 50.3) * mAmp + self.io_current_draw.upper(), # Table 13 - # ), - # [Power], - # ) - # self.gnd = self.Port(Ground(), [Common]) - # - # self.nrst = self.Port( - # DigitalSink.from_supply( - # self.gnd, - # self.pwr, - # voltage_limit_tolerance=(-0.3, 0.3) - # * Volt, # Table 5.3.1, general operating conditions TODO: FT IO, BOOT0 IO - # input_threshold_abs=(0.8, 2) * Volt, - # pullup_capable=True, - # ), - # optional=True, - # ) # note, internal pull-up resistor, 30-50 kOhm by Table 35 - # - # # TODO need to pass through to pin mapper - # # self.osc32 = self.Port(CrystalDriver(frequency_limits=32.768*kHertz(tol=0), # TODO actual tolerances - # # voltage_out=self.pwr.link().voltage), - # # optional=True) # TODO other specs from Table 23 - # self.osc = self.Port( - # CrystalDriver(frequency_limits=(4, 16) * MHertz, voltage_out=self.pwr.link().voltage), optional=True - # ) # Table 22 - # - # self.swd = self.Port(SwdTargetPort.empty()) - # self._io_ports.insert(0, self.swd) + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + + # Additional ports (on top of BaseIoController) + self.vdd = self.Port( + VoltageSink( + voltage_limits=(2.8, 5.5) * Volt, # stricter range when ADC used + current_draw=(0.009, 8.0) * mAmp + self.io_current_draw.upper(), # standby min to 48MHz run max + ), + [Power], + ) + self.vss = self.Port(Ground(), [Common]) + + self.nrst = self.Port( # Table 3-19 + DigitalSink.from_supply( + self.gnd, + self.pwr, + voltage_limit_tolerance=(-0.3, 0.3) * Volt, + input_threshold_abs=( + 0.28 * (self.vdd.link().voltage.lower() - 1.8) + 0.6 + self.vss.link().voltage.lower(), + 0.41 * (self.vdd.link().voltage.upper() - 1.8) + 1.3 + self.vss.link().voltage.upper(), + ), + pullup_capable=True, + ), + optional=True, + ) # note, switched internal pull-up resistor, 35-55 kOhm + + self.osc = self.Port( + CrystalDriver(frequency_limits=(4, 25) * MHertz, voltage_out=self.pwr.link().voltage), optional=True + ) # Table 3-10 crystal / resonator specs, typ 24 MHz + + self.swio = self.Port(DigitalBidir.empty()) @override def _system_pinmap(self) -> Mapping[Union[Iterable[str], str], Union[Passive, HasPassivePort]]: - # return { - # "1": self.pwr, # Vbat - # "9": self.pwr, # VddA - # "8": self.gnd, # VssA - # ("23", "35", "47"): self.gnd, # Vss - # ("24", "36", "48"): self.pwr, # Vdd - # "44": self.gnd, # BOOT0 - # "5": self.osc.xtal_in, # TODO remappable to PD0 - # "6": self.osc.xtal_out, # TODO remappable to PD1 - # "7": self.nrst, - # } + return { + "7": self.vss, + "9": self.vdd, + "5": self.osc.xtal_in, # TODO remappable to PA1 + "6": self.osc.xtal_out, # TODO remappable to PA2 + "4": self.nrst, + "18": self.swio, + } @override def _io_pinmap(self) -> PinMapUtil: - # # Port models - # dio_ft_model = DigitalBidir.from_supply( - # self.gnd, - # self.pwr, - # voltage_limit_abs=(-0.3, 5.2) * Volt, # Table 5.3.1, general operating conditions, TODO relaxed for Vdd>2v - # current_limits=(-20, 20) * mAmp, # Section 5.3.13 Output driving current, TODO loose with relaxed VOL/VOH - # input_threshold_factor=(0.35, 0.65), # TODO relaxed (but more complex) bounds available - # pullup_capable=True, - # pulldown_capable=True, - # ) - # dio_std_model = DigitalBidir.from_supply( - # self.gnd, - # self.pwr, - # voltage_limit_tolerance=(-0.3, 0.3) * Volt, # Table 5.3.1, general operating conditions - # current_limits=(-20, 20) * mAmp, # Section 5.3.13 Output driving current, TODO loose with relaxed VOL/VOH - # input_threshold_factor=(0.35, 0.65), # TODO relaxed (but more complex) bounds available - # pullup_capable=True, - # pulldown_capable=True, - # ) - # dio_pc_13_14_15_model = DigitalBidir.from_supply( - # self.gnd, - # self.pwr, - # voltage_limit_tolerance=(-0.3, 0.3) * Volt, # Table 5.3.1, general operating conditions - # current_limits=(-3, 3) * mAmp, # Section 5.3.13 Output driving current - # input_threshold_factor=(0.35, 0.65), # TODO relaxed (but more complex) bounds available - # pullup_capable=True, - # pulldown_capable=True, - # ) - # - # adc_model = AnalogSink.from_supply( - # self.gnd, - # self.pwr, - # voltage_limit_tolerance=(-0.3, 0.3) * Volt, # general operating conditions, IO input voltage - # signal_limit_tolerance=(0, 0), # conversion voltage range, 0 to Vref+ (assumed VddA) - # impedance=(100, float("inf")) * kOhm, - # ) - # - # uart_model = UartPort(DigitalBidir.empty()) - # spi_model = SpiController(DigitalBidir.empty()) - # # TODO SPI peripherals, which have fixed-pin CS lines - # i2c_model = I2cController(DigitalBidir.empty()) - # i2c_target_model = I2cTarget(DigitalBidir.empty()) - # + # Port models + dio_ft_model = DigitalBidir.from_supply( + self.gnd, + self.pwr, + voltage_limit_abs=(-0.3, 5.5) * Volt, # table 3.1 + current_limits=(-20, 20) * mAmp, # table 3.1 + input_threshold_abs=( # table 3-16 + 0.19 * (self.vdd.link().voltage.lower() - 2.7) + 0.65 + self.vss.link().voltage.lower(), + 0.22 * (self.vdd.link().voltage.upper() - 2.7) + 1.55 + self.vss.link().voltage.upper(), + ), + pullup_capable=True, # 35-55 kOhm + pulldown_capable=True, # 35-55 kOhm + ) + dio_std_model = DigitalBidir.from_supply( + self.gnd, + self.pwr, + voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 3.1 + current_limits=(-20, 20) * mAmp, # table 3.1 + input_threshold_abs=( # table 3-16 + 0.19 * (self.vdd.link().voltage.lower() - 2.7) + 0.65 + self.vss.link().voltage.lower(), + 0.22 * (self.vdd.link().voltage.upper() - 2.7) + 1.55 + self.vss.link().voltage.upper(), + ), + pullup_capable=True, # 35-55 kOhm + pulldown_capable=True, # 35-55 kOhm + ) + + adc_model = AnalogSink.from_supply( + self.gnd, + self.pwr, + voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 3.1 + signal_limit_tolerance=(0, 0), # conversion voltage range, 0 to Vref+ (assumed VddA) + impedance=(100, float("inf")) * kOhm, + ) + + uart_model = UartPort(DigitalBidir.empty()) + spi_model = SpiController(DigitalBidir.empty()) + # TODO SPI peripherals, which have fixed-pin CS lines + i2c_model = I2cController(DigitalBidir.empty()) + i2c_target_model = I2cTarget(DigitalBidir.empty()) + # return PinMapUtil( # [ # Table 5, partial table for 48-pin only # PinResource("PA0", {"PA0": dio_std_model, "ADC12_IN0": adc_model}), @@ -229,18 +248,16 @@ def _io_pinmap(self) -> PinMapUtil: def generate(self) -> None: super().generate() - # self.footprint( - # "U", - # "Package_QFP:LQFP-48_7x7mm_P0.5mm", - # self._make_pinning(), - # mfr="STMicroelectronics", - # part="STM32F103xxT6", - # datasheet="https://www.st.com/resource/en/datasheet/stm32f103c8.pdf", - # pnp_rot=-90, - # ) - # self.assign(self.lcsc_part, "C8304") # max memory CBT6 variant - # self.assign(self.actual_basic_part, False) - + self.footprint( + "U", + "Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm", + self._make_pinning(), + mfr="WCH", + part="CH32V003F4P6", + datasheet="https://www.wch-ic.com/downloads/CH32V003DS0_PDF.html", + ) + self.assign(self.lcsc_part, "C5187096") + self.assign(self.actual_basic_part, False) class Ch32v003( @@ -252,16 +269,13 @@ class Ch32v003( IoControllerPowerRequired, GeneratorBlock, ): - """Low-cost, bare bones RISC-V microcontroller""" - DEFAULT_CRYSTAL_FREQUENCY = 8 * MHertz(tol=0.005) # as in common dev boards / eval boards + """Low-cost, bare bones RISC-V (RV32EC) microcontroller""" + + DEFAULT_CRYSTAL_FREQUENCY = 24 * MHertz(tol=0.005) # 24 MHz as typical in datasheet def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) - self.generator_param( - self.reset.is_connected(), - self.pin_assigns, - self.gpio.requested(), - ) + self.generator_param(self.reset.is_connected()) @override def generate(self) -> None: @@ -270,19 +284,14 @@ def generate(self) -> None: with self.implicit_connect(ImplicitConnect(self.pwr, [Power]), ImplicitConnect(self.gnd, [Common])) as imp: self.ic = imp.Block(Ch32v003_Device(pin_assigns=ArrayStringExpr())) self._wrap_inner(self.ic) - # self.connect(self.xtal_node, self.ic.osc) - # self.connect(self.swd_node, self.ic.swd) - # self.connect(self.reset_node, self.ic.nrst) - # - # self.pwr_cap = ElementDict[DecouplingCapacitor]() - # # one 0.1uF cap each for Vdd1-5 and one bulk 4.7uF cap - # self.pwr_cap[0] = imp.Block(DecouplingCapacitor(4.7 * uFarad(tol=0.2))) - # for i in range(1, 4): - # self.pwr_cap[i] = imp.Block(DecouplingCapacitor(0.1 * uFarad(tol=0.2))) - # - # # one 10nF and 1uF cap for VddA TODO generate the same cap if a different Vref is used - # self.vdda_cap_0 = imp.Block(DecouplingCapacitor(10 * nFarad(tol=0.2))) - # self.vdda_cap_1 = imp.Block(DecouplingCapacitor(1 * uFarad(tol=0.2))) + + self.sdi = imp.Block(Ch32vSdiHeader()) + self.connect(self.ic.swio, self.sdi.swio) + self.connect(self.ic.nrst, self.sdi.reset) + + self.connect(self.xtal_node, self.ic.osc) + + self.vdd_cap = imp.Block(DecouplingCapacitor(0.1 * uFarad(tol=0.2))) if self.get(self.reset.is_connected()): self.connect(self.reset, self.ic.nrst) From 2764449e99dca8a07a1df6b7b84d4e0f24f4ae85 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 00:43:07 -0700 Subject: [PATCH 03/13] wip --- edg/abstract_parts/IoControllerWrapper.py | 6 +- edg/parts/microcontroller/Ch32v003.py | 108 ++++++---------------- 2 files changed, 35 insertions(+), 79 deletions(-) diff --git a/edg/abstract_parts/IoControllerWrapper.py b/edg/abstract_parts/IoControllerWrapper.py index f9d2b3ff5..d7bdcc196 100644 --- a/edg/abstract_parts/IoControllerWrapper.py +++ b/edg/abstract_parts/IoControllerWrapper.py @@ -5,6 +5,7 @@ from .IoController import BaseIoController +@non_library class BaseIoControllerModelable(BaseIoController): """Base class for a BaseIoController that can (optionally) be used as a (non-physical) model. This only adds parameters as a standard interface and is not functional. @@ -17,9 +18,11 @@ def __init__( self._model = self.ArgParameter(_model) self._allowed_pins = self.ArgParameter(_allowed_pins) - self.generator_param(self._allowed_pins) + if isinstance(self, GeneratorBlock): + self.generator_param(self._allowed_pins) +@non_library class BaseIoControllerWrapped(BaseIoController): """Base class for IoController wrapped blocks, particularly footprints that are used with an outer WrapperSubboardBlock to implement e.g. a dev board or module around a modeling subcircuit. @@ -156,6 +159,7 @@ def _make_pinning( return pinning +@non_library class BaseIoControllerWrapper(BaseIoController): """Base class for a block that contains a BaseIoControllerWrapped as the physical footprint as well as a non-physical device model. diff --git a/edg/parts/microcontroller/Ch32v003.py b/edg/parts/microcontroller/Ch32v003.py index 847e4698c..031210c65 100644 --- a/edg/parts/microcontroller/Ch32v003.py +++ b/edg/parts/microcontroller/Ch32v003.py @@ -157,7 +157,6 @@ def _io_pinmap(self) -> PinMapUtil: self.gnd, self.pwr, voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 3.1 - signal_limit_tolerance=(0, 0), # conversion voltage range, 0 to Vref+ (assumed VddA) impedance=(100, float("inf")) * kOhm, ) @@ -167,82 +166,36 @@ def _io_pinmap(self) -> PinMapUtil: i2c_model = I2cController(DigitalBidir.empty()) i2c_target_model = I2cTarget(DigitalBidir.empty()) - # return PinMapUtil( - # [ # Table 5, partial table for 48-pin only - # PinResource("PA0", {"PA0": dio_std_model, "ADC12_IN0": adc_model}), - # PinResource("PA1", {"PA1": dio_std_model, "ADC12_IN1": adc_model}), - # PinResource("PA2", {"PA2": dio_std_model, "ADC12_IN2": adc_model}), - # PinResource("PA3", {"PA3": dio_std_model, "ADC12_IN3": adc_model}), - # PinResource("PA4", {"PA4": dio_std_model, "ADC12_IN4": adc_model}), - # PinResource("PA5", {"PA5": dio_std_model, "ADC12_IN5": adc_model}), - # PinResource("PA6", {"PA6": dio_std_model, "ADC12_IN6": adc_model}), - # PinResource("PA7", {"PA7": dio_std_model, "ADC12_IN7": adc_model}), - # PinResource("PB0", {"PB0": dio_std_model, "ADC12_IN8": adc_model}), - # PinResource("PB1", {"PB1": dio_std_model, "ADC12_IN9": adc_model}), - # PinResource("PB2", {"PB2": dio_ft_model}), # BOOT1 - # PinResource("PB10", {"PB10": dio_ft_model}), - # PinResource("PB11", {"PB11": dio_ft_model}), - # PinResource("PB12", {"PB12": dio_ft_model}), - # PinResource("PB13", {"PB13": dio_ft_model}), - # PinResource("PB14", {"PB14": dio_ft_model}), - # PinResource("PB15", {"PB15": dio_ft_model}), - # PinResource("PA8", {"PA8": dio_ft_model}), - # PinResource("PA9", {"PA9": dio_ft_model}), - # PinResource("PA10", {"PA10": dio_ft_model}), - # PinResource("PA11", {"PA11": dio_ft_model}), - # PinResource("PA12", {"PA12": dio_ft_model}), - # # PinResource('PA13', {'PA13': dio_ft_model}), # forced SWDIO default is JTMS/SWDIO - # # PinResource('PA14', {'PA14': dio_ft_model}), # forced SWCLK, default is JTCK/SWCLK - # PinResource("PA15", {"PA15": dio_ft_model}), # default is JTDI - # PinResource("PB3", {"PB3": dio_ft_model}), # SWO, default is JTDO - # PinResource("PB4", {"PB4": dio_ft_model}), # default is JNTRST - # PinResource("PB5", {"PB5": dio_std_model}), - # PinResource("PB6", {"PB6": dio_ft_model}), - # PinResource("PB7", {"PB7": dio_ft_model}), - # PinResource("PB8", {"PB8": dio_ft_model}), - # PinResource("PB9", {"PB9": dio_ft_model}), - # # PinResource('NRST', {'NRST': dio_std_model}), # non-mappable to IO! - # # de-prioritize these for auto-assignment since they're low-current - # PinResource("PC13", {"PC13": dio_pc_13_14_15_model}), - # PinResource("PC14", {"PC14": dio_pc_13_14_15_model, "OSC32_IN": Passive()}), - # PinResource("PC15", {"PC15": dio_pc_13_14_15_model, "OSC32_OUT": Passive()}), - # PeripheralFixedResource("USART2", uart_model, {"tx": ["PA2", "PD5"], "rx": ["PA3", "PD6"]}), - # PeripheralFixedResource( - # "SPI1", spi_model, {"sck": ["PA5", "PB3"], "miso": ["PA6", "PB4"], "mosi": ["PA7", "PB5"]} - # ), - # PeripheralFixedResource( - # "USART3", uart_model, {"tx": ["PB10", "PD8", "PC10"], "rx": ["PB11", "PD9", "PC11"]} - # ), - # PeripheralFixedResource("I2C2", i2c_model, {"scl": ["PB10"], "sda": ["PB11"]}), - # PeripheralFixedResource( - # "I2C2_T", - # i2c_target_model, - # {"scl": ["PB10"], "sda": ["PB11"]}, # TODO shared resource w/ I2C controller - # ), - # PeripheralFixedResource("SPI2", spi_model, {"sck": ["PB13"], "miso": ["PB14"], "mosi": ["PB15"]}), - # PeripheralFixedResource("USART1", uart_model, {"tx": ["PA9", "PB6"], "rx": ["PA10", "PB7"]}), - # PeripheralFixedResource( - # "CAN", - # CanControllerPort(DigitalBidir.empty()), - # {"txd": ["PA12", "PD1", "PB9"], "rxd": ["PA11", "PD0", "PB8"]}, - # ), - # PeripheralFixedResource("USB", UsbDevicePort(DigitalBidir.empty()), {"dm": ["PA11"], "dp": ["PA12"]}), - # PeripheralFixedPin( - # "SWD", - # SwdTargetPort(dio_std_model), - # { # TODO most are FT pins - # "swdio": "PA13", - # "swclk": "PA14", # note: SWO is PB3 - # }, - # ), - # PeripheralFixedResource("I2C1", i2c_model, {"scl": ["PB6", "PB8"], "sda": ["PB7", "PB9"]}), - # PeripheralFixedResource( - # "I2C1_T", - # i2c_target_model, - # {"scl": ["PB6", "PB8"], "sda": ["PB7", "PB9"]}, # TODO shared resource w/ I2C controller - # ), - # ] - # ).remap_pins(self._PIN_MAPPING) + return PinMapUtil( + [ # table 2-1 + PinResource("PD4", {"PD4": dio_std_model, "A7": adc_model}), + PinResource("PD5", {"PD5": dio_std_model, "A5": adc_model}), + PinResource("PD6", {"PD6": dio_std_model, "A6": adc_model}), + PinResource("PD7", {"PD7": dio_std_model}), # NRST + PinResource("PA1", {"PA1": dio_std_model, "A1": adc_model}), + PinResource("PA2", {"PA2": dio_std_model, "A0": adc_model}), + PinResource("PD0", {"PD0": dio_std_model}), + PinResource("PC0", {"PC0": dio_std_model}), + PinResource("PC1", {"PC1": dio_ft_model}), + PinResource("PC2", {"PC2": dio_ft_model}), + PinResource("PC3", {"PC3": dio_std_model}), + PinResource("PC4", {"PC4": dio_ft_model, "A2": adc_model}), + PinResource("PC5", {"PC5": dio_ft_model}), + PinResource("PC6", {"PC6": dio_ft_model}), + PinResource("PC7", {"PC7": dio_std_model}), + PinResource("PD1", {"PD1": dio_std_model}), # SWIO + PinResource("PD2", {"PD2": dio_std_model, "A3": adc_model}), + PinResource("PD3", {"PD3": dio_std_model, "A4": adc_model}), + PeripheralFixedResource( + "U", uart_model, {"tx": ["PD5", "PD0", "PD6", "PC0"], "rx": ["PD6", "PD1", "PD5", "PC1"]} + ), + PeripheralFixedResource("SPI", spi_model, {"sck": ["PC5"], "miso": ["PC7"], "mosi": ["PC6"]}), + PeripheralFixedResource("I2C", i2c_model, {"scl": ["PC2", "PD1", "PC5"], "sda": ["PC1", "PD0", "PC6"]}), + PeripheralFixedResource( + "I2C_T", i2c_target_model, {"scl": ["PC2", "PD1", "PC5"], "sda": ["PC1", "PD0", "PC6"]} + ), + ] + ).remap_pins(self._PIN_MAPPING) @override def generate(self) -> None: @@ -264,7 +217,6 @@ class Ch32v003( Resettable, IoControllerI2cTarget, Microcontroller, - IoControllerWithSwdTargetConnector, WithCrystalGenerator, IoControllerPowerRequired, GeneratorBlock, From d356a7f943640f0dcb0a6e31f226729412435114 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 00:55:12 -0700 Subject: [PATCH 04/13] fixes --- edg/parts/microcontroller/Ch32v003.py | 12 ++--- edg/parts/microcontroller/__init__.py | 1 + edg/parts/microcontroller/nRF52840.py | 2 +- examples/test_ble_joystick.py | 68 ++++++++++++++++++++------- 4 files changed, 60 insertions(+), 23 deletions(-) diff --git a/edg/parts/microcontroller/Ch32v003.py b/edg/parts/microcontroller/Ch32v003.py index 031210c65..e705b577f 100644 --- a/edg/parts/microcontroller/Ch32v003.py +++ b/edg/parts/microcontroller/Ch32v003.py @@ -8,7 +8,7 @@ from ..connector.TagConnect import TagConnect -@abstract_block_default(lambda: Ch32VSdiHeader254) +@abstract_block_default(lambda: Ch32vSdiHeader254) class Ch32vSdiHeader(ProgrammingConnector): """Abstract programming header for the CH32V using the one-pin SDI interface with SWIO pin..""" @@ -21,7 +21,7 @@ def __init__(self) -> None: self.reset = self.Port(DigitalBidir.empty(), optional=True) # may not be connected internally -class Ch32VSdiHeader254(Ch32vSdiHeader): +class Ch32vSdiHeader254(Ch32vSdiHeader): """3-pin minimal programming header for CH32V.""" @override @@ -36,7 +36,7 @@ def contents(self) -> None: self.conn = self.Block(PinHeader254()).connected({"1": self.pwr, "2": self.gnd, "3": self.swio}) -class Ch32VSdiTc2030(Ch32vSdiHeader): +class Ch32vSdiTc2030(Ch32vSdiHeader): """UNOFFICIAL tag connect header, based on the SWD pinout and mapping SWDIO to SWIO.""" @override @@ -96,8 +96,8 @@ def __init__(self, **kwargs: Any) -> None: self.nrst = self.Port( # Table 3-19 DigitalSink.from_supply( - self.gnd, - self.pwr, + self.vss, + self.vdd, voltage_limit_tolerance=(-0.3, 0.3) * Volt, input_threshold_abs=( 0.28 * (self.vdd.link().voltage.lower() - 1.8) + 0.6 + self.vss.link().voltage.lower(), @@ -109,7 +109,7 @@ def __init__(self, **kwargs: Any) -> None: ) # note, switched internal pull-up resistor, 35-55 kOhm self.osc = self.Port( - CrystalDriver(frequency_limits=(4, 25) * MHertz, voltage_out=self.pwr.link().voltage), optional=True + CrystalDriver(frequency_limits=(4, 25) * MHertz, voltage_out=self.vdd.link().voltage), optional=True ) # Table 3-10 crystal / resonator specs, typ 24 MHz self.swio = self.Port(DigitalBidir.empty()) diff --git a/edg/parts/microcontroller/__init__.py b/edg/parts/microcontroller/__init__.py index 5bf3f7be1..53760c553 100644 --- a/edg/parts/microcontroller/__init__.py +++ b/edg/parts/microcontroller/__init__.py @@ -1,3 +1,4 @@ +from .Ch32v003 import Ch32v003, Ch32vSdiHeader, Ch32vSdiHeader254, Ch32vSdiTc2030 from .Lpc1549 import Lpc1549_48, Lpc1549_64 from .Stm32f103 import Stm32f103_48 from .Stm32f303 import Nucleo_F303k8 diff --git a/edg/parts/microcontroller/nRF52840.py b/edg/parts/microcontroller/nRF52840.py index 34575f10a..cabb9806a 100644 --- a/edg/parts/microcontroller/nRF52840.py +++ b/edg/parts/microcontroller/nRF52840.py @@ -529,7 +529,7 @@ def generate(self) -> None: self._make_model_pinning(Holyiot_18010_Footprint._PIN_REMAPPING, self.get(self.pin_assigns)), ) - self.device = self.Block(Holyiot_18010_Footprint(pin_assigns=self.model.actual_pin_assigns, external=True)) + self.device = self.Block(Holyiot_18010_Footprint(pin_assigns=self.model.actual_pin_assigns), external=True) self.assign(self.actual_pin_assigns, self.device.actual_pin_assigns) self._export_tap_ios_inner(self.device) self.export_tap(self.gnd, self.device.gnd) diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py index 4ec1f8cf5..11b6e749a 100644 --- a/examples/test_ble_joystick.py +++ b/examples/test_ble_joystick.py @@ -25,6 +25,32 @@ def __init__(self) -> None: self.export_tap(self.ax2.net, self.conn.pins.request("6")) +class ButtonSubboard(SubboardBlock): + def __init__(self) -> None: + super().__init__() + + self.gnd = self.Port(Ground.empty(), [Common]) + self.pwr = self.Port(VoltageSink.empty()) + self.i2c = self.Port(I2cTarget.empty()) + self.io0 = self.Port(DigitalBidir.empty()) + self.vbat = self.Port(VoltageSink.empty()) + + with self.implicit_connect( + ImplicitConnect(self.gnd, [Common]), + ImplicitConnect(self.pwr, [Power]), + ) as imp: + self.ioe = imp.Block(IoController()) + self.connect(self.ioe.with_mixin(IoControllerI2cTarget()).i2c_target.request(), self.i2c) + + self.conn = self.Block(Fpc050Pair(6), external=True) + self.export_tap(self.gnd.net, self.conn.pins.request("1")) + self.export_tap(self.pwr.net, self.conn.pins.request("2")) + self.export_tap(self.i2c.scl.net, self.conn.pins.request("3")) + self.export_tap(self.i2c.sda.net, self.conn.pins.request("4")) + self.export_tap(self.io0.net, self.conn.pins.request("5")) + self.export_tap(self.vbat.net, self.conn.pins.request("6")) + + class BleJoystick(JlcBoardTop): """BLE joystick with XYAB buttons""" @@ -128,13 +154,22 @@ def contents(self) -> None: self.mcu.adc.request("vbat_sense"), ) - (self.i2c_pull,), _ = self.chain(self.mcu.i2c.request("i2c"), imp.Block(I2cPullup()), self.mp2722.i2c) + mcu_i2c = self.mcu.i2c.request("i2c") + (self.i2c_pull,), _ = self.chain(mcu_i2c, imp.Block(I2cPullup()), self.mp2722.i2c) + + self.btns = self.Block(ButtonSubboard()) + self.connect(self.btns.gnd, self.gnd) + self.connect(self.btns.pwr, self.v3v3) + self.connect(self.btns.i2c, mcu_i2c) + self.connect(self.btns.io0, self.mcu.gpio.request("btn_io0")) + self.connect(self.btns.vbat, self.vbat) # TODO use power-gated version @override def refinements(self) -> Refinements: return super().refinements() + Refinements( instance_refinements=[ - (["mcu"], Esp32c3_Wroom02), + (["mcu"], Holyiot_18010), + (["btns", "ioe"], Ch32v003), (["reg_3v3"], Ap7215), (["sw[0]", "package"], SmtSwitch), (["sw[1]", "package"], SmtSwitch), @@ -146,20 +181,20 @@ def refinements(self) -> Refinements: ( ["mcu", "pin_assigns"], [ - "led=_GPIO9_STRAP", # force using the strapping / boot mode pin - # note, only ADC pins are IO0/1/3/4/5 (pins 18/17/15/3/4) - "ax1=3", - "ax2=15", - "trig=17", - "vbat_sense=18", - # 'vbat_sense_gate=14', - # 'gate_ctl=5', - "i2c.scl=4", - "i2c.sda=14", - "sw=5", # joystick - "sw0=10", # membranes - "sw1=13", - "sw2=6", + # "led=_GPIO9_STRAP", # force using the strapping / boot mode pin + # # note, only ADC pins are IO0/1/3/4/5 (pins 18/17/15/3/4) + # "ax1=3", + # "ax2=15", + # "trig=17", + # "vbat_sense=18", + # # 'vbat_sense_gate=14', + # # 'gate_ctl=5', + # "i2c.scl=4", + # "i2c.sda=14", + # "sw=5", # joystick + # "sw0=10", # membranes + # "sw1=13", + # "sw2=6", ], ), (["mcu", "programming"], "uart-auto-button"), @@ -169,6 +204,7 @@ def refinements(self) -> Refinements: ], class_refinements=[ (EspProgrammingHeader, EspProgrammingTc2030), + (Ch32vSdiHeader, Ch32vSdiTc2030), (TestPoint, CompactKeystone5015), (PassiveConnector, JstPhKVertical), ], From a4d072100df20e28cd79c40f43d3fa28a2b5a83d Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 01:23:44 -0700 Subject: [PATCH 05/13] improve docs --- edg/circuits/PowerConditioning.py | 5 +- edg/parts/microcontroller/Ch32v003.py | 86 +++++++++---------- examples/test_ble_joystick.py | 117 +++++++++++++------------- 3 files changed, 104 insertions(+), 104 deletions(-) diff --git a/edg/circuits/PowerConditioning.py b/edg/circuits/PowerConditioning.py index 1093c24db..82745b003 100644 --- a/edg/circuits/PowerConditioning.py +++ b/edg/circuits/PowerConditioning.py @@ -347,7 +347,10 @@ def __init__( optional=True, doc="Allows the button state to be read independently of the control signal. Open-drain.", ) - self.btn_in = self.Port(DigitalBidir.empty(), doc="Should be connected to a button output. Do not connect IO") + self.btn_in = self.Port( + DigitalBidir.empty(), + doc="Connect to button that pulls down to GND to turn on power. Do not connect to GPIO.", + ) self.control = self.Port( DigitalSink.empty(), doc="external control to latch the power on" ) # digital level control - gnd-referenced NFET gate diff --git a/edg/parts/microcontroller/Ch32v003.py b/edg/parts/microcontroller/Ch32v003.py index e705b577f..05e598564 100644 --- a/edg/parts/microcontroller/Ch32v003.py +++ b/edg/parts/microcontroller/Ch32v003.py @@ -31,7 +31,7 @@ def contents(self) -> None: self.gnd.init_from(Ground()) self.pwr.init_from(VoltageSink()) self.swio.init_from(DigitalBidir()) - self.reset.init_from(DigitalBidir()) + self.reset.init_from(DigitalBidir()) # not connected self.conn = self.Block(PinHeader254()).connected({"1": self.pwr, "2": self.gnd, "3": self.swio}) @@ -112,25 +112,9 @@ def __init__(self, **kwargs: Any) -> None: CrystalDriver(frequency_limits=(4, 25) * MHertz, voltage_out=self.vdd.link().voltage), optional=True ) # Table 3-10 crystal / resonator specs, typ 24 MHz - self.swio = self.Port(DigitalBidir.empty()) - - @override - def _system_pinmap(self) -> Mapping[Union[Iterable[str], str], Union[Passive, HasPassivePort]]: - return { - "7": self.vss, - "9": self.vdd, - "5": self.osc.xtal_in, # TODO remappable to PA1 - "6": self.osc.xtal_out, # TODO remappable to PA2 - "4": self.nrst, - "18": self.swio, - } - - @override - def _io_pinmap(self) -> PinMapUtil: - # Port models - dio_ft_model = DigitalBidir.from_supply( - self.gnd, - self.pwr, + self._dio_ft_model = DigitalBidir.from_supply( + self.vss, + self.vdd, voltage_limit_abs=(-0.3, 5.5) * Volt, # table 3.1 current_limits=(-20, 20) * mAmp, # table 3.1 input_threshold_abs=( # table 3-16 @@ -140,9 +124,9 @@ def _io_pinmap(self) -> PinMapUtil: pullup_capable=True, # 35-55 kOhm pulldown_capable=True, # 35-55 kOhm ) - dio_std_model = DigitalBidir.from_supply( - self.gnd, - self.pwr, + self._dio_std_model = DigitalBidir.from_supply( + self.vss, + self.vdd, voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 3.1 current_limits=(-20, 20) * mAmp, # table 3.1 input_threshold_abs=( # table 3-16 @@ -153,9 +137,25 @@ def _io_pinmap(self) -> PinMapUtil: pulldown_capable=True, # 35-55 kOhm ) + self.swio = self.Port(self._dio_std_model) + + @override + def _system_pinmap(self) -> Mapping[Union[Iterable[str], str], Union[Passive, HasPassivePort]]: + return { + "7": self.vss, + "9": self.vdd, + "5": self.osc.xtal_in, # TODO remappable to PA1 + "6": self.osc.xtal_out, # TODO remappable to PA2 + "4": self.nrst, + "18": self.swio, + } + + @override + def _io_pinmap(self) -> PinMapUtil: + # Port models adc_model = AnalogSink.from_supply( - self.gnd, - self.pwr, + self.vss, + self.vdd, voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 3.1 impedance=(100, float("inf")) * kOhm, ) @@ -168,24 +168,24 @@ def _io_pinmap(self) -> PinMapUtil: return PinMapUtil( [ # table 2-1 - PinResource("PD4", {"PD4": dio_std_model, "A7": adc_model}), - PinResource("PD5", {"PD5": dio_std_model, "A5": adc_model}), - PinResource("PD6", {"PD6": dio_std_model, "A6": adc_model}), - PinResource("PD7", {"PD7": dio_std_model}), # NRST - PinResource("PA1", {"PA1": dio_std_model, "A1": adc_model}), - PinResource("PA2", {"PA2": dio_std_model, "A0": adc_model}), - PinResource("PD0", {"PD0": dio_std_model}), - PinResource("PC0", {"PC0": dio_std_model}), - PinResource("PC1", {"PC1": dio_ft_model}), - PinResource("PC2", {"PC2": dio_ft_model}), - PinResource("PC3", {"PC3": dio_std_model}), - PinResource("PC4", {"PC4": dio_ft_model, "A2": adc_model}), - PinResource("PC5", {"PC5": dio_ft_model}), - PinResource("PC6", {"PC6": dio_ft_model}), - PinResource("PC7", {"PC7": dio_std_model}), - PinResource("PD1", {"PD1": dio_std_model}), # SWIO - PinResource("PD2", {"PD2": dio_std_model, "A3": adc_model}), - PinResource("PD3", {"PD3": dio_std_model, "A4": adc_model}), + PinResource("PD4", {"PD4": self._dio_std_model, "A7": adc_model}), + PinResource("PD5", {"PD5": self._dio_std_model, "A5": adc_model}), + PinResource("PD6", {"PD6": self._dio_std_model, "A6": adc_model}), + PinResource("PD7", {"PD7": self._dio_std_model}), # NRST + PinResource("PA1", {"PA1": self._dio_std_model, "A1": adc_model}), + PinResource("PA2", {"PA2": self._dio_std_model, "A0": adc_model}), + PinResource("PD0", {"PD0": self._dio_std_model}), + PinResource("PC0", {"PC0": self._dio_std_model}), + PinResource("PC1", {"PC1": self._dio_ft_model}), + PinResource("PC2", {"PC2": self._dio_ft_model}), + PinResource("PC3", {"PC3": self._dio_std_model}), + PinResource("PC4", {"PC4": self._dio_ft_model, "A2": adc_model}), + PinResource("PC5", {"PC5": self._dio_ft_model}), + PinResource("PC6", {"PC6": self._dio_ft_model}), + PinResource("PC7", {"PC7": self._dio_std_model}), + PinResource("PD1", {"PD1": self._dio_std_model}), # SWIO + PinResource("PD2", {"PD2": self._dio_std_model, "A3": adc_model}), + PinResource("PD3", {"PD3": self._dio_std_model, "A4": adc_model}), PeripheralFixedResource( "U", uart_model, {"tx": ["PD5", "PD0", "PD6", "PC0"], "rx": ["PD6", "PD1", "PD5", "PC1"]} ), diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py index 11b6e749a..5cb924a25 100644 --- a/examples/test_ble_joystick.py +++ b/examples/test_ble_joystick.py @@ -31,16 +31,44 @@ def __init__(self) -> None: self.gnd = self.Port(Ground.empty(), [Common]) self.pwr = self.Port(VoltageSink.empty()) + + self.vbat = self.Port(VoltageSink.empty()) self.i2c = self.Port(I2cTarget.empty()) self.io0 = self.Port(DigitalBidir.empty()) - self.vbat = self.Port(VoltageSink.empty()) + + self.tp_gnd = self.Block(GroundTestPoint("gnd")).connected(self.gnd) + self.tp_pwr = self.Block(VoltageTestPoint("v3v3")).connected(self.pwr) + self.tp_vbat = self.Block(VoltageTestPoint("vbat")).connected(self.vbat) + self.tp_i2c = self.Block(I2cTestPoint("i2c")).connected(self.i2c) + self.tp_io0 = self.Block(DigitalTestPoint("io0")).connected(self.io0) with self.implicit_connect( ImplicitConnect(self.gnd, [Common]), ImplicitConnect(self.pwr, [Power]), ) as imp: self.ioe = imp.Block(IoController()) - self.connect(self.ioe.with_mixin(IoControllerI2cTarget()).i2c_target.request(), self.i2c) + self.connect(self.ioe.with_mixin(IoControllerI2cTarget()).i2c_target.request("i2c"), self.i2c) + self.connect(self.ioe.gpio.request("io0"), self.io0) + + # debugging LEDs + (self.ledr,), _ = self.chain(imp.Block(IndicatorSinkLed(Led.Red)), self.ioe.gpio.request("led")) + + # d-pad buttons + self.sw = ElementDict[DigitalSwitch]() + for i in range(8): + sw = self.sw[i] = imp.Block(DigitalSwitch()) + self.connect(sw.out, self.ioe.gpio.request(f"sw{i}")) + + with self.implicit_connect( + ImplicitConnect(self.gnd, [Common]), + ImplicitConnect(self.vbat, [Power]), + ) as imp: + (self.npx_tp, self.npx_js, self.npx_dpad), _ = self.chain( + self.ioe.gpio.request("npx"), + imp.Block(DigitalTestPoint()), + imp.Block(NeopixelArray(8)), + imp.Block(NeopixelArray(8)), + ) self.conn = self.Block(Fpc050Pair(6), external=True) self.export_tap(self.gnd.net, self.conn.pins.request("1")) @@ -75,36 +103,19 @@ def contents(self) -> None: with self.implicit_connect( ImplicitConnect(self.gnd, [Common]), ) as imp: - # (self.gate, self.reg_3v3, self.tp_3v3, self.prot_3v3), _ = self.chain( - # self.vbat, - # imp.Block(SoftPowerGate()), - # imp.Block(VoltageRegulator(output_voltage=3.3*Volt(tol=0.05))), - # self.Block(VoltageTestPoint()), - # imp.Block(ProtectionZenerDiode(voltage=(3.45, 3.9)*Volt)) - # ) - - # self.chg = imp.Block(Mcp73831(charging_current=200*mAmp(tol=0.2))) - # self.connect(self.usb.pwr, self.chg.pwr) - # self.connect(self.chg.pwr_bat, self.bat.chg) - - self.mp2722 = imp.Block(Mp2722(output_voltage=(3.7, 4.35) * Volt, charging_current=200 * mAmp(tol=0.2))) - self.connect(self.mp2722.pwr_in, self.usb.pwr) - self.connect(self.mp2722.batt, self.vbat) - self.connect(self.mp2722.cc, self.usb.cc) - (self.reg_3v3, self.tp_3v3, self.prot_3v3), _ = self.chain( - self.mp2722.pwr_out, + (self.gate, self.reg_3v3, self.tp_3v3, self.prot_3v3), _ = self.chain( + self.vbat, + imp.Block(SoftPowerGate()), imp.Block(VoltageRegulator(output_voltage=3.3 * Volt(tol=0.05))), self.Block(VoltageTestPoint()), imp.Block(ProtectionZenerDiode(voltage=(3.45, 3.9) * Volt)), ) + self.vbat_gated = self.connect(self.gate.pwr_out) self.v3v3 = self.connect(self.reg_3v3.pwr_out) - self.fake_ntc = imp.Block(VoltageDivider(output_voltage=(1.5, 2) * Volt, impedance=(10, 100) * kOhm)) - self.connect(self.mp2722.vrntc, self.fake_ntc.input) - self.connect(self.fake_ntc.output, self.mp2722.ntc1) # TODO actual NTC - - # self.vbat_sense_gate = imp.Block(HighSideSwitch()) - # self.connect(self.vbat_sense_gate.pwr, self.vbat) + self.chg = imp.Block(Mcp73831(charging_current=200 * mAmp(tol=0.2))) + self.connect(self.usb.pwr, self.chg.pwr) + self.connect(self.chg.pwr_bat, self.bat.chg) # 3V3 DOMAIN with self.implicit_connect( @@ -112,24 +123,18 @@ def contents(self) -> None: ImplicitConnect(self.gnd, [Common]), ) as imp: self.mcu = imp.Block(IoController()) - self.mcu.with_mixin(IoControllerWifi()) + self.mcu.with_mixin(IoControllerBle()) + + # debugging LEDs + (self.ledr,), _ = self.chain(imp.Block(IndicatorSinkLed(Led.Red)), self.mcu.gpio.request("led")) self.stick = imp.Block(JoystickSubboard()) - (self.ax1_div,), _ = self.chain( - self.stick.ax1, - imp.Block(SignalDivider(ratio=(0.45, 0.55), impedance=(1, 10) * kOhm)), - self.mcu.adc.request("ax1"), - ) - (self.ax2_div,), _ = self.chain( - self.stick.ax2, - imp.Block(SignalDivider(ratio=(0.45, 0.55), impedance=(1, 10) * kOhm)), - self.mcu.adc.request("ax2"), - ) + self.connect(self.stick.ax1, self.mcu.adc.request("ax1")) + self.connect(self.stick.ax2, self.mcu.adc.request("ax2")) + self.connect(self.stick.sw, self.gate.btn_in) - # self.connect(self.stick.sw, self.gate.btn_in) - # self.connect(self.gate.btn_out, self.mcu.gpio.request('sw')) - # self.connect(self.mcu.gpio.request('gate_ctl'), self.gate.control) - self.connect(self.stick.sw, self.mcu.gpio.request("sw"), self.mp2722.rst) + self.connect(self.gate.btn_out, self.mcu.gpio.request("sw")) + self.connect(self.mcu.gpio.request("gate_ctl"), self.gate.control) self.trig = imp.Block(A1304()) (self.trig_div,), _ = self.chain( @@ -138,31 +143,21 @@ def contents(self) -> None: self.mcu.adc.request("trig"), ) - self.sw = ElementDict[DigitalSwitch]() - for i in range(3): - sw = self.sw[i] = imp.Block(DigitalSwitch()) - self.connect(sw.out, self.mcu.gpio.request(f"sw{i}")) - - # debugging LEDs - (self.ledr,), _ = self.chain(imp.Block(IndicatorSinkLed(Led.Red)), self.mcu.gpio.request("led")) - - # self.connect(self.vbat_sense_gate.control, self.mcu.gpio.request('vbat_sense_gate')) (self.vbat_sense,), _ = self.chain( - # self.vbat_sense_gate.output, - self.vbat, + self.vbat_gated, imp.Block(VoltageSenseDivider(full_scale_voltage=2.2 * Volt(tol=0.1), impedance=(1, 10) * kOhm)), self.mcu.adc.request("vbat_sense"), ) mcu_i2c = self.mcu.i2c.request("i2c") - (self.i2c_pull,), _ = self.chain(mcu_i2c, imp.Block(I2cPullup()), self.mp2722.i2c) + (self.i2c_pull,), _ = self.chain(mcu_i2c, imp.Block(I2cPullup())) self.btns = self.Block(ButtonSubboard()) self.connect(self.btns.gnd, self.gnd) self.connect(self.btns.pwr, self.v3v3) self.connect(self.btns.i2c, mcu_i2c) self.connect(self.btns.io0, self.mcu.gpio.request("btn_io0")) - self.connect(self.btns.vbat, self.vbat) # TODO use power-gated version + self.connect(self.btns.vbat, self.vbat_gated) @override def refinements(self) -> Refinements: @@ -171,10 +166,6 @@ def refinements(self) -> Refinements: (["mcu"], Holyiot_18010), (["btns", "ioe"], Ch32v003), (["reg_3v3"], Ap7215), - (["sw[0]", "package"], SmtSwitch), - (["sw[1]", "package"], SmtSwitch), - (["sw[2]", "package"], SmtSwitch), - (["mcu", "boot", "package"], SmtSwitch), ], instance_values=[ (["refdes_prefix"], "J"), # unique refdes for panelization @@ -197,7 +188,13 @@ def refinements(self) -> Refinements: # "sw2=6", ], ), - (["mcu", "programming"], "uart-auto-button"), + ( + ["btns", "ioe", "pin_assigns"], + [ + "i2c.scl=12", + "i2c.sda=11", + ], + ), (["mp2722", "power_path", "dutycycle_limit"], Range(0.1, 1)), # allow tracking (["mp2722", "power_path", "inductor", "manual_frequency_rating"], Range(0.0, 10e6)), (["mp2722", "power_path", "inductor", "footprint_spec"], "Inductor_SMD:L_1210_3225Metric"), @@ -207,10 +204,10 @@ def refinements(self) -> Refinements: (Ch32vSdiHeader, Ch32vSdiTc2030), (TestPoint, CompactKeystone5015), (PassiveConnector, JstPhKVertical), + (Neopixel, Ws2812c_2020), ], class_values=[ (CompactKeystone5015, ["lcsc_part"], "C5199798"), - (SmtSwitch, ["fp_footprint"], "project:MembraneSwitch_4mm"), ], ) From bef0948773114fc458f7ca669023a1a51095845f Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 01:40:28 -0700 Subject: [PATCH 06/13] Update test_ble_joystick.py --- examples/test_ble_joystick.py | 42 +++++++++++------------------------ 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py index 5cb924a25..5455a464d 100644 --- a/examples/test_ble_joystick.py +++ b/examples/test_ble_joystick.py @@ -113,7 +113,7 @@ def contents(self) -> None: self.vbat_gated = self.connect(self.gate.pwr_out) self.v3v3 = self.connect(self.reg_3v3.pwr_out) - self.chg = imp.Block(Mcp73831(charging_current=200 * mAmp(tol=0.2))) + self.chg = imp.Block(Mcp73831(charging_current=100 * mAmp(tol=0.2))) self.connect(self.usb.pwr, self.chg.pwr) self.connect(self.chg.pwr_bat, self.bat.chg) @@ -122,8 +122,9 @@ def contents(self) -> None: ImplicitConnect(self.v3v3, [Power]), ImplicitConnect(self.gnd, [Common]), ) as imp: - self.mcu = imp.Block(IoController()) - self.mcu.with_mixin(IoControllerBle()) + self.mcu = imp.Block(Holyiot_18010()) # nRF52 weirdly requires Vbus, so this can't be abstract + self.connect(self.mcu.pwr_usb, self.vusb) + (self.usb_esd,), self.usb_chain = self.chain(self.usb.usb, imp.Block(UsbEsdDiode()), self.mcu.usb.request()) # debugging LEDs (self.ledr,), _ = self.chain(imp.Block(IndicatorSinkLed(Led.Red)), self.mcu.gpio.request("led")) @@ -136,12 +137,13 @@ def contents(self) -> None: self.connect(self.gate.btn_out, self.mcu.gpio.request("sw")) self.connect(self.mcu.gpio.request("gate_ctl"), self.gate.control) - self.trig = imp.Block(A1304()) - (self.trig_div,), _ = self.chain( - self.trig.out, - imp.Block(SignalDivider(ratio=(0.45, 0.55), impedance=(1, 10) * kOhm)), - self.mcu.adc.request("trig"), - ) + (self.trig,), _ = self.chain(imp.Block(A1304()), self.mcu.adc.request("trig")) + + mcu_i2c = self.mcu.i2c.request("i2c") + (self.i2c_pull,), _ = self.chain(mcu_i2c, imp.Block(I2cPullup())) + + self.imu = imp.Block(Lsm6ds3trc()) + self.connect(mcu_i2c, self.imu.i2c) (self.vbat_sense,), _ = self.chain( self.vbat_gated, @@ -149,9 +151,6 @@ def contents(self) -> None: self.mcu.adc.request("vbat_sense"), ) - mcu_i2c = self.mcu.i2c.request("i2c") - (self.i2c_pull,), _ = self.chain(mcu_i2c, imp.Block(I2cPullup())) - self.btns = self.Block(ButtonSubboard()) self.connect(self.btns.gnd, self.gnd) self.connect(self.btns.pwr, self.v3v3) @@ -172,20 +171,7 @@ def refinements(self) -> Refinements: ( ["mcu", "pin_assigns"], [ - # "led=_GPIO9_STRAP", # force using the strapping / boot mode pin - # # note, only ADC pins are IO0/1/3/4/5 (pins 18/17/15/3/4) - # "ax1=3", - # "ax2=15", - # "trig=17", - # "vbat_sense=18", - # # 'vbat_sense_gate=14', - # # 'gate_ctl=5', - # "i2c.scl=4", - # "i2c.sda=14", - # "sw=5", # joystick - # "sw0=10", # membranes - # "sw1=13", - # "sw2=6", + # TODO pin this ], ), ( @@ -193,11 +179,9 @@ def refinements(self) -> Refinements: [ "i2c.scl=12", "i2c.sda=11", + # TODO pin the rest ], ), - (["mp2722", "power_path", "dutycycle_limit"], Range(0.1, 1)), # allow tracking - (["mp2722", "power_path", "inductor", "manual_frequency_rating"], Range(0.0, 10e6)), - (["mp2722", "power_path", "inductor", "footprint_spec"], "Inductor_SMD:L_1210_3225Metric"), ], class_refinements=[ (EspProgrammingHeader, EspProgrammingTc2030), From 95b115806a13c00759e96ffc56f368e9c7806f6e Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 01:42:06 -0700 Subject: [PATCH 07/13] Update test_ble_joystick.py --- examples/test_ble_joystick.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py index 5455a464d..0a5e2c1eb 100644 --- a/examples/test_ble_joystick.py +++ b/examples/test_ble_joystick.py @@ -7,6 +7,8 @@ class JoystickSubboard(SubboardBlock): + """Joystick mounted on a FPC to allow for placement flexibility""" + def __init__(self) -> None: super().__init__() @@ -26,6 +28,8 @@ def __init__(self) -> None: class ButtonSubboard(SubboardBlock): + """Button sub-board that sits on top of the main board, providing the D-pad and neopixel rings.""" + def __init__(self) -> None: super().__init__() @@ -80,7 +84,7 @@ def __init__(self) -> None: class BleJoystick(JlcBoardTop): - """BLE joystick with XYAB buttons""" + """BLE joystick with d-pad, trigger, and RGBs.""" @override def contents(self) -> None: @@ -150,6 +154,7 @@ def contents(self) -> None: imp.Block(VoltageSenseDivider(full_scale_voltage=2.2 * Volt(tol=0.1), impedance=(1, 10) * kOhm)), self.mcu.adc.request("vbat_sense"), ) + self.connect(self.mcu.gpio.request("chg", self.chg.prog)) self.btns = self.Block(ButtonSubboard()) self.connect(self.btns.gnd, self.gnd) From bac2d817c0b298dc02445f656d738c545c6fa25e Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 01:47:48 -0700 Subject: [PATCH 08/13] Update test_ble_joystick.py --- examples/test_ble_joystick.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py index 0a5e2c1eb..f76b93c35 100644 --- a/examples/test_ble_joystick.py +++ b/examples/test_ble_joystick.py @@ -149,19 +149,26 @@ def contents(self) -> None: self.imu = imp.Block(Lsm6ds3trc()) self.connect(mcu_i2c, self.imu.i2c) + # MIXED POWER DOMAINS + with self.implicit_connect( + ImplicitConnect(self.gnd, [Common]), + ) as imp: + self.vbat_sense_gate = imp.Block(HighSideSwitch()) + self.connect(self.vbat_sense_gate.pwr, self.vbat_gated) + self.connect(self.mcu.gpio.request("vbat_sense_gate"), self.vbat_sense_gate.control) + (self.vbat_sense,), _ = self.chain( - self.vbat_gated, + self.vbat_sense_gate.output, imp.Block(VoltageSenseDivider(full_scale_voltage=2.2 * Volt(tol=0.1), impedance=(1, 10) * kOhm)), self.mcu.adc.request("vbat_sense"), ) self.connect(self.mcu.gpio.request("chg", self.chg.prog)) - self.btns = self.Block(ButtonSubboard()) - self.connect(self.btns.gnd, self.gnd) - self.connect(self.btns.pwr, self.v3v3) - self.connect(self.btns.i2c, mcu_i2c) - self.connect(self.btns.io0, self.mcu.gpio.request("btn_io0")) - self.connect(self.btns.vbat, self.vbat_gated) + self.btns = imp.Block(ButtonSubboard()) + self.connect(self.btns.pwr, self.v3v3) + self.connect(self.btns.vbat, self.vbat_gated) + self.connect(self.btns.i2c, mcu_i2c) + self.connect(self.btns.io0, self.mcu.gpio.request("btn_io0")) @override def refinements(self) -> Refinements: From 7037ab2b53d5fd42cfcdd05472f60f678bf774b1 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 01:58:54 -0700 Subject: [PATCH 09/13] Update test_ble_joystick.py --- examples/test_ble_joystick.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py index f76b93c35..1f1346ba7 100644 --- a/examples/test_ble_joystick.py +++ b/examples/test_ble_joystick.py @@ -162,7 +162,7 @@ def contents(self) -> None: imp.Block(VoltageSenseDivider(full_scale_voltage=2.2 * Volt(tol=0.1), impedance=(1, 10) * kOhm)), self.mcu.adc.request("vbat_sense"), ) - self.connect(self.mcu.gpio.request("chg", self.chg.prog)) + self.connect(self.mcu.gpio.request("chg", self.chg.prog)) # allow custom charge cutoff self.btns = imp.Block(ButtonSubboard()) self.connect(self.btns.pwr, self.v3v3) From 6d9390b704f78e83ee7b2d1f590fe5a87ad757e4 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 21:49:51 -0700 Subject: [PATCH 10/13] wip --- edg/electronics_interfaces/DigitalPorts.py | 3 ++ edg/parts/power/BatteryCharger_Mcp73831.py | 34 +++++++++--- examples/test_ble_joystick.py | 61 +++++++++++++--------- 3 files changed, 67 insertions(+), 31 deletions(-) diff --git a/edg/electronics_interfaces/DigitalPorts.py b/edg/electronics_interfaces/DigitalPorts.py index 023cb5e70..f2148de89 100644 --- a/edg/electronics_interfaces/DigitalPorts.py +++ b/edg/electronics_interfaces/DigitalPorts.py @@ -608,6 +608,9 @@ def __init__( self.pulldown_capable: BoolExpr = self.Parameter(BoolExpr(pulldown_capable)) self._bridged_internal: BoolExpr = self.Parameter(BoolExpr(_bridged_internal)) + def as_voltage_source(self) -> VoltageSource: + return self._convert(DigitalSourceAdapterVoltageSource()) + class DigitalSingleSourceFake: @staticmethod diff --git a/edg/parts/power/BatteryCharger_Mcp73831.py b/edg/parts/power/BatteryCharger_Mcp73831.py index 6f224d721..42f993e20 100644 --- a/edg/parts/power/BatteryCharger_Mcp73831.py +++ b/edg/parts/power/BatteryCharger_Mcp73831.py @@ -51,8 +51,9 @@ def contents(self) -> None: self.assign(self.actual_basic_part, False) -class Mcp73831(PowerConditioner, Block): - """Single-cell Li-ion / Li-poly charger, seemingly popular on Adafruit and Sparkfun boards.""" +class Mcp73831(PowerConditioner, GeneratorBlock): + """Single-cell Li-ion / Li-poly charger, seemingly popular on Adafruit and Sparkfun boards. + Optional disable via the PROG pin, which generates an additional FET.""" def __init__(self, charging_current: RangeLike) -> None: super().__init__() @@ -60,17 +61,24 @@ def __init__(self, charging_current: RangeLike) -> None: self.ic = self.Block(Mcp73831_Device(actual_charging_current=RangeExpr())) self.pwr_bat = self.Export(self.ic.vbat, [Output]) - self.pwr = self.Export(self.ic.vdd, [Input, Power]) + self.pwr = self.Export(self.ic.vdd, [Power]) self.gnd = self.Export(self.ic.vss, [Common]) self.stat = self.Export( self.ic.stat, optional=True ) # hi-Z when not charging, low when charging, high when done + self.prog_ctl = self.Port( + DigitalBidir(), + optional=True, + doc="GPIO that controls a FET that enables charging, pull high to enable", + ) + + self.generator_param(self.prog_ctl.is_connected()) self.charging_current = self.ArgParameter(charging_current) @override - def contents(self) -> None: - super().contents() + def generate(self) -> None: + super().generate() self.vdd_cap = self.Block( # not formally specified on the datasheet, but this is used in the reference board DecouplingCapacitor(4.7 * uFarad(tol=0.2)) @@ -84,7 +92,21 @@ def contents(self) -> None: AnalogSetpointResistor( resistance=(1 / self.charging_current).shrink_multiply(Range.from_tolerance(1000, 0.1)) ) - ).connected(self.gnd, self.ic.prog) + ).connected(io=self.ic.prog) + if self.get(self.prog_ctl.is_connected()): + self.prog_sw = self.Block( + SwitchFet.NFet( + drain_voltage=self.pwr.link().voltage, + drain_current=(0, 0), # effectively none + gate_voltage=(self.prog_ctl.link().output_thresholds.upper(), self.prog_ctl.link().voltage.upper()), + ) + ) + self.connect(self.prog_res.gnd, self.prog_sw.drain.adapt_to(Ground())) + self.connect(self.prog_sw.source.adapt_to(Ground()), self.gnd) + self.connect(self.prog_sw.gate, self.prog_ctl.net) + else: + self.connect(self.prog_res.gnd, self.gnd) + # tolerance is a guess self.assign(self.ic.actual_charging_current, 1000 * Volt(tol=0.1) / self.prog_res.actual_resistance) self.require( diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py index 1f1346ba7..479556dd3 100644 --- a/examples/test_ble_joystick.py +++ b/examples/test_ble_joystick.py @@ -54,14 +54,16 @@ def __init__(self) -> None: self.connect(self.ioe.with_mixin(IoControllerI2cTarget()).i2c_target.request("i2c"), self.i2c) self.connect(self.ioe.gpio.request("io0"), self.io0) - # debugging LEDs - (self.ledr,), _ = self.chain(imp.Block(IndicatorSinkLed(Led.Red)), self.ioe.gpio.request("led")) - # d-pad buttons self.sw = ElementDict[DigitalSwitch]() for i in range(8): sw = self.sw[i] = imp.Block(DigitalSwitch()) - self.connect(sw.out, self.ioe.gpio.request(f"sw{i}")) + self.connect(sw.out, self.ioe.gpio.request(f"dpad_{i}")) + + self.bumper_sw = imp.Block(DigitalSwitch()) + self.connect(self.bumper_sw.out, self.ioe.gpio.request(f"bumper")) + + (self.trig,), _ = self.chain(imp.Block(A1304()), self.ioe.adc.request("trig")) with self.implicit_connect( ImplicitConnect(self.gnd, [Common]), @@ -107,15 +109,17 @@ def contents(self) -> None: with self.implicit_connect( ImplicitConnect(self.gnd, [Common]), ) as imp: - (self.gate, self.reg_3v3, self.tp_3v3, self.prot_3v3), _ = self.chain( - self.vbat, - imp.Block(SoftPowerGate()), + self.vbat_sense = imp.Block(Ina219(100 * mOhm(tol=0.01))) + (self.gate,), _ = self.chain(self.vbat, imp.Block(SoftPowerGate()), self.vbat_sense.sense_pos) + + (self.reg_3v3, self.tp_3v3, self.prot_3v3), _ = self.chain( + self.vbat_sense.sense_neg, imp.Block(VoltageRegulator(output_voltage=3.3 * Volt(tol=0.05))), self.Block(VoltageTestPoint()), imp.Block(ProtectionZenerDiode(voltage=(3.45, 3.9) * Volt)), ) self.vbat_gated = self.connect(self.gate.pwr_out) - self.v3v3 = self.connect(self.reg_3v3.pwr_out) + self.v3v3 = self.connect(self.reg_3v3.pwr_out, self.vbat_sense.pwr) self.chg = imp.Block(Mcp73831(charging_current=100 * mAmp(tol=0.2))) self.connect(self.usb.pwr, self.chg.pwr) @@ -133,36 +137,43 @@ def contents(self) -> None: # debugging LEDs (self.ledr,), _ = self.chain(imp.Block(IndicatorSinkLed(Led.Red)), self.mcu.gpio.request("led")) - self.stick = imp.Block(JoystickSubboard()) - self.connect(self.stick.ax1, self.mcu.adc.request("ax1")) - self.connect(self.stick.ax2, self.mcu.adc.request("ax2")) - self.connect(self.stick.sw, self.gate.btn_in) - self.connect(self.gate.btn_out, self.mcu.gpio.request("sw")) self.connect(self.mcu.gpio.request("gate_ctl"), self.gate.control) - (self.trig,), _ = self.chain(imp.Block(A1304()), self.mcu.adc.request("trig")) - mcu_i2c = self.mcu.i2c.request("i2c") (self.i2c_pull,), _ = self.chain(mcu_i2c, imp.Block(I2cPullup())) + self.connect(mcu_i2c, self.vbat_sense.i2c) self.imu = imp.Block(Lsm6ds3trc()) self.connect(mcu_i2c, self.imu.i2c) + self.mag = imp.Block(Qmc5883l()) + self.connect(mcu_i2c, self.mag.i2c) + + # POWER GATED DOMAIN + with self.implicit_connect( + ImplicitConnect(self.gnd, [Common]), + ) as imp: + self.stick = imp.Block(JoystickSubboard()) + self.connect(self.mcu.gpio.request("stick_pwr_gate").as_voltage_source(), self.stick.pwr) + self.connect(self.stick.ax1, self.mcu.adc.request("ax1")) + self.connect(self.stick.ax2, self.mcu.adc.request("ax2")) + self.connect(self.stick.sw, self.gate.btn_in) # MIXED POWER DOMAINS with self.implicit_connect( ImplicitConnect(self.gnd, [Common]), ) as imp: - self.vbat_sense_gate = imp.Block(HighSideSwitch()) - self.connect(self.vbat_sense_gate.pwr, self.vbat_gated) - self.connect(self.mcu.gpio.request("vbat_sense_gate"), self.vbat_sense_gate.control) - - (self.vbat_sense,), _ = self.chain( - self.vbat_sense_gate.output, - imp.Block(VoltageSenseDivider(full_scale_voltage=2.2 * Volt(tol=0.1), impedance=(1, 10) * kOhm)), - self.mcu.adc.request("vbat_sense"), - ) - self.connect(self.mcu.gpio.request("chg", self.chg.prog)) # allow custom charge cutoff + # alternative implementation instead of the INA219 + # self.vbat_sense_gate = imp.Block(HighSideSwitch()) + # self.connect(self.vbat_sense_gate.pwr, self.vbat_gated) + # self.connect(self.mcu.gpio.request("vbat_sense_gate"), self.vbat_sense_gate.control) + # (self.vbat_sense,), _ = self.chain( + # self.vbat_sense_gate.output, + # imp.Block(VoltageSenseDivider(full_scale_voltage=2.2 * Volt(tol=0.1), impedance=(1, 10) * kOhm)), + # self.mcu.adc.request("vbat_sense"), + # ) + + self.connect(self.mcu.gpio.request("chg"), self.chg.prog_ctl) # allow custom charge cutoff self.btns = imp.Block(ButtonSubboard()) self.connect(self.btns.pwr, self.v3v3) From 84dee5cc182d4af1948e7c53d25e9d2ccc37f129 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 22:22:50 -0700 Subject: [PATCH 11/13] wip --- edg/parts/power/BatteryCharger_Mcp73831.py | 2 +- examples/BleJoystick/BleJoystick.net.ref | 1089 +++++++++-------- examples/BleJoystick/BleJoystick.svgpcb.js | 409 ++++--- examples/BleJoystick/BleJoystick_btns.net.ref | 849 +++++++++++++ .../BleJoystick/BleJoystick_stick.net.ref | 36 +- examples/test_ble_joystick.py | 15 +- 6 files changed, 1675 insertions(+), 725 deletions(-) create mode 100644 examples/BleJoystick/BleJoystick_btns.net.ref diff --git a/edg/parts/power/BatteryCharger_Mcp73831.py b/edg/parts/power/BatteryCharger_Mcp73831.py index 42f993e20..53af6cfce 100644 --- a/edg/parts/power/BatteryCharger_Mcp73831.py +++ b/edg/parts/power/BatteryCharger_Mcp73831.py @@ -61,7 +61,7 @@ def __init__(self, charging_current: RangeLike) -> None: self.ic = self.Block(Mcp73831_Device(actual_charging_current=RangeExpr())) self.pwr_bat = self.Export(self.ic.vbat, [Output]) - self.pwr = self.Export(self.ic.vdd, [Power]) + self.pwr = self.Export(self.ic.vdd, [Input, Power]) self.gnd = self.Export(self.ic.vss, [Common]) self.stat = self.Export( self.ic.stat, optional=True diff --git a/examples/BleJoystick/BleJoystick.net.ref b/examples/BleJoystick/BleJoystick.net.ref index e9785e1eb..d4914216b 100644 --- a/examples/BleJoystick/BleJoystick.net.ref +++ b/examples/BleJoystick/BleJoystick.net.ref @@ -49,17 +49,41 @@ (sheetpath (names "/") (tstamps "/")) (tstamps "025f0138")) (comp (ref "JJ2") - (value "usb") + (value "usb.conn") (footprint "Connector_USB:USB_C_Receptacle_XKB_U262-16XN-4BVC11") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) + (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")) + (property (name "edg_short_path") (value "usb.conn")) (property (name "edg_refdes") (value "JJ2")) (property (name "edg_part") (value "COM-15111 (Sparkfun)")) (property (name "edg_value") (value "COM-15111")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "02aa014b")) + (sheetpath (names "/usb/") (tstamps "/02aa014b/")) + (tstamps "042701af")) +(comp (ref "JR1") + (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.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc1")) + (property (name "edg_refdes") (value "JR1")) + (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 "JR2") + (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.res")) + (property (name "edg_short_path") (value "usb.cc_pull.cc2")) + (property (name "edg_refdes") (value "JR2")) + (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 "JTP1") (value "vbat") (footprint "edg:TestPoint_TE_RCT_0805") @@ -97,101 +121,113 @@ (sheetpath (names "/") (tstamps "/")) (tstamps "08df027d")) (comp (ref "JU1") - (value "mp2722.ic") - (footprint "edg:MPS_QFN-22_2.5x3.5mm_P0.4mm") - (property (name "Sheetname") (value "mp2722")) - (property (name "Sheetfile") (value "edg.parts.power.converter.Mp2722.Mp2722")) - (property (name "edg_path") (value "mp2722.ic")) - (property (name "edg_short_path") (value "mp2722.ic")) + (value "vbat_sense.ic") + (footprint "Package_TO_SOT_SMD:SOT-23-8") + (property (name "Sheetname") (value "vbat_sense")) + (property (name "Sheetfile") (value "edg.parts.analog.opamp.Ina219.Ina219")) + (property (name "edg_path") (value "vbat_sense.ic")) + (property (name "edg_short_path") (value "vbat_sense.ic")) (property (name "edg_refdes") (value "JU1")) - (property (name "edg_part") (value "MP2722GRH-0000-P (Monolithic Power Systems Inc.)")) - (property (name "edg_value") (value "MP2722GRH-0000-P")) - (sheetpath (names "/mp2722/") (tstamps "/06c701ab/")) + (property (name "edg_part") (value "INA219AIDCNR (Texas Instruments)")) + (property (name "edg_value") (value "INA219AIDCNR")) + (sheetpath (names "/vbat_sense/") (tstamps "/16ee042b/")) (tstamps "013700cd")) (comp (ref "JC1") - (value "mp2722.vbst_cap") + (value "vbat_sense.vs_cap") (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "mp2722")) - (property (name "Sheetfile") (value "edg.parts.power.converter.Mp2722.Mp2722")) - (property (name "edg_path") (value "mp2722.vbst_cap.cap")) - (property (name "edg_short_path") (value "mp2722.vbst_cap")) + (property (name "Sheetname") (value "vbat_sense")) + (property (name "Sheetfile") (value "edg.parts.analog.opamp.Ina219.Ina219")) + (property (name "edg_path") (value "vbat_sense.vs_cap.cap")) + (property (name "edg_short_path") (value "vbat_sense.vs_cap")) (property (name "edg_refdes") (value "JC1")) - (property (name "edg_part") (value "CL10B223KB8NNNC (Samsung Electro-Mechanics)")) - (property (name "edg_value") (value "50V 22nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/mp2722/") (tstamps "/06c701ab/")) - (tstamps "0f330353")) -(comp (ref "JC2") - (value "mp2722.pmid_cap") - (footprint "Capacitor_SMD:C_0805_2012Metric") - (property (name "Sheetname") (value "mp2722")) - (property (name "Sheetfile") (value "edg.parts.power.converter.Mp2722.Mp2722")) - (property (name "edg_path") (value "mp2722.pmid_cap.cap")) - (property (name "edg_short_path") (value "mp2722.pmid_cap")) - (property (name "edg_refdes") (value "JC2")) - (property (name "edg_part") (value "CL21A106KAYNNNE (Samsung Electro-Mechanics)")) - (property (name "edg_value") (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/mp2722/") (tstamps "/06c701ab/")) - (tstamps "0ec4033e")) -(comp (ref "JC3") - (value "mp2722.batt_cap") - (footprint "Capacitor_SMD:C_1206_3216Metric") - (property (name "Sheetname") (value "mp2722")) - (property (name "Sheetfile") (value "edg.parts.power.converter.Mp2722.Mp2722")) - (property (name "edg_path") (value "mp2722.batt_cap.cap")) - (property (name "edg_short_path") (value "mp2722.batt_cap")) - (property (name "edg_refdes") (value "JC3")) - (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 "/mp2722/") (tstamps "/06c701ab/")) - (tstamps "0e92033f")) -(comp (ref "JC4") - (value "mp2722.vcc_cap") - (footprint "Capacitor_SMD:C_0805_2012Metric") - (property (name "Sheetname") (value "mp2722")) - (property (name "Sheetfile") (value "edg.parts.power.converter.Mp2722.Mp2722")) - (property (name "edg_path") (value "mp2722.vcc_cap.cap")) - (property (name "edg_short_path") (value "mp2722.vcc_cap")) - (property (name "edg_refdes") (value "JC4")) - (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 "/mp2722/") (tstamps "/06c701ab/")) - (tstamps "0b5902d0")) -(comp (ref "JL1") - (value "mp2722.power_path.inductor") - (footprint "Inductor_SMD:L_1210_3225Metric") - (property (name "Sheetname") (value "power_path")) - (property (name "Sheetfile") (value "edg.circuits.BuckConverterPowerPath.BuckConverterPowerPath")) - (property (name "edg_path") (value "mp2722.power_path.inductor")) - (property (name "edg_short_path") (value "mp2722.power_path.inductor")) - (property (name "edg_refdes") (value "JL1")) - (property (name "edg_part") (value "BRL3225T1R5M (Taiyo Yuden)")) - (property (name "edg_value") (value "1.75A 1.5uH ±20% 54mΩ 1210 Inductors (SMD) ROHS")) - (sheetpath (names "/mp2722/power_path/") (tstamps "/06c701ab/1786043a/")) - (tstamps "0f2b0369")) -(comp (ref "JC5") - (value "mp2722.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 "mp2722.power_path.in_cap.cap")) - (property (name "edg_short_path") (value "mp2722.power_path.in_cap")) - (property (name "edg_refdes") (value "JC5")) - (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 "/mp2722/power_path/") (tstamps "/06c701ab/1786043a/")) - (tstamps "0879026b")) -(comp (ref "JC6") - (value "mp2722.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 "mp2722.power_path.out_cap.cap")) - (property (name "edg_short_path") (value "mp2722.power_path.out_cap")) - (property (name "edg_refdes") (value "JC6")) - (property (name "edg_part") (value "CL21A106KAYNNNE (Samsung Electro-Mechanics)")) - (property (name "edg_value") (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/mp2722/power_path/") (tstamps "/06c701ab/1786043a/")) - (tstamps "0be902ec")) + (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 "/vbat_sense/") (tstamps "/16ee042b/")) + (tstamps "08e0027d")) +(comp (ref "JR3") + (value "vbat_sense.Rs") + (footprint "Resistor_SMD:R_1206_3216Metric") + (property (name "Sheetname") (value "vbat_sense")) + (property (name "Sheetfile") (value "edg.parts.analog.opamp.Ina219.Ina219")) + (property (name "edg_path") (value "vbat_sense.Rs.res.res")) + (property (name "edg_short_path") (value "vbat_sense.Rs")) + (property (name "edg_refdes") (value "JR3")) + (property (name "edg_part") (value "1206W4F100LT5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 250mW Thick Film Resistors 200V ±800ppm/℃ -55℃~+155℃ 100mΩ 1206 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/vbat_sense/") (tstamps "/16ee042b/")) + (tstamps "011900c6")) +(comp (ref "JR4") + (value "gate.pull_res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "gate")) + (property (name "Sheetfile") (value "edg.circuits.PowerConditioning.SoftPowerGate")) + (property (name "edg_path") (value "gate.pull_res")) + (property (name "edg_short_path") (value "gate.pull_res")) + (property (name "edg_refdes") (value "JR4")) + (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 "/gate/") (tstamps "/041001a2/")) + (tstamps "0f6e0367")) +(comp (ref "JQ1") + (value "gate.pwr_fet") + (footprint "Package_TO_SOT_SMD:SOT-23") + (property (name "Sheetname") (value "gate")) + (property (name "Sheetfile") (value "edg.circuits.PowerConditioning.SoftPowerGate")) + (property (name "edg_path") (value "gate.pwr_fet")) + (property (name "edg_short_path") (value "gate.pwr_fet")) + (property (name "edg_refdes") (value "JQ1")) + (property (name "edg_part") (value "SI2301CDS-T1-GE3 (Vishay Intertech)")) + (property (name "edg_value") (value "20V 3.1A 860mW 112mΩ@4.5V,2.8A 1V@250μA P Channel SOT-23(SOT-23-3) MOSFETs ROHS")) + (sheetpath (names "/gate/") (tstamps "/041001a2/")) + (tstamps "0c0702f8")) +(comp (ref "JR5") + (value "gate.amp_res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "gate")) + (property (name "Sheetfile") (value "edg.circuits.PowerConditioning.SoftPowerGate")) + (property (name "edg_path") (value "gate.amp_res")) + (property (name "edg_short_path") (value "gate.amp_res")) + (property (name "edg_refdes") (value "JR5")) + (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 "/gate/") (tstamps "/041001a2/")) + (tstamps "0b7b02e8")) +(comp (ref "JQ2") + (value "gate.amp_fet") + (footprint "Package_TO_SOT_SMD:SOT-23") + (property (name "Sheetname") (value "gate")) + (property (name "Sheetfile") (value "edg.circuits.PowerConditioning.SoftPowerGate")) + (property (name "edg_path") (value "gate.amp_fet")) + (property (name "edg_short_path") (value "gate.amp_fet")) + (property (name "edg_refdes") (value "JQ2")) + (property (name "edg_part") (value "2N7002 (Changjiang Electronics Tech (CJ))")) + (property (name "edg_value") (value "60V 115mA 200mW 7.5Ω@10V,500mA 2.5V@250μA N Channel SOT-23(SOT-23-3) MOSFETs ROHS")) + (sheetpath (names "/gate/") (tstamps "/041001a2/")) + (tstamps "0b5802dd")) +(comp (ref "JD1") + (value "gate.ctl_diode") + (footprint "Diode_SMD:D_SOD-323") + (property (name "Sheetname") (value "gate")) + (property (name "Sheetfile") (value "edg.circuits.PowerConditioning.SoftPowerGate")) + (property (name "edg_path") (value "gate.ctl_diode")) + (property (name "edg_short_path") (value "gate.ctl_diode")) + (property (name "edg_refdes") (value "JD1")) + (property (name "edg_part") (value "RB751V-40 (Yangzhou Yangjie Elec Tech)")) + (property (name "edg_value") (value "30V 370mV@1mA 30mA SOD-323 Schottky Barrier Diodes (SBD) ROHS")) + (sheetpath (names "/gate/") (tstamps "/041001a2/")) + (tstamps "126403a8")) +(comp (ref "JD2") + (value "gate.btn_diode") + (footprint "Diode_SMD:D_SOD-323") + (property (name "Sheetname") (value "gate")) + (property (name "Sheetfile") (value "edg.circuits.PowerConditioning.SoftPowerGate")) + (property (name "edg_path") (value "gate.btn_diode")) + (property (name "edg_short_path") (value "gate.btn_diode")) + (property (name "edg_refdes") (value "JD2")) + (property (name "edg_part") (value "RB751V-40 (Yangzhou Yangjie Elec Tech)")) + (property (name "edg_value") (value "30V 370mV@1mA 30mA SOD-323 Schottky Barrier Diodes (SBD) ROHS")) + (sheetpath (names "/gate/") (tstamps "/041001a2/")) + (tstamps "126903a9")) (comp (ref "JU2") (value "reg_3v3.ic") (footprint "Package_TO_SOT_SMD:SOT-89-3") @@ -204,26 +240,26 @@ (property (name "edg_value") (value "AP7215-33YG-13")) (sheetpath (names "/reg_3v3/") (tstamps "/0aba027a/")) (tstamps "013700cd")) -(comp (ref "JC7") +(comp (ref "JC2") (value "reg_3v3.in_cap") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "reg_3v3")) (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ap7215")) (property (name "edg_path") (value "reg_3v3.in_cap.cap")) (property (name "edg_short_path") (value "reg_3v3.in_cap")) - (property (name "edg_refdes") (value "JC7")) + (property (name "edg_refdes") (value "JC2")) (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_3v3/") (tstamps "/0aba027a/")) (tstamps "0879026b")) -(comp (ref "JC8") +(comp (ref "JC3") (value "reg_3v3.out_cap") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "reg_3v3")) (property (name "Sheetfile") (value "edg.parts.power.converter.LinearRegulators.Ap7215")) (property (name "edg_path") (value "reg_3v3.out_cap.cap")) (property (name "edg_short_path") (value "reg_3v3.out_cap")) - (property (name "edg_refdes") (value "JC8")) + (property (name "edg_refdes") (value "JC3")) (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_3v3/") (tstamps "/0aba027a/")) @@ -240,358 +276,372 @@ (property (name "edg_value") (value "v3v3")) (sheetpath (names "/") (tstamps "/")) (tstamps "08220220")) -(comp (ref "JD1") +(comp (ref "JD3") (value "prot_3v3") (footprint "Diode_SMD:D_SOD-323") (property (name "Sheetname") (value "")) (property (name "Sheetfile") (value "")) (property (name "edg_path") (value "prot_3v3.diode")) (property (name "edg_short_path") (value "prot_3v3")) - (property (name "edg_refdes") (value "JD1")) + (property (name "edg_refdes") (value "JD3")) (property (name "edg_part") (value "BZT52B3V6S (SMC(Sangdest Microelectronicstronic (Nanjing)))")) (property (name "edg_value") (value "5μA@1V 90Ω Single 3.53V~3.67V 200mW 3.6V SOD-323 Zener Diodes ROHS")) (sheetpath (names "/") (tstamps "/")) (tstamps "0eb80301")) -(comp (ref "JR1") - (value "fake_ntc.top_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "fake_ntc")) - (property (name "Sheetfile") (value "edg.circuits.ResistiveDivider.VoltageDivider")) - (property (name "edg_path") (value "fake_ntc.div.top_res")) - (property (name "edg_short_path") (value "fake_ntc.top_res")) - (property (name "edg_refdes") (value "JR1")) - (property (name "edg_part") (value "0603WAF1003T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 100kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/fake_ntc/") (tstamps "/0e6b033c/")) - (tstamps "0c0c02fd")) -(comp (ref "JR2") - (value "fake_ntc.bottom_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "fake_ntc")) - (property (name "Sheetfile") (value "edg.circuits.ResistiveDivider.VoltageDivider")) - (property (name "edg_path") (value "fake_ntc.div.bottom_res")) - (property (name "edg_short_path") (value "fake_ntc.bottom_res")) - (property (name "edg_refdes") (value "JR2")) - (property (name "edg_part") (value "0603WAF1003T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 100kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/fake_ntc/") (tstamps "/0e6b033c/")) - (tstamps "175b043f")) -(comp (ref "JJ3") - (value "mcu.prog") - (footprint "Connector:Tag-Connect_TC2030-IDC-FP_2x03_P1.27mm_Vertical") - (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Esp32c3.Esp32c3_Wroom02")) - (property (name "edg_path") (value "mcu.prog.conn")) - (property (name "edg_short_path") (value "mcu.prog")) - (property (name "edg_refdes") (value "JJ3")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) - (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "045f01b9")) -(comp (ref "JSW1") - (value "mcu.boot") - (footprint "project:MembraneSwitch_4mm") - (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Esp32c3.Esp32c3_Wroom02")) - (property (name "edg_path") (value "mcu.boot.package")) - (property (name "edg_short_path") (value "mcu.boot")) - (property (name "edg_refdes") (value "JSW1")) - (property (name "edg_part") (value "3.9x2.9mm Switch")) - (property (name "edg_value") (value "3.9x2.9mm Switch")) - (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "042b01b5")) +(comp (ref "JTP5") + (value "vbat_gated") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "tp_vgate.tp")) + (property (name "edg_short_path") (value "tp_vgate")) + (property (name "edg_refdes") (value "JTP5")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "vbat_gated")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "0f4c035b")) (comp (ref "JU3") + (value "chg.ic") + (footprint "Package_TO_SOT_SMD:SOT-23-5") + (property (name "Sheetname") (value "chg")) + (property (name "Sheetfile") (value "edg.parts.power.BatteryCharger_Mcp73831.Mcp73831")) + (property (name "edg_path") (value "chg.ic")) + (property (name "edg_short_path") (value "chg.ic")) + (property (name "edg_refdes") (value "JU3")) + (property (name "edg_part") (value "MCP73831T-2ACI/OT (Microchip Technology)")) + (property (name "edg_value") (value "MCP73831T-2ACI/OT")) + (sheetpath (names "/chg/") (tstamps "/02630133/")) + (tstamps "013700cd")) +(comp (ref "JC4") + (value "chg.vdd_cap") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "chg")) + (property (name "Sheetfile") (value "edg.parts.power.BatteryCharger_Mcp73831.Mcp73831")) + (property (name "edg_path") (value "chg.vdd_cap.cap")) + (property (name "edg_short_path") (value "chg.vdd_cap")) + (property (name "edg_refdes") (value "JC4")) + (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 "/chg/") (tstamps "/02630133/")) + (tstamps "0b6402d2")) +(comp (ref "JC5") + (value "chg.vbat_cap") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "chg")) + (property (name "Sheetfile") (value "edg.parts.power.BatteryCharger_Mcp73831.Mcp73831")) + (property (name "edg_path") (value "chg.vbat_cap.cap")) + (property (name "edg_short_path") (value "chg.vbat_cap")) + (property (name "edg_refdes") (value "JC5")) + (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 "/chg/") (tstamps "/02630133/")) + (tstamps "0ec70341")) +(comp (ref "JR6") + (value "chg.prog_res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "chg")) + (property (name "Sheetfile") (value "edg.parts.power.BatteryCharger_Mcp73831.Mcp73831")) + (property (name "edg_path") (value "chg.prog_res.res")) + (property (name "edg_short_path") (value "chg.prog_res")) + (property (name "edg_refdes") (value "JR6")) + (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 "/chg/") (tstamps "/02630133/")) + (tstamps "0f520362")) +(comp (ref "JQ3") + (value "chg.prog_sw") + (footprint "Package_TO_SOT_SMD:SOT-23") + (property (name "Sheetname") (value "chg")) + (property (name "Sheetfile") (value "edg.parts.power.BatteryCharger_Mcp73831.Mcp73831")) + (property (name "edg_path") (value "chg.prog_sw")) + (property (name "edg_short_path") (value "chg.prog_sw")) + (property (name "edg_refdes") (value "JQ3")) + (property (name "edg_part") (value "2N7002 (Changjiang Electronics Tech (CJ))")) + (property (name "edg_value") (value "60V 115mA 200mW 7.5Ω@10V,500mA 2.5V@250μA N Channel SOT-23(SOT-23-3) MOSFETs ROHS")) + (sheetpath (names "/chg/") (tstamps "/02630133/")) + (tstamps "0c040302")) +(comp (ref "JU4") (value "mcu.ic") - (footprint "RF_Module:ESP-WROOM-02") + (footprint "edg:Holyiot-18010-NRF52840") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Esp32c3.Esp32c3_Wroom02")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.nRF52840.Holyiot_18010")) (property (name "edg_path") (value "mcu.ic.device")) (property (name "edg_short_path") (value "mcu.ic")) - (property (name "edg_refdes") (value "JU3")) - (property (name "edg_part") (value "ESP32-C3-WROOM-02 (Espressif Systems)")) - (property (name "edg_value") (value "ESP32-C3-WROOM-02")) + (property (name "edg_refdes") (value "JU4")) + (property (name "edg_part") (value "18010 (Holyiot)")) + (property (name "edg_value") (value "18010")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "013700cd")) -(comp (ref "JC9") - (value "mcu.vcc_cap0") +(comp (ref "JC6") + (value "mcu.vcc_cap") (footprint "Capacitor_SMD:C_0805_2012Metric") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Esp32c3.Esp32c3_Wroom02")) - (property (name "edg_path") (value "mcu.vcc_cap0.cap")) - (property (name "edg_short_path") (value "mcu.vcc_cap0")) - (property (name "edg_refdes") (value "JC9")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.nRF52840.Holyiot_18010")) + (property (name "edg_path") (value "mcu.vcc_cap.cap")) + (property (name "edg_short_path") (value "mcu.vcc_cap")) + (property (name "edg_refdes") (value "JC6")) (property (name "edg_part") (value "CL21A106KAYNNNE (Samsung Electro-Mechanics)")) (property (name "edg_value") (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "0e590300")) -(comp (ref "JC10") - (value "mcu.vcc_cap1") - (footprint "Capacitor_SMD:C_0603_1608Metric") + (tstamps "0b5902d0")) +(comp (ref "JJ3") + (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.Esp32c3.Esp32c3_Wroom02")) - (property (name "edg_path") (value "mcu.vcc_cap1.cap")) - (property (name "edg_short_path") (value "mcu.vcc_cap1")) - (property (name "edg_refdes") (value "JC10")) - (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 "Sheetfile") (value "edg.parts.microcontroller.nRF52840.Holyiot_18010")) + (property (name "edg_path") (value "mcu.swd.conn")) + (property (name "edg_short_path") (value "mcu.swd")) + (property (name "edg_refdes") (value "JJ3")) + (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 "0e5a0301")) -(comp (ref "JR3") - (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 "JR3")) - (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 "JC11") - (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 "JC11")) - (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 "JJ4") - (value "stick") - (footprint "Connector_FFC-FPC:Hirose_FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "stick.conn.ext")) - (property (name "edg_short_path") (value "stick")) - (property (name "edg_refdes") (value "JJ4")) - (property (name "edg_part") (value "AFC01-S06FC*-00 (Jushuo)")) - (property (name "edg_value") (value "AFC01-S06FC*-00")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "0680021f")) -(comp (ref "JR4") - (value "ax1_div.top_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "ax1_div")) - (property (name "Sheetfile") (value "edg.circuits.ResistiveDivider.SignalDivider")) - (property (name "edg_path") (value "ax1_div.div.top_res")) - (property (name "edg_short_path") (value "ax1_div.top_res")) - (property (name "edg_refdes") (value "JR4")) - (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 "/ax1_div/") (tstamps "/0a6302ad/")) - (tstamps "0c0c02fd")) -(comp (ref "JR5") - (value "ax1_div.bottom_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "ax1_div")) - (property (name "Sheetfile") (value "edg.circuits.ResistiveDivider.SignalDivider")) - (property (name "edg_path") (value "ax1_div.div.bottom_res")) - (property (name "edg_short_path") (value "ax1_div.bottom_res")) - (property (name "edg_refdes") (value "JR5")) - (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 "/ax1_div/") (tstamps "/0a6302ad/")) - (tstamps "175b043f")) -(comp (ref "JR6") - (value "ax2_div.top_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "ax2_div")) - (property (name "Sheetfile") (value "edg.circuits.ResistiveDivider.SignalDivider")) - (property (name "edg_path") (value "ax2_div.div.top_res")) - (property (name "edg_short_path") (value "ax2_div.top_res")) - (property (name "edg_refdes") (value "JR6")) - (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 "/ax2_div/") (tstamps "/0a6802ae/")) - (tstamps "0c0c02fd")) + (tstamps "02ae014f")) +(comp (ref "JC7") + (value "mcu.vbus_cap") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.nRF52840.Holyiot_18010")) + (property (name "edg_path") (value "mcu.vbus_cap.cap")) + (property (name "edg_short_path") (value "mcu.vbus_cap")) + (property (name "edg_refdes") (value "JC7")) + (property (name "edg_part") (value "CL21A106KAYNNNE (Samsung Electro-Mechanics)")) + (property (name "edg_value") (value "X5R 25V ±10% 10uF 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0f3a0354")) (comp (ref "JR7") - (value "ax2_div.bottom_res") + (value "mcu.usb_res.dp") (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "ax2_div")) - (property (name "Sheetfile") (value "edg.circuits.ResistiveDivider.SignalDivider")) - (property (name "edg_path") (value "ax2_div.div.bottom_res")) - (property (name "edg_short_path") (value "ax2_div.bottom_res")) + (property (name "Sheetname") (value "usb_res")) + (property (name "Sheetfile") (value "edg.circuits.UsbSeriesResistor.UsbSeriesResistor")) + (property (name "edg_path") (value "mcu.usb_res.dp.res")) + (property (name "edg_short_path") (value "mcu.usb_res.dp")) (property (name "edg_refdes") (value "JR7")) - (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 "/ax2_div/") (tstamps "/0a6802ae/")) - (tstamps "175b043f")) -(comp (ref "JU5") - (value "trig.ic") - (footprint "Package_TO_SOT_SMD:SOT-23") - (property (name "Sheetname") (value "trig")) - (property (name "Sheetfile") (value "edg.parts.sensor.Mag_A1304.A1304")) - (property (name "edg_path") (value "trig.ic")) - (property (name "edg_short_path") (value "trig.ic")) - (property (name "edg_refdes") (value "JU5")) - (property (name "edg_part") (value "A1304ELHLX-T (Allegro MicroSystems)")) - (property (name "edg_value") (value "A1304ELHLX-T")) - (sheetpath (names "/trig/") (tstamps "/046301b7/")) - (tstamps "013700cd")) -(comp (ref "JC12") - (value "trig.cbyp") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "trig")) - (property (name "Sheetfile") (value "edg.parts.sensor.Mag_A1304.A1304")) - (property (name "edg_path") (value "trig.cbyp.cap")) - (property (name "edg_short_path") (value "trig.cbyp")) - (property (name "edg_refdes") (value "JC12")) - (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 "/trig/") (tstamps "/046301b7/")) - (tstamps "041801af")) + (property (name "edg_part") (value "0603WAF270JT5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±200ppm/℃ -55℃~+155℃ 27Ω 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/mcu/usb_res/") (tstamps "/02850146/0be502f4/")) + (tstamps "013a00d5")) (comp (ref "JR8") - (value "trig_div.top_res") + (value "mcu.usb_res.dm") (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "trig_div")) - (property (name "Sheetfile") (value "edg.circuits.ResistiveDivider.SignalDivider")) - (property (name "edg_path") (value "trig_div.div.top_res")) - (property (name "edg_short_path") (value "trig_div.top_res")) + (property (name "Sheetname") (value "usb_res")) + (property (name "Sheetfile") (value "edg.circuits.UsbSeriesResistor.UsbSeriesResistor")) + (property (name "edg_path") (value "mcu.usb_res.dm.res")) + (property (name "edg_short_path") (value "mcu.usb_res.dm")) (property (name "edg_refdes") (value "JR8")) - (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 "/trig_div/") (tstamps "/0f2f0359/")) - (tstamps "0c0c02fd")) -(comp (ref "JR9") - (value "trig_div.bottom_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "trig_div")) - (property (name "Sheetfile") (value "edg.circuits.ResistiveDivider.SignalDivider")) - (property (name "edg_path") (value "trig_div.div.bottom_res")) - (property (name "edg_short_path") (value "trig_div.bottom_res")) - (property (name "edg_refdes") (value "JR9")) - (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 "/trig_div/") (tstamps "/0f2f0359/")) - (tstamps "175b043f")) -(comp (ref "JSW2") - (value "sw[0]") - (footprint "project:MembraneSwitch_4mm") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "sw[0].package")) - (property (name "edg_short_path") (value "sw[0]")) - (property (name "edg_refdes") (value "JSW2")) - (property (name "edg_part") (value "3.9x2.9mm Switch")) - (property (name "edg_value") (value "3.9x2.9mm Switch")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "05ee01d3")) -(comp (ref "JSW3") - (value "sw[1]") - (footprint "project:MembraneSwitch_4mm") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "sw[1].package")) - (property (name "edg_short_path") (value "sw[1]")) - (property (name "edg_refdes") (value "JSW3")) - (property (name "edg_part") (value "3.9x2.9mm Switch")) - (property (name "edg_value") (value "3.9x2.9mm Switch")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "05f001d4")) -(comp (ref "JSW4") - (value "sw[2]") - (footprint "project:MembraneSwitch_4mm") + (property (name "edg_part") (value "0603WAF270JT5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±200ppm/℃ -55℃~+155℃ 27Ω 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/mcu/usb_res/") (tstamps "/02850146/0be502f4/")) + (tstamps "013700d2")) +(comp (ref "JU5") + (value "usb_esd") + (footprint "Package_TO_SOT_SMD:SOT-23") (property (name "Sheetname") (value "")) (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "sw[2].package")) - (property (name "edg_short_path") (value "sw[2]")) - (property (name "edg_refdes") (value "JSW4")) - (property (name "edg_part") (value "3.9x2.9mm Switch")) - (property (name "edg_value") (value "3.9x2.9mm Switch")) + (property (name "edg_path") (value "usb_esd")) + (property (name "edg_short_path") (value "usb_esd")) + (property (name "edg_refdes") (value "JU5")) + (property (name "edg_part") (value "PESD5V0X1BT (Nexperia)")) + (property (name "edg_value") (value "PESD5V0X1BT")) (sheetpath (names "/") (tstamps "/")) - (tstamps "05f201d5")) -(comp (ref "JD2") + (tstamps "0bcb02e6")) +(comp (ref "JD4") (value "ledr.package") (footprint "LED_SMD:LED_0603_1608Metric") (property (name "Sheetname") (value "ledr")) (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorSinkLedResistor")) (property (name "edg_path") (value "ledr.package")) (property (name "edg_short_path") (value "ledr.package")) - (property (name "edg_refdes") (value "JD2")) + (property (name "edg_refdes") (value "JD4")) (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 "/ledr/") (tstamps "/041d01a8/")) (tstamps "0b4e02cd")) -(comp (ref "JR10") +(comp (ref "JR9") (value "ledr.res") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "ledr")) (property (name "Sheetfile") (value "edg.abstract_parts.Led.IndicatorSinkLedResistor")) (property (name "edg_path") (value "ledr.res")) (property (name "edg_short_path") (value "ledr.res")) - (property (name "edg_refdes") (value "JR10")) + (property (name "edg_refdes") (value "JR9")) (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 "/ledr/") (tstamps "/041d01a8/")) (tstamps "0296014b")) -(comp (ref "JR11") - (value "vbat_sense.top_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "vbat_sense")) - (property (name "Sheetfile") (value "edg.circuits.ResistiveDivider.VoltageSenseDivider")) - (property (name "edg_path") (value "vbat_sense.div.top_res")) - (property (name "edg_short_path") (value "vbat_sense.top_res")) - (property (name "edg_refdes") (value "JR11")) - (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 "/vbat_sense/") (tstamps "/16ee042b/")) - (tstamps "0c0c02fd")) -(comp (ref "JR12") - (value "vbat_sense.bottom_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "vbat_sense")) - (property (name "Sheetfile") (value "edg.circuits.ResistiveDivider.VoltageSenseDivider")) - (property (name "edg_path") (value "vbat_sense.div.bottom_res")) - (property (name "edg_short_path") (value "vbat_sense.bottom_res")) - (property (name "edg_refdes") (value "JR12")) - (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 "/vbat_sense/") (tstamps "/16ee042b/")) - (tstamps "175b043f")) -(comp (ref "JR13") +(comp (ref "JR10") (value "i2c_pull.scl_res") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "i2c_pull")) (property (name "Sheetfile") (value "edg.circuits.I2cPullup.I2cPullup")) (property (name "edg_path") (value "i2c_pull.scl_res.res")) (property (name "edg_short_path") (value "i2c_pull.scl_res")) - (property (name "edg_refdes") (value "JR13")) + (property (name "edg_refdes") (value "JR10")) (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) (sheetpath (names "/i2c_pull/") (tstamps "/0d3e031b/")) (tstamps "0ba902ec")) -(comp (ref "JR14") +(comp (ref "JR11") (value "i2c_pull.sda_res") (footprint "Resistor_SMD:R_0603_1608Metric") (property (name "Sheetname") (value "i2c_pull")) (property (name "Sheetfile") (value "edg.circuits.I2cPullup.I2cPullup")) (property (name "edg_path") (value "i2c_pull.sda_res.res")) (property (name "edg_short_path") (value "i2c_pull.sda_res")) - (property (name "edg_refdes") (value "JR14")) + (property (name "edg_refdes") (value "JR11")) (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) (sheetpath (names "/i2c_pull/") (tstamps "/0d3e031b/")) - (tstamps "0b7802e2"))) + (tstamps "0b7802e2")) +(comp (ref "JTP6") + (value "_mcu_i2c_i2c_link.scl") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "tp_i2c")) + (property (name "Sheetfile") (value "edg.abstract_parts.TestPoint.I2cTestPoint")) + (property (name "edg_path") (value "tp_i2c.tp_scl.tp")) + (property (name "edg_short_path") (value "tp_i2c.tp_scl")) + (property (name "edg_refdes") (value "JTP6")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_i2c_i2c_link.scl")) + (sheetpath (names "/tp_i2c/") (tstamps "/086c0242/")) + (tstamps "08f50286")) +(comp (ref "JTP7") + (value "_mcu_i2c_i2c_link.sda") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "tp_i2c")) + (property (name "Sheetfile") (value "edg.abstract_parts.TestPoint.I2cTestPoint")) + (property (name "edg_path") (value "tp_i2c.tp_sda.tp")) + (property (name "edg_short_path") (value "tp_i2c.tp_sda")) + (property (name "edg_refdes") (value "JTP7")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_i2c_i2c_link.sda")) + (sheetpath (names "/tp_i2c/") (tstamps "/086c0242/")) + (tstamps "08ec027c")) +(comp (ref "JU6") + (value "imu.ic") + (footprint "Package_LGA:Bosch_LGA-14_3x2.5mm_P0.5mm") + (property (name "Sheetname") (value "imu")) + (property (name "Sheetfile") (value "edg.parts.sensor.Imu_Lsm6ds3trc.Lsm6ds3trc")) + (property (name "edg_path") (value "imu.ic")) + (property (name "edg_short_path") (value "imu.ic")) + (property (name "edg_refdes") (value "JU6")) + (property (name "edg_part") (value "LSM6DS3TR-C (STMicroelectronics)")) + (property (name "edg_value") (value "LSM6DS3TR-C")) + (sheetpath (names "/imu/") (tstamps "/028d014c/")) + (tstamps "013700cd")) +(comp (ref "JC8") + (value "imu.vdd_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "imu")) + (property (name "Sheetfile") (value "edg.parts.sensor.Imu_Lsm6ds3trc.Lsm6ds3trc")) + (property (name "edg_path") (value "imu.vdd_cap.cap")) + (property (name "edg_short_path") (value "imu.vdd_cap")) + (property (name "edg_refdes") (value "JC8")) + (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 "/imu/") (tstamps "/028d014c/")) + (tstamps "0b6402d2")) +(comp (ref "JC9") + (value "imu.vddio_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "imu")) + (property (name "Sheetfile") (value "edg.parts.sensor.Imu_Lsm6ds3trc.Lsm6ds3trc")) + (property (name "edg_path") (value "imu.vddio_cap.cap")) + (property (name "edg_short_path") (value "imu.vddio_cap")) + (property (name "edg_refdes") (value "JC9")) + (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 "/imu/") (tstamps "/028d014c/")) + (tstamps "128303aa")) +(comp (ref "JU7") + (value "mag.ic") + (footprint "Package_LGA:LGA-16_3x3mm_P0.5mm") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "edg.parts.sensor.Mag_Qmc5883l.Qmc5883l")) + (property (name "edg_path") (value "mag.ic")) + (property (name "edg_short_path") (value "mag.ic")) + (property (name "edg_refdes") (value "JU7")) + (property (name "edg_part") (value "QMC5883L (QST)")) + (property (name "edg_value") (value "QMC5883L")) + (sheetpath (names "/mag/") (tstamps "/02730136/")) + (tstamps "013700cd")) +(comp (ref "JC10") + (value "mag.vdd_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "edg.parts.sensor.Mag_Qmc5883l.Qmc5883l")) + (property (name "edg_path") (value "mag.vdd_cap.cap")) + (property (name "edg_short_path") (value "mag.vdd_cap")) + (property (name "edg_refdes") (value "JC10")) + (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 "/mag/") (tstamps "/02730136/")) + (tstamps "0b6402d2")) +(comp (ref "JC11") + (value "mag.set_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "edg.parts.sensor.Mag_Qmc5883l.Qmc5883l")) + (property (name "edg_path") (value "mag.set_cap")) + (property (name "edg_short_path") (value "mag.set_cap")) + (property (name "edg_refdes") (value "JC11")) + (property (name "edg_part") (value "CL10B224KA8NNNC (Samsung Electro-Mechanics)")) + (property (name "edg_value") (value "25V 220nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/mag/") (tstamps "/02730136/")) + (tstamps "0ba502e0")) +(comp (ref "JC12") + (value "mag.c1") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "mag")) + (property (name "Sheetfile") (value "edg.parts.sensor.Mag_Qmc5883l.Qmc5883l")) + (property (name "edg_path") (value "mag.c1.cap")) + (property (name "edg_short_path") (value "mag.c1")) + (property (name "edg_refdes") (value "JC12")) + (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 "/mag/") (tstamps "/02730136/")) + (tstamps "00f90095")) +(comp (ref "JJ4") + (value "stick") + (footprint "Connector_FFC-FPC:Hirose_FH12-8S-0.5SH_1x08-1MP_P0.50mm_Horizontal") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "stick.conn.ext")) + (property (name "edg_short_path") (value "stick")) + (property (name "edg_refdes") (value "JJ4")) + (property (name "edg_part") (value "AFC01-S08FC*-00 (Jushuo)")) + (property (name "edg_value") (value "AFC01-S08FC*-00")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "0680021f")) +(comp (ref "JJ7") + (value "btns") + (footprint "Connector_FFC-FPC:Hirose_FH12-8S-0.5SH_1x08-1MP_P0.50mm_Horizontal") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "btns.conn.ext")) + (property (name "edg_short_path") (value "btns")) + (property (name "edg_refdes") (value "JJ7")) + (property (name "edg_part") (value "AFC01-S08FC*-00 (Jushuo)")) + (property (name "edg_value") (value "AFC01-S08FC*-00")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "043701b8"))) (nets (net (code 1) (name "Jvbat") (node (ref JJ1) (pin 2)) (node (ref JTP1) (pin 1)) - (node (ref JU1) (pin 12)) - (node (ref JU1) (pin 14)) - (node (ref JC3) (pin 1)) - (node (ref JR11) (pin 1))) + (node (ref JR4) (pin 1)) + (node (ref JQ1) (pin 2)) + (node (ref JU3) (pin 3)) + (node (ref JC5) (pin 1))) (net (code 2) (name "Jvusb") (node (ref JJ2) (pin A4)) (node (ref JJ2) (pin A9)) (node (ref JJ2) (pin B4)) (node (ref JJ2) (pin B9)) (node (ref JTP2) (pin 1)) - (node (ref JU1) (pin 2)) - (node (ref JC5) (pin 1))) + (node (ref JU3) (pin 4)) + (node (ref JC4) (pin 1)) + (node (ref JU4) (pin 22)) + (node (ref JC7) (pin 1))) (net (code 3) (name "Jgnd") (node (ref JJ1) (pin 1)) (node (ref JJ2) (pin A1)) @@ -599,165 +649,190 @@ (node (ref JJ2) (pin B1)) (node (ref JJ2) (pin B12)) (node (ref JJ2) (pin S1)) + (node (ref JR1) (pin 1)) + (node (ref JR2) (pin 1)) (node (ref JTP3) (pin 1)) - (node (ref JU1) (pin 18)) - (node (ref JU1) (pin 5)) + (node (ref JU1) (pin 3)) + (node (ref JU1) (pin 7)) + (node (ref JU1) (pin 8)) + (node (ref JC1) (pin 2)) + (node (ref JR5) (pin 1)) + (node (ref JQ2) (pin 2)) + (node (ref JU2) (pin 1)) (node (ref JC2) (pin 2)) (node (ref JC3) (pin 2)) + (node (ref JD3) (pin 2)) + (node (ref JU3) (pin 2)) (node (ref JC4) (pin 2)) (node (ref JC5) (pin 2)) + (node (ref JQ3) (pin 2)) + (node (ref JU4) (pin 1)) + (node (ref JU4) (pin 25)) + (node (ref JU4) (pin 37)) (node (ref JC6) (pin 2)) - (node (ref JU2) (pin 1)) + (node (ref JJ3) (pin 3)) + (node (ref JJ3) (pin 5)) + (node (ref JJ3) (pin 9)) (node (ref JC7) (pin 2)) + (node (ref JU5) (pin 3)) + (node (ref JU6) (pin 1)) + (node (ref JU6) (pin 2)) + (node (ref JU6) (pin 3)) + (node (ref JU6) (pin 6)) + (node (ref JU6) (pin 7)) (node (ref JC8) (pin 2)) - (node (ref JD1) (pin 2)) - (node (ref JR2) (pin 2)) - (node (ref JJ3) (pin 5)) - (node (ref JSW1) (pin 2)) - (node (ref JU3) (pin 19)) - (node (ref JU3) (pin 9)) (node (ref JC9) (pin 2)) + (node (ref JU7) (pin 11)) + (node (ref JU7) (pin 9)) (node (ref JC10) (pin 2)) - (node (ref JC11) (pin 2)) - (node (ref JJ4) (pin 1)) - (node (ref JR5) (pin 2)) - (node (ref JR7) (pin 2)) - (node (ref JU5) (pin 3)) (node (ref JC12) (pin 2)) - (node (ref JR9) (pin 2)) - (node (ref JSW2) (pin 2)) - (node (ref JSW3) (pin 2)) - (node (ref JSW4) (pin 2)) - (node (ref JR12) (pin 2))) -(net (code 4) (name "Jv3v3") + (node (ref JJ4) (pin 1)) + (node (ref JJ7) (pin 1)) + (node (ref JJ7) (pin 6))) +(net (code 4) (name "Jvbat_gated") + (node (ref JU1) (pin 1)) + (node (ref JR3) (pin 1)) + (node (ref JQ1) (pin 3)) + (node (ref JTP5) (pin 1)) + (node (ref JJ7) (pin 7)) + (node (ref JJ7) (pin 8))) +(net (code 5) (name "Jv3v3") + (node (ref JU1) (pin 4)) + (node (ref JC1) (pin 1)) (node (ref JU2) (pin 3)) - (node (ref JC8) (pin 1)) + (node (ref JC3) (pin 1)) (node (ref JTP4) (pin 1)) - (node (ref JD1) (pin 1)) + (node (ref JD3) (pin 1)) + (node (ref JU4) (pin 14)) + (node (ref JC6) (pin 1)) (node (ref JJ3) (pin 1)) - (node (ref JU3) (pin 1)) - (node (ref JU3) (pin 16)) - (node (ref JU3) (pin 7)) + (node (ref JD4) (pin 2)) + (node (ref JR10) (pin 1)) + (node (ref JR11) (pin 1)) + (node (ref JU6) (pin 12)) + (node (ref JU6) (pin 5)) + (node (ref JU6) (pin 8)) + (node (ref JC8) (pin 1)) (node (ref JC9) (pin 1)) + (node (ref JU7) (pin 13)) + (node (ref JU7) (pin 2)) + (node (ref JU7) (pin 4)) (node (ref JC10) (pin 1)) - (node (ref JR3) (pin 1)) - (node (ref JJ4) (pin 2)) - (node (ref JU5) (pin 1)) - (node (ref JC12) (pin 1)) - (node (ref JD2) (pin 2)) - (node (ref JR13) (pin 1)) - (node (ref JR14) (pin 1))) -(net (code 5) (name "Jusb.usb.dp") + (node (ref JJ7) (pin 2))) +(net (code 6) (name "Jusb_chain_0.d_P") (node (ref JJ2) (pin A6)) - (node (ref JJ2) (pin B6))) -(net (code 6) (name "Jusb.usb.dm") + (node (ref JJ2) (pin B6)) + (node (ref JR7) (pin 1)) + (node (ref JU5) (pin 2))) +(net (code 7) (name "Jusb_chain_0.d_N") (node (ref JJ2) (pin A7)) - (node (ref JJ2) (pin B7))) -(net (code 7) (name "Jusb.cc.cc1") + (node (ref JJ2) (pin B7)) + (node (ref JR8) (pin 1)) + (node (ref JU5) (pin 1))) +(net (code 8) (name "Jusb.conn.cc.cc1") (node (ref JJ2) (pin A5)) - (node (ref JU1) (pin 1))) -(net (code 8) (name "Jusb.cc.cc2") + (node (ref JR1) (pin 2))) +(net (code 9) (name "Jusb.conn.cc.cc2") (node (ref JJ2) (pin B5)) - (node (ref JU1) (pin 22))) -(net (code 9) (name "Jmp2722.pwr_out") - (node (ref JU1) (pin 13)) - (node (ref JL1) (pin 2)) - (node (ref JC6) (pin 1)) - (node (ref JU2) (pin 2)) - (node (ref JC7) (pin 1))) -(net (code 10) (name "Jmp2722.vrntc") - (node (ref JU1) (pin 7)) - (node (ref JR1) (pin 1))) -(net (code 11) (name "Jmp2722.ntc1") - (node (ref JU1) (pin 10)) - (node (ref JR1) (pin 2)) - (node (ref JR2) (pin 1))) -(net (code 12) (name "Jmp2722.rst") - (node (ref JU1) (pin 17)) - (node (ref JU3) (pin 5)) - (node (ref JJ4) (pin 4))) -(net (code 13) (name "Jmp2722.int") - (node (ref JU1) (pin 8))) -(net (code 14) (name "Jmp2722.stat") - (node (ref JU1) (pin 11))) -(net (code 15) (name "Jmp2722.pg") - (node (ref JU1) (pin 9))) -(net (code 16) (name "Jmp2722.i2c.scl") - (node (ref JU1) (pin 16)) - (node (ref JU3) (pin 4)) - (node (ref JR13) (pin 2))) -(net (code 17) (name "Jmp2722.i2c.sda") - (node (ref JU1) (pin 15)) - (node (ref JU3) (pin 14)) - (node (ref JR14) (pin 2))) -(net (code 18) (name "Jmp2722.usb.dp") - (node (ref JU1) (pin 21))) -(net (code 19) (name "Jmp2722.usb.dm") - (node (ref JU1) (pin 20))) -(net (code 20) (name "Jmp2722.ic.sw") - (node (ref JU1) (pin 4)) - (node (ref JC1) (pin 2)) - (node (ref JL1) (pin 1))) -(net (code 21) (name "Jmp2722.ic.pmid") - (node (ref JU1) (pin 3)) - (node (ref JC2) (pin 1))) -(net (code 22) (name "Jmp2722.ic.bst") + (node (ref JR2) (pin 2))) +(net (code 10) (name "Jvbat_sense.i2c.scl") + (node (ref JU1) (pin 5)) + (node (ref JU4) (pin 12)) + (node (ref JR10) (pin 2)) + (node (ref JTP6) (pin 1)) + (node (ref JU6) (pin 13)) + (node (ref JU7) (pin 1)) + (node (ref JJ7) (pin 3))) +(net (code 11) (name "Jvbat_sense.i2c.sda") (node (ref JU1) (pin 6)) - (node (ref JC1) (pin 1))) -(net (code 23) (name "Jmp2722.ic.vcc") - (node (ref JU1) (pin 19)) - (node (ref JC4) (pin 1))) -(net (code 24) (name "Jmcu.program_uart_node.a_tx") - (node (ref JJ3) (pin 4)) - (node (ref JU3) (pin 11))) -(net (code 25) (name "Jmcu.program_uart_node.b_tx") - (node (ref JJ3) (pin 3)) - (node (ref JU3) (pin 12))) -(net (code 26) (name "Jmcu.program_en_node") - (node (ref JJ3) (pin 6)) - (node (ref JU3) (pin 2)) + (node (ref JU4) (pin 13)) + (node (ref JR11) (pin 2)) + (node (ref JTP7) (pin 1)) + (node (ref JU6) (pin 14)) + (node (ref JU7) (pin 16)) + (node (ref JJ7) (pin 4))) +(net (code 12) (name "Jvbat_sense.sense_neg") + (node (ref JU1) (pin 2)) (node (ref JR3) (pin 2)) - (node (ref JC11) (pin 1))) -(net (code 27) (name "Jmcu.program_boot_node") - (node (ref JJ3) (pin 2)) - (node (ref JSW1) (pin 1)) - (node (ref JU3) (pin 8)) - (node (ref JR10) (pin 2))) -(net (code 28) (name "Jstick.ax1") - (node (ref JJ4) (pin 5)) - (node (ref JR4) (pin 1))) -(net (code 29) (name "Jstick.ax2") - (node (ref JJ4) (pin 6)) - (node (ref JR6) (pin 1))) -(net (code 30) (name "Jax1_div.output") - (node (ref JU3) (pin 3)) + (node (ref JU2) (pin 2)) + (node (ref JC2) (pin 1))) +(net (code 13) (name "Jgate.btn_out") + (node (ref JD2) (pin 2)) + (node (ref JU4) (pin 5))) +(net (code 14) (name "Jgate.btn_in") + (node (ref JD1) (pin 1)) + (node (ref JD2) (pin 1)) + (node (ref JJ4) (pin 4))) +(net (code 15) (name "Jgate.control") + (node (ref JR5) (pin 2)) + (node (ref JQ2) (pin 1)) + (node (ref JU4) (pin 4))) +(net (code 16) (name "Jgate.pull_res.b") (node (ref JR4) (pin 2)) - (node (ref JR5) (pin 1))) -(net (code 31) (name "Jax2_div.output") - (node (ref JU3) (pin 15)) - (node (ref JR6) (pin 2)) - (node (ref JR7) (pin 1))) -(net (code 32) (name "Jtrig.out") - (node (ref JU5) (pin 2)) - (node (ref JR8) (pin 1))) -(net (code 33) (name "Jtrig_div.output") - (node (ref JU3) (pin 17)) - (node (ref JR8) (pin 2)) + (node (ref JQ1) (pin 1)) + (node (ref JQ2) (pin 3)) + (node (ref JD1) (pin 2))) +(net (code 17) (name "Jchg.stat") + (node (ref JU3) (pin 1))) +(net (code 18) (name "Jchg.prog_ctl") + (node (ref JQ3) (pin 1)) + (node (ref JU4) (pin 10))) +(net (code 19) (name "Jchg.ic.prog") + (node (ref JU3) (pin 5)) + (node (ref JR6) (pin 2))) +(net (code 20) (name "Jchg.prog_res.gnd") + (node (ref JR6) (pin 1)) + (node (ref JQ3) (pin 3))) +(net (code 21) (name "Jmcu.swd_node.swdio") + (node (ref JU4) (pin 32)) + (node (ref JJ3) (pin 2))) +(net (code 22) (name "Jmcu.swd_node.swclk") + (node (ref JU4) (pin 31)) + (node (ref JJ3) (pin 4))) +(net (code 23) (name "Jmcu.reset_node") + (node (ref JU4) (pin 21)) + (node (ref JJ3) (pin 10))) +(net (code 24) (name "Jmcu.swd.tdi") + (node (ref JJ3) (pin 8))) +(net (code 25) (name "Jmcu.swd.swo") + (node (ref JJ3) (pin 6))) +(net (code 26) (name "Jmcu.usb_res.interior.dp") + (node (ref JU4) (pin 24)) + (node (ref JR7) (pin 2))) +(net (code 27) (name "Jmcu.usb_res.interior.dm") + (node (ref JU4) (pin 23)) + (node (ref JR8) (pin 2))) +(net (code 28) (name "Jledr.signal") + (node (ref JU4) (pin 7)) + (node (ref JR9) (pin 2))) +(net (code 29) (name "Jledr.package.k") + (node (ref JD4) (pin 1)) (node (ref JR9) (pin 1))) -(net (code 34) (name "Jsw[0].out") - (node (ref JU3) (pin 10)) - (node (ref JSW2) (pin 1))) -(net (code 35) (name "Jsw[1].out") - (node (ref JU3) (pin 13)) - (node (ref JSW3) (pin 1))) -(net (code 36) (name "Jsw[2].out") - (node (ref JU3) (pin 6)) - (node (ref JSW4) (pin 1))) -(net (code 37) (name "Jledr.package.k") - (node (ref JD2) (pin 1)) - (node (ref JR10) (pin 1))) -(net (code 38) (name "Jvbat_sense.output") - (node (ref JU3) (pin 18)) - (node (ref JR11) (pin 2)) - (node (ref JR12) (pin 1)))) +(net (code 30) (name "Jimu.int1") + (node (ref JU6) (pin 4))) +(net (code 31) (name "Jimu.int2") + (node (ref JU6) (pin 9))) +(net (code 32) (name "Jmag.drdy") + (node (ref JU7) (pin 15))) +(net (code 33) (name "Jmag.ic.setp") + (node (ref JU7) (pin 8)) + (node (ref JC11) (pin 1))) +(net (code 34) (name "Jmag.ic.setc") + (node (ref JU7) (pin 12)) + (node (ref JC11) (pin 2))) +(net (code 35) (name "Jmag.ic.c1") + (node (ref JU7) (pin 10)) + (node (ref JC12) (pin 1))) +(net (code 36) (name "Jstick.pwr") + (node (ref JU4) (pin 3)) + (node (ref JJ4) (pin 2))) +(net (code 37) (name "Jstick.ax1") + (node (ref JU4) (pin 11)) + (node (ref JJ4) (pin 5))) +(net (code 38) (name "Jstick.ax2") + (node (ref JU4) (pin 9)) + (node (ref JJ4) (pin 6))) +(net (code 39) (name "Jbtns.io0") + (node (ref JU4) (pin 8)) + (node (ref JJ7) (pin 5)))) ) \ No newline at end of file diff --git a/examples/BleJoystick/BleJoystick.svgpcb.js b/examples/BleJoystick/BleJoystick.svgpcb.js index b41c77e67..ed2c4d304 100644 --- a/examples/BleJoystick/BleJoystick.svgpcb.js +++ b/examples/BleJoystick/BleJoystick.svgpcb.js @@ -2,288 +2,309 @@ const board = new PCB(); // jlc_th.th1 const JH1 = board.add(JlcToolingHole_1_152mm, { - translate: pt(1.950, 1.551), rotate: 0, + translate: pt(0.936, 1.640), rotate: 0, id: 'JH1' }) // jlc_th.th2 const JH2 = board.add(JlcToolingHole_1_152mm, { - translate: pt(1.989, 1.551), rotate: 0, + translate: pt(0.975, 1.640), rotate: 0, id: 'JH2' }) // jlc_th.th3 const JH3 = board.add(JlcToolingHole_1_152mm, { - translate: pt(1.950, 1.591), rotate: 0, + translate: pt(0.936, 1.680), rotate: 0, id: 'JH3' }) // bat.conn const JJ1 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { - translate: pt(1.233, 1.252), rotate: 0, + translate: pt(0.487, 1.429), rotate: 0, id: 'JJ1' }) // usb.conn const JJ2 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, { - translate: pt(1.804, 0.640), rotate: 0, + translate: pt(1.266, 0.165), rotate: 0, id: 'JJ2' }) +// usb.cc_pull.cc1.res +const JR1 = board.add(R_0603_1608Metric, { + translate: pt(1.115, 0.420), rotate: 0, + id: 'JR1' +}) +// usb.cc_pull.cc2.res +const JR2 = board.add(R_0603_1608Metric, { + translate: pt(1.271, 0.420), rotate: 0, + id: 'JR2' +}) // tp_bat.tp const JTP1 = board.add(TestPoint_TE_RCT_0805, { - translate: pt(0.770, 1.589), rotate: 0, + translate: pt(1.566, 1.337), rotate: 0, id: 'JTP1' }) // tp_usb.tp const JTP2 = board.add(TestPoint_TE_RCT_0805, { - translate: pt(1.020, 1.589), rotate: 0, + translate: pt(1.817, 1.337), rotate: 0, id: 'JTP2' }) // tp_gnd.tp const JTP3 = board.add(TestPoint_TE_RCT_0805, { - translate: pt(1.271, 1.589), rotate: 0, + translate: pt(2.067, 1.337), rotate: 0, id: 'JTP3' }) -// mp2722.ic -const JU1 = board.add(MPS_QFN_22_2_5x3_5mm_P0_4mm, { - translate: pt(1.924, 0.280), rotate: 0, +// vbat_sense.ic +const JU1 = board.add(SOT_23_8, { + translate: pt(1.674, 0.067), rotate: 0, id: 'JU1' }) -// mp2722.vbst_cap.cap +// vbat_sense.vs_cap.cap const JC1 = board.add(C_0603_1608Metric, { - translate: pt(1.826, 0.309), rotate: 0, + translate: pt(1.652, 0.330), rotate: 0, id: 'JC1' }) -// mp2722.pmid_cap.cap -const JC2 = board.add(C_0805_2012Metric, { - translate: pt(1.661, 0.202), rotate: 0, - id: 'JC2' +// vbat_sense.Rs.res.res +const JR3 = board.add(R_1206_3216Metric, { + translate: pt(1.683, 0.217), rotate: 0, + id: 'JR3' }) -// mp2722.batt_cap.cap -const JC3 = board.add(C_1206_3216Metric, { - translate: pt(1.904, 0.045), rotate: 0, - id: 'JC3' +// gate.pull_res +const JR4 = board.add(R_0603_1608Metric, { + translate: pt(0.390, 1.038), rotate: 0, + id: 'JR4' }) -// mp2722.vcc_cap.cap -const JC4 = board.add(C_0805_2012Metric, { - translate: pt(1.835, 0.202), rotate: 0, - id: 'JC4' +// gate.pwr_fet +const JQ1 = board.add(SOT_23, { + translate: pt(0.076, 0.903), rotate: 0, + id: 'JQ1' }) -// mp2722.power_path.inductor -const JL1 = board.add(L_1210_3225Metric, { - translate: pt(1.684, 0.062), rotate: 0, - id: 'JL1' +// gate.amp_res +const JR5 = board.add(R_0603_1608Metric, { + translate: pt(0.058, 1.152), rotate: 0, + id: 'JR5' }) -// mp2722.power_path.in_cap.cap -const JC5 = board.add(C_0805_2012Metric, { - translate: pt(2.008, 0.202), rotate: 0, - id: 'JC5' +// gate.amp_fet +const JQ2 = board.add(SOT_23, { + translate: pt(0.266, 0.903), rotate: 0, + id: 'JQ2' }) -// mp2722.power_path.out_cap.cap -const JC6 = board.add(C_0805_2012Metric, { - translate: pt(1.661, 0.319), rotate: 0, - id: 'JC6' +// gate.ctl_diode +const JD1 = board.add(D_SOD_323, { + translate: pt(0.063, 1.047), rotate: 0, + id: 'JD1' +}) +// gate.btn_diode +const JD2 = board.add(D_SOD_323, { + translate: pt(0.229, 1.047), rotate: 0, + id: 'JD2' }) // reg_3v3.ic const JU2 = board.add(SOT_89_3, { - translate: pt(0.589, 1.220), rotate: 0, + translate: pt(1.710, 0.935), rotate: 0, id: 'JU2' }) // reg_3v3.in_cap.cap -const JC7 = board.add(C_0603_1608Metric, { - translate: pt(0.535, 1.387), rotate: 0, - id: 'JC7' +const JC2 = board.add(C_0603_1608Metric, { + translate: pt(1.656, 1.101), rotate: 0, + id: 'JC2' }) // reg_3v3.out_cap.cap -const JC8 = board.add(C_0603_1608Metric, { - translate: pt(0.691, 1.387), rotate: 0, - id: 'JC8' +const JC3 = board.add(C_0603_1608Metric, { + translate: pt(1.812, 1.101), rotate: 0, + id: 'JC3' }) // tp_3v3.tp const JTP4 = board.add(TestPoint_TE_RCT_0805, { - translate: pt(1.521, 1.589), rotate: 0, + translate: pt(0.066, 1.678), rotate: 0, id: 'JTP4' }) // prot_3v3.diode -const JD1 = board.add(D_SOD_323, { - translate: pt(1.769, 1.589), rotate: 0, - id: 'JD1' -}) -// fake_ntc.div.top_res -const JR1 = board.add(R_0603_1608Metric, { - translate: pt(1.819, 1.151), rotate: 0, - id: 'JR1' -}) -// fake_ntc.div.bottom_res -const JR2 = board.add(R_0603_1608Metric, { - translate: pt(1.819, 1.248), rotate: 0, - id: 'JR2' -}) -// mcu.prog.conn -const JJ3 = board.add(Tag_Connect_TC2030_IDC_FP_2x03_P1_27mm_Vertical, { - translate: pt(1.329, 0.167), rotate: 0, - id: 'JJ3' -}) -// mcu.boot.package -const JSW1 = board.add(MembraneSwitch_4mm, { - translate: pt(1.473, 0.491), rotate: 0, - id: 'JSW1' -}) -// mcu.ic.device -const JU3 = board.add(ESP_WROOM_02, { - translate: pt(0.561, 0.281), rotate: 0, +const JD3 = board.add(D_SOD_323, { + translate: pt(0.314, 1.678), rotate: 0, + id: 'JD3' +}) +// tp_vgate.tp +const JTP5 = board.add(TestPoint_TE_RCT_0805, { + translate: pt(0.561, 1.678), rotate: 0, + id: 'JTP5' +}) +// chg.ic +const JU3 = board.add(SOT_23_5, { + translate: pt(1.972, 0.067), rotate: 0, id: 'JU3' }) -// mcu.vcc_cap0.cap -const JC9 = board.add(C_0805_2012Metric, { - translate: pt(1.228, 0.413), rotate: 0, - id: 'JC9' +// chg.vdd_cap.cap +const JC4 = board.add(C_0805_2012Metric, { + translate: pt(1.958, 0.212), rotate: 0, + id: 'JC4' }) -// mcu.vcc_cap1.cap -const JC10 = board.add(C_0603_1608Metric, { - translate: pt(1.393, 0.403), rotate: 0, - id: 'JC10' +// chg.vbat_cap.cap +const JC5 = board.add(C_0805_2012Metric, { + translate: pt(2.131, 0.212), rotate: 0, + id: 'JC5' }) -// mcu.en_pull.rc.r -const JR3 = board.add(R_0603_1608Metric, { - translate: pt(1.220, 0.519), rotate: 0, - id: 'JR3' +// chg.prog_res.res +const JR6 = board.add(R_0603_1608Metric, { + translate: pt(1.950, 0.319), rotate: 0, + id: 'JR6' }) -// mcu.en_pull.rc.c -const JC11 = board.add(C_0603_1608Metric, { - translate: pt(1.376, 0.519), rotate: 0, - id: 'JC11' +// chg.prog_sw +const JQ3 = board.add(SOT_23, { + translate: pt(2.168, 0.067), rotate: 0, + id: 'JQ3' }) -// stick.conn.ext -const JJ4 = board.add(Hirose_FH12_6S_0_5SH_1x06_1MP_P0_50mm_Horizontal, { - translate: pt(0.179, 1.315), rotate: 0, - id: 'JJ4' +// mcu.ic.device +const JU4 = board.add(Holyiot_18010_NRF52840, { + translate: pt(0.290, 0.324), rotate: 0, + id: 'JU4' }) -// ax1_div.div.top_res -const JR4 = board.add(R_0603_1608Metric, { - translate: pt(2.054, 1.151), rotate: 0, - id: 'JR4' +// mcu.vcc_cap.cap +const JC6 = board.add(C_0805_2012Metric, { + translate: pt(0.667, 0.369), rotate: 0, + id: 'JC6' }) -// ax1_div.div.bottom_res -const JR5 = board.add(R_0603_1608Metric, { - translate: pt(2.054, 1.248), rotate: 0, - id: 'JR5' +// mcu.swd.conn +const JJ3 = board.add(PinHeader_2x05_P1_27mm_Vertical_SMD, { + translate: pt(0.769, 0.146), rotate: 0, + id: 'JJ3' }) -// ax2_div.div.top_res -const JR6 = board.add(R_0603_1608Metric, { - translate: pt(2.288, 1.151), rotate: 0, - id: 'JR6' +// mcu.vbus_cap.cap +const JC7 = board.add(C_0805_2012Metric, { + translate: pt(0.840, 0.369), rotate: 0, + id: 'JC7' }) -// ax2_div.div.bottom_res +// mcu.usb_res.dp.res const JR7 = board.add(R_0603_1608Metric, { - translate: pt(2.288, 1.248), rotate: 0, + translate: pt(0.658, 0.476), rotate: 0, id: 'JR7' }) -// trig.ic -const JU5 = board.add(SOT_23, { - translate: pt(0.943, 1.189), rotate: 0, - id: 'JU5' -}) -// trig.cbyp.cap -const JC12 = board.add(C_0603_1608Metric, { - translate: pt(0.925, 1.324), rotate: 0, - id: 'JC12' -}) -// trig_div.div.top_res +// mcu.usb_res.dm.res const JR8 = board.add(R_0603_1608Metric, { - translate: pt(0.058, 1.580), rotate: 0, + translate: pt(0.814, 0.476), rotate: 0, id: 'JR8' }) -// trig_div.div.bottom_res -const JR9 = board.add(R_0603_1608Metric, { - translate: pt(0.058, 1.677), rotate: 0, - id: 'JR9' -}) -// sw[0].package -const JSW2 = board.add(MembraneSwitch_4mm, { - translate: pt(2.107, 1.551), rotate: 0, - id: 'JSW2' -}) -// sw[1].package -const JSW3 = board.add(MembraneSwitch_4mm, { - translate: pt(2.226, 1.551), rotate: 0, - id: 'JSW3' -}) -// sw[2].package -const JSW4 = board.add(MembraneSwitch_4mm, { - translate: pt(2.344, 1.551), rotate: 0, - id: 'JSW4' +// usb_esd +const JU5 = board.add(SOT_23, { + translate: pt(0.821, 1.707), rotate: 0, + id: 'JU5' }) // ledr.package -const JD2 = board.add(LED_0603_1608Metric, { - translate: pt(1.584, 1.151), rotate: 0, - id: 'JD2' +const JD4 = board.add(LED_0603_1608Metric, { + translate: pt(1.089, 1.328), rotate: 0, + id: 'JD4' }) // ledr.res +const JR9 = board.add(R_0603_1608Metric, { + translate: pt(1.089, 1.425), rotate: 0, + id: 'JR9' +}) +// i2c_pull.scl_res.res const JR10 = board.add(R_0603_1608Metric, { - translate: pt(1.584, 1.248), rotate: 0, + translate: pt(1.324, 1.328), rotate: 0, id: 'JR10' }) -// vbat_sense.div.top_res +// i2c_pull.sda_res.res const JR11 = board.add(R_0603_1608Metric, { - translate: pt(0.293, 1.580), rotate: 0, + translate: pt(1.324, 1.425), rotate: 0, id: 'JR11' }) -// vbat_sense.div.bottom_res -const JR12 = board.add(R_0603_1608Metric, { - translate: pt(0.293, 1.677), rotate: 0, - id: 'JR12' +// tp_i2c.tp_scl.tp +const JTP6 = board.add(TestPoint_TE_RCT_0805, { + translate: pt(0.846, 1.337), rotate: 0, + id: 'JTP6' }) -// i2c_pull.scl_res.res -const JR13 = board.add(R_0603_1608Metric, { - translate: pt(0.528, 1.580), rotate: 0, - id: 'JR13' +// tp_i2c.tp_sda.tp +const JTP7 = board.add(TestPoint_TE_RCT_0805, { + translate: pt(0.846, 1.451), rotate: 0, + id: 'JTP7' }) -// i2c_pull.sda_res.res -const JR14 = board.add(R_0603_1608Metric, { - translate: pt(0.528, 1.677), rotate: 0, - id: 'JR14' +// imu.ic +const JU6 = board.add(Bosch_LGA_14_3x2_5mm_P0_5mm, { + translate: pt(0.073, 1.362), rotate: 0, + id: 'JU6' +}) +// imu.vdd_cap.cap +const JC8 = board.add(C_0603_1608Metric, { + translate: pt(0.058, 1.493), rotate: 0, + id: 'JC8' +}) +// imu.vddio_cap.cap +const JC9 = board.add(C_0603_1608Metric, { + translate: pt(0.214, 1.493), rotate: 0, + id: 'JC9' +}) +// mag.ic +const JU7 = board.add(LGA_16_3x3mm_P0_5mm, { + translate: pt(2.057, 0.905), rotate: 0, + id: 'JU7' +}) +// mag.vdd_cap.cap +const JC10 = board.add(C_0603_1608Metric, { + translate: pt(2.046, 1.042), rotate: 0, + id: 'JC10' +}) +// mag.set_cap +const JC11 = board.add(C_0603_1608Metric, { + translate: pt(2.202, 1.042), rotate: 0, + id: 'JC11' +}) +// mag.c1.cap +const JC12 = board.add(C_0805_2012Metric, { + translate: pt(2.232, 0.875), rotate: 0, + id: 'JC12' +}) +// stick.conn.ext +const JJ4 = board.add(Hirose_FH12_8S_0_5SH_1x08_1MP_P0_50mm_Horizontal, { + translate: pt(0.765, 1.029), rotate: 0, + id: 'JJ4' +}) +// btns.conn.ext +const JJ7 = board.add(Hirose_FH12_8S_0_5SH_1x08_1MP_P0_50mm_Horizontal, { + translate: pt(1.281, 1.029), rotate: 0, + id: 'JJ7' }) board.setNetlist([ - {name: "Jvbat", pads: [["JJ1", "2"], ["JTP1", "1"], ["JU1", "12"], ["JU1", "14"], ["JC3", "1"], ["JR11", "1"]]}, - {name: "Jvusb", pads: [["JJ2", "A4"], ["JJ2", "A9"], ["JJ2", "B4"], ["JJ2", "B9"], ["JTP2", "1"], ["JU1", "2"], ["JC5", "1"]]}, - {name: "Jgnd", pads: [["JJ1", "1"], ["JJ2", "A1"], ["JJ2", "A12"], ["JJ2", "B1"], ["JJ2", "B12"], ["JJ2", "S1"], ["JTP3", "1"], ["JU1", "18"], ["JU1", "5"], ["JC2", "2"], ["JC3", "2"], ["JC4", "2"], ["JC5", "2"], ["JC6", "2"], ["JU2", "1"], ["JC7", "2"], ["JC8", "2"], ["JD1", "2"], ["JR2", "2"], ["JJ3", "5"], ["JSW1", "2"], ["JU3", "19"], ["JU3", "9"], ["JC9", "2"], ["JC10", "2"], ["JC11", "2"], ["JJ4", "1"], ["JR5", "2"], ["JR7", "2"], ["JU5", "3"], ["JC12", "2"], ["JR9", "2"], ["JSW2", "2"], ["JSW3", "2"], ["JSW4", "2"], ["JR12", "2"]]}, - {name: "Jv3v3", pads: [["JU2", "3"], ["JC8", "1"], ["JTP4", "1"], ["JD1", "1"], ["JJ3", "1"], ["JU3", "1"], ["JU3", "16"], ["JU3", "7"], ["JC9", "1"], ["JC10", "1"], ["JR3", "1"], ["JJ4", "2"], ["JU5", "1"], ["JC12", "1"], ["JD2", "2"], ["JR13", "1"], ["JR14", "1"]]}, - {name: "Jusb.usb.dp", pads: [["JJ2", "A6"], ["JJ2", "B6"]]}, - {name: "Jusb.usb.dm", pads: [["JJ2", "A7"], ["JJ2", "B7"]]}, - {name: "Jusb.cc.cc1", pads: [["JJ2", "A5"], ["JU1", "1"]]}, - {name: "Jusb.cc.cc2", pads: [["JJ2", "B5"], ["JU1", "22"]]}, - {name: "Jmp2722.pwr_out", pads: [["JU1", "13"], ["JL1", "2"], ["JC6", "1"], ["JU2", "2"], ["JC7", "1"]]}, - {name: "Jmp2722.vrntc", pads: [["JU1", "7"], ["JR1", "1"]]}, - {name: "Jmp2722.ntc1", pads: [["JU1", "10"], ["JR1", "2"], ["JR2", "1"]]}, - {name: "Jmp2722.rst", pads: [["JU1", "17"], ["JU3", "5"], ["JJ4", "4"]]}, - {name: "Jmp2722.int", pads: [["JU1", "8"]]}, - {name: "Jmp2722.stat", pads: [["JU1", "11"]]}, - {name: "Jmp2722.pg", pads: [["JU1", "9"]]}, - {name: "Jmp2722.i2c.scl", pads: [["JU1", "16"], ["JU3", "4"], ["JR13", "2"]]}, - {name: "Jmp2722.i2c.sda", pads: [["JU1", "15"], ["JU3", "14"], ["JR14", "2"]]}, - {name: "Jmp2722.usb.dp", pads: [["JU1", "21"]]}, - {name: "Jmp2722.usb.dm", pads: [["JU1", "20"]]}, - {name: "Jmp2722.ic.sw", pads: [["JU1", "4"], ["JC1", "2"], ["JL1", "1"]]}, - {name: "Jmp2722.ic.pmid", pads: [["JU1", "3"], ["JC2", "1"]]}, - {name: "Jmp2722.ic.bst", pads: [["JU1", "6"], ["JC1", "1"]]}, - {name: "Jmp2722.ic.vcc", pads: [["JU1", "19"], ["JC4", "1"]]}, - {name: "Jmcu.program_uart_node.a_tx", pads: [["JJ3", "4"], ["JU3", "11"]]}, - {name: "Jmcu.program_uart_node.b_tx", pads: [["JJ3", "3"], ["JU3", "12"]]}, - {name: "Jmcu.program_en_node", pads: [["JJ3", "6"], ["JU3", "2"], ["JR3", "2"], ["JC11", "1"]]}, - {name: "Jmcu.program_boot_node", pads: [["JJ3", "2"], ["JSW1", "1"], ["JU3", "8"], ["JR10", "2"]]}, - {name: "Jstick.ax1", pads: [["JJ4", "5"], ["JR4", "1"]]}, - {name: "Jstick.ax2", pads: [["JJ4", "6"], ["JR6", "1"]]}, - {name: "Jax1_div.output", pads: [["JU3", "3"], ["JR4", "2"], ["JR5", "1"]]}, - {name: "Jax2_div.output", pads: [["JU3", "15"], ["JR6", "2"], ["JR7", "1"]]}, - {name: "Jtrig.out", pads: [["JU5", "2"], ["JR8", "1"]]}, - {name: "Jtrig_div.output", pads: [["JU3", "17"], ["JR8", "2"], ["JR9", "1"]]}, - {name: "Jsw[0].out", pads: [["JU3", "10"], ["JSW2", "1"]]}, - {name: "Jsw[1].out", pads: [["JU3", "13"], ["JSW3", "1"]]}, - {name: "Jsw[2].out", pads: [["JU3", "6"], ["JSW4", "1"]]}, - {name: "Jledr.package.k", pads: [["JD2", "1"], ["JR10", "1"]]}, - {name: "Jvbat_sense.output", pads: [["JU3", "18"], ["JR11", "2"], ["JR12", "1"]]} + {name: "Jvbat", pads: [["JJ1", "2"], ["JTP1", "1"], ["JR4", "1"], ["JQ1", "2"], ["JU3", "3"], ["JC5", "1"]]}, + {name: "Jvusb", pads: [["JJ2", "A4"], ["JJ2", "A9"], ["JJ2", "B4"], ["JJ2", "B9"], ["JTP2", "1"], ["JU3", "4"], ["JC4", "1"], ["JU4", "22"], ["JC7", "1"]]}, + {name: "Jgnd", pads: [["JJ1", "1"], ["JJ2", "A1"], ["JJ2", "A12"], ["JJ2", "B1"], ["JJ2", "B12"], ["JJ2", "S1"], ["JR1", "1"], ["JR2", "1"], ["JTP3", "1"], ["JU1", "3"], ["JU1", "7"], ["JU1", "8"], ["JC1", "2"], ["JR5", "1"], ["JQ2", "2"], ["JU2", "1"], ["JC2", "2"], ["JC3", "2"], ["JD3", "2"], ["JU3", "2"], ["JC4", "2"], ["JC5", "2"], ["JQ3", "2"], ["JU4", "1"], ["JU4", "25"], ["JU4", "37"], ["JC6", "2"], ["JJ3", "3"], ["JJ3", "5"], ["JJ3", "9"], ["JC7", "2"], ["JU5", "3"], ["JU6", "1"], ["JU6", "2"], ["JU6", "3"], ["JU6", "6"], ["JU6", "7"], ["JC8", "2"], ["JC9", "2"], ["JU7", "11"], ["JU7", "9"], ["JC10", "2"], ["JC12", "2"], ["JJ4", "1"], ["JJ7", "1"], ["JJ7", "6"]]}, + {name: "Jvbat_gated", pads: [["JU1", "1"], ["JR3", "1"], ["JQ1", "3"], ["JTP5", "1"], ["JJ7", "7"], ["JJ7", "8"]]}, + {name: "Jv3v3", pads: [["JU1", "4"], ["JC1", "1"], ["JU2", "3"], ["JC3", "1"], ["JTP4", "1"], ["JD3", "1"], ["JU4", "14"], ["JC6", "1"], ["JJ3", "1"], ["JD4", "2"], ["JR10", "1"], ["JR11", "1"], ["JU6", "12"], ["JU6", "5"], ["JU6", "8"], ["JC8", "1"], ["JC9", "1"], ["JU7", "13"], ["JU7", "2"], ["JU7", "4"], ["JC10", "1"], ["JJ7", "2"]]}, + {name: "Jusb_chain_0.d_P", pads: [["JJ2", "A6"], ["JJ2", "B6"], ["JR7", "1"], ["JU5", "2"]]}, + {name: "Jusb_chain_0.d_N", pads: [["JJ2", "A7"], ["JJ2", "B7"], ["JR8", "1"], ["JU5", "1"]]}, + {name: "Jusb.conn.cc.cc1", pads: [["JJ2", "A5"], ["JR1", "2"]]}, + {name: "Jusb.conn.cc.cc2", pads: [["JJ2", "B5"], ["JR2", "2"]]}, + {name: "Jvbat_sense.i2c.scl", pads: [["JU1", "5"], ["JU4", "12"], ["JR10", "2"], ["JTP6", "1"], ["JU6", "13"], ["JU7", "1"], ["JJ7", "3"]]}, + {name: "Jvbat_sense.i2c.sda", pads: [["JU1", "6"], ["JU4", "13"], ["JR11", "2"], ["JTP7", "1"], ["JU6", "14"], ["JU7", "16"], ["JJ7", "4"]]}, + {name: "Jvbat_sense.sense_neg", pads: [["JU1", "2"], ["JR3", "2"], ["JU2", "2"], ["JC2", "1"]]}, + {name: "Jgate.btn_out", pads: [["JD2", "2"], ["JU4", "5"]]}, + {name: "Jgate.btn_in", pads: [["JD1", "1"], ["JD2", "1"], ["JJ4", "4"]]}, + {name: "Jgate.control", pads: [["JR5", "2"], ["JQ2", "1"], ["JU4", "4"]]}, + {name: "Jgate.pull_res.b", pads: [["JR4", "2"], ["JQ1", "1"], ["JQ2", "3"], ["JD1", "2"]]}, + {name: "Jchg.stat", pads: [["JU3", "1"]]}, + {name: "Jchg.prog_ctl", pads: [["JQ3", "1"], ["JU4", "10"]]}, + {name: "Jchg.ic.prog", pads: [["JU3", "5"], ["JR6", "2"]]}, + {name: "Jchg.prog_res.gnd", pads: [["JR6", "1"], ["JQ3", "3"]]}, + {name: "Jmcu.swd_node.swdio", pads: [["JU4", "32"], ["JJ3", "2"]]}, + {name: "Jmcu.swd_node.swclk", pads: [["JU4", "31"], ["JJ3", "4"]]}, + {name: "Jmcu.reset_node", pads: [["JU4", "21"], ["JJ3", "10"]]}, + {name: "Jmcu.swd.tdi", pads: [["JJ3", "8"]]}, + {name: "Jmcu.swd.swo", pads: [["JJ3", "6"]]}, + {name: "Jmcu.usb_res.interior.dp", pads: [["JU4", "24"], ["JR7", "2"]]}, + {name: "Jmcu.usb_res.interior.dm", pads: [["JU4", "23"], ["JR8", "2"]]}, + {name: "Jledr.signal", pads: [["JU4", "7"], ["JR9", "2"]]}, + {name: "Jledr.package.k", pads: [["JD4", "1"], ["JR9", "1"]]}, + {name: "Jimu.int1", pads: [["JU6", "4"]]}, + {name: "Jimu.int2", pads: [["JU6", "9"]]}, + {name: "Jmag.drdy", pads: [["JU7", "15"]]}, + {name: "Jmag.ic.setp", pads: [["JU7", "8"], ["JC11", "1"]]}, + {name: "Jmag.ic.setc", pads: [["JU7", "12"], ["JC11", "2"]]}, + {name: "Jmag.ic.c1", pads: [["JU7", "10"], ["JC12", "1"]]}, + {name: "Jstick.pwr", pads: [["JU4", "3"], ["JJ4", "2"]]}, + {name: "Jstick.ax1", pads: [["JU4", "11"], ["JJ4", "5"]]}, + {name: "Jstick.ax2", pads: [["JU4", "9"], ["JJ4", "6"]]}, + {name: "Jbtns.io0", pads: [["JU4", "8"], ["JJ7", "5"]]} ]) const limit0 = pt(-0.07874015748031496, -0.07874015748031496); -const limit1 = pt(2.464763779527559, 1.8236220472440945); +const limit1 = pt(2.4173228346456694, 1.833070866141732); 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/BleJoystick/BleJoystick_btns.net.ref b/examples/BleJoystick/BleJoystick_btns.net.ref new file mode 100644 index 000000000..c46066f20 --- /dev/null +++ b/examples/BleJoystick/BleJoystick_btns.net.ref @@ -0,0 +1,849 @@ +(export (version D) +(components +(comp (ref "JTP8") + (value "gnd") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.tp_gnd.tp")) + (property (name "edg_short_path") (value "btns.tp_gnd")) + (property (name "edg_refdes") (value "JTP8")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "gnd")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "08df027d")) +(comp (ref "JTP9") + (value "v3v3") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.tp_pwr.tp")) + (property (name "edg_short_path") (value "btns.tp_pwr")) + (property (name "edg_refdes") (value "JTP9")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "v3v3")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "091a029d")) +(comp (ref "JTP10") + (value "vbat") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.tp_vbat.tp")) + (property (name "edg_short_path") (value "btns.tp_vbat")) + (property (name "edg_refdes") (value "JTP10")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "vbat")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "0be202f1")) +(comp (ref "JTP11") + (value "i2c.scl") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "tp_i2c")) + (property (name "Sheetfile") (value "edg.abstract_parts.TestPoint.I2cTestPoint")) + (property (name "edg_path") (value "btns.tp_i2c.tp_scl.tp")) + (property (name "edg_short_path") (value "btns.tp_i2c.tp_scl")) + (property (name "edg_refdes") (value "JTP11")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "i2c.scl")) + (sheetpath (names "/btns/tp_i2c/") (tstamps "/043701b8/086c0242/")) + (tstamps "08f50286")) +(comp (ref "JTP12") + (value "i2c.sda") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "tp_i2c")) + (property (name "Sheetfile") (value "edg.abstract_parts.TestPoint.I2cTestPoint")) + (property (name "edg_path") (value "btns.tp_i2c.tp_sda.tp")) + (property (name "edg_short_path") (value "btns.tp_i2c.tp_sda")) + (property (name "edg_refdes") (value "JTP12")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "i2c.sda")) + (sheetpath (names "/btns/tp_i2c/") (tstamps "/043701b8/086c0242/")) + (tstamps "08ec027c")) +(comp (ref "JTP13") + (value "io0") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.tp_io0.tp")) + (property (name "edg_short_path") (value "btns.tp_io0")) + (property (name "edg_refdes") (value "JTP13")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "io0")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "08b3024c")) +(comp (ref "JU9") + (value "btns.ioe.ic") + (footprint "Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm") + (property (name "Sheetname") (value "ioe")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.Ch32v003.Ch32v003")) + (property (name "edg_path") (value "btns.ioe.ic")) + (property (name "edg_short_path") (value "btns.ioe.ic")) + (property (name "edg_refdes") (value "JU9")) + (property (name "edg_part") (value "CH32V003F4P6 (WCH)")) + (property (name "edg_value") (value "CH32V003F4P6")) + (sheetpath (names "/btns/ioe/") (tstamps "/043701b8/0281013e/")) + (tstamps "013700cd")) +(comp (ref "JJ6") + (value "btns.ioe.sdi") + (footprint "Connector:Tag-Connect_TC2030-IDC-FP_2x03_P1.27mm_Vertical") + (property (name "Sheetname") (value "ioe")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.Ch32v003.Ch32v003")) + (property (name "edg_path") (value "btns.ioe.sdi.conn")) + (property (name "edg_short_path") (value "btns.ioe.sdi")) + (property (name "edg_refdes") (value "JJ6")) + (property (name "edg_part") (value "")) + (property (name "edg_value") (value "")) + (sheetpath (names "/btns/ioe/") (tstamps "/043701b8/0281013e/")) + (tstamps "028d0141")) +(comp (ref "JC13") + (value "btns.ioe.vdd_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "ioe")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.Ch32v003.Ch32v003")) + (property (name "edg_path") (value "btns.ioe.vdd_cap.cap")) + (property (name "edg_short_path") (value "btns.ioe.vdd_cap")) + (property (name "edg_refdes") (value "JC13")) + (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 "/btns/ioe/") (tstamps "/043701b8/0281013e/")) + (tstamps "0b6402d2")) +(comp (ref "JSW1") + (value "btns.sw[0]") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.sw[0].package")) + (property (name "edg_short_path") (value "btns.sw[0]")) + (property (name "edg_refdes") (value "JSW1")) + (property (name "edg_part") (value "5.1mm switch")) + (property (name "edg_value") (value "5.1mm switch")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "05ee01d3")) +(comp (ref "JSW2") + (value "btns.sw[1]") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.sw[1].package")) + (property (name "edg_short_path") (value "btns.sw[1]")) + (property (name "edg_refdes") (value "JSW2")) + (property (name "edg_part") (value "5.1mm switch")) + (property (name "edg_value") (value "5.1mm switch")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "05f001d4")) +(comp (ref "JSW3") + (value "btns.sw[2]") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.sw[2].package")) + (property (name "edg_short_path") (value "btns.sw[2]")) + (property (name "edg_refdes") (value "JSW3")) + (property (name "edg_part") (value "5.1mm switch")) + (property (name "edg_value") (value "5.1mm switch")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "05f201d5")) +(comp (ref "JSW4") + (value "btns.sw[3]") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.sw[3].package")) + (property (name "edg_short_path") (value "btns.sw[3]")) + (property (name "edg_refdes") (value "JSW4")) + (property (name "edg_part") (value "5.1mm switch")) + (property (name "edg_value") (value "5.1mm switch")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "05f401d6")) +(comp (ref "JSW5") + (value "btns.sw[4]") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.sw[4].package")) + (property (name "edg_short_path") (value "btns.sw[4]")) + (property (name "edg_refdes") (value "JSW5")) + (property (name "edg_part") (value "5.1mm switch")) + (property (name "edg_value") (value "5.1mm switch")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "05f601d7")) +(comp (ref "JSW6") + (value "btns.sw[5]") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.sw[5].package")) + (property (name "edg_short_path") (value "btns.sw[5]")) + (property (name "edg_refdes") (value "JSW6")) + (property (name "edg_part") (value "5.1mm switch")) + (property (name "edg_value") (value "5.1mm switch")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "05f801d8")) +(comp (ref "JSW7") + (value "btns.sw[6]") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.sw[6].package")) + (property (name "edg_short_path") (value "btns.sw[6]")) + (property (name "edg_refdes") (value "JSW7")) + (property (name "edg_part") (value "5.1mm switch")) + (property (name "edg_value") (value "5.1mm switch")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "05fa01d9")) +(comp (ref "JSW8") + (value "btns.sw[7]") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.sw[7].package")) + (property (name "edg_short_path") (value "btns.sw[7]")) + (property (name "edg_refdes") (value "JSW8")) + (property (name "edg_part") (value "5.1mm switch")) + (property (name "edg_value") (value "5.1mm switch")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "05fc01da")) +(comp (ref "JSW9") + (value "btns.bumper_sw") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.bumper_sw.package")) + (property (name "edg_short_path") (value "btns.bumper_sw")) + (property (name "edg_refdes") (value "JSW9")) + (property (name "edg_part") (value "5.1mm switch")) + (property (name "edg_value") (value "5.1mm switch")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "12f903d5")) +(comp (ref "JU10") + (value "btns.trig.ic") + (footprint "Package_TO_SOT_SMD:SOT-23") + (property (name "Sheetname") (value "trig")) + (property (name "Sheetfile") (value "edg.parts.sensor.Mag_A1304.A1304")) + (property (name "edg_path") (value "btns.trig.ic")) + (property (name "edg_short_path") (value "btns.trig.ic")) + (property (name "edg_refdes") (value "JU10")) + (property (name "edg_part") (value "A1304ELHLX-T (Allegro MicroSystems)")) + (property (name "edg_value") (value "A1304ELHLX-T")) + (sheetpath (names "/btns/trig/") (tstamps "/043701b8/046301b7/")) + (tstamps "013700cd")) +(comp (ref "JC14") + (value "btns.trig.cbyp") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "trig")) + (property (name "Sheetfile") (value "edg.parts.sensor.Mag_A1304.A1304")) + (property (name "edg_path") (value "btns.trig.cbyp.cap")) + (property (name "edg_short_path") (value "btns.trig.cbyp")) + (property (name "edg_refdes") (value "JC14")) + (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 "/btns/trig/") (tstamps "/043701b8/046301b7/")) + (tstamps "041801af")) +(comp (ref "JTP14") + (value "btns._ioe_gpio_npx_link") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.npx_tp.tp")) + (property (name "edg_short_path") (value "btns.npx_tp")) + (property (name "edg_refdes") (value "JTP14")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "btns._ioe_gpio_npx_link")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "091f029a")) +(comp (ref "JD5") + (value "btns.npx_js.led[0].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[0].device")) + (property (name "edg_short_path") (value "btns.npx_js.led[0].device")) + (property (name "edg_refdes") (value "JD5")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_js/led[0]/") (tstamps "/043701b8/090e0293/07e5021e/")) + (tstamps "08950271")) +(comp (ref "JC15") + (value "btns.npx_js.led[0].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[0].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_js.led[0].cap")) + (property (name "edg_refdes") (value "JC15")) + (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 "/btns/npx_js/led[0]/") (tstamps "/043701b8/090e0293/07e5021e/")) + (tstamps "025e0135")) +(comp (ref "JD6") + (value "btns.npx_js.led[1].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[1].device")) + (property (name "edg_short_path") (value "btns.npx_js.led[1].device")) + (property (name "edg_refdes") (value "JD6")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_js/led[1]/") (tstamps "/043701b8/090e0293/07e7021f/")) + (tstamps "08950271")) +(comp (ref "JC16") + (value "btns.npx_js.led[1].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[1].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_js.led[1].cap")) + (property (name "edg_refdes") (value "JC16")) + (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 "/btns/npx_js/led[1]/") (tstamps "/043701b8/090e0293/07e7021f/")) + (tstamps "025e0135")) +(comp (ref "JD7") + (value "btns.npx_js.led[2].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[2].device")) + (property (name "edg_short_path") (value "btns.npx_js.led[2].device")) + (property (name "edg_refdes") (value "JD7")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_js/led[2]/") (tstamps "/043701b8/090e0293/07e90220/")) + (tstamps "08950271")) +(comp (ref "JC17") + (value "btns.npx_js.led[2].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[2].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_js.led[2].cap")) + (property (name "edg_refdes") (value "JC17")) + (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 "/btns/npx_js/led[2]/") (tstamps "/043701b8/090e0293/07e90220/")) + (tstamps "025e0135")) +(comp (ref "JD8") + (value "btns.npx_js.led[3].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[3].device")) + (property (name "edg_short_path") (value "btns.npx_js.led[3].device")) + (property (name "edg_refdes") (value "JD8")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_js/led[3]/") (tstamps "/043701b8/090e0293/07eb0221/")) + (tstamps "08950271")) +(comp (ref "JC18") + (value "btns.npx_js.led[3].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[3].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_js.led[3].cap")) + (property (name "edg_refdes") (value "JC18")) + (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 "/btns/npx_js/led[3]/") (tstamps "/043701b8/090e0293/07eb0221/")) + (tstamps "025e0135")) +(comp (ref "JD9") + (value "btns.npx_js.led[4].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[4]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[4].device")) + (property (name "edg_short_path") (value "btns.npx_js.led[4].device")) + (property (name "edg_refdes") (value "JD9")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_js/led[4]/") (tstamps "/043701b8/090e0293/07ed0222/")) + (tstamps "08950271")) +(comp (ref "JC19") + (value "btns.npx_js.led[4].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[4]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[4].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_js.led[4].cap")) + (property (name "edg_refdes") (value "JC19")) + (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 "/btns/npx_js/led[4]/") (tstamps "/043701b8/090e0293/07ed0222/")) + (tstamps "025e0135")) +(comp (ref "JD10") + (value "btns.npx_js.led[5].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[5]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[5].device")) + (property (name "edg_short_path") (value "btns.npx_js.led[5].device")) + (property (name "edg_refdes") (value "JD10")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_js/led[5]/") (tstamps "/043701b8/090e0293/07ef0223/")) + (tstamps "08950271")) +(comp (ref "JC20") + (value "btns.npx_js.led[5].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[5]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[5].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_js.led[5].cap")) + (property (name "edg_refdes") (value "JC20")) + (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 "/btns/npx_js/led[5]/") (tstamps "/043701b8/090e0293/07ef0223/")) + (tstamps "025e0135")) +(comp (ref "JD11") + (value "btns.npx_js.led[6].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[6]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[6].device")) + (property (name "edg_short_path") (value "btns.npx_js.led[6].device")) + (property (name "edg_refdes") (value "JD11")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_js/led[6]/") (tstamps "/043701b8/090e0293/07f10224/")) + (tstamps "08950271")) +(comp (ref "JC21") + (value "btns.npx_js.led[6].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[6]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[6].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_js.led[6].cap")) + (property (name "edg_refdes") (value "JC21")) + (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 "/btns/npx_js/led[6]/") (tstamps "/043701b8/090e0293/07f10224/")) + (tstamps "025e0135")) +(comp (ref "JD12") + (value "btns.npx_js.led[7].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[7]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[7].device")) + (property (name "edg_short_path") (value "btns.npx_js.led[7].device")) + (property (name "edg_refdes") (value "JD12")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_js/led[7]/") (tstamps "/043701b8/090e0293/07f30225/")) + (tstamps "08950271")) +(comp (ref "JC22") + (value "btns.npx_js.led[7].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[7]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_js.led[7].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_js.led[7].cap")) + (property (name "edg_refdes") (value "JC22")) + (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 "/btns/npx_js/led[7]/") (tstamps "/043701b8/090e0293/07f30225/")) + (tstamps "025e0135")) +(comp (ref "JD13") + (value "btns.npx_dpad.led[0].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[0].device")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[0].device")) + (property (name "edg_refdes") (value "JD13")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_dpad/led[0]/") (tstamps "/043701b8/0f39034f/07e5021e/")) + (tstamps "08950271")) +(comp (ref "JC23") + (value "btns.npx_dpad.led[0].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[0]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[0].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[0].cap")) + (property (name "edg_refdes") (value "JC23")) + (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 "/btns/npx_dpad/led[0]/") (tstamps "/043701b8/0f39034f/07e5021e/")) + (tstamps "025e0135")) +(comp (ref "JD14") + (value "btns.npx_dpad.led[1].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[1].device")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[1].device")) + (property (name "edg_refdes") (value "JD14")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_dpad/led[1]/") (tstamps "/043701b8/0f39034f/07e7021f/")) + (tstamps "08950271")) +(comp (ref "JC24") + (value "btns.npx_dpad.led[1].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[1]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[1].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[1].cap")) + (property (name "edg_refdes") (value "JC24")) + (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 "/btns/npx_dpad/led[1]/") (tstamps "/043701b8/0f39034f/07e7021f/")) + (tstamps "025e0135")) +(comp (ref "JD15") + (value "btns.npx_dpad.led[2].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[2].device")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[2].device")) + (property (name "edg_refdes") (value "JD15")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_dpad/led[2]/") (tstamps "/043701b8/0f39034f/07e90220/")) + (tstamps "08950271")) +(comp (ref "JC25") + (value "btns.npx_dpad.led[2].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[2]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[2].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[2].cap")) + (property (name "edg_refdes") (value "JC25")) + (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 "/btns/npx_dpad/led[2]/") (tstamps "/043701b8/0f39034f/07e90220/")) + (tstamps "025e0135")) +(comp (ref "JD16") + (value "btns.npx_dpad.led[3].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[3].device")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[3].device")) + (property (name "edg_refdes") (value "JD16")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_dpad/led[3]/") (tstamps "/043701b8/0f39034f/07eb0221/")) + (tstamps "08950271")) +(comp (ref "JC26") + (value "btns.npx_dpad.led[3].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[3]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[3].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[3].cap")) + (property (name "edg_refdes") (value "JC26")) + (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 "/btns/npx_dpad/led[3]/") (tstamps "/043701b8/0f39034f/07eb0221/")) + (tstamps "025e0135")) +(comp (ref "JD17") + (value "btns.npx_dpad.led[4].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[4]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[4].device")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[4].device")) + (property (name "edg_refdes") (value "JD17")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_dpad/led[4]/") (tstamps "/043701b8/0f39034f/07ed0222/")) + (tstamps "08950271")) +(comp (ref "JC27") + (value "btns.npx_dpad.led[4].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[4]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[4].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[4].cap")) + (property (name "edg_refdes") (value "JC27")) + (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 "/btns/npx_dpad/led[4]/") (tstamps "/043701b8/0f39034f/07ed0222/")) + (tstamps "025e0135")) +(comp (ref "JD18") + (value "btns.npx_dpad.led[5].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[5]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[5].device")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[5].device")) + (property (name "edg_refdes") (value "JD18")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_dpad/led[5]/") (tstamps "/043701b8/0f39034f/07ef0223/")) + (tstamps "08950271")) +(comp (ref "JC28") + (value "btns.npx_dpad.led[5].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[5]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[5].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[5].cap")) + (property (name "edg_refdes") (value "JC28")) + (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 "/btns/npx_dpad/led[5]/") (tstamps "/043701b8/0f39034f/07ef0223/")) + (tstamps "025e0135")) +(comp (ref "JD19") + (value "btns.npx_dpad.led[6].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[6]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[6].device")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[6].device")) + (property (name "edg_refdes") (value "JD19")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_dpad/led[6]/") (tstamps "/043701b8/0f39034f/07f10224/")) + (tstamps "08950271")) +(comp (ref "JC29") + (value "btns.npx_dpad.led[6].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[6]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[6].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[6].cap")) + (property (name "edg_refdes") (value "JC29")) + (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 "/btns/npx_dpad/led[6]/") (tstamps "/043701b8/0f39034f/07f10224/")) + (tstamps "025e0135")) +(comp (ref "JD20") + (value "btns.npx_dpad.led[7].device") + (footprint "LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm") + (property (name "Sheetname") (value "led[7]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[7].device")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[7].device")) + (property (name "edg_refdes") (value "JD20")) + (property (name "edg_part") (value "WS2812C-2020-V1 (Worldsemi)")) + (property (name "edg_value") (value "WS2812C-2020-V1")) + (sheetpath (names "/btns/npx_dpad/led[7]/") (tstamps "/043701b8/0f39034f/07f30225/")) + (tstamps "08950271")) +(comp (ref "JC30") + (value "btns.npx_dpad.led[7].cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "led[7]")) + (property (name "Sheetfile") (value "edg.parts.human_interface.Neopixel.Ws2812c_2020")) + (property (name "edg_path") (value "btns.npx_dpad.led[7].cap.cap")) + (property (name "edg_short_path") (value "btns.npx_dpad.led[7].cap")) + (property (name "edg_refdes") (value "JC30")) + (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 "/btns/npx_dpad/led[7]/") (tstamps "/043701b8/0f39034f/07f30225/")) + (tstamps "025e0135")) +(comp (ref "JJ8") + (value "btns.conn") + (footprint "Connector_FFC-FPC:Hirose_FH12-8S-0.5SH_1x08-1MP_P0.50mm_Horizontal") + (property (name "Sheetname") (value "btns")) + (property (name "Sheetfile") (value "examples.test_ble_joystick.ButtonSubboard")) + (property (name "edg_path") (value "btns.conn.int")) + (property (name "edg_short_path") (value "btns.conn")) + (property (name "edg_refdes") (value "JJ8")) + (property (name "edg_part") (value "AFC01-S08FC*-00 (Jushuo)")) + (property (name "edg_value") (value "AFC01-S08FC*-00")) + (sheetpath (names "/btns/") (tstamps "/043701b8/")) + (tstamps "042701af"))) +(nets +(net (code 1) (name "Jbtns.gnd") + (node (ref JTP8) (pin 1)) + (node (ref JU9) (pin 7)) + (node (ref JJ6) (pin 5)) + (node (ref JC13) (pin 2)) + (node (ref JSW1) (pin 2)) + (node (ref JSW2) (pin 2)) + (node (ref JSW3) (pin 2)) + (node (ref JSW4) (pin 2)) + (node (ref JSW5) (pin 2)) + (node (ref JSW6) (pin 2)) + (node (ref JSW7) (pin 2)) + (node (ref JSW8) (pin 2)) + (node (ref JSW9) (pin 2)) + (node (ref JU10) (pin 3)) + (node (ref JC14) (pin 2)) + (node (ref JD5) (pin 2)) + (node (ref JC15) (pin 2)) + (node (ref JD6) (pin 2)) + (node (ref JC16) (pin 2)) + (node (ref JD7) (pin 2)) + (node (ref JC17) (pin 2)) + (node (ref JD8) (pin 2)) + (node (ref JC18) (pin 2)) + (node (ref JD9) (pin 2)) + (node (ref JC19) (pin 2)) + (node (ref JD10) (pin 2)) + (node (ref JC20) (pin 2)) + (node (ref JD11) (pin 2)) + (node (ref JC21) (pin 2)) + (node (ref JD12) (pin 2)) + (node (ref JC22) (pin 2)) + (node (ref JD13) (pin 2)) + (node (ref JC23) (pin 2)) + (node (ref JD14) (pin 2)) + (node (ref JC24) (pin 2)) + (node (ref JD15) (pin 2)) + (node (ref JC25) (pin 2)) + (node (ref JD16) (pin 2)) + (node (ref JC26) (pin 2)) + (node (ref JD17) (pin 2)) + (node (ref JC27) (pin 2)) + (node (ref JD18) (pin 2)) + (node (ref JC28) (pin 2)) + (node (ref JD19) (pin 2)) + (node (ref JC29) (pin 2)) + (node (ref JD20) (pin 2)) + (node (ref JC30) (pin 2)) + (node (ref JJ8) (pin 1)) + (node (ref JJ8) (pin 6))) +(net (code 2) (name "Jbtns.pwr") + (node (ref JTP9) (pin 1)) + (node (ref JU9) (pin 9)) + (node (ref JJ6) (pin 1)) + (node (ref JC13) (pin 1)) + (node (ref JU10) (pin 1)) + (node (ref JC14) (pin 1)) + (node (ref JJ8) (pin 2))) +(net (code 3) (name "Jbtns.vbat") + (node (ref JTP10) (pin 1)) + (node (ref JD5) (pin 4)) + (node (ref JC15) (pin 1)) + (node (ref JD6) (pin 4)) + (node (ref JC16) (pin 1)) + (node (ref JD7) (pin 4)) + (node (ref JC17) (pin 1)) + (node (ref JD8) (pin 4)) + (node (ref JC18) (pin 1)) + (node (ref JD9) (pin 4)) + (node (ref JC19) (pin 1)) + (node (ref JD10) (pin 4)) + (node (ref JC20) (pin 1)) + (node (ref JD11) (pin 4)) + (node (ref JC21) (pin 1)) + (node (ref JD12) (pin 4)) + (node (ref JC22) (pin 1)) + (node (ref JD13) (pin 4)) + (node (ref JC23) (pin 1)) + (node (ref JD14) (pin 4)) + (node (ref JC24) (pin 1)) + (node (ref JD15) (pin 4)) + (node (ref JC25) (pin 1)) + (node (ref JD16) (pin 4)) + (node (ref JC26) (pin 1)) + (node (ref JD17) (pin 4)) + (node (ref JC27) (pin 1)) + (node (ref JD18) (pin 4)) + (node (ref JC28) (pin 1)) + (node (ref JD19) (pin 4)) + (node (ref JC29) (pin 1)) + (node (ref JD20) (pin 4)) + (node (ref JC30) (pin 1)) + (node (ref JJ8) (pin 7)) + (node (ref JJ8) (pin 8))) +(net (code 4) (name "Jbtns.i2c.scl") + (node (ref JTP11) (pin 1)) + (node (ref JU9) (pin 12)) + (node (ref JJ8) (pin 3))) +(net (code 5) (name "Jbtns.i2c.sda") + (node (ref JTP12) (pin 1)) + (node (ref JU9) (pin 11)) + (node (ref JJ8) (pin 4))) +(net (code 6) (name "Jbtns.io0") + (node (ref JTP13) (pin 1)) + (node (ref JU9) (pin 2)) + (node (ref JJ8) (pin 5))) +(net (code 7) (name "Jbtns.ioe.ic.nrst") + (node (ref JU9) (pin 4)) + (node (ref JJ6) (pin 3))) +(net (code 8) (name "Jbtns.ioe.ic.osc.xtal_in") + (node (ref JU9) (pin 5))) +(net (code 9) (name "Jbtns.ioe.ic.osc.xtal_out") + (node (ref JU9) (pin 6))) +(net (code 10) (name "Jbtns.ioe.ic.swio") + (node (ref JU9) (pin 18)) + (node (ref JJ6) (pin 2))) +(net (code 11) (name "Jbtns.sw[0].out") + (node (ref JU9) (pin 3)) + (node (ref JSW1) (pin 1))) +(net (code 12) (name "Jbtns.sw[1].out") + (node (ref JU9) (pin 8)) + (node (ref JSW2) (pin 1))) +(net (code 13) (name "Jbtns.sw[2].out") + (node (ref JU9) (pin 10)) + (node (ref JSW3) (pin 1))) +(net (code 14) (name "Jbtns.sw[3].out") + (node (ref JU9) (pin 13)) + (node (ref JSW4) (pin 1))) +(net (code 15) (name "Jbtns.sw[4].out") + (node (ref JU9) (pin 14)) + (node (ref JSW5) (pin 1))) +(net (code 16) (name "Jbtns.sw[5].out") + (node (ref JU9) (pin 15)) + (node (ref JSW6) (pin 1))) +(net (code 17) (name "Jbtns.sw[6].out") + (node (ref JU9) (pin 16)) + (node (ref JSW7) (pin 1))) +(net (code 18) (name "Jbtns.sw[7].out") + (node (ref JU9) (pin 17)) + (node (ref JSW8) (pin 1))) +(net (code 19) (name "Jbtns.bumper_sw.out") + (node (ref JU9) (pin 19)) + (node (ref JSW9) (pin 1))) +(net (code 20) (name "Jbtns.trig.out") + (node (ref JU9) (pin 1)) + (node (ref JU10) (pin 2))) +(net (code 21) (name "Jbtns.npx_tp.io") + (node (ref JU9) (pin 20)) + (node (ref JTP14) (pin 1)) + (node (ref JD5) (pin 3))) +(net (code 22) (name "Jbtns.npx_js.dout") + (node (ref JD12) (pin 1)) + (node (ref JD13) (pin 3))) +(net (code 23) (name "Jbtns.npx_js.led[0].dout") + (node (ref JD5) (pin 1)) + (node (ref JD6) (pin 3))) +(net (code 24) (name "Jbtns.npx_js.led[1].dout") + (node (ref JD6) (pin 1)) + (node (ref JD7) (pin 3))) +(net (code 25) (name "Jbtns.npx_js.led[2].dout") + (node (ref JD7) (pin 1)) + (node (ref JD8) (pin 3))) +(net (code 26) (name "Jbtns.npx_js.led[3].dout") + (node (ref JD8) (pin 1)) + (node (ref JD9) (pin 3))) +(net (code 27) (name "Jbtns.npx_js.led[4].dout") + (node (ref JD9) (pin 1)) + (node (ref JD10) (pin 3))) +(net (code 28) (name "Jbtns.npx_js.led[5].dout") + (node (ref JD10) (pin 1)) + (node (ref JD11) (pin 3))) +(net (code 29) (name "Jbtns.npx_js.led[6].dout") + (node (ref JD11) (pin 1)) + (node (ref JD12) (pin 3))) +(net (code 30) (name "Jbtns.npx_dpad.dout") + (node (ref JD20) (pin 1))) +(net (code 31) (name "Jbtns.npx_dpad.led[0].dout") + (node (ref JD13) (pin 1)) + (node (ref JD14) (pin 3))) +(net (code 32) (name "Jbtns.npx_dpad.led[1].dout") + (node (ref JD14) (pin 1)) + (node (ref JD15) (pin 3))) +(net (code 33) (name "Jbtns.npx_dpad.led[2].dout") + (node (ref JD15) (pin 1)) + (node (ref JD16) (pin 3))) +(net (code 34) (name "Jbtns.npx_dpad.led[3].dout") + (node (ref JD16) (pin 1)) + (node (ref JD17) (pin 3))) +(net (code 35) (name "Jbtns.npx_dpad.led[4].dout") + (node (ref JD17) (pin 1)) + (node (ref JD18) (pin 3))) +(net (code 36) (name "Jbtns.npx_dpad.led[5].dout") + (node (ref JD18) (pin 1)) + (node (ref JD19) (pin 3))) +(net (code 37) (name "Jbtns.npx_dpad.led[6].dout") + (node (ref JD19) (pin 1)) + (node (ref JD20) (pin 3)))) +) \ No newline at end of file diff --git a/examples/BleJoystick/BleJoystick_stick.net.ref b/examples/BleJoystick/BleJoystick_stick.net.ref index c6b66197f..e6a89123c 100644 --- a/examples/BleJoystick/BleJoystick_stick.net.ref +++ b/examples/BleJoystick/BleJoystick_stick.net.ref @@ -1,46 +1,46 @@ (export (version D) (components -(comp (ref "JU4") +(comp (ref "JU8") (value "stick.stick") (footprint "edg:Joystick_XboxElite2") (property (name "Sheetname") (value "stick")) (property (name "Sheetfile") (value "examples.test_ble_joystick.JoystickSubboard")) (property (name "edg_path") (value "stick.stick")) (property (name "edg_short_path") (value "stick.stick")) - (property (name "edg_refdes") (value "JU4")) + (property (name "edg_refdes") (value "JU8")) (property (name "edg_part") (value "")) (property (name "edg_value") (value "")) (sheetpath (names "/stick/") (tstamps "/0680021f/")) (tstamps "0680021f")) (comp (ref "JJ5") (value "stick.conn") - (footprint "Connector_FFC-FPC:Hirose_FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal") + (footprint "Connector_FFC-FPC:Hirose_FH12-8S-0.5SH_1x08-1MP_P0.50mm_Horizontal") (property (name "Sheetname") (value "stick")) (property (name "Sheetfile") (value "examples.test_ble_joystick.JoystickSubboard")) (property (name "edg_path") (value "stick.conn.int")) (property (name "edg_short_path") (value "stick.conn")) (property (name "edg_refdes") (value "JJ5")) - (property (name "edg_part") (value "AFC01-S06FC*-00 (Jushuo)")) - (property (name "edg_value") (value "AFC01-S06FC*-00")) + (property (name "edg_part") (value "AFC01-S08FC*-00 (Jushuo)")) + (property (name "edg_value") (value "AFC01-S08FC*-00")) (sheetpath (names "/stick/") (tstamps "/0680021f/")) (tstamps "042701af"))) (nets (net (code 1) (name "Jstick.gnd") - (node (ref JU4) (pin 2)) - (node (ref JU4) (pin 3)) - (node (ref JU4) (pin 8)) - (node (ref JJ5) (pin 6))) + (node (ref JU8) (pin 2)) + (node (ref JU8) (pin 3)) + (node (ref JU8) (pin 8)) + (node (ref JJ5) (pin 8))) (net (code 2) (name "Jstick.pwr") - (node (ref JU4) (pin 5)) - (node (ref JU4) (pin 6)) - (node (ref JJ5) (pin 5))) + (node (ref JU8) (pin 5)) + (node (ref JU8) (pin 6)) + (node (ref JJ5) (pin 7))) (net (code 3) (name "Jstick.sw") - (node (ref JU4) (pin 1)) - (node (ref JJ5) (pin 3))) + (node (ref JU8) (pin 1)) + (node (ref JJ5) (pin 5))) (net (code 4) (name "Jstick.ax1") - (node (ref JU4) (pin 4)) - (node (ref JJ5) (pin 2))) + (node (ref JU8) (pin 4)) + (node (ref JJ5) (pin 4))) (net (code 5) (name "Jstick.ax2") - (node (ref JU4) (pin 7)) - (node (ref JJ5) (pin 1)))) + (node (ref JU8) (pin 7)) + (node (ref JJ5) (pin 3)))) ) \ No newline at end of file diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py index 479556dd3..67e255a10 100644 --- a/examples/test_ble_joystick.py +++ b/examples/test_ble_joystick.py @@ -19,7 +19,7 @@ def __init__(self) -> None: self.ax1 = self.Export(self.stick.ax1) self.ax2 = self.Export(self.stick.ax2) - self.conn = self.Block(Fpc050Pair(6), external=True) + self.conn = self.Block(Fpc050Pair(8), external=True) self.export_tap(self.gnd.net, self.conn.pins.request("1")) self.export_tap(self.pwr.net, self.conn.pins.request("2")) self.export_tap(self.sw.net, self.conn.pins.request("4")) @@ -76,13 +76,15 @@ def __init__(self) -> None: imp.Block(NeopixelArray(8)), ) - self.conn = self.Block(Fpc050Pair(6), external=True) + self.conn = self.Block(Fpc050Pair(8, cable="opposite"), external=True) self.export_tap(self.gnd.net, self.conn.pins.request("1")) self.export_tap(self.pwr.net, self.conn.pins.request("2")) self.export_tap(self.i2c.scl.net, self.conn.pins.request("3")) self.export_tap(self.i2c.sda.net, self.conn.pins.request("4")) self.export_tap(self.io0.net, self.conn.pins.request("5")) - self.export_tap(self.vbat.net, self.conn.pins.request("6")) + self.export_tap(self.gnd.net, self.conn.pins.request("6")) + self.export_tap(self.vbat.net, self.conn.pins.request("7")) + self.export_tap(self.vbat.net, self.conn.pins.request("8")) class BleJoystick(JlcBoardTop): @@ -94,7 +96,8 @@ def contents(self) -> None: # really should operate down to ~3.3v, # this forces the model to allow the LDO to go into tracking - self.bat = self.Block(LipoConnector(voltage=(4.0, 4.2) * Volt, actual_voltage=(4.0, 4.2) * Volt)) + # and allows the neopixels to go below their minimum rated voltage which works in practice + self.bat = self.Block(LipoConnector(voltage=(3.8, 4.2) * Volt, actual_voltage=(3.8, 4.2) * Volt)) self.usb = self.Block(UsbCReceptacle(current_limits=(0, 1) * Amp)) self.vbat = self.connect(self.bat.pwr) @@ -119,11 +122,12 @@ def contents(self) -> None: imp.Block(ProtectionZenerDiode(voltage=(3.45, 3.9) * Volt)), ) self.vbat_gated = self.connect(self.gate.pwr_out) + self.tp_vgate = self.Block(VoltageTestPoint()).connected(self.gate.pwr_out) self.v3v3 = self.connect(self.reg_3v3.pwr_out, self.vbat_sense.pwr) self.chg = imp.Block(Mcp73831(charging_current=100 * mAmp(tol=0.2))) self.connect(self.usb.pwr, self.chg.pwr) - self.connect(self.chg.pwr_bat, self.bat.chg) + self.connect(self.chg.pwr_bat, self.bat.pwr) # 3V3 DOMAIN with self.implicit_connect( @@ -142,6 +146,7 @@ def contents(self) -> None: mcu_i2c = self.mcu.i2c.request("i2c") (self.i2c_pull,), _ = self.chain(mcu_i2c, imp.Block(I2cPullup())) + self.tp_i2c = self.Block(I2cTestPoint()).connected(mcu_i2c) self.connect(mcu_i2c, self.vbat_sense.i2c) self.imu = imp.Block(Lsm6ds3trc()) From e7caa0f8330a16bcd72e4948334b891403be0c03 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 22:34:23 -0700 Subject: [PATCH 12/13] update netlists --- edg/parts/connector/SwdHeaders.py | 32 --- edg/parts/connector/__init__.py | 2 +- examples/BleJoystick/BleJoystick.net.ref | 42 ++-- examples/BleJoystick/BleJoystick.svgpcb.js | 39 ++-- examples/Keyboard/Keyboard.kicad_pro | 72 +++++-- examples/Multimeter/Multimeter.net.ref | 124 ++++++----- examples/Multimeter/Multimeter.svgpcb.js | 227 ++++++++++----------- examples/TofArray/TofArray.net.ref | 50 +++-- examples/TofArray/TofArray.svgpcb.js | 51 +++-- examples/test_ble_joystick.py | 2 +- examples/test_multimeter.py | 2 +- examples/test_tofarray.py | 2 +- 12 files changed, 321 insertions(+), 324 deletions(-) diff --git a/edg/parts/connector/SwdHeaders.py b/edg/parts/connector/SwdHeaders.py index 8dfff6615..f531fec7c 100644 --- a/edg/parts/connector/SwdHeaders.py +++ b/edg/parts/connector/SwdHeaders.py @@ -51,35 +51,3 @@ def contents(self) -> None: self.conn = self.Block(TagConnect(6)).connected( {"1": self.pwr, "2": self.swd.swdio, "3": self.reset, "4": self.swd.swclk, "5": self.gnd, "6": self.swo} ) - - -class SwdCortexTargetTc2050( - SwdCortexTargetConnector, SwdCortexTargetConnectorReset, SwdCortexTargetConnectorSwo, SwdCortexTargetConnectorTdi -): - """UNOFFICIAL tag connect SWD header, maintaining physical pin compatibility with the 2x05 1.27mm header. - NOT RECOMMENDED for use, this is a legacy artifact and will be removed. - Use one of the official pinnings instead.""" - - @override - def contents(self) -> None: - super().contents() - - self.gnd.init_from(Ground()) - self.pwr.init_from(VoltageSink()) - self.swd.init_from(SwdHostPort()) - self.swo.init_from(DigitalBidir()) - self.tdi.init_from(DigitalBidir()) - # reset modeled as pulldown to not conflict with other drivers, technically an open-drain - self.reset.init_from(DigitalSource.pulldown_from_supply(self.gnd)) - - self.conn = self.Block(TagConnect(10)).connected( - { - "1": self.pwr, - ("2", "3", "5"): self.gnd, - "10": self.swd.swdio, - "9": self.swd.swclk, - "8": self.swo, - "7": self.tdi, - "6": self.reset, - } - ) diff --git a/edg/parts/connector/__init__.py b/edg/parts/connector/__init__.py index 7b60d479b..41e2f2ebe 100644 --- a/edg/parts/connector/__init__.py +++ b/edg/parts/connector/__init__.py @@ -53,4 +53,4 @@ # Applications from .SwdHeaders import SwdCortexTargetHeader -from .SwdHeaders import SwdCortexTargetTagConnect, SwdCortexTargetTc2050 +from .SwdHeaders import SwdCortexTargetTagConnect diff --git a/examples/BleJoystick/BleJoystick.net.ref b/examples/BleJoystick/BleJoystick.net.ref index d4914216b..4b6610025 100644 --- a/examples/BleJoystick/BleJoystick.net.ref +++ b/examples/BleJoystick/BleJoystick.net.ref @@ -386,14 +386,14 @@ (tstamps "0b5902d0")) (comp (ref "JJ3") (value "mcu.swd") - (footprint "Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMD") + (footprint "Connector:Tag-Connect_TC2030-IDC-FP_2x03_P1.27mm_Vertical") (property (name "Sheetname") (value "mcu")) (property (name "Sheetfile") (value "edg.parts.microcontroller.nRF52840.Holyiot_18010")) (property (name "edg_path") (value "mcu.swd.conn")) (property (name "edg_short_path") (value "mcu.swd")) (property (name "edg_refdes") (value "JJ3")) - (property (name "edg_part") (value "PinHeader1.27 Shrouded 2x5 (Generic)")) - (property (name "edg_value") (value "PinHeader1.27 Shrouded 2x5")) + (property (name "edg_part") (value "")) + (property (name "edg_value") (value "")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) (tstamps "02ae014f")) (comp (ref "JC7") @@ -670,9 +670,7 @@ (node (ref JU4) (pin 25)) (node (ref JU4) (pin 37)) (node (ref JC6) (pin 2)) - (node (ref JJ3) (pin 3)) (node (ref JJ3) (pin 5)) - (node (ref JJ3) (pin 9)) (node (ref JC7) (pin 2)) (node (ref JU5) (pin 3)) (node (ref JU6) (pin 1)) @@ -791,48 +789,46 @@ (node (ref JJ3) (pin 4))) (net (code 23) (name "Jmcu.reset_node") (node (ref JU4) (pin 21)) - (node (ref JJ3) (pin 10))) -(net (code 24) (name "Jmcu.swd.tdi") - (node (ref JJ3) (pin 8))) -(net (code 25) (name "Jmcu.swd.swo") + (node (ref JJ3) (pin 3))) +(net (code 24) (name "Jmcu.swd.swo") (node (ref JJ3) (pin 6))) -(net (code 26) (name "Jmcu.usb_res.interior.dp") +(net (code 25) (name "Jmcu.usb_res.interior.dp") (node (ref JU4) (pin 24)) (node (ref JR7) (pin 2))) -(net (code 27) (name "Jmcu.usb_res.interior.dm") +(net (code 26) (name "Jmcu.usb_res.interior.dm") (node (ref JU4) (pin 23)) (node (ref JR8) (pin 2))) -(net (code 28) (name "Jledr.signal") +(net (code 27) (name "Jledr.signal") (node (ref JU4) (pin 7)) (node (ref JR9) (pin 2))) -(net (code 29) (name "Jledr.package.k") +(net (code 28) (name "Jledr.package.k") (node (ref JD4) (pin 1)) (node (ref JR9) (pin 1))) -(net (code 30) (name "Jimu.int1") +(net (code 29) (name "Jimu.int1") (node (ref JU6) (pin 4))) -(net (code 31) (name "Jimu.int2") +(net (code 30) (name "Jimu.int2") (node (ref JU6) (pin 9))) -(net (code 32) (name "Jmag.drdy") +(net (code 31) (name "Jmag.drdy") (node (ref JU7) (pin 15))) -(net (code 33) (name "Jmag.ic.setp") +(net (code 32) (name "Jmag.ic.setp") (node (ref JU7) (pin 8)) (node (ref JC11) (pin 1))) -(net (code 34) (name "Jmag.ic.setc") +(net (code 33) (name "Jmag.ic.setc") (node (ref JU7) (pin 12)) (node (ref JC11) (pin 2))) -(net (code 35) (name "Jmag.ic.c1") +(net (code 34) (name "Jmag.ic.c1") (node (ref JU7) (pin 10)) (node (ref JC12) (pin 1))) -(net (code 36) (name "Jstick.pwr") +(net (code 35) (name "Jstick.pwr") (node (ref JU4) (pin 3)) (node (ref JJ4) (pin 2))) -(net (code 37) (name "Jstick.ax1") +(net (code 36) (name "Jstick.ax1") (node (ref JU4) (pin 11)) (node (ref JJ4) (pin 5))) -(net (code 38) (name "Jstick.ax2") +(net (code 37) (name "Jstick.ax2") (node (ref JU4) (pin 9)) (node (ref JJ4) (pin 6))) -(net (code 39) (name "Jbtns.io0") +(net (code 38) (name "Jbtns.io0") (node (ref JU4) (pin 8)) (node (ref JJ7) (pin 5)))) ) \ No newline at end of file diff --git a/examples/BleJoystick/BleJoystick.svgpcb.js b/examples/BleJoystick/BleJoystick.svgpcb.js index ed2c4d304..714a28916 100644 --- a/examples/BleJoystick/BleJoystick.svgpcb.js +++ b/examples/BleJoystick/BleJoystick.svgpcb.js @@ -22,17 +22,17 @@ const JJ1 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { }) // usb.conn const JJ2 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, { - translate: pt(1.266, 0.165), rotate: 0, + translate: pt(1.243, 0.165), rotate: 0, id: 'JJ2' }) // usb.cc_pull.cc1.res const JR1 = board.add(R_0603_1608Metric, { - translate: pt(1.115, 0.420), rotate: 0, + translate: pt(1.091, 0.420), rotate: 0, id: 'JR1' }) // usb.cc_pull.cc2.res const JR2 = board.add(R_0603_1608Metric, { - translate: pt(1.271, 0.420), rotate: 0, + translate: pt(1.247, 0.420), rotate: 0, id: 'JR2' }) // tp_bat.tp @@ -52,17 +52,17 @@ const JTP3 = board.add(TestPoint_TE_RCT_0805, { }) // vbat_sense.ic const JU1 = board.add(SOT_23_8, { - translate: pt(1.674, 0.067), rotate: 0, + translate: pt(1.651, 0.067), rotate: 0, id: 'JU1' }) // vbat_sense.vs_cap.cap const JC1 = board.add(C_0603_1608Metric, { - translate: pt(1.652, 0.330), rotate: 0, + translate: pt(1.628, 0.330), rotate: 0, id: 'JC1' }) // vbat_sense.Rs.res.res const JR3 = board.add(R_1206_3216Metric, { - translate: pt(1.683, 0.217), rotate: 0, + translate: pt(1.660, 0.217), rotate: 0, id: 'JR3' }) // gate.pull_res @@ -127,27 +127,27 @@ const JTP5 = board.add(TestPoint_TE_RCT_0805, { }) // chg.ic const JU3 = board.add(SOT_23_5, { - translate: pt(1.972, 0.067), rotate: 0, + translate: pt(1.948, 0.067), rotate: 0, id: 'JU3' }) // chg.vdd_cap.cap const JC4 = board.add(C_0805_2012Metric, { - translate: pt(1.958, 0.212), rotate: 0, + translate: pt(1.935, 0.212), rotate: 0, id: 'JC4' }) // chg.vbat_cap.cap const JC5 = board.add(C_0805_2012Metric, { - translate: pt(2.131, 0.212), rotate: 0, + translate: pt(2.108, 0.212), rotate: 0, id: 'JC5' }) // chg.prog_res.res const JR6 = board.add(R_0603_1608Metric, { - translate: pt(1.950, 0.319), rotate: 0, + translate: pt(1.926, 0.319), rotate: 0, id: 'JR6' }) // chg.prog_sw const JQ3 = board.add(SOT_23, { - translate: pt(2.168, 0.067), rotate: 0, + translate: pt(2.144, 0.067), rotate: 0, id: 'JQ3' }) // mcu.ic.device @@ -157,27 +157,27 @@ const JU4 = board.add(Holyiot_18010_NRF52840, { }) // mcu.vcc_cap.cap const JC6 = board.add(C_0805_2012Metric, { - translate: pt(0.667, 0.369), rotate: 0, + translate: pt(0.667, 0.413), rotate: 0, id: 'JC6' }) // mcu.swd.conn -const JJ3 = board.add(PinHeader_2x05_P1_27mm_Vertical_SMD, { - translate: pt(0.769, 0.146), rotate: 0, +const JJ3 = board.add(Tag_Connect_TC2030_IDC_FP_2x03_P1_27mm_Vertical, { + translate: pt(0.767, 0.167), rotate: 0, id: 'JJ3' }) // mcu.vbus_cap.cap const JC7 = board.add(C_0805_2012Metric, { - translate: pt(0.840, 0.369), rotate: 0, + translate: pt(0.840, 0.413), rotate: 0, id: 'JC7' }) // mcu.usb_res.dp.res const JR7 = board.add(R_0603_1608Metric, { - translate: pt(0.658, 0.476), rotate: 0, + translate: pt(0.658, 0.519), rotate: 0, id: 'JR7' }) // mcu.usb_res.dm.res const JR8 = board.add(R_0603_1608Metric, { - translate: pt(0.814, 0.476), rotate: 0, + translate: pt(0.814, 0.519), rotate: 0, id: 'JR8' }) // usb_esd @@ -264,7 +264,7 @@ const JJ7 = board.add(Hirose_FH12_8S_0_5SH_1x08_1MP_P0_50mm_Horizontal, { board.setNetlist([ {name: "Jvbat", pads: [["JJ1", "2"], ["JTP1", "1"], ["JR4", "1"], ["JQ1", "2"], ["JU3", "3"], ["JC5", "1"]]}, {name: "Jvusb", pads: [["JJ2", "A4"], ["JJ2", "A9"], ["JJ2", "B4"], ["JJ2", "B9"], ["JTP2", "1"], ["JU3", "4"], ["JC4", "1"], ["JU4", "22"], ["JC7", "1"]]}, - {name: "Jgnd", pads: [["JJ1", "1"], ["JJ2", "A1"], ["JJ2", "A12"], ["JJ2", "B1"], ["JJ2", "B12"], ["JJ2", "S1"], ["JR1", "1"], ["JR2", "1"], ["JTP3", "1"], ["JU1", "3"], ["JU1", "7"], ["JU1", "8"], ["JC1", "2"], ["JR5", "1"], ["JQ2", "2"], ["JU2", "1"], ["JC2", "2"], ["JC3", "2"], ["JD3", "2"], ["JU3", "2"], ["JC4", "2"], ["JC5", "2"], ["JQ3", "2"], ["JU4", "1"], ["JU4", "25"], ["JU4", "37"], ["JC6", "2"], ["JJ3", "3"], ["JJ3", "5"], ["JJ3", "9"], ["JC7", "2"], ["JU5", "3"], ["JU6", "1"], ["JU6", "2"], ["JU6", "3"], ["JU6", "6"], ["JU6", "7"], ["JC8", "2"], ["JC9", "2"], ["JU7", "11"], ["JU7", "9"], ["JC10", "2"], ["JC12", "2"], ["JJ4", "1"], ["JJ7", "1"], ["JJ7", "6"]]}, + {name: "Jgnd", pads: [["JJ1", "1"], ["JJ2", "A1"], ["JJ2", "A12"], ["JJ2", "B1"], ["JJ2", "B12"], ["JJ2", "S1"], ["JR1", "1"], ["JR2", "1"], ["JTP3", "1"], ["JU1", "3"], ["JU1", "7"], ["JU1", "8"], ["JC1", "2"], ["JR5", "1"], ["JQ2", "2"], ["JU2", "1"], ["JC2", "2"], ["JC3", "2"], ["JD3", "2"], ["JU3", "2"], ["JC4", "2"], ["JC5", "2"], ["JQ3", "2"], ["JU4", "1"], ["JU4", "25"], ["JU4", "37"], ["JC6", "2"], ["JJ3", "5"], ["JC7", "2"], ["JU5", "3"], ["JU6", "1"], ["JU6", "2"], ["JU6", "3"], ["JU6", "6"], ["JU6", "7"], ["JC8", "2"], ["JC9", "2"], ["JU7", "11"], ["JU7", "9"], ["JC10", "2"], ["JC12", "2"], ["JJ4", "1"], ["JJ7", "1"], ["JJ7", "6"]]}, {name: "Jvbat_gated", pads: [["JU1", "1"], ["JR3", "1"], ["JQ1", "3"], ["JTP5", "1"], ["JJ7", "7"], ["JJ7", "8"]]}, {name: "Jv3v3", pads: [["JU1", "4"], ["JC1", "1"], ["JU2", "3"], ["JC3", "1"], ["JTP4", "1"], ["JD3", "1"], ["JU4", "14"], ["JC6", "1"], ["JJ3", "1"], ["JD4", "2"], ["JR10", "1"], ["JR11", "1"], ["JU6", "12"], ["JU6", "5"], ["JU6", "8"], ["JC8", "1"], ["JC9", "1"], ["JU7", "13"], ["JU7", "2"], ["JU7", "4"], ["JC10", "1"], ["JJ7", "2"]]}, {name: "Jusb_chain_0.d_P", pads: [["JJ2", "A6"], ["JJ2", "B6"], ["JR7", "1"], ["JU5", "2"]]}, @@ -284,8 +284,7 @@ board.setNetlist([ {name: "Jchg.prog_res.gnd", pads: [["JR6", "1"], ["JQ3", "3"]]}, {name: "Jmcu.swd_node.swdio", pads: [["JU4", "32"], ["JJ3", "2"]]}, {name: "Jmcu.swd_node.swclk", pads: [["JU4", "31"], ["JJ3", "4"]]}, - {name: "Jmcu.reset_node", pads: [["JU4", "21"], ["JJ3", "10"]]}, - {name: "Jmcu.swd.tdi", pads: [["JJ3", "8"]]}, + {name: "Jmcu.reset_node", pads: [["JU4", "21"], ["JJ3", "3"]]}, {name: "Jmcu.swd.swo", pads: [["JJ3", "6"]]}, {name: "Jmcu.usb_res.interior.dp", pads: [["JU4", "24"], ["JR7", "2"]]}, {name: "Jmcu.usb_res.interior.dm", pads: [["JU4", "23"], ["JR8", "2"]]}, diff --git a/examples/Keyboard/Keyboard.kicad_pro b/examples/Keyboard/Keyboard.kicad_pro index 2b461db85..f8ea8a338 100644 --- a/examples/Keyboard/Keyboard.kicad_pro +++ b/examples/Keyboard/Keyboard.kicad_pro @@ -3,14 +3,17 @@ "3dviewports": [], "design_settings": { "defaults": { - "board_outline_line_width": 0.038099999999999995, + "apply_defaults_to_fp_fields": false, + "apply_defaults_to_fp_shapes": false, + "apply_defaults_to_fp_text": false, + "board_outline_line_width": 0.0381, "copper_line_width": 0.254, "copper_text_italic": false, "copper_text_size_h": 1.524, "copper_text_size_v": 1.524, - "copper_text_thickness": 0.30479999999999996, + "copper_text_thickness": 0.3048, "copper_text_upright": false, - "courtyard_line_width": 0.049999999999999996, + "courtyard_line_width": 0.05, "dimension_precision": 4, "dimension_units": 3, "dimensions": { @@ -21,13 +24,13 @@ "text_position": 0, "units_format": 1 }, - "fab_line_width": 0.09999999999999999, + "fab_line_width": 0.1, "fab_text_italic": false, "fab_text_size_h": 1.0, "fab_text_size_v": 1.0, "fab_text_thickness": 0.15, "fab_text_upright": false, - "other_line_width": 0.09999999999999999, + "other_line_width": 0.1, "other_text_italic": false, "other_text_size_h": 1.0, "other_text_size_v": 1.0, @@ -38,11 +41,11 @@ "height": 1.152, "width": 1.152 }, - "silk_line_width": 0.09999999999999999, + "silk_line_width": 0.1, "silk_text_italic": false, "silk_text_size_h": 0.6, - "silk_text_size_v": 0.7999999999999999, - "silk_text_thickness": 0.09999999999999999, + "silk_text_size_v": 0.8, + "silk_text_thickness": 0.1, "silk_text_upright": false, "zones": { "45_degree_only": false, @@ -84,9 +87,11 @@ "duplicate_footprints": "warning", "extra_footprint": "warning", "footprint": "error", + "footprint_symbol_mismatch": "warning", "footprint_type_mismatch": "error", "hole_clearance": "error", "hole_near_hole": "error", + "holes_co_located": "warning", "invalid_outline": "error", "isolated_copper": "warning", "item_on_disabled_layer": "error", @@ -132,24 +137,21 @@ "min_copper_edge_clearance": 0.01, "min_hole_clearance": 0.254, "min_hole_to_hole": 0.5, - "min_microvia_diameter": 0.19999999999999998, - "min_microvia_drill": 0.09999999999999999, + "min_microvia_diameter": 0.2, + "min_microvia_drill": 0.1, "min_resolved_spokes": 2, "min_silk_clearance": 0.0, "min_text_height": 0.7, "min_text_thickness": 0.08, "min_through_hole_diameter": 0.3, "min_track_width": 0.127, - "min_via_annular_width": 0.049999999999999996, + "min_via_annular_width": 0.05, "min_via_diameter": 0.6, "solder_mask_to_copper_clearance": 0.0, "use_height_for_length_calcs": true }, "teardrop_options": [ { - "td_allow_use_two_tracks": true, - "td_curve_segcount": 5, - "td_on_pad_in_zone": false, "td_onpadsmd": true, "td_onroundshapesonly": false, "td_ontrackend": false, @@ -158,29 +160,35 @@ ], "teardrop_parameters": [ { + "td_allow_use_two_tracks": true, "td_curve_segcount": 0, "td_height_ratio": 1.0, "td_length_ratio": 0.5, "td_maxheight": 2.0, "td_maxlen": 1.0, + "td_on_pad_in_zone": false, "td_target_name": "td_round_shape", "td_width_to_size_filter_ratio": 0.9 }, { + "td_allow_use_two_tracks": true, "td_curve_segcount": 0, "td_height_ratio": 1.0, "td_length_ratio": 0.5, "td_maxheight": 2.0, "td_maxlen": 1.0, + "td_on_pad_in_zone": false, "td_target_name": "td_rect_shape", "td_width_to_size_filter_ratio": 0.9 }, { + "td_allow_use_two_tracks": true, "td_curve_segcount": 0, "td_height_ratio": 1.0, "td_length_ratio": 0.5, "td_maxheight": 2.0, "td_maxlen": 1.0, + "td_on_pad_in_zone": false, "td_target_name": "td_track_end", "td_width_to_size_filter_ratio": 0.9 } @@ -192,6 +200,32 @@ 0.5, 1.0 ], + "tuning_pattern_settings": { + "diff_pair_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 1.0 + }, + "diff_pair_skew_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 0.6 + }, + "single_track_defaults": { + "corner_radius_percentage": 80, + "corner_style": 1, + "max_amplitude": 1.0, + "min_amplitude": 0.2, + "single_sided": false, + "spacing": 0.6 + } + }, "via_dimensions": [ { "diameter": 0.0, @@ -209,6 +243,13 @@ "zones_allow_external_fillets": false, "zones_use_no_outline": true }, + "ipc2581": { + "dist": "", + "distpn": "", + "internal_id": "", + "mfg": "", + "mpn": "" + }, "layer_presets": [], "viewports": [] }, @@ -290,8 +331,11 @@ "gencad": "", "idf": "", "netlist": "Keyboard.net", + "plot": "", + "pos_files": "", "specctra_dsn": "", "step": "", + "svg": "", "vrml": "" }, "page_layout_descr_file": "" diff --git a/examples/Multimeter/Multimeter.net.ref b/examples/Multimeter/Multimeter.net.ref index 3c2ed3555..367eec4ed 100644 --- a/examples/Multimeter/Multimeter.net.ref +++ b/examples/Multimeter/Multimeter.net.ref @@ -398,7 +398,7 @@ (tstamps "0b5902d0")) (comp (ref "J2") (value "mcu.swd") - (footprint "Connector:Tag-Connect_TC2050-IDC-NL_2x05_P1.27mm_Vertical") + (footprint "Connector:Tag-Connect_TC2030-IDC-NL_2x03_P1.27mm_Vertical") (property (name "Sheetname") (value "mcu")) (property (name "Sheetfile") (value "edg.parts.microcontroller.nRF52840.Mdbt50q_1mv2")) (property (name "edg_path") (value "mcu.swd.conn")) @@ -1315,8 +1315,6 @@ (node (ref U5) (pin 33)) (node (ref U5) (pin 55)) (node (ref C7) (pin 2)) - (node (ref J2) (pin 2)) - (node (ref J2) (pin 3)) (node (ref J2) (pin 5)) (node (ref C8) (pin 2)) (node (ref R9) (pin 2)) @@ -1542,182 +1540,180 @@ (node (ref U18) (pin 6))) (net (code 33) (name "mcu.swd_node.swdio") (node (ref U5) (pin 51)) - (node (ref J2) (pin 10))) + (node (ref J2) (pin 2))) (net (code 34) (name "mcu.swd_node.swclk") (node (ref U5) (pin 53)) - (node (ref J2) (pin 9))) + (node (ref J2) (pin 4))) (net (code 35) (name "mcu.reset_node") (node (ref U5) (pin 40)) - (node (ref J2) (pin 6))) -(net (code 36) (name "mcu.swd.tdi") - (node (ref J2) (pin 7))) -(net (code 37) (name "mcu.swd.swo") + (node (ref J2) (pin 3))) +(net (code 36) (name "mcu.swd.swo") (node (ref U5) (pin 47)) - (node (ref J2) (pin 8))) -(net (code 38) (name "mcu.usb_res.interior.dp") + (node (ref J2) (pin 6))) +(net (code 37) (name "mcu.usb_res.interior.dp") (node (ref U5) (pin 35)) (node (ref R6) (pin 2))) -(net (code 39) (name "mcu.usb_res.interior.dm") +(net (code 38) (name "mcu.usb_res.interior.dm") (node (ref U5) (pin 34)) (node (ref R7) (pin 2))) -(net (code 40) (name "vbatsense.output") +(net (code 39) (name "vbatsense.output") (node (ref U5) (pin 9)) (node (ref R8) (pin 2)) (node (ref R9) (pin 1))) -(net (code 41) (name "rgb.package.k_red") +(net (code 40) (name "rgb.package.k_red") (node (ref D6) (pin 3)) (node (ref R10) (pin 1))) -(net (code 42) (name "rgb.package.k_green") +(net (code 41) (name "rgb.package.k_green") (node (ref D6) (pin 4)) (node (ref R11) (pin 1))) -(net (code 43) (name "rgb.package.k_blue") +(net (code 42) (name "rgb.package.k_blue") (node (ref D6) (pin 1)) (node (ref R12) (pin 1))) -(net (code 44) (name "sw1.out") +(net (code 43) (name "sw1.out") (node (ref U5) (pin 16)) (node (ref SW2) (pin 1))) -(net (code 45) (name "sw2.out") +(net (code 44) (name "sw2.out") (node (ref U5) (pin 3)) (node (ref SW3) (pin 1))) -(net (code 46) (name "lcd.reset") +(net (code 45) (name "lcd.reset") (node (ref U5) (pin 8)) (node (ref J3) (pin 3))) -(net (code 47) (name "lcd.rs") +(net (code 46) (name "lcd.rs") (node (ref U5) (pin 10)) (node (ref J3) (pin 4))) -(net (code 48) (name "lcd.cs") +(net (code 47) (name "lcd.cs") (node (ref U5) (pin 17)) (node (ref J3) (pin 8))) -(net (code 49) (name "lcd.spi.sck") +(net (code 48) (name "lcd.spi.sck") (node (ref U5) (pin 18)) (node (ref J3) (pin 6))) -(net (code 50) (name "lcd.spi.mosi") +(net (code 49) (name "lcd.spi.mosi") (node (ref U5) (pin 19)) (node (ref J3) (pin 5))) -(net (code 51) (name "lcd.device.leda") +(net (code 50) (name "lcd.device.leda") (node (ref J3) (pin 1)) (node (ref R13) (pin 2))) -(net (code 52) (name "spk_drv.ic.inp") +(net (code 51) (name "spk_drv.ic.inp") (node (ref U7) (pin 4)) (node (ref R15) (pin 2))) -(net (code 53) (name "spk_drv.ic.inn") +(net (code 52) (name "spk_drv.ic.inn") (node (ref U7) (pin 3)) (node (ref R16) (pin 2))) -(net (code 54) (name "spk_drv.inp_res.input") +(net (code 53) (name "spk_drv.inp_res.input") (node (ref R15) (pin 1)) (node (ref C13) (pin 1))) -(net (code 55) (name "spk_drv.inn_res.input") +(net (code 54) (name "spk_drv.inn_res.input") (node (ref R16) (pin 1)) (node (ref C14) (pin 1))) -(net (code 56) (name "ref_div.output") +(net (code 55) (name "ref_div.output") (node (ref R17) (pin 2)) (node (ref R18) (pin 1)) (node (ref U8) (pin 3))) -(net (code 57) (name "inn.port") +(net (code 56) (name "inn.port") (node (ref J5) (pin 1)) (node (ref U9) (pin 4)) (node (ref U12) (pin 4)) (node (ref U14) (pin 6))) -(net (code 58) (name "inp.port") +(net (code 57) (name "inp.port") (node (ref J6) (pin 1)) (node (ref R19) (pin 1)) (node (ref D7) (pin 1))) -(net (code 59) (name "measure.range.switch.sw[0_0].com") +(net (code 58) (name "measure.range.switch.sw[0_0].com") (node (ref U10) (pin 4)) (node (ref U12) (pin 3))) -(net (code 60) (name "measure.range.switch.sw[0_1].com") +(net (code 59) (name "measure.range.switch.sw[0_1].com") (node (ref U11) (pin 4)) (node (ref U12) (pin 1))) -(net (code 61) (name "measure.range.res[0].b") +(net (code 60) (name "measure.range.res[0].b") (node (ref U10) (pin 3)) (node (ref R20) (pin 2))) -(net (code 62) (name "measure.range.res[1].b") +(net (code 61) (name "measure.range.res[1].b") (node (ref U10) (pin 1)) (node (ref R21) (pin 2))) -(net (code 63) (name "measure.range.res[2].b") +(net (code 62) (name "measure.range.res[2].b") (node (ref U11) (pin 3)) (node (ref R22) (pin 2))) -(net (code 64) (name "measure.range.dummy.io") +(net (code 63) (name "measure.range.dummy.io") (node (ref U11) (pin 1))) -(net (code 65) (name "adc.mclkin") +(net (code 64) (name "adc.mclkin") (node (ref U14) (pin 18))) -(net (code 66) (name "adc.vins.2") +(net (code 65) (name "adc.vins.2") (node (ref U14) (pin 7))) -(net (code 67) (name "adc.vins.3") +(net (code 66) (name "adc.vins.3") (node (ref U14) (pin 8))) -(net (code 68) (name "adc.vins.4") +(net (code 67) (name "adc.vins.4") (node (ref U14) (pin 9))) -(net (code 69) (name "adc.vins.5") +(net (code 68) (name "adc.vins.5") (node (ref U14) (pin 10))) -(net (code 70) (name "adc.vins.6") +(net (code 69) (name "adc.vins.6") (node (ref U14) (pin 11))) -(net (code 71) (name "adc.vins.7") +(net (code 70) (name "adc.vins.7") (node (ref U14) (pin 12))) -(net (code 72) (name "adc.spi.sck") +(net (code 71) (name "adc.spi.sck") (node (ref U5) (pin 37)) (node (ref U14) (pin 14))) -(net (code 73) (name "adc.spi.mosi") +(net (code 72) (name "adc.spi.mosi") (node (ref U5) (pin 26)) (node (ref U14) (pin 15))) -(net (code 74) (name "adc.spi.miso") +(net (code 73) (name "adc.spi.miso") (node (ref U5) (pin 24)) (node (ref U14) (pin 16))) -(net (code 75) (name "adc.cs") +(net (code 74) (name "adc.cs") (node (ref U5) (pin 39)) (node (ref U14) (pin 13))) -(net (code 76) (name "adc.ic.avdd") +(net (code 75) (name "adc.ic.avdd") (node (ref U14) (pin 1)) (node (ref R23) (pin 2)) (node (ref C21) (pin 1)) (node (ref C22) (pin 1))) -(net (code 77) (name "adc.ic.dvdd") +(net (code 76) (name "adc.ic.dvdd") (node (ref U14) (pin 20)) (node (ref R24) (pin 2)) (node (ref C23) (pin 1)) (node (ref C24) (pin 1))) -(net (code 78) (name "adc.ic.vrefp") +(net (code 77) (name "adc.ic.vrefp") (node (ref U14) (pin 4)) (node (ref C25) (pin 1))) -(net (code 79) (name "driver.control") +(net (code 78) (name "driver.control") (node (ref U15) (pin 3)) (node (ref R29) (pin 2)) (node (ref C31) (pin 1))) -(net (code 80) (name "driver.enable") +(net (code 79) (name "driver.enable") (node (ref U5) (pin 48)) (node (ref U19) (pin 6))) -(net (code 81) (name "driver.fet.source") +(net (code 80) (name "driver.fet.source") (node (ref Q3) (pin 2)) (node (ref U15) (pin 4)) (node (ref U18) (pin 4)) (node (ref U19) (pin 3))) -(net (code 82) (name "driver.fet.drain") +(net (code 81) (name "driver.fet.drain") (node (ref Q3) (pin 3)) (node (ref D7) (pin 2))) -(net (code 83) (name "driver.fet.gate") +(net (code 82) (name "driver.fet.gate") (node (ref Q3) (pin 1)) (node (ref U19) (pin 4))) -(net (code 84) (name "driver.amp.out") +(net (code 83) (name "driver.amp.out") (node (ref U15) (pin 1)) (node (ref U19) (pin 1))) -(net (code 85) (name "driver.range.switch.sw[0_0].com") +(net (code 84) (name "driver.range.switch.sw[0_0].com") (node (ref U16) (pin 4)) (node (ref U18) (pin 3))) -(net (code 86) (name "driver.range.switch.sw[0_1].com") +(net (code 85) (name "driver.range.switch.sw[0_1].com") (node (ref U17) (pin 4)) (node (ref U18) (pin 1))) -(net (code 87) (name "driver.range.res[0].b") +(net (code 86) (name "driver.range.res[0].b") (node (ref U16) (pin 3)) (node (ref R25) (pin 2))) -(net (code 88) (name "driver.range.res[1].b") +(net (code 87) (name "driver.range.res[1].b") (node (ref U16) (pin 1)) (node (ref R26) (pin 2))) -(net (code 89) (name "driver.range.res[2].b") +(net (code 88) (name "driver.range.res[2].b") (node (ref U17) (pin 3)) (node (ref R27) (pin 2))) -(net (code 90) (name "driver.range.res[3].b") +(net (code 89) (name "driver.range.res[3].b") (node (ref U17) (pin 1)) (node (ref R28) (pin 2))) -(net (code 91) (name "driver_dac.input") +(net (code 90) (name "driver_dac.input") (node (ref U5) (pin 45)) (node (ref R29) (pin 1)))) ) \ No newline at end of file diff --git a/examples/Multimeter/Multimeter.svgpcb.js b/examples/Multimeter/Multimeter.svgpcb.js index b0b7ea2fc..0a94f219d 100644 --- a/examples/Multimeter/Multimeter.svgpcb.js +++ b/examples/Multimeter/Multimeter.svgpcb.js @@ -2,157 +2,157 @@ const board = new PCB(); // jlc_th.th1 const H1 = board.add(JlcToolingHole_1_152mm, { - translate: pt(2.913, 2.557), rotate: 0, + translate: pt(2.913, 2.253), rotate: 0, id: 'H1' }) // jlc_th.th2 const H2 = board.add(JlcToolingHole_1_152mm, { - translate: pt(2.952, 2.557), rotate: 0, + translate: pt(2.952, 2.253), rotate: 0, id: 'H2' }) // jlc_th.th3 const H3 = board.add(JlcToolingHole_1_152mm, { - translate: pt(2.913, 2.597), rotate: 0, + translate: pt(2.913, 2.292), rotate: 0, id: 'H3' }) // bat const U1 = board.add(BatteryHolder_Keystone_2460_1xAA, { - translate: pt(1.063, 0.343), rotate: 0, + translate: pt(1.026, 0.343), rotate: 0, id: 'U1' }) // data_usb.conn const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, { - translate: pt(2.365, 1.237), rotate: 0, + translate: pt(2.365, 0.932), rotate: 0, id: 'J1' }) // data_usb.cc_pull.cc1.res const R1 = board.add(R_0603_1608Metric, { - translate: pt(2.213, 1.492), rotate: 0, + translate: pt(2.213, 1.187), rotate: 0, id: 'R1' }) // data_usb.cc_pull.cc2.res const R2 = board.add(R_0603_1608Metric, { - translate: pt(2.369, 1.492), rotate: 0, + translate: pt(2.369, 1.187), rotate: 0, id: 'R2' }) // gate.pwr_gate.pull_res const R3 = board.add(R_0603_1608Metric, { - translate: pt(3.316, 0.466), rotate: 0, + translate: pt(3.279, 0.466), rotate: 0, id: 'R3' }) // gate.pwr_gate.pwr_fet const Q1 = board.add(SOT_23, { - translate: pt(3.707, 0.067), rotate: 0, + translate: pt(3.670, 0.067), rotate: 0, id: 'Q1' }) // gate.pwr_gate.amp_res const R4 = board.add(R_0603_1608Metric, { - translate: pt(3.472, 0.466), rotate: 0, + translate: pt(3.435, 0.466), rotate: 0, id: 'R4' }) // gate.pwr_gate.amp_fet const Q2 = board.add(SOT_23, { - translate: pt(3.333, 0.331), rotate: 0, + translate: pt(3.296, 0.331), rotate: 0, id: 'Q2' }) // gate.pwr_gate.ctl_diode const D1 = board.add(D_SOD_323, { - translate: pt(3.512, 0.301), rotate: 0, + translate: pt(3.474, 0.301), rotate: 0, id: 'D1' }) // gate.pwr_gate.btn_diode const D2 = board.add(D_SOD_323, { - translate: pt(3.677, 0.301), rotate: 0, + translate: pt(3.640, 0.301), rotate: 0, id: 'D2' }) // gate.btn.package const SW1 = board.add(SW_SPST_SKQG_WithoutStem, { - translate: pt(3.425, 0.112), rotate: 0, + translate: pt(3.388, 0.112), rotate: 0, id: 'SW1' }) // reg_5v.ic const U2 = board.add(SOT_23_5, { - translate: pt(2.770, 1.752), rotate: 0, + translate: pt(2.770, 1.447), rotate: 0, id: 'U2' }) // reg_5v.power_path.inductor const L1 = board.add(L_0603_1608Metric, { - translate: pt(2.920, 1.887), rotate: 0, + translate: pt(2.920, 1.582), rotate: 0, id: 'L1' }) // reg_5v.power_path.in_cap.cap const C1 = board.add(C_0805_2012Metric, { - translate: pt(2.957, 1.724), rotate: 0, + translate: pt(2.957, 1.419), rotate: 0, id: 'C1' }) // reg_5v.power_path.out_cap.cap const C2 = board.add(C_0805_2012Metric, { - translate: pt(2.756, 1.897), rotate: 0, + translate: pt(2.756, 1.592), rotate: 0, id: 'C2' }) // reg_5v.ce_res.res const R5 = board.add(R_0603_1608Metric, { - translate: pt(2.747, 2.004), rotate: 0, + translate: pt(2.747, 1.699), rotate: 0, id: 'R5' }) // tp_5v.tp const TP1 = board.add(TestPoint_Keystone_5015_Micro_Minature, { - translate: pt(0.554, 2.611), rotate: 0, + translate: pt(0.554, 2.306), rotate: 0, id: 'TP1' }) // prot_5v.diode const D3 = board.add(D_MiniMELF, { - translate: pt(2.011, 2.601), rotate: 0, + translate: pt(2.011, 2.296), rotate: 0, id: 'D3' }) // reg_3v3.ic const U3 = board.add(SOT_23_5, { - translate: pt(0.081, 2.276), rotate: 0, + translate: pt(0.081, 1.971), rotate: 0, id: 'U3' }) // reg_3v3.in_cap.cap const C3 = board.add(C_0603_1608Metric, { - translate: pt(0.058, 2.411), rotate: 0, + translate: pt(0.058, 2.106), rotate: 0, id: 'C3' }) // reg_3v3.out_cap.cap const C4 = board.add(C_0603_1608Metric, { - translate: pt(0.214, 2.411), rotate: 0, + translate: pt(0.214, 2.106), rotate: 0, id: 'C4' }) // tp_3v3.tp const TP2 = board.add(TestPoint_Keystone_5015_Micro_Minature, { - translate: pt(0.841, 2.611), rotate: 0, + translate: pt(0.841, 2.306), rotate: 0, id: 'TP2' }) // prot_3v3.diode const D4 = board.add(D_SOD_323, { - translate: pt(2.297, 2.595), rotate: 0, + translate: pt(2.297, 2.290), rotate: 0, id: 'D4' }) // reg_analog.ic const U4 = board.add(SOT_23_5, { - translate: pt(0.471, 2.276), rotate: 0, + translate: pt(0.471, 1.971), rotate: 0, id: 'U4' }) // reg_analog.in_cap.cap const C5 = board.add(C_0603_1608Metric, { - translate: pt(0.449, 2.411), rotate: 0, + translate: pt(0.449, 2.106), rotate: 0, id: 'C5' }) // reg_analog.out_cap.cap const C6 = board.add(C_0603_1608Metric, { - translate: pt(0.605, 2.411), rotate: 0, + translate: pt(0.605, 2.106), rotate: 0, id: 'C6' }) // tp_analog.tp const TP3 = board.add(TestPoint_Keystone_5015_Micro_Minature, { - translate: pt(1.129, 2.611), rotate: 0, + translate: pt(1.129, 2.306), rotate: 0, id: 'TP3' }) // prot_analog.diode const D5 = board.add(D_SOD_323, { - translate: pt(2.541, 2.595), rotate: 0, + translate: pt(2.541, 2.290), rotate: 0, id: 'D5' }) // mcu.ic @@ -162,382 +162,382 @@ const U5 = board.add(Raytac_MDBT50Q, { }) // mcu.vcc_cap.cap const C7 = board.add(C_0805_2012Metric, { - translate: pt(0.596, 0.728), rotate: 0, + translate: pt(0.559, 0.235), rotate: 0, id: 'C7' }) // mcu.swd.conn -const J2 = board.add(Tag_Connect_TC2050_IDC_NL_2x05_P1_27mm_Vertical, { - translate: pt(0.245, 0.822), rotate: 0, +const J2 = board.add(Tag_Connect_TC2030_IDC_NL_2x03_P1_27mm_Vertical, { + translate: pt(0.630, 0.079), rotate: 0, id: 'J2' }) // mcu.vbus_cap.cap const C8 = board.add(C_0805_2012Metric, { - translate: pt(0.770, 0.728), rotate: 0, + translate: pt(0.732, 0.235), rotate: 0, id: 'C8' }) // mcu.usb_res.dp.res const R6 = board.add(R_0603_1608Metric, { - translate: pt(0.588, 0.834), rotate: 0, + translate: pt(0.550, 0.342), rotate: 0, id: 'R6' }) // mcu.usb_res.dm.res const R7 = board.add(R_0603_1608Metric, { - translate: pt(0.744, 0.834), rotate: 0, + translate: pt(0.706, 0.342), rotate: 0, id: 'R7' }) // vbatsense.div.top_res const R8 = board.add(R_0603_1608Metric, { - translate: pt(3.628, 2.237), rotate: 0, + translate: pt(3.628, 1.933), rotate: 0, id: 'R8' }) // vbatsense.div.bottom_res const R9 = board.add(R_0603_1608Metric, { - translate: pt(3.628, 2.334), rotate: 0, + translate: pt(3.628, 2.030), rotate: 0, id: 'R9' }) // usb_esd const U6 = board.add(SOT_23, { - translate: pt(2.798, 2.624), rotate: 0, + translate: pt(2.798, 2.320), rotate: 0, id: 'U6' }) // rgb.package const D6 = board.add(LED_LiteOn_LTST_C19HE1WT, { - translate: pt(2.677, 2.264), rotate: 0, + translate: pt(2.677, 1.959), rotate: 0, id: 'D6' }) // rgb.red_res const R10 = board.add(R_0603_1608Metric, { - translate: pt(2.816, 2.237), rotate: 0, + translate: pt(2.816, 1.933), rotate: 0, id: 'R10' }) // rgb.green_res const R11 = board.add(R_0603_1608Metric, { - translate: pt(2.694, 2.387), rotate: 0, + translate: pt(2.694, 2.082), rotate: 0, id: 'R11' }) // rgb.blue_res const R12 = board.add(R_0603_1608Metric, { - translate: pt(2.850, 2.387), rotate: 0, + translate: pt(2.850, 2.082), rotate: 0, id: 'R12' }) // sw1.package const SW2 = board.add(SW_SPST_SKQG_WithoutStem, { - translate: pt(1.507, 2.321), rotate: 0, + translate: pt(1.507, 2.016), rotate: 0, id: 'SW2' }) // sw2.package const SW3 = board.add(SW_SPST_SKQG_WithoutStem, { - translate: pt(1.960, 2.321), rotate: 0, + translate: pt(1.960, 2.016), rotate: 0, id: 'SW3' }) // lcd.device.conn const J3 = board.add(Hirose_FH12_8S_0_5SH_1x08_1MP_P0_50mm_Horizontal, { - translate: pt(2.891, 1.265), rotate: 0, + translate: pt(2.891, 0.961), rotate: 0, id: 'J3' }) // lcd.led_res const R13 = board.add(R_0603_1608Metric, { - translate: pt(2.750, 1.452), rotate: 0, + translate: pt(2.750, 1.147), rotate: 0, id: 'R13' }) // lcd.vdd_cap.cap const C9 = board.add(C_0603_1608Metric, { - translate: pt(2.906, 1.452), rotate: 0, + translate: pt(2.906, 1.147), rotate: 0, id: 'C9' }) // spk_dac.rc.r const R14 = board.add(R_0603_1608Metric, { - translate: pt(0.058, 2.586), rotate: 0, + translate: pt(0.058, 2.281), rotate: 0, id: 'R14' }) // spk_dac.rc.c const C10 = board.add(C_0603_1608Metric, { - translate: pt(0.058, 2.683), rotate: 0, + translate: pt(0.058, 2.378), rotate: 0, id: 'C10' }) // spk_tp.tp const TP4 = board.add(TestPoint_Keystone_5015_Micro_Minature, { - translate: pt(1.416, 2.611), rotate: 0, + translate: pt(1.416, 2.306), rotate: 0, id: 'TP4' }) // spk_drv.ic const U7 = board.add(MSOP_8_1EP_3x3mm_P0_65mm_EP1_68x1_88mm_ThermalVias, { - translate: pt(3.265, 1.754), rotate: 0, + translate: pt(3.265, 1.449), rotate: 0, id: 'U7' }) // spk_drv.pwr_cap.cap const C11 = board.add(C_0603_1608Metric, { - translate: pt(3.200, 1.891), rotate: 0, + translate: pt(3.200, 1.586), rotate: 0, id: 'C11' }) // spk_drv.bulk_cap.cap const C12 = board.add(C_0805_2012Metric, { - translate: pt(3.494, 1.724), rotate: 0, + translate: pt(3.494, 1.419), rotate: 0, id: 'C12' }) // spk_drv.inp_res.res const R15 = board.add(R_0603_1608Metric, { - translate: pt(3.356, 1.891), rotate: 0, + translate: pt(3.356, 1.586), rotate: 0, id: 'R15' }) // spk_drv.inp_cap.cap const C13 = board.add(C_0603_1608Metric, { - translate: pt(3.512, 1.891), rotate: 0, + translate: pt(3.512, 1.586), rotate: 0, id: 'C13' }) // spk_drv.inn_res.res const R16 = board.add(R_0603_1608Metric, { - translate: pt(3.200, 1.988), rotate: 0, + translate: pt(3.200, 1.683), rotate: 0, id: 'R16' }) // spk_drv.inn_cap.cap const C14 = board.add(C_0603_1608Metric, { - translate: pt(3.356, 1.988), rotate: 0, + translate: pt(3.356, 1.683), rotate: 0, id: 'C14' }) // spk.conn const J4 = board.add(JST_PH_B2B_PH_K_1x02_P2_00mm_Vertical, { - translate: pt(2.342, 2.339), rotate: 0, + translate: pt(2.342, 2.034), rotate: 0, id: 'J4' }) // ref_div.div.top_res const R17 = board.add(R_0603_1608Metric, { - translate: pt(0.293, 2.586), rotate: 0, + translate: pt(0.293, 2.281), rotate: 0, id: 'R17' }) // ref_div.div.bottom_res const R18 = board.add(R_0603_1608Metric, { - translate: pt(0.293, 2.683), rotate: 0, + translate: pt(0.293, 2.378), rotate: 0, id: 'R18' }) // ref_buf.amp.ic const U8 = board.add(SOT_23_6, { - translate: pt(0.862, 2.276), rotate: 0, + translate: pt(0.862, 1.971), rotate: 0, id: 'U8' }) // ref_buf.amp.vdd_cap.cap const C15 = board.add(C_0603_1608Metric, { - translate: pt(0.839, 2.411), rotate: 0, + translate: pt(0.839, 2.106), rotate: 0, id: 'C15' }) // inn const J5 = board.add(CLIFF_FCR7350, { - translate: pt(1.083, 1.927), rotate: 0, + translate: pt(1.083, 1.622), rotate: 0, id: 'J5' }) // inn_mux.device.ic const U9 = board.add(SOT_363_SC_70_6, { - translate: pt(3.089, 2.264), rotate: 0, + translate: pt(3.089, 1.959), rotate: 0, id: 'U9' }) // inn_mux.device.vdd_cap.cap const C16 = board.add(C_0603_1608Metric, { - translate: pt(3.084, 2.387), rotate: 0, + translate: pt(3.084, 2.082), rotate: 0, id: 'C16' }) // inp const J6 = board.add(CLIFF_FCR7350, { - translate: pt(2.427, 1.927), rotate: 0, + translate: pt(2.427, 1.622), rotate: 0, id: 'J6' }) // measure.res const R19 = board.add(R_2512_6332Metric, { - translate: pt(0.150, 1.148), rotate: 0, + translate: pt(0.150, 0.843), rotate: 0, id: 'R19' }) // measure.range.switch.sw[0_0].ic const U10 = board.add(SOT_363_SC_70_6, { - translate: pt(0.403, 1.128), rotate: 0, + translate: pt(0.403, 0.823), rotate: 0, id: 'U10' }) // measure.range.switch.sw[0_0].vdd_cap.cap const C17 = board.add(C_0603_1608Metric, { - translate: pt(0.389, 1.292), rotate: 0, + translate: pt(0.389, 0.987), rotate: 0, id: 'C17' }) // measure.range.switch.sw[0_1].ic const U11 = board.add(SOT_363_SC_70_6, { - translate: pt(0.063, 1.318), rotate: 0, + translate: pt(0.063, 1.013), rotate: 0, id: 'U11' }) // measure.range.switch.sw[0_1].vdd_cap.cap const C18 = board.add(C_0603_1608Metric, { - translate: pt(0.058, 1.441), rotate: 0, + translate: pt(0.058, 1.137), rotate: 0, id: 'C18' }) // measure.range.switch.sw[1_0].ic const U12 = board.add(SOT_363_SC_70_6, { - translate: pt(0.228, 1.318), rotate: 0, + translate: pt(0.228, 1.013), rotate: 0, id: 'U12' }) // measure.range.switch.sw[1_0].vdd_cap.cap const C19 = board.add(C_0603_1608Metric, { - translate: pt(0.214, 1.441), rotate: 0, + translate: pt(0.214, 1.137), rotate: 0, id: 'C19' }) // measure.range.res[0] const R20 = board.add(R_0603_1608Metric, { - translate: pt(0.370, 1.441), rotate: 0, + translate: pt(0.370, 1.137), rotate: 0, id: 'R20' }) // measure.range.res[1] const R21 = board.add(R_0603_1608Metric, { - translate: pt(0.526, 1.441), rotate: 0, + translate: pt(0.526, 1.137), rotate: 0, id: 'R21' }) // measure.range.res[2] const R22 = board.add(R_0603_1608Metric, { - translate: pt(0.058, 1.538), rotate: 0, + translate: pt(0.058, 1.233), rotate: 0, id: 'R22' }) // measure_buffer.amp.ic const U13 = board.add(SOT_23_6, { - translate: pt(1.141, 2.276), rotate: 0, + translate: pt(1.141, 1.971), rotate: 0, id: 'U13' }) // measure_buffer.amp.vdd_cap.cap const C20 = board.add(C_0603_1608Metric, { - translate: pt(1.119, 2.411), rotate: 0, + translate: pt(1.119, 2.106), rotate: 0, id: 'C20' }) // tp_measure.tp const TP5 = board.add(TestPoint_Keystone_5015_Micro_Minature, { - translate: pt(1.704, 2.611), rotate: 0, + translate: pt(1.704, 2.306), rotate: 0, id: 'TP5' }) // adc.ic const U14 = board.add(TSSOP_20_4_4x6_5mm_P0_65mm, { - translate: pt(1.712, 1.210), rotate: 0, + translate: pt(1.712, 0.906), rotate: 0, id: 'U14' }) // adc.avdd_res.res const R23 = board.add(R_0603_1608Metric, { - translate: pt(1.961, 1.218), rotate: 0, + translate: pt(1.961, 0.913), rotate: 0, id: 'R23' }) // adc.dvdd_res.res const R24 = board.add(R_0603_1608Metric, { - translate: pt(1.961, 1.315), rotate: 0, + translate: pt(1.961, 1.010), rotate: 0, id: 'R24' }) // adc.avdd_cap_0.cap const C21 = board.add(C_0603_1608Metric, { - translate: pt(1.619, 1.416), rotate: 0, + translate: pt(1.619, 1.111), rotate: 0, id: 'C21' }) // adc.avdd_cap_1.cap const C22 = board.add(C_0603_1608Metric, { - translate: pt(1.775, 1.416), rotate: 0, + translate: pt(1.775, 1.111), rotate: 0, id: 'C22' }) // adc.dvdd_cap_0.cap const C23 = board.add(C_0603_1608Metric, { - translate: pt(1.931, 1.416), rotate: 0, + translate: pt(1.931, 1.111), rotate: 0, id: 'C23' }) // adc.dvdd_cap_1.cap const C24 = board.add(C_0603_1608Metric, { - translate: pt(1.619, 1.513), rotate: 0, + translate: pt(1.619, 1.208), rotate: 0, id: 'C24' }) // adc.vref_cap.cap const C25 = board.add(C_0805_2012Metric, { - translate: pt(1.970, 1.111), rotate: 0, + translate: pt(1.970, 0.806), rotate: 0, id: 'C25' }) // driver.fet const Q3 = board.add(SOT_23, { - translate: pt(1.093, 1.139), rotate: 0, + translate: pt(1.093, 0.835), rotate: 0, id: 'Q3' }) // driver.amp.ic const U15 = board.add(SOT_23_6, { - translate: pt(1.289, 1.139), rotate: 0, + translate: pt(1.289, 0.835), rotate: 0, id: 'U15' }) // driver.amp.vdd_cap.cap const C26 = board.add(C_0603_1608Metric, { - translate: pt(0.761, 1.428), rotate: 0, + translate: pt(0.761, 1.123), rotate: 0, id: 'C26' }) // driver.range.switch.sw[0_0].ic const U16 = board.add(SOT_363_SC_70_6, { - translate: pt(0.765, 1.305), rotate: 0, + translate: pt(0.765, 1.000), rotate: 0, id: 'U16' }) // driver.range.switch.sw[0_0].vdd_cap.cap const C27 = board.add(C_0603_1608Metric, { - translate: pt(0.917, 1.428), rotate: 0, + translate: pt(0.917, 1.123), rotate: 0, id: 'C27' }) // driver.range.switch.sw[0_1].ic const U17 = board.add(SOT_363_SC_70_6, { - translate: pt(0.931, 1.305), rotate: 0, + translate: pt(0.931, 1.000), rotate: 0, id: 'U17' }) // driver.range.switch.sw[0_1].vdd_cap.cap const C28 = board.add(C_0603_1608Metric, { - translate: pt(1.072, 1.428), rotate: 0, + translate: pt(1.072, 1.123), rotate: 0, id: 'C28' }) // driver.range.switch.sw[1_0].ic const U18 = board.add(SOT_363_SC_70_6, { - translate: pt(1.096, 1.305), rotate: 0, + translate: pt(1.096, 1.000), rotate: 0, id: 'U18' }) // driver.range.switch.sw[1_0].vdd_cap.cap const C29 = board.add(C_0603_1608Metric, { - translate: pt(1.228, 1.428), rotate: 0, + translate: pt(1.228, 1.123), rotate: 0, id: 'C29' }) // driver.range.res[0] const R25 = board.add(R_0603_1608Metric, { - translate: pt(1.384, 1.428), rotate: 0, + translate: pt(1.384, 1.123), rotate: 0, id: 'R25' }) // driver.range.res[1] const R26 = board.add(R_0603_1608Metric, { - translate: pt(0.761, 1.525), rotate: 0, + translate: pt(0.761, 1.220), rotate: 0, id: 'R26' }) // driver.range.res[2] const R27 = board.add(R_0603_1608Metric, { - translate: pt(0.917, 1.525), rotate: 0, + translate: pt(0.917, 1.220), rotate: 0, id: 'R27' }) // driver.range.res[3] const R28 = board.add(R_0603_1608Metric, { - translate: pt(1.072, 1.525), rotate: 0, + translate: pt(1.072, 1.220), rotate: 0, id: 'R28' }) // driver.sw.device.ic const U19 = board.add(SOT_363_SC_70_6, { - translate: pt(1.261, 1.305), rotate: 0, + translate: pt(1.261, 1.000), rotate: 0, id: 'U19' }) // driver.sw.device.vdd_cap.cap const C30 = board.add(C_0603_1608Metric, { - translate: pt(1.228, 1.525), rotate: 0, + translate: pt(1.228, 1.220), rotate: 0, id: 'C30' }) // driver.diode const D7 = board.add(D_SMA, { - translate: pt(0.841, 1.141), rotate: 0, + translate: pt(0.841, 0.837), rotate: 0, id: 'D7' }) // driver_dac.rc.r const R29 = board.add(R_0603_1608Metric, { - translate: pt(3.328, 2.367), rotate: 0, + translate: pt(3.328, 2.063), rotate: 0, id: 'R29' }) // driver_dac.rc.c const C31 = board.add(C_1206_3216Metric, { - translate: pt(3.361, 2.254), rotate: 0, + translate: pt(3.361, 1.949), rotate: 0, id: 'C31' }) board.setNetlist([ - {name: "gnd", pads: [["U1", "2"], ["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["R4", "1"], ["Q2", "2"], ["SW1", "2"], ["U2", "2"], ["C1", "2"], ["C2", "2"], ["D3", "2"], ["U3", "2"], ["C3", "2"], ["C4", "2"], ["D4", "2"], ["U4", "2"], ["C5", "2"], ["C6", "2"], ["D5", "2"], ["U5", "1"], ["U5", "15"], ["U5", "2"], ["U5", "33"], ["U5", "55"], ["C7", "2"], ["J2", "2"], ["J2", "3"], ["J2", "5"], ["C8", "2"], ["R9", "2"], ["U6", "3"], ["SW2", "2"], ["SW3", "2"], ["J3", "2"], ["C9", "2"], ["C10", "2"], ["U7", "7"], ["U7", "9"], ["C11", "2"], ["C12", "2"], ["C14", "2"], ["R18", "2"], ["U8", "2"], ["C15", "2"], ["U9", "2"], ["U9", "3"], ["C16", "2"], ["U10", "2"], ["C17", "2"], ["U11", "2"], ["C18", "2"], ["U12", "2"], ["C19", "2"], ["U13", "2"], ["C20", "2"], ["U14", "19"], ["U14", "2"], ["U14", "3"], ["C21", "2"], ["C22", "2"], ["C23", "2"], ["C24", "2"], ["C25", "2"], ["U15", "2"], ["C26", "2"], ["U16", "2"], ["C27", "2"], ["U17", "2"], ["C28", "2"], ["U18", "2"], ["C29", "2"], ["U19", "2"], ["C30", "2"], ["C31", "2"]]}, + {name: "gnd", pads: [["U1", "2"], ["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["R4", "1"], ["Q2", "2"], ["SW1", "2"], ["U2", "2"], ["C1", "2"], ["C2", "2"], ["D3", "2"], ["U3", "2"], ["C3", "2"], ["C4", "2"], ["D4", "2"], ["U4", "2"], ["C5", "2"], ["C6", "2"], ["D5", "2"], ["U5", "1"], ["U5", "15"], ["U5", "2"], ["U5", "33"], ["U5", "55"], ["C7", "2"], ["J2", "5"], ["C8", "2"], ["R9", "2"], ["U6", "3"], ["SW2", "2"], ["SW3", "2"], ["J3", "2"], ["C9", "2"], ["C10", "2"], ["U7", "7"], ["U7", "9"], ["C11", "2"], ["C12", "2"], ["C14", "2"], ["R18", "2"], ["U8", "2"], ["C15", "2"], ["U9", "2"], ["U9", "3"], ["C16", "2"], ["U10", "2"], ["C17", "2"], ["U11", "2"], ["C18", "2"], ["U12", "2"], ["C19", "2"], ["U13", "2"], ["C20", "2"], ["U14", "19"], ["U14", "2"], ["U14", "3"], ["C21", "2"], ["C22", "2"], ["C23", "2"], ["C24", "2"], ["C25", "2"], ["U15", "2"], ["C26", "2"], ["U16", "2"], ["C27", "2"], ["U17", "2"], ["C28", "2"], ["U18", "2"], ["C29", "2"], ["U19", "2"], ["C30", "2"], ["C31", "2"]]}, {name: "vbat", pads: [["U1", "1"], ["R3", "1"], ["Q1", "2"]]}, {name: "v5v", pads: [["U2", "4"], ["C2", "1"], ["TP1", "1"], ["D3", "1"], ["U3", "1"], ["U3", "3"], ["C3", "1"], ["U4", "1"], ["U4", "3"], ["C5", "1"], ["U7", "1"], ["U7", "6"], ["C11", "1"], ["C12", "1"]]}, {name: "v3v3", pads: [["U3", "5"], ["C4", "1"], ["TP2", "1"], ["D4", "1"], ["U5", "28"], ["U5", "30"], ["C7", "1"], ["J2", "1"], ["D6", "2"], ["J3", "7"], ["R13", "1"], ["C9", "1"], ["R24", "1"]]}, @@ -569,11 +569,10 @@ board.setNetlist([ {name: "mcu.gpio.measure_select_1_0", pads: [["U5", "43"], ["U12", "6"]]}, {name: "mcu.gpio.driver_select_0_0", pads: [["U5", "46"], ["U16", "6"], ["U17", "6"]]}, {name: "mcu.gpio.driver_select_1_0", pads: [["U5", "44"], ["U18", "6"]]}, - {name: "mcu.swd_node.swdio", pads: [["U5", "51"], ["J2", "10"]]}, - {name: "mcu.swd_node.swclk", pads: [["U5", "53"], ["J2", "9"]]}, - {name: "mcu.reset_node", pads: [["U5", "40"], ["J2", "6"]]}, - {name: "mcu.swd.tdi", pads: [["J2", "7"]]}, - {name: "mcu.swd.swo", pads: [["U5", "47"], ["J2", "8"]]}, + {name: "mcu.swd_node.swdio", pads: [["U5", "51"], ["J2", "2"]]}, + {name: "mcu.swd_node.swclk", pads: [["U5", "53"], ["J2", "4"]]}, + {name: "mcu.reset_node", pads: [["U5", "40"], ["J2", "3"]]}, + {name: "mcu.swd.swo", pads: [["U5", "47"], ["J2", "6"]]}, {name: "mcu.usb_res.interior.dp", pads: [["U5", "35"], ["R6", "2"]]}, {name: "mcu.usb_res.interior.dm", pads: [["U5", "34"], ["R7", "2"]]}, {name: "vbatsense.output", pads: [["U5", "9"], ["R8", "2"], ["R9", "1"]]}, @@ -631,7 +630,7 @@ board.setNetlist([ ]) const limit0 = pt(-0.07874015748031496, -0.07874015748031496); -const limit1 = pt(3.9010236220472447, 2.82992125984252); +const limit1 = pt(3.863779527559055, 2.525196850393701); 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/TofArray/TofArray.net.ref b/examples/TofArray/TofArray.net.ref index cb7adfffa..7fdc9e180 100644 --- a/examples/TofArray/TofArray.net.ref +++ b/examples/TofArray/TofArray.net.ref @@ -290,7 +290,7 @@ (tstamps "05e801f6")) (comp (ref "J3") (value "mcu.swd") - (footprint "Connector:Tag-Connect_TC2050-IDC-FP_2x05_P1.27mm_Vertical") + (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 "edg_path") (value "mcu.swd.conn")) @@ -906,8 +906,6 @@ (node (ref X1) (pin 4)) (node (ref C9) (pin 2)) (node (ref C10) (pin 2)) - (node (ref J3) (pin 2)) - (node (ref J3) (pin 3)) (node (ref J3) (pin 5)) (node (ref SW1) (pin 2)) (node (ref U3) (pin 12)) @@ -1124,62 +1122,60 @@ (node (ref C10) (pin 1))) (net (code 35) (name "mcu.swd_node.swdio") (node (ref U2) (pin 34)) - (node (ref J3) (pin 10))) + (node (ref J3) (pin 2))) (net (code 36) (name "mcu.swd_node.swclk") (node (ref U2) (pin 37)) - (node (ref J3) (pin 9))) + (node (ref J3) (pin 4))) (net (code 37) (name "mcu.reset_node") (node (ref U2) (pin 7)) - (node (ref J3) (pin 6))) -(net (code 38) (name "mcu.swd.tdi") - (node (ref J3) (pin 7))) -(net (code 39) (name "mcu.swd.swo") + (node (ref J3) (pin 3))) +(net (code 38) (name "mcu.swd.swo") (node (ref U2) (pin 39)) - (node (ref J3) (pin 8))) -(net (code 40) (name "tof.elt[0].ic.gpio1") + (node (ref J3) (pin 6))) +(net (code 39) (name "tof.elt[0].ic.gpio1") (node (ref U3) (pin 7))) -(net (code 41) (name "tof.elt[1].ic.gpio1") +(net (code 40) (name "tof.elt[1].ic.gpio1") (node (ref U4) (pin 7))) -(net (code 42) (name "tof.elt[2].ic.gpio1") +(net (code 41) (name "tof.elt[2].ic.gpio1") (node (ref U5) (pin 7))) -(net (code 43) (name "tof.elt[3].ic.gpio1") +(net (code 42) (name "tof.elt[3].ic.gpio1") (node (ref U6) (pin 7))) -(net (code 44) (name "tof.elt[4].ic.gpio1") +(net (code 43) (name "tof.elt[4].ic.gpio1") (node (ref U7) (pin 7))) -(net (code 45) (name "spk_drv.ic.inp") +(net (code 44) (name "spk_drv.ic.inp") (node (ref U11) (pin 4)) (node (ref R7) (pin 2))) -(net (code 46) (name "spk_drv.ic.inn") +(net (code 45) (name "spk_drv.ic.inn") (node (ref U11) (pin 3)) (node (ref R8) (pin 2))) -(net (code 47) (name "spk_drv.inp_res.input") +(net (code 46) (name "spk_drv.inp_res.input") (node (ref R7) (pin 1)) (node (ref C25) (pin 1))) -(net (code 48) (name "spk_drv.inn_res.input") +(net (code 47) (name "spk_drv.inn_res.input") (node (ref R8) (pin 1)) (node (ref C26) (pin 1))) -(net (code 49) (name "res1.a.0") +(net (code 48) (name "res1.a.0") (node (ref D2) (pin 1)) (node (ref RN1) (pin 1))) -(net (code 50) (name "res1.a.1") +(net (code 49) (name "res1.a.1") (node (ref D3) (pin 1)) (node (ref RN1) (pin 2))) -(net (code 51) (name "res1.a.2") +(net (code 50) (name "res1.a.2") (node (ref RN1) (pin 3)) (node (ref D7) (pin 3))) -(net (code 52) (name "res1.a.3") +(net (code 51) (name "res1.a.3") (node (ref RN1) (pin 4)) (node (ref D7) (pin 4))) -(net (code 53) (name "res2.a.0") +(net (code 52) (name "res2.a.0") (node (ref RN2) (pin 1)) (node (ref D7) (pin 1))) -(net (code 54) (name "res2.a.1") +(net (code 53) (name "res2.a.1") (node (ref D4) (pin 1)) (node (ref RN2) (pin 2))) -(net (code 55) (name "res2.a.2") +(net (code 54) (name "res2.a.2") (node (ref D5) (pin 1)) (node (ref RN2) (pin 3))) -(net (code 56) (name "res2.a.3") +(net (code 55) (name "res2.a.3") (node (ref D6) (pin 1)) (node (ref RN2) (pin 4)))) ) \ No newline at end of file diff --git a/examples/TofArray/TofArray.svgpcb.js b/examples/TofArray/TofArray.svgpcb.js index 7c8565b4c..a8355bd35 100644 --- a/examples/TofArray/TofArray.svgpcb.js +++ b/examples/TofArray/TofArray.svgpcb.js @@ -17,17 +17,17 @@ const H3 = board.add(JlcToolingHole_1_152mm, { }) // usb.conn const J1 = board.add(USB_C_Receptacle_XKB_U262_16XN_4BVC11, { - translate: pt(2.034, 0.165), rotate: 0, + translate: pt(1.992, 0.165), rotate: 0, id: 'J1' }) // usb.cc_pull.cc1.res const R1 = board.add(R_0603_1608Metric, { - translate: pt(1.883, 0.420), rotate: 0, + translate: pt(1.841, 0.420), rotate: 0, id: 'R1' }) // usb.cc_pull.cc2.res const R2 = board.add(R_0603_1608Metric, { - translate: pt(2.039, 0.420), rotate: 0, + translate: pt(1.997, 0.420), rotate: 0, id: 'R2' }) // can.conn @@ -121,8 +121,8 @@ const C10 = board.add(C_0603_1608Metric, { id: 'C10' }) // mcu.swd.conn -const J3 = board.add(Tag_Connect_TC2050_IDC_FP_2x05_P1_27mm_Vertical, { - translate: pt(0.661, 0.167), rotate: 0, +const J3 = board.add(Tag_Connect_TC2030_IDC_FP_2x03_P1_27mm_Vertical, { + translate: pt(0.612, 0.167), rotate: 0, id: 'J3' }) // mcu.usb_pull.dp @@ -162,77 +162,77 @@ const D6 = board.add(LED_0603_1608Metric, { }) // tof.elt[0].ic const U3 = board.add(ST_VL53L0X, { - translate: pt(1.063, 0.057), rotate: 0, + translate: pt(1.021, 0.057), rotate: 0, id: 'U3' }) // tof.elt[0].vdd_cap[0].cap const C11 = board.add(C_0603_1608Metric, { - translate: pt(1.025, 0.452), rotate: 0, + translate: pt(0.983, 0.452), rotate: 0, id: 'C11' }) // tof.elt[0].vdd_cap[1].cap const C12 = board.add(C_0805_2012Metric, { - translate: pt(1.498, 0.192), rotate: 0, + translate: pt(1.456, 0.192), rotate: 0, id: 'C12' }) // tof.elt[1].ic const U4 = board.add(ST_VL53L0X, { - translate: pt(1.295, 0.057), rotate: 0, + translate: pt(1.253, 0.057), rotate: 0, id: 'U4' }) // tof.elt[1].vdd_cap[0].cap const C13 = board.add(C_0603_1608Metric, { - translate: pt(1.181, 0.452), rotate: 0, + translate: pt(1.139, 0.452), rotate: 0, id: 'C13' }) // tof.elt[1].vdd_cap[1].cap const C14 = board.add(C_0805_2012Metric, { - translate: pt(1.033, 0.346), rotate: 0, + translate: pt(0.991, 0.346), rotate: 0, id: 'C14' }) // tof.elt[2].ic const U5 = board.add(ST_VL53L0X, { - translate: pt(1.528, 0.057), rotate: 0, + translate: pt(1.485, 0.057), rotate: 0, id: 'U5' }) // tof.elt[2].vdd_cap[0].cap const C15 = board.add(C_0603_1608Metric, { - translate: pt(1.337, 0.452), rotate: 0, + translate: pt(1.294, 0.452), rotate: 0, id: 'C15' }) // tof.elt[2].vdd_cap[1].cap const C16 = board.add(C_0805_2012Metric, { - translate: pt(1.207, 0.346), rotate: 0, + translate: pt(1.165, 0.346), rotate: 0, id: 'C16' }) // tof.elt[3].ic const U6 = board.add(ST_VL53L0X, { - translate: pt(1.063, 0.211), rotate: 0, + translate: pt(1.021, 0.211), rotate: 0, id: 'U6' }) // tof.elt[3].vdd_cap[0].cap const C17 = board.add(C_0603_1608Metric, { - translate: pt(1.493, 0.452), rotate: 0, + translate: pt(1.450, 0.452), rotate: 0, id: 'C17' }) // tof.elt[3].vdd_cap[1].cap const C18 = board.add(C_0805_2012Metric, { - translate: pt(1.380, 0.346), rotate: 0, + translate: pt(1.338, 0.346), rotate: 0, id: 'C18' }) // tof.elt[4].ic const U7 = board.add(ST_VL53L0X, { - translate: pt(1.295, 0.211), rotate: 0, + translate: pt(1.253, 0.211), rotate: 0, id: 'U7' }) // tof.elt[4].vdd_cap[0].cap const C19 = board.add(C_0603_1608Metric, { - translate: pt(1.648, 0.452), rotate: 0, + translate: pt(1.606, 0.452), rotate: 0, id: 'C19' }) // tof.elt[4].vdd_cap[1].cap const C20 = board.add(C_0805_2012Metric, { - translate: pt(1.553, 0.346), rotate: 0, + translate: pt(1.511, 0.346), rotate: 0, id: 'C20' }) // i2c_pull.scl_res.res @@ -363,7 +363,7 @@ const D7 = board.add(LED_LiteOn_LTST_C19HE1WT, { board.setNetlist([ {name: "vusb", pads: [["J1", "A4"], ["J1", "A9"], ["J1", "B4"], ["J1", "B9"], ["TP1", "1"], ["U1", "3"], ["C1", "1"], ["U11", "1"], ["U11", "6"], ["C23", "1"], ["C24", "1"]]}, - {name: "gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["J2", "3"], ["TP2", "1"], ["U1", "1"], ["C1", "2"], ["C2", "2"], ["D1", "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"], ["J3", "2"], ["J3", "3"], ["J3", "5"], ["SW1", "2"], ["U3", "12"], ["U3", "2"], ["U3", "3"], ["U3", "4"], ["U3", "6"], ["C11", "2"], ["C12", "2"], ["U4", "12"], ["U4", "2"], ["U4", "3"], ["U4", "4"], ["U4", "6"], ["C13", "2"], ["C14", "2"], ["U5", "12"], ["U5", "2"], ["U5", "3"], ["U5", "4"], ["U5", "6"], ["C15", "2"], ["C16", "2"], ["U6", "12"], ["U6", "2"], ["U6", "3"], ["U6", "4"], ["U6", "6"], ["C17", "2"], ["C18", "2"], ["U7", "12"], ["U7", "2"], ["U7", "3"], ["U7", "4"], ["U7", "6"], ["C19", "2"], ["C20", "2"], ["U8", "3"], ["U9", "2"], ["U9", "8"], ["C21", "2"], ["U10", "3"], ["C22", "2"], ["U11", "7"], ["U11", "9"], ["C23", "2"], ["C24", "2"], ["C26", "2"]]}, + {name: "gnd", pads: [["J1", "A1"], ["J1", "A12"], ["J1", "B1"], ["J1", "B12"], ["J1", "S1"], ["R1", "1"], ["R2", "1"], ["J2", "3"], ["TP2", "1"], ["U1", "1"], ["C1", "2"], ["C2", "2"], ["D1", "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"], ["J3", "5"], ["SW1", "2"], ["U3", "12"], ["U3", "2"], ["U3", "3"], ["U3", "4"], ["U3", "6"], ["C11", "2"], ["C12", "2"], ["U4", "12"], ["U4", "2"], ["U4", "3"], ["U4", "4"], ["U4", "6"], ["C13", "2"], ["C14", "2"], ["U5", "12"], ["U5", "2"], ["U5", "3"], ["U5", "4"], ["U5", "6"], ["C15", "2"], ["C16", "2"], ["U6", "12"], ["U6", "2"], ["U6", "3"], ["U6", "4"], ["U6", "6"], ["C17", "2"], ["C18", "2"], ["U7", "12"], ["U7", "2"], ["U7", "3"], ["U7", "4"], ["U7", "6"], ["C19", "2"], ["C20", "2"], ["U8", "3"], ["U9", "2"], ["U9", "8"], ["C21", "2"], ["U10", "3"], ["C22", "2"], ["U11", "7"], ["U11", "9"], ["C23", "2"], ["C24", "2"], ["C26", "2"]]}, {name: "v3v3", pads: [["U1", "2"], ["C2", "1"], ["TP3", "1"], ["D1", "1"], ["U2", "1"], ["U2", "24"], ["U2", "36"], ["U2", "48"], ["U2", "9"], ["C3", "1"], ["C4", "1"], ["C5", "1"], ["C6", "1"], ["C7", "1"], ["C8", "1"], ["J3", "1"], ["R3", "1"], ["D2", "2"], ["D3", "2"], ["D4", "2"], ["D5", "2"], ["D6", "2"], ["U3", "1"], ["U3", "11"], ["C11", "1"], ["C12", "1"], ["U4", "1"], ["U4", "11"], ["C13", "1"], ["C14", "1"], ["U5", "1"], ["U5", "11"], ["C15", "1"], ["C16", "1"], ["U6", "1"], ["U6", "11"], ["C17", "1"], ["C18", "1"], ["U7", "1"], ["U7", "11"], ["C19", "1"], ["C20", "1"], ["R4", "1"], ["R5", "1"], ["U9", "3"], ["C21", "1"], ["D7", "2"]]}, {name: "sw1_chain_0", pads: [["U2", "19"], ["SW1", "1"]]}, {name: "leds_chain_0.0", pads: [["U2", "20"], ["RN1", "8"]]}, @@ -396,11 +396,10 @@ board.setNetlist([ {name: "mcu.gpio.tof_reset_4", pads: [["U2", "2"], ["U7", "5"]]}, {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"], ["J3", "10"]]}, - {name: "mcu.swd_node.swclk", pads: [["U2", "37"], ["J3", "9"]]}, - {name: "mcu.reset_node", pads: [["U2", "7"], ["J3", "6"]]}, - {name: "mcu.swd.tdi", pads: [["J3", "7"]]}, - {name: "mcu.swd.swo", pads: [["U2", "39"], ["J3", "8"]]}, + {name: "mcu.swd_node.swdio", pads: [["U2", "34"], ["J3", "2"]]}, + {name: "mcu.swd_node.swclk", pads: [["U2", "37"], ["J3", "4"]]}, + {name: "mcu.reset_node", pads: [["U2", "7"], ["J3", "3"]]}, + {name: "mcu.swd.swo", pads: [["U2", "39"], ["J3", "6"]]}, {name: "tof.elt[0].ic.gpio1", pads: [["U3", "7"]]}, {name: "tof.elt[1].ic.gpio1", pads: [["U4", "7"]]}, {name: "tof.elt[2].ic.gpio1", pads: [["U5", "7"]]}, diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py index 67e255a10..6e37af169 100644 --- a/examples/test_ble_joystick.py +++ b/examples/test_ble_joystick.py @@ -212,7 +212,7 @@ def refinements(self) -> Refinements: ), ], class_refinements=[ - (EspProgrammingHeader, EspProgrammingTc2030), + (SwdCortexTargetConnector, SwdCortexTargetTagConnect), (Ch32vSdiHeader, Ch32vSdiTc2030), (TestPoint, CompactKeystone5015), (PassiveConnector, JstPhKVertical), diff --git a/examples/test_multimeter.py b/examples/test_multimeter.py index be2340366..1b17d2bd6 100644 --- a/examples/test_multimeter.py +++ b/examples/test_multimeter.py @@ -417,7 +417,7 @@ def refinements(self) -> Refinements: (AnalogSwitchTree, ["switch_size"], 2), ], class_refinements=[ - (SwdCortexTargetConnector, SwdCortexTargetTc2050), + (SwdCortexTargetConnector, SwdCortexTargetTagConnect), (TagConnect, TagConnectNonLegged), (Opamp, Tlv9061), # higher precision opamps (BananaSafetyJack, Fcr7350), diff --git a/examples/test_tofarray.py b/examples/test_tofarray.py index 9f9b7417e..eddde7853 100644 --- a/examples/test_tofarray.py +++ b/examples/test_tofarray.py @@ -161,7 +161,7 @@ def refinements(self) -> Refinements: ), ], class_refinements=[ - (SwdCortexTargetConnector, SwdCortexTargetTc2050), + (SwdCortexTargetConnector, SwdCortexTargetTagConnect), (Speaker, ConnectorSpeaker), ], ) From b5f5c9fe1119d21e0ded84d6ad6ebad7b8518370 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Fri, 5 Jun 2026 22:53:34 -0700 Subject: [PATCH 13/13] Update Ch32v003.py --- edg/parts/microcontroller/Ch32v003.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edg/parts/microcontroller/Ch32v003.py b/edg/parts/microcontroller/Ch32v003.py index 05e598564..660615126 100644 --- a/edg/parts/microcontroller/Ch32v003.py +++ b/edg/parts/microcontroller/Ch32v003.py @@ -10,7 +10,7 @@ @abstract_block_default(lambda: Ch32vSdiHeader254) class Ch32vSdiHeader(ProgrammingConnector): - """Abstract programming header for the CH32V using the one-pin SDI interface with SWIO pin..""" + """Abstract programming header for the CH32V using the one-pin SDI interface with SWIO pin.""" def __init__(self) -> None: super().__init__()