From 225679c7edd35f31c8d0bf3c39f06922bd4fa432 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 6 Jun 2026 01:30:46 -0700 Subject: [PATCH 1/7] wip --- edg/parts/microcontroller/Ch32v203.py | 270 ++++++++++++++++++++++++++ examples/test_ble_joystick.py | 1 + 2 files changed, 271 insertions(+) create mode 100644 edg/parts/microcontroller/Ch32v203.py diff --git a/edg/parts/microcontroller/Ch32v203.py b/edg/parts/microcontroller/Ch32v203.py new file mode 100644 index 000000000..b16a620ae --- /dev/null +++ b/edg/parts/microcontroller/Ch32v203.py @@ -0,0 +1,270 @@ +from typing import * + +from typing_extensions import override + +from ...circuits import * +from ...vendor_parts.jlc.JlcPart import JlcPart +from ..connector.Headers import PinHeader254 +from ..connector.TagConnect import TagConnect + + +@abstract_block_default(lambda: Ch32vSdi2Header254) +class Ch32vSdi2Header(ProgrammingConnector): + """Abstract programming header for the CH32V using the two-pin SDI interface.""" + + def __init__(self) -> None: + super().__init__() + + self.pwr = self.Port(VoltageSink.empty(), [Power]) + self.gnd = self.Port(Ground.empty(), [Common]) + self.swclk = self.Port(DigitalBidir.empty()) # despite similar naming, this is not ARM SWD + self.swdio = self.Port(DigitalBidir.empty()) + self.reset = self.Port(DigitalBidir.empty(), optional=True) # may not be connected internally + + +class Ch32vSdi2Header254(Ch32vSdi2Header): + """4-pin minimal programming header for CH32V.""" + + @override + def contents(self) -> None: + super().contents() + + self.gnd.init_from(Ground()) + self.pwr.init_from(VoltageSink()) + self.swclk.init_from(DigitalBidir()) + self.swdio.init_from(DigitalBidir()) + self.reset.init_from(DigitalBidir()) # not connected + + self.conn = self.Block(PinHeader254(4)).connected( + {"1": self.pwr, "2": self.gnd, "3": self.swdio, "4": self.swclk} + ) + + +class Ch32vSdi2Tc2030(Ch32vSdi2Header): + """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.swclk.init_from(DigitalBidir()) + self.swdio.init_from(DigitalBidir()) + self.reset.init_from(DigitalBidir()) + + self.conn = self.Block(TagConnect(6)).connected( + {"1": self.pwr, "5": self.gnd, "2": self.swdio, "4": self.swclk, "3": self.reset} + ) + # unused: 6 = swo + + +class Ch32v203_Device( + IoControllerI2cTarget, + IoControllerUsb, + InternalSubcircuit, + BaseIoControllerPinmapGenerator, + GeneratorBlock, + JlcPart, + FootprintBlock, +): + _PIN_MAPPING = { # -K6/K8 version, LQFP-32 package + # "PD0": "2", # OSCI + # "PD1": "3", # OSCO + "PA0-WKUP": "6", + "PA1": "7", + "PA2": "8", + "PA3": "9", + "PA4": "10", + "PA5": "11", + "PA6": "12", + "PA7": "13", + "PB0": "14", + "PB1": "15", + "PA8": "18", + "PA9": "19", + "PA10": "20", + "PA11": "21", + "PA12": "22", + # "PA13": "23", # SWDIO + # "PA14": "24", # SWCLK + "PA15": "25", + "PB3": "26", + "PB4": "27", + "PB5": "28", + "PB6": "29", + "PB7": "30", + # "PB8": "31", # BOOT0 + } + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + + # Additional ports (on top of BaseIoController) + self.vdd = self.Port( + VoltageSink( + voltage_limits=(3.0, 3.6) * Volt, # stricter range when USB used, otherwise down to 2.7 + current_draw=(0.0005, 23.37) * mAmp + self.io_current_draw.upper(), # standby min to 144MHz run max + ), + [Power], + ) + self.vss = self.Port(Ground(), [Common]) + + # TODO CLEAN STARTING HERE + self.nrst = self.Port( # Table 3-19 + DigitalSink.from_supply( + 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(), + 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.vdd.link().voltage), optional=True + ) # Table 3-10 crystal / resonator specs, typ 24 MHz + + 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 + 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 + ) + 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 + 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 + ) + + self.swio = self.Port(self._dio_std_model) + + @override + def _system_pinmap(self) -> Mapping[Union[Iterable[str], str], Union[Passive, HasPassivePort]]: + return { + ("16", "32"): self.vss, + "5": self.vdd, # VddA + ("17", "1"): self.vdd, + "2": self.osc.xtal_in, # TODO remappable to PD0 + "3": self.osc.xtal_out, # TODO remappable to PD1 + "4": self.nrst, + "23": self.swdio, # TODO remappable to PA13 + "24": self.swclk, # TODO remappable to PA14 + "18": self.vss, # BOOT0, TODO theoretically usable as output-only PB8 + } + + @override + def _io_pinmap(self) -> PinMapUtil: + # Port models + adc_model = AnalogSink.from_supply( + self.vss, + self.vdd, + voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 3.1 + 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 2-1 + 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"]} + ), + 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: + super().generate() + + 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 Ch32v203( + Resettable, + IoControllerI2cTarget, + IoControllerUsb, + Microcontroller, + WithCrystalGenerator, + IoControllerPowerRequired, + GeneratorBlock, +): + """General-purpose RISC-V (RV32IMAC) microcontroller with USB""" + + DEFAULT_CRYSTAL_FREQUENCY = 8 * 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()) + + @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(Ch32v203_Device(pin_assigns=ArrayStringExpr())) + self._wrap_inner(self.ic) + + self.sdi = imp.Block(Ch32vSdi2Header()) + 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) diff --git a/examples/test_ble_joystick.py b/examples/test_ble_joystick.py index 6e37af169..dcf4d988d 100644 --- a/examples/test_ble_joystick.py +++ b/examples/test_ble_joystick.py @@ -208,6 +208,7 @@ def refinements(self) -> Refinements: "i2c.scl=12", "i2c.sda=11", # TODO pin the rest + # TODO: NPX pin must be routed to MOSI ], ), ], From c3c0a559c14542ddf543073ced5bca7cc1252d7a Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 6 Jun 2026 01:39:56 -0700 Subject: [PATCH 2/7] wip --- edg/parts/microcontroller/Ch32v003.py | 2 ++ edg/parts/microcontroller/Ch32v203.py | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/edg/parts/microcontroller/Ch32v003.py b/edg/parts/microcontroller/Ch32v003.py index 660615126..77eef17b6 100644 --- a/edg/parts/microcontroller/Ch32v003.py +++ b/edg/parts/microcontroller/Ch32v003.py @@ -245,5 +245,7 @@ def generate(self) -> None: self.vdd_cap = imp.Block(DecouplingCapacitor(0.1 * uFarad(tol=0.2))) + self.reset_cap = self.Block(DigitalCapacitor(0.1 * uFarad(tol=0.2))).connected(self.gnd, self.ic.nrst) + if self.get(self.reset.is_connected()): self.connect(self.reset, self.ic.nrst) diff --git a/edg/parts/microcontroller/Ch32v203.py b/edg/parts/microcontroller/Ch32v203.py index b16a620ae..453b65aaf 100644 --- a/edg/parts/microcontroller/Ch32v203.py +++ b/edg/parts/microcontroller/Ch32v203.py @@ -110,7 +110,6 @@ def __init__(self, **kwargs: Any) -> None: ) self.vss = self.Port(Ground(), [Common]) - # TODO CLEAN STARTING HERE self.nrst = self.Port( # Table 3-19 DigitalSink.from_supply( self.vss, @@ -123,11 +122,11 @@ def __init__(self, **kwargs: Any) -> None: pullup_capable=True, ), optional=True, - ) # note, switched internal pull-up resistor, 35-55 kOhm + ) # note, switched internal pull-up resistor, 30-50 kOhm self.osc = self.Port( - CrystalDriver(frequency_limits=(4, 25) * MHertz, voltage_out=self.vdd.link().voltage), optional=True - ) # Table 3-10 crystal / resonator specs, typ 24 MHz + CrystalDriver(frequency_limits=(3, 25) * MHertz, voltage_out=self.vdd.link().voltage), optional=True + ) # Table 4-11 crystal / resonator specs, typ 8 MHz self._dio_ft_model = DigitalBidir.from_supply( self.vss, @@ -244,7 +243,7 @@ class Ch32v203( ): """General-purpose RISC-V (RV32IMAC) microcontroller with USB""" - DEFAULT_CRYSTAL_FREQUENCY = 8 * MHertz(tol=0.005) # 24 MHz as typical in datasheet + DEFAULT_CRYSTAL_FREQUENCY = 8 * MHertz(tol=0.005) # 8 MHz as typical in datasheet def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) @@ -259,12 +258,18 @@ def generate(self) -> None: self._wrap_inner(self.ic) self.sdi = imp.Block(Ch32vSdi2Header()) - self.connect(self.ic.swio, self.sdi.swio) + self.connect(self.ic.swclk, self.sdi.swclk) + self.connect(self.ic.swdio, self.sdi.swdio) 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))) + self.vdd_cap = ElementDict[DecouplingCapacitor]() # assume one 0.1uF cap per power pair + for i in range(2): + self.vdd_cap[i] = imp.Block(DecouplingCapacitor(0.1 * uFarad(tol=0.2))) + self.vdda_cap = imp.Block(DecouplingCapacitor(0.1 * uFarad(tol=0.2))) + + self.reset_cap = self.Block(DigitalCapacitor(0.1 * uFarad(tol=0.2))).connected(self.gnd, self.ic.nrst) if self.get(self.reset.is_connected()): self.connect(self.reset, self.ic.nrst) From 884f545c025ecc51e3e5029c8c656c95a584f1f9 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 6 Jun 2026 12:55:04 -0700 Subject: [PATCH 3/7] CH32V203 --- edg/parts/microcontroller/Ch32v003.py | 7 +- edg/parts/microcontroller/Ch32v203.py | 126 +++++++++++++++++--------- edg/parts/microcontroller/__init__.py | 1 + examples/test_keyboard.py | 8 +- 4 files changed, 95 insertions(+), 47 deletions(-) diff --git a/edg/parts/microcontroller/Ch32v003.py b/edg/parts/microcontroller/Ch32v003.py index 77eef17b6..d10de395b 100644 --- a/edg/parts/microcontroller/Ch32v003.py +++ b/edg/parts/microcontroller/Ch32v003.py @@ -116,7 +116,7 @@ def __init__(self, **kwargs: Any) -> None: self.vss, self.vdd, voltage_limit_abs=(-0.3, 5.5) * Volt, # table 3.1 - current_limits=(-20, 20) * mAmp, # table 3.1 + current_limits=(-20, 20) * mAmp, # 3.3.9 output drive current characteristics 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(), @@ -128,7 +128,7 @@ def __init__(self, **kwargs: Any) -> None: self.vss, self.vdd, voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 3.1 - current_limits=(-20, 20) * mAmp, # table 3.1 + current_limits=(-20, 20) * mAmp, # 3.3.9 output drive current characteristics 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(), @@ -157,7 +157,8 @@ def _io_pinmap(self) -> PinMapUtil: self.vss, self.vdd, voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 3.1 - impedance=(100, float("inf")) * kOhm, + signal_limit_tolerance=(0, 0) * Volt, # table 3-23, conversion voltage range + # impedance depends on sampling rate ) uart_model = UartPort(DigitalBidir.empty()) diff --git a/edg/parts/microcontroller/Ch32v203.py b/edg/parts/microcontroller/Ch32v203.py index 453b65aaf..83ac3fb48 100644 --- a/edg/parts/microcontroller/Ch32v203.py +++ b/edg/parts/microcontroller/Ch32v203.py @@ -62,6 +62,7 @@ def contents(self) -> None: class Ch32v203_Device( IoControllerI2cTarget, IoControllerUsb, + IoControllerCan, InternalSubcircuit, BaseIoControllerPinmapGenerator, GeneratorBlock, @@ -131,29 +132,30 @@ def __init__(self, **kwargs: Any) -> None: 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 + voltage_limit_abs=(-0.3, 5.5) * Volt, # table 4-1 + current_limits=(-20, 20) * mAmp, # 4.3.10 output drive current characteristics 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(), + 0.32 * (self.vdd.link().voltage.lower() - 1.8) + 0.55 + self.vss.link().voltage.lower(), + 0.42 * (self.vdd.link().voltage.upper() - 1.8) + 1.3 + self.vss.link().voltage.upper(), ), - pullup_capable=True, # 35-55 kOhm - pulldown_capable=True, # 35-55 kOhm + pullup_capable=True, # 30-50 kOhm + pulldown_capable=True, # 30-50 kOhm ) 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 + voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 4-1 + current_limits=(-20, 20) * mAmp, # 4.3.10 output drive current characteristics 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(), + 0.28 * (self.vdd.link().voltage.lower() - 1.8) + 0.6 + self.vss.link().voltage.lower(), + 0.42 * (self.vdd.link().voltage.upper() - 1.8) + 1 + self.vss.link().voltage.upper(), ), - pullup_capable=True, # 35-55 kOhm - pulldown_capable=True, # 35-55 kOhm + pullup_capable=True, # 30-50 kOhm + pulldown_capable=True, # 30-50 kOhm ) - self.swio = self.Port(self._dio_std_model) + self.swdio = self.Port(self._dio_ft_model) + self.swclk = self.Port(self._dio_ft_model) @override def _system_pinmap(self) -> Mapping[Union[Iterable[str], str], Union[Passive, HasPassivePort]]: @@ -175,8 +177,9 @@ def _io_pinmap(self) -> PinMapUtil: adc_model = AnalogSink.from_supply( self.vss, self.vdd, - voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 3.1 - impedance=(100, float("inf")) * kOhm, + voltage_limit_tolerance=(-0.3, 0.3) * Volt, # table 4-1 + signal_limit_tolerance=(0, 0) * Volt, # table 4-27 conversion range, up to Vref+ up to VddA + # impedance depends on sampling rate ) uart_model = UartPort(DigitalBidir.empty()) @@ -187,31 +190,63 @@ def _io_pinmap(self) -> PinMapUtil: return PinMapUtil( [ # table 2-1 - 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}), + PinResource("PC13-TAMPER-RTC", {"PC13": self._dio_std_model}), + PinResource("PC14-OSC32_IN", {"PC14": self._dio_std_model}), + PinResource("PC15-OSC32_OUT", {"PC15": self._dio_std_model}), + PinResource("OSC_IN", {"PD0": self._dio_std_model}), + PinResource("OSC_OUT", {"PD1": self._dio_std_model}), + PinResource("PA0-WKUP", {"PA0": self._dio_std_model, "ADC_IN0": adc_model}), + PinResource("PA1", {"PA1": self._dio_std_model, "ADC_IN1": adc_model}), + PinResource("PA2", {"PA2": self._dio_std_model, "ADC_IN2": adc_model}), + PinResource("PA3", {"PA3": self._dio_std_model, "ADC_IN3": adc_model}), + PinResource("PA4", {"PA4": self._dio_std_model, "ADC_IN4": adc_model}), + PinResource("PA5", {"PA5": self._dio_std_model, "ADC_IN5": adc_model}), + PinResource("PA6", {"PA6": self._dio_std_model, "ADC_IN6": adc_model}), + PinResource("PA7", {"PA7": self._dio_std_model, "ADC_IN7": adc_model}), + PinResource("PB0", {"PB0": self._dio_std_model, "ADC_IN8": adc_model}), + PinResource("PB1", {"PB1": self._dio_std_model, "ADC_IN9": adc_model}), + PinResource("PB2", {"PB2": self._dio_ft_model}), # BOOT1 + PinResource("PB10", {"PB10": self._dio_ft_model}), + PinResource("PB11", {"PB11": self._dio_ft_model}), + PinResource("PB12", {"PB12": self._dio_ft_model}), + PinResource("PB13", {"PB13": self._dio_ft_model}), + PinResource("PB14", {"PB14": self._dio_ft_model}), + PinResource("PB15", {"PB15": self._dio_ft_model}), + PinResource("PA8", {"PA8": self._dio_ft_model}), + PinResource("PA9", {"PA9": self._dio_ft_model}), + PinResource("PA10", {"PA10": self._dio_ft_model}), + PinResource("PA11", {"PA11": self._dio_ft_model}), + PinResource("PA12", {"PA12": self._dio_ft_model}), # merged w/ SWDIO on some devices + PinResource("PA13", {"PA13": self._dio_ft_model}), # SWDIO + PinResource("PA14", {"PA14": self._dio_ft_model}), # SWCLK + PinResource("PA15", {"PA15": self._dio_ft_model}), + PinResource("PB3", {"PB3": self._dio_ft_model}), + PinResource("PB4", {"PB4": self._dio_ft_model}), + PinResource("PB5", {"PB5": self._dio_ft_model}), + PinResource("PB6", {"PB6": self._dio_ft_model}), + PinResource("PB7", {"PB7": self._dio_ft_model}), + PinResource("PB8", {"PB8": self._dio_ft_model}), # merged w/ BOOT0 on some devices + PinResource("PB9", {"PB9": self._dio_ft_model}), PeripheralFixedResource( - "U", uart_model, {"tx": ["PD5", "PD0", "PD6", "PC0"], "rx": ["PD6", "PD1", "PD5", "PC1"]} + "USART1", uart_model, {"tx": ["PA9", "PB6", "PB15", "PA6"], "rx": ["PA10", "PB7", "PA8", "PA7"]} ), - PeripheralFixedResource("SPI", spi_model, {"sck": ["PC5"], "miso": ["PC7"], "mosi": ["PC6"]}), - PeripheralFixedResource("I2C", i2c_model, {"scl": ["PC2", "PD1", "PC5"], "sda": ["PC1", "PD0", "PC6"]}), + PeripheralFixedResource("USART2", uart_model, {"tx": ["PA2"], "rx": ["PA3"]}), + PeripheralFixedResource("USART3", uart_model, {"tx": ["PB10"], "rx": ["PB11"]}), + PeripheralFixedResource("USART4", uart_model, {"tx": ["PB0", "PA5"], "rx": ["PB1", "PB5"]}), + PeripheralFixedResource("USB", UsbDevicePort(DigitalBidir.empty()), {"dm": ["PA11"], "dp": ["PA12"]}), + PeripheralFixedResource("USBFS", UsbDevicePort(DigitalBidir.empty()), {"dm": ["PB6"], "dp": ["PB7"]}), + PeripheralFixedResource("I2C1", i2c_model, {"scl": ["PB6", "PB8"], "sda": ["PB7", "PB9"]}), + PeripheralFixedResource("I2C1_T", i2c_target_model, {"scl": ["PB6", "PB8"], "sda": ["PB7", "PB9"]}), + PeripheralFixedResource("I2C2", i2c_model, {"scl": ["PB10"], "sda": ["PB11"]}), + PeripheralFixedResource("I2C2_T", i2c_target_model, {"scl": ["PB10"], "sda": ["PB11"]}), PeripheralFixedResource( - "I2C_T", i2c_target_model, {"scl": ["PC2", "PD1", "PC5"], "sda": ["PC1", "PD0", "PC6"]} + "SPI1", spi_model, {"sck": ["PA5", "PB3"], "miso": ["PA6", "PB4"], "mosi": ["PA7", "PB5"]} + ), + PeripheralFixedResource("SPI2", spi_model, {"sck": ["PB13"], "miso": ["PB14"], "mosi": ["PB15"]}), + PeripheralFixedResource( + "CAN", + CanControllerPort(DigitalBidir.empty()), + {"rxd": ["PA11", "PB8"], "txd": ["PA12", "PB9"]}, ), ] ).remap_pins(self._PIN_MAPPING) @@ -222,13 +257,13 @@ def generate(self) -> None: self.footprint( "U", - "Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm", + "Package_QFP:LQFP-32_7x7mm_P0.8mm", self._make_pinning(), mfr="WCH", - part="CH32V003F4P6", + part="CH32V203K8T6", datasheet="https://www.wch-ic.com/downloads/CH32V003DS0_PDF.html", ) - self.assign(self.lcsc_part, "C5187096") + self.assign(self.lcsc_part, "C5372188") self.assign(self.actual_basic_part, False) @@ -236,6 +271,7 @@ class Ch32v203( Resettable, IoControllerI2cTarget, IoControllerUsb, + IoControllerCan, Microcontroller, WithCrystalGenerator, IoControllerPowerRequired, @@ -247,7 +283,7 @@ class Ch32v203( def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) - self.generator_param(self.reset.is_connected()) + self.generator_param(self.reset.is_connected(), self.usb.requested(), self.can.requested()) @override def generate(self) -> None: @@ -273,3 +309,11 @@ def generate(self) -> None: if self.get(self.reset.is_connected()): self.connect(self.reset, self.ic.nrst) + + @override + def _crystal_required(self) -> bool: # crystal needed for CAN or USB b/c tighter freq tolerance + return ( + len(self.get(self.can.requested())) > 0 + or len(self.get(self.usb.requested())) > 0 + or super()._crystal_required() + ) diff --git a/edg/parts/microcontroller/__init__.py b/edg/parts/microcontroller/__init__.py index 53760c553..a167dbf27 100644 --- a/edg/parts/microcontroller/__init__.py +++ b/edg/parts/microcontroller/__init__.py @@ -1,4 +1,5 @@ from .Ch32v003 import Ch32v003, Ch32vSdiHeader, Ch32vSdiHeader254, Ch32vSdiTc2030 +from .Ch32v203 import Ch32v203, Ch32vSdi2Header, Ch32vSdi2Header254, Ch32vSdi2Tc2030 from .Lpc1549 import Lpc1549_48, Lpc1549_64 from .Stm32f103 import Stm32f103_48 from .Stm32f303 import Nucleo_F303k8 diff --git a/examples/test_keyboard.py b/examples/test_keyboard.py index 8808e7a2b..6c914e687 100644 --- a/examples/test_keyboard.py +++ b/examples/test_keyboard.py @@ -22,7 +22,7 @@ def contents(self) -> None: super().contents() self.usb = self.Block(UsbCReceptacle()) - self.reg = self.Block(Ldl1117(3.3 * Volt(tol=0.05))) + self.reg = self.Block(LinearRegulator(3.3 * Volt(tol=0.05))) self.connect(self.usb.gnd, self.reg.gnd) self.connect(self.usb.pwr, self.reg.pwr_in) @@ -30,10 +30,10 @@ def contents(self) -> None: ImplicitConnect(self.reg.pwr_out, [Power]), ImplicitConnect(self.reg.gnd, [Common]), ) as imp: - self.mcu = imp.Block(Stm32f103_48()) + self.mcu = imp.Block(IoController()) self.connect(self.usb.usb, self.mcu.usb.request()) - self.sw = self.Block(SwitchMatrix(nrows=3, ncols=2)) + self.sw = self.Block(SwitchMatrix(nrows=3, ncols=4)) self.connect(self.sw.cols, self.mcu.gpio.request_vector()) self.connect(self.sw.rows, self.mcu.gpio.request_vector()) @@ -41,6 +41,8 @@ def contents(self) -> None: def refinements(self) -> Refinements: return super().refinements() + Refinements( class_refinements=[ + (IoController, Ch32v203), + (LinearRegulator, Ldl1117), (Switch, KailhSocket), ], ) From e82a25dfb1e8d2f423b93d62f9c26805231520bf Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 6 Jun 2026 13:18:00 -0700 Subject: [PATCH 4/7] Update Ch32v203.py --- edg/parts/microcontroller/Ch32v203.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/edg/parts/microcontroller/Ch32v203.py b/edg/parts/microcontroller/Ch32v203.py index 83ac3fb48..b9cbb623f 100644 --- a/edg/parts/microcontroller/Ch32v203.py +++ b/edg/parts/microcontroller/Ch32v203.py @@ -168,7 +168,7 @@ def _system_pinmap(self) -> Mapping[Union[Iterable[str], str], Union[Passive, Ha "4": self.nrst, "23": self.swdio, # TODO remappable to PA13 "24": self.swclk, # TODO remappable to PA14 - "18": self.vss, # BOOT0, TODO theoretically usable as output-only PB8 + "31": self.vss, # BOOT0, TODO theoretically usable as output-only PB8 } @override @@ -231,18 +231,19 @@ def _io_pinmap(self) -> PinMapUtil: "USART1", uart_model, {"tx": ["PA9", "PB6", "PB15", "PA6"], "rx": ["PA10", "PB7", "PA8", "PA7"]} ), PeripheralFixedResource("USART2", uart_model, {"tx": ["PA2"], "rx": ["PA3"]}), - PeripheralFixedResource("USART3", uart_model, {"tx": ["PB10"], "rx": ["PB11"]}), - PeripheralFixedResource("USART4", uart_model, {"tx": ["PB0", "PA5"], "rx": ["PB1", "PB5"]}), + # unavailable on K8 + # PeripheralFixedResource("USART3", uart_model, {"tx": ["PB10"], "rx": ["PB11"]}), + # PeripheralFixedResource("USART4", uart_model, {"tx": ["PB0", "PA5"], "rx": ["PB1", "PB5"]}), PeripheralFixedResource("USB", UsbDevicePort(DigitalBidir.empty()), {"dm": ["PA11"], "dp": ["PA12"]}), - PeripheralFixedResource("USBFS", UsbDevicePort(DigitalBidir.empty()), {"dm": ["PB6"], "dp": ["PB7"]}), + # PeripheralFixedResource("USBFS", UsbDevicePort(DigitalBidir.empty()), {"dm": ["PB6"], "dp": ["PB7"]}), PeripheralFixedResource("I2C1", i2c_model, {"scl": ["PB6", "PB8"], "sda": ["PB7", "PB9"]}), PeripheralFixedResource("I2C1_T", i2c_target_model, {"scl": ["PB6", "PB8"], "sda": ["PB7", "PB9"]}), - PeripheralFixedResource("I2C2", i2c_model, {"scl": ["PB10"], "sda": ["PB11"]}), - PeripheralFixedResource("I2C2_T", i2c_target_model, {"scl": ["PB10"], "sda": ["PB11"]}), + # PeripheralFixedResource("I2C2", i2c_model, {"scl": ["PB10"], "sda": ["PB11"]}), + # PeripheralFixedResource("I2C2_T", i2c_target_model, {"scl": ["PB10"], "sda": ["PB11"]}), PeripheralFixedResource( "SPI1", spi_model, {"sck": ["PA5", "PB3"], "miso": ["PA6", "PB4"], "mosi": ["PA7", "PB5"]} ), - PeripheralFixedResource("SPI2", spi_model, {"sck": ["PB13"], "miso": ["PB14"], "mosi": ["PB15"]}), + # PeripheralFixedResource("SPI2", spi_model, {"sck": ["PB13"], "miso": ["PB14"], "mosi": ["PB15"]}), PeripheralFixedResource( "CAN", CanControllerPort(DigitalBidir.empty()), @@ -261,7 +262,7 @@ def generate(self) -> None: self._make_pinning(), mfr="WCH", part="CH32V203K8T6", - datasheet="https://www.wch-ic.com/downloads/CH32V003DS0_PDF.html", + datasheet="https://www.wch-ic.com/downloads/CH32V203DS0_PDF.html", ) self.assign(self.lcsc_part, "C5372188") self.assign(self.actual_basic_part, False) From 4d8796ee69604e320dd0625a3bb992005e7a0083 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 6 Jun 2026 13:20:37 -0700 Subject: [PATCH 5/7] Update test_keyboard.py --- examples/test_keyboard.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/examples/test_keyboard.py b/examples/test_keyboard.py index 6c914e687..d7a429587 100644 --- a/examples/test_keyboard.py +++ b/examples/test_keyboard.py @@ -33,10 +33,24 @@ def contents(self) -> None: self.mcu = imp.Block(IoController()) self.connect(self.usb.usb, self.mcu.usb.request()) + # debugging LEDs + (self.ledr,), _ = self.chain(imp.Block(IndicatorSinkLed(Led.Red)), self.mcu.gpio.request("led")) + self.sw = self.Block(SwitchMatrix(nrows=3, ncols=4)) self.connect(self.sw.cols, self.mcu.gpio.request_vector()) self.connect(self.sw.rows, self.mcu.gpio.request_vector()) + self.enc = imp.Block(DigitalRotaryEncoder()) + self.connect(self.enc.a, self.mcu.gpio.request("enc_a")) + self.connect(self.enc.b, self.mcu.gpio.request("enc_b")) + self.connect(self.enc.with_mixin(DigitalRotaryEncoderSwitch()).sw, self.mcu.gpio.request("enc_sw")) + + self.oled = imp.Block(Er_Oled_096_1_1()) + self.connect(self.mcu.spi.request("spi"), self.oled.spi) + self.connect(self.mcu.gpio.request("oled_cs"), self.oled.cs) + self.connect(self.mcu.gpio.request("oled_dc"), self.oled.dc) + self.connect(self.mcu.gpio.request("oled_reset"), self.oled.reset) + @override def refinements(self) -> Refinements: return super().refinements() + Refinements( @@ -44,6 +58,7 @@ def refinements(self) -> Refinements: (IoController, Ch32v203), (LinearRegulator, Ldl1117), (Switch, KailhSocket), + (RotaryEncoder, Pec11s), ], ) From f06e9b55fc4b669be47c0e8e83c749df12e5fb40 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 6 Jun 2026 13:34:55 -0700 Subject: [PATCH 6/7] Update Keyboard.net.ref --- examples/Keyboard/Keyboard.net.ref | 718 +++++++++++++++++++++-------- 1 file changed, 534 insertions(+), 184 deletions(-) diff --git a/examples/Keyboard/Keyboard.net.ref b/examples/Keyboard/Keyboard.net.ref index e3f510ffb..75076ac30 100644 --- a/examples/Keyboard/Keyboard.net.ref +++ b/examples/Keyboard/Keyboard.net.ref @@ -72,90 +72,6 @@ (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) (sheetpath (names "/reg/") (tstamps "/028a013f/")) (tstamps "0be902ec")) -(comp (ref "U2") - (value "mcu.ic") - (footprint "Package_QFP:LQFP-48_7x7mm_P0.5mm") - (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48")) - (property (name "edg_path") (value "mcu.ic")) - (property (name "edg_short_path") (value "mcu.ic")) - (property (name "edg_refdes") (value "U2")) - (property (name "edg_part") (value "STM32F103xxT6 (STMicroelectronics)")) - (property (name "edg_value") (value "STM32F103xxT6")) - (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "013700cd")) -(comp (ref "C3") - (value "mcu.pwr_cap[0]") - (footprint "Capacitor_SMD:C_0805_2012Metric") - (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48")) - (property (name "edg_path") (value "mcu.pwr_cap[0].cap")) - (property (name "edg_short_path") (value "mcu.pwr_cap[0]")) - (property (name "edg_refdes") (value "C3")) - (property (name "edg_part") (value "CL21A475KAQNNNE (Samsung Electro-Mechanics)")) - (property (name "edg_value") (value "25V 4.7uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "168703d5")) -(comp (ref "C4") - (value "mcu.pwr_cap[1]") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48")) - (property (name "edg_path") (value "mcu.pwr_cap[1].cap")) - (property (name "edg_short_path") (value "mcu.pwr_cap[1]")) - (property (name "edg_refdes") (value "C4")) - (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) - (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "168903d6")) -(comp (ref "C5") - (value "mcu.pwr_cap[2]") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48")) - (property (name "edg_path") (value "mcu.pwr_cap[2].cap")) - (property (name "edg_short_path") (value "mcu.pwr_cap[2]")) - (property (name "edg_refdes") (value "C5")) - (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) - (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "168b03d7")) -(comp (ref "C6") - (value "mcu.pwr_cap[3]") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48")) - (property (name "edg_path") (value "mcu.pwr_cap[3].cap")) - (property (name "edg_short_path") (value "mcu.pwr_cap[3]")) - (property (name "edg_refdes") (value "C6")) - (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) - (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "168d03d8")) -(comp (ref "C7") - (value "mcu.vdda_cap_0") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48")) - (property (name "edg_path") (value "mcu.vdda_cap_0.cap")) - (property (name "edg_short_path") (value "mcu.vdda_cap_0")) - (property (name "edg_refdes") (value "C7")) - (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))")) - (property (name "edg_value") (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "15dc03c2")) -(comp (ref "C8") - (value "mcu.vdda_cap_1") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48")) - (property (name "edg_path") (value "mcu.vdda_cap_1.cap")) - (property (name "edg_short_path") (value "mcu.vdda_cap_1")) - (property (name "edg_refdes") (value "C8")) - (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) - (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "15dd03c3")) (comp (ref "X1") (value "mcu.crystal.package") (footprint "Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm") @@ -168,54 +84,126 @@ (property (name "edg_value") (value "8MHz SMD Crystal Resonator 12pF ±10ppm ±30ppm -40℃~+85℃ SMD3225-4P Crystals ROHS")) (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/")) (tstamps "0b4e02cd")) -(comp (ref "C9") +(comp (ref "C3") (value "mcu.crystal.cap_a") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "crystal")) (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal")) (property (name "edg_path") (value "mcu.crystal.cap_a")) (property (name "edg_short_path") (value "mcu.crystal.cap_a")) - (property (name "edg_refdes") (value "C9")) + (property (name "edg_refdes") (value "C3")) (property (name "edg_part") (value "CL10C100JB8NNNC (Samsung Electro-Mechanics)")) (property (name "edg_value") (value "50V 10pF C0G ±5% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/")) (tstamps "05e701f5")) -(comp (ref "C10") +(comp (ref "C4") (value "mcu.crystal.cap_b") (footprint "Capacitor_SMD:C_0603_1608Metric") (property (name "Sheetname") (value "crystal")) (property (name "Sheetfile") (value "edg.abstract_parts.Crystal.OscillatorCrystal")) (property (name "edg_path") (value "mcu.crystal.cap_b")) (property (name "edg_short_path") (value "mcu.crystal.cap_b")) - (property (name "edg_refdes") (value "C10")) + (property (name "edg_refdes") (value "C4")) (property (name "edg_part") (value "CL10C100JB8NNNC (Samsung Electro-Mechanics)")) (property (name "edg_value") (value "50V 10pF C0G ±5% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) (sheetpath (names "/mcu/crystal/") (tstamps "/02850146/0c1b0303/")) (tstamps "05e801f6")) +(comp (ref "U2") + (value "mcu.ic") + (footprint "Package_QFP:LQFP-32_7x7mm_P0.8mm") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.Ch32v203.Ch32v203")) + (property (name "edg_path") (value "mcu.ic")) + (property (name "edg_short_path") (value "mcu.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "CH32V203K8T6 (WCH)")) + (property (name "edg_value") (value "CH32V203K8T6")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "013700cd")) (comp (ref "J2") - (value "mcu.swd") - (footprint "Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMD") + (value "mcu.sdi") + (footprint "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical") (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48")) - (property (name "edg_path") (value "mcu.swd.conn")) - (property (name "edg_short_path") (value "mcu.swd")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.Ch32v203.Ch32v203")) + (property (name "edg_path") (value "mcu.sdi.conn")) + (property (name "edg_short_path") (value "mcu.sdi")) (property (name "edg_refdes") (value "J2")) - (property (name "edg_part") (value "PinHeader1.27 Shrouded 2x5 (Generic)")) - (property (name "edg_value") (value "PinHeader1.27 Shrouded 2x5")) + (property (name "edg_part") (value "PinHeader2.54 1x4 (Generic)")) + (property (name "edg_value") (value "PinHeader2.54 1x4")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "028d0141")) +(comp (ref "C5") + (value "mcu.vdd_cap[0]") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.Ch32v203.Ch32v203")) + (property (name "edg_path") (value "mcu.vdd_cap[0].cap")) + (property (name "edg_short_path") (value "mcu.vdd_cap[0]")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "02ae014f")) + (tstamps "15a803ba")) +(comp (ref "C6") + (value "mcu.vdd_cap[1]") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.Ch32v203.Ch32v203")) + (property (name "edg_path") (value "mcu.vdd_cap[1].cap")) + (property (name "edg_short_path") (value "mcu.vdd_cap[1]")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "15aa03bb")) +(comp (ref "C7") + (value "mcu.vdda_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.Ch32v203.Ch32v203")) + (property (name "edg_path") (value "mcu.vdda_cap.cap")) + (property (name "edg_short_path") (value "mcu.vdda_cap")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "0e880333")) +(comp (ref "C8") + (value "mcu.reset_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "mcu")) + (property (name "Sheetfile") (value "edg.parts.microcontroller.Ch32v203.Ch32v203")) + (property (name "edg_path") (value "mcu.reset_cap.cap")) + (property (name "edg_short_path") (value "mcu.reset_cap")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/mcu/") (tstamps "/02850146/")) + (tstamps "12d103b7")) +(comp (ref "D1") + (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 "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS")) + (sheetpath (names "/ledr/") (tstamps "/041d01a8/")) + (tstamps "0b4e02cd")) (comp (ref "R3") - (value "mcu.usb_pull") + (value "ledr.res") (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "mcu")) - (property (name "Sheetfile") (value "edg.parts.microcontroller.Stm32f103.Stm32f103_48")) - (property (name "edg_path") (value "mcu.usb_pull.dp")) - (property (name "edg_short_path") (value "mcu.usb_pull")) + (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 "R3")) - (property (name "edg_part") (value "0603WAF1501T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1.5kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/mcu/") (tstamps "/02850146/")) - (tstamps "0f5f0367")) + (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 "SW1") (value "sw.sw[0,0]") (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX") @@ -228,14 +216,14 @@ (property (name "edg_value") (value "PG151101S11")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) (tstamps "09be022f")) -(comp (ref "D1") +(comp (ref "D2") (value "sw.d[0,0]") (footprint "Diode_SMD:D_SOD-323") (property (name "Sheetname") (value "sw")) (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) (property (name "edg_path") (value "sw.d[0,0]")) (property (name "edg_short_path") (value "sw.d[0,0]")) - (property (name "edg_refdes") (value "D1")) + (property (name "edg_refdes") (value "D2")) (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) @@ -252,14 +240,14 @@ (property (name "edg_value") (value "PG151101S11")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) (tstamps "09c00230")) -(comp (ref "D2") +(comp (ref "D3") (value "sw.d[0,1]") (footprint "Diode_SMD:D_SOD-323") (property (name "Sheetname") (value "sw")) (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) (property (name "edg_path") (value "sw.d[0,1]")) (property (name "edg_short_path") (value "sw.d[0,1]")) - (property (name "edg_refdes") (value "D2")) + (property (name "edg_refdes") (value "D3")) (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) @@ -276,14 +264,14 @@ (property (name "edg_value") (value "PG151101S11")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) (tstamps "09c20231")) -(comp (ref "D3") +(comp (ref "D4") (value "sw.d[0,2]") (footprint "Diode_SMD:D_SOD-323") (property (name "Sheetname") (value "sw")) (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) (property (name "edg_path") (value "sw.d[0,2]")) (property (name "edg_short_path") (value "sw.d[0,2]")) - (property (name "edg_refdes") (value "D3")) + (property (name "edg_refdes") (value "D4")) (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) @@ -300,14 +288,14 @@ (property (name "edg_value") (value "PG151101S11")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) (tstamps "09c20230")) -(comp (ref "D4") +(comp (ref "D5") (value "sw.d[1,0]") (footprint "Diode_SMD:D_SOD-323") (property (name "Sheetname") (value "sw")) (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) (property (name "edg_path") (value "sw.d[1,0]")) (property (name "edg_short_path") (value "sw.d[1,0]")) - (property (name "edg_refdes") (value "D4")) + (property (name "edg_refdes") (value "D5")) (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) @@ -324,14 +312,14 @@ (property (name "edg_value") (value "PG151101S11")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) (tstamps "09c40231")) -(comp (ref "D5") +(comp (ref "D6") (value "sw.d[1,1]") (footprint "Diode_SMD:D_SOD-323") (property (name "Sheetname") (value "sw")) (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) (property (name "edg_path") (value "sw.d[1,1]")) (property (name "edg_short_path") (value "sw.d[1,1]")) - (property (name "edg_refdes") (value "D5")) + (property (name "edg_refdes") (value "D6")) (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) @@ -348,18 +336,282 @@ (property (name "edg_value") (value "PG151101S11")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) (tstamps "09c60232")) -(comp (ref "D6") +(comp (ref "D7") (value "sw.d[1,2]") (footprint "Diode_SMD:D_SOD-323") (property (name "Sheetname") (value "sw")) (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) (property (name "edg_path") (value "sw.d[1,2]")) (property (name "edg_short_path") (value "sw.d[1,2]")) - (property (name "edg_refdes") (value "D6")) + (property (name "edg_refdes") (value "D7")) + (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) + (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "062e01ac")) +(comp (ref "SW7") + (value "sw.sw[2,0]") + (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.sw[2,0]")) + (property (name "edg_short_path") (value "sw.sw[2,0]")) + (property (name "edg_refdes") (value "SW7")) + (property (name "edg_part") (value "PG151101S11 (Kailh)")) + (property (name "edg_value") (value "PG151101S11")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "09c60231")) +(comp (ref "D8") + (value "sw.d[2,0]") + (footprint "Diode_SMD:D_SOD-323") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.d[2,0]")) + (property (name "edg_short_path") (value "sw.d[2,0]")) + (property (name "edg_refdes") (value "D8")) + (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) + (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "062e01ab")) +(comp (ref "SW8") + (value "sw.sw[2,1]") + (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.sw[2,1]")) + (property (name "edg_short_path") (value "sw.sw[2,1]")) + (property (name "edg_refdes") (value "SW8")) + (property (name "edg_part") (value "PG151101S11 (Kailh)")) + (property (name "edg_value") (value "PG151101S11")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "09c80232")) +(comp (ref "D9") + (value "sw.d[2,1]") + (footprint "Diode_SMD:D_SOD-323") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.d[2,1]")) + (property (name "edg_short_path") (value "sw.d[2,1]")) + (property (name "edg_refdes") (value "D9")) + (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) + (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "063001ac")) +(comp (ref "SW9") + (value "sw.sw[2,2]") + (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.sw[2,2]")) + (property (name "edg_short_path") (value "sw.sw[2,2]")) + (property (name "edg_refdes") (value "SW9")) + (property (name "edg_part") (value "PG151101S11 (Kailh)")) + (property (name "edg_value") (value "PG151101S11")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "09ca0233")) +(comp (ref "D10") + (value "sw.d[2,2]") + (footprint "Diode_SMD:D_SOD-323") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.d[2,2]")) + (property (name "edg_short_path") (value "sw.d[2,2]")) + (property (name "edg_refdes") (value "D10")) + (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) + (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "063201ad")) +(comp (ref "SW10") + (value "sw.sw[3,0]") + (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.sw[3,0]")) + (property (name "edg_short_path") (value "sw.sw[3,0]")) + (property (name "edg_refdes") (value "SW10")) + (property (name "edg_part") (value "PG151101S11 (Kailh)")) + (property (name "edg_value") (value "PG151101S11")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "09ca0232")) +(comp (ref "D11") + (value "sw.d[3,0]") + (footprint "Diode_SMD:D_SOD-323") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.d[3,0]")) + (property (name "edg_short_path") (value "sw.d[3,0]")) + (property (name "edg_refdes") (value "D11")) (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) (sheetpath (names "/sw/") (tstamps "/015f00eb/")) - (tstamps "062e01ac"))) + (tstamps "063201ac")) +(comp (ref "SW11") + (value "sw.sw[3,1]") + (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.sw[3,1]")) + (property (name "edg_short_path") (value "sw.sw[3,1]")) + (property (name "edg_refdes") (value "SW11")) + (property (name "edg_part") (value "PG151101S11 (Kailh)")) + (property (name "edg_value") (value "PG151101S11")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "09cc0233")) +(comp (ref "D12") + (value "sw.d[3,1]") + (footprint "Diode_SMD:D_SOD-323") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.d[3,1]")) + (property (name "edg_short_path") (value "sw.d[3,1]")) + (property (name "edg_refdes") (value "D12")) + (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) + (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "063401ad")) +(comp (ref "SW12") + (value "sw.sw[3,2]") + (footprint "Switch_Keyboard_Hotswap_Kailh:SW_Hotswap_Kailh_MX") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.sw[3,2]")) + (property (name "edg_short_path") (value "sw.sw[3,2]")) + (property (name "edg_refdes") (value "SW12")) + (property (name "edg_part") (value "PG151101S11 (Kailh)")) + (property (name "edg_value") (value "PG151101S11")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "09ce0234")) +(comp (ref "D13") + (value "sw.d[3,2]") + (footprint "Diode_SMD:D_SOD-323") + (property (name "Sheetname") (value "sw")) + (property (name "Sheetfile") (value "edg.circuits.SwitchMatrix.SwitchMatrix")) + (property (name "edg_path") (value "sw.d[3,2]")) + (property (name "edg_short_path") (value "sw.d[3,2]")) + (property (name "edg_refdes") (value "D13")) + (property (name "edg_part") (value "1N5819WS (Guangdong Hottech)")) + (property (name "edg_value") (value "40V 600mV@1A 1A SOD-323 Schottky Barrier Diodes (SBD) ROHS")) + (sheetpath (names "/sw/") (tstamps "/015f00eb/")) + (tstamps "063601ae")) +(comp (ref "SW13") + (value "enc") + (footprint "edg:RotaryEncoder_Bourns_PEC11S") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "enc.package")) + (property (name "edg_short_path") (value "enc")) + (property (name "edg_refdes") (value "SW13")) + (property (name "edg_part") (value "PEC11S-929K-S0015 (Bourns)")) + (property (name "edg_value") (value "PEC11S-929K-S0015")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "02710137")) +(comp (ref "J3") + (value "oled.device") + (footprint "Connector_FFC-FPC:Hirose_FH12-30S-0.5SH_1x30-1MP_P0.50mm_Horizontal") + (property (name "Sheetname") (value "oled")) + (property (name "Sheetfile") (value "edg.parts.display.oled.Er_Oled_096_1_1.Er_Oled_096_1_1")) + (property (name "edg_path") (value "oled.device.conn")) + (property (name "edg_short_path") (value "oled.device")) + (property (name "edg_refdes") (value "J3")) + (property (name "edg_part") (value "AFC01-S30FC*-00 (Jushuo)")) + (property (name "edg_value") (value "AFC01-S30FC*-00")) + (sheetpath (names "/oled/") (tstamps "/043201a5/")) + (tstamps "08950271")) +(comp (ref "U3") + (value "oled.lcd") + (footprint "edg:Lcd_Er_Oled0.96_1.1_Outline") + (property (name "Sheetname") (value "oled")) + (property (name "Sheetfile") (value "edg.parts.display.oled.Er_Oled_096_1_1.Er_Oled_096_1_1")) + (property (name "edg_path") (value "oled.lcd")) + (property (name "edg_short_path") (value "oled.lcd")) + (property (name "edg_refdes") (value "U3")) + (property (name "edg_part") (value "ER-OLED-0.96-1.1 (EastRising)")) + (property (name "edg_value") (value "ER-OLED-0.96-1.1")) + (sheetpath (names "/oled/") (tstamps "/043201a5/")) + (tstamps "02710134")) +(comp (ref "C9") + (value "oled.c1_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "oled")) + (property (name "Sheetfile") (value "edg.parts.display.oled.Er_Oled_096_1_1.Er_Oled_096_1_1")) + (property (name "edg_path") (value "oled.c1_cap")) + (property (name "edg_short_path") (value "oled.c1_cap")) + (property (name "edg_refdes") (value "C9")) + (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 "/oled/") (tstamps "/043201a5/")) + (tstamps "07240228")) +(comp (ref "C10") + (value "oled.c2_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "oled")) + (property (name "Sheetfile") (value "edg.parts.display.oled.Er_Oled_096_1_1.Er_Oled_096_1_1")) + (property (name "edg_path") (value "oled.c2_cap")) + (property (name "edg_short_path") (value "oled.c2_cap")) + (property (name "edg_refdes") (value "C10")) + (property (name "edg_part") (value "CL10A105KB8NNNC (Samsung Electro-Mechanics)")) + (property (name "edg_value") (value "50V 1uF X5R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/oled/") (tstamps "/043201a5/")) + (tstamps "07290229")) +(comp (ref "R4") + (value "oled.iref_res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "oled")) + (property (name "Sheetfile") (value "edg.parts.display.oled.Er_Oled_096_1_1.Er_Oled_096_1_1")) + (property (name "edg_path") (value "oled.iref_res.res")) + (property (name "edg_short_path") (value "oled.iref_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF3903T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 390kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/oled/") (tstamps "/043201a5/")) + (tstamps "0ed90350")) +(comp (ref "C11") + (value "oled.vcomh_cap") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "oled")) + (property (name "Sheetfile") (value "edg.parts.display.oled.Er_Oled_096_1_1.Er_Oled_096_1_1")) + (property (name "edg_path") (value "oled.vcomh_cap.cap")) + (property (name "edg_short_path") (value "oled.vcomh_cap")) + (property (name "edg_refdes") (value "C11")) + (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 "/oled/") (tstamps "/043201a5/")) + (tstamps "12bd03b1")) +(comp (ref "C12") + (value "oled.vdd_cap1") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "oled")) + (property (name "Sheetfile") (value "edg.parts.display.oled.Er_Oled_096_1_1.Er_Oled_096_1_1")) + (property (name "edg_path") (value "oled.vdd_cap1.cap")) + (property (name "edg_short_path") (value "oled.vdd_cap1")) + (property (name "edg_refdes") (value "C12")) + (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 "/oled/") (tstamps "/043201a5/")) + (tstamps "0e670303")) +(comp (ref "C13") + (value "oled.vbat_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "oled")) + (property (name "Sheetfile") (value "edg.parts.display.oled.Er_Oled_096_1_1.Er_Oled_096_1_1")) + (property (name "edg_path") (value "oled.vbat_cap.cap")) + (property (name "edg_short_path") (value "oled.vbat_cap")) + (property (name "edg_refdes") (value "C13")) + (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 "/oled/") (tstamps "/043201a5/")) + (tstamps "0ec70341")) +(comp (ref "C14") + (value "oled.vcc_cap") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "oled")) + (property (name "Sheetfile") (value "edg.parts.display.oled.Er_Oled_096_1_1.Er_Oled_096_1_1")) + (property (name "edg_path") (value "oled.vcc_cap.cap")) + (property (name "edg_short_path") (value "oled.vcc_cap")) + (property (name "edg_refdes") (value "C14")) + (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 "/oled/") (tstamps "/043201a5/")) + (tstamps "0b5902d0"))) (nets (net (code 1) (name "usb.pwr") (node (ref J1) (pin A4)) @@ -379,33 +631,47 @@ (node (ref U1) (pin 1)) (node (ref C1) (pin 2)) (node (ref C2) (pin 2)) - (node (ref U2) (pin 23)) - (node (ref U2) (pin 35)) - (node (ref U2) (pin 44)) - (node (ref U2) (pin 47)) - (node (ref U2) (pin 8)) + (node (ref X1) (pin 2)) + (node (ref X1) (pin 4)) (node (ref C3) (pin 2)) (node (ref C4) (pin 2)) + (node (ref U2) (pin 16)) + (node (ref U2) (pin 31)) + (node (ref U2) (pin 32)) + (node (ref J2) (pin 2)) (node (ref C5) (pin 2)) (node (ref C6) (pin 2)) (node (ref C7) (pin 2)) (node (ref C8) (pin 2)) - (node (ref X1) (pin 2)) - (node (ref X1) (pin 4)) - (node (ref C9) (pin 2)) - (node (ref C10) (pin 2)) - (node (ref J2) (pin 3)) - (node (ref J2) (pin 5)) - (node (ref J2) (pin 9))) + (node (ref SW13) (pin C)) + (node (ref SW13) (pin S2)) + (node (ref J3) (pin 1)) + (node (ref J3) (pin 10)) + (node (ref J3) (pin 11)) + (node (ref J3) (pin 12)) + (node (ref J3) (pin 16)) + (node (ref J3) (pin 17)) + (node (ref J3) (pin 21)) + (node (ref J3) (pin 22)) + (node (ref J3) (pin 23)) + (node (ref J3) (pin 24)) + (node (ref J3) (pin 25)) + (node (ref J3) (pin 29)) + (node (ref J3) (pin 30)) + (node (ref J3) (pin 8)) + (node (ref R4) (pin 1)) + (node (ref C11) (pin 2)) + (node (ref C12) (pin 2)) + (node (ref C13) (pin 2)) + (node (ref C14) (pin 2))) (net (code 3) (name "usb.usb.dp") (node (ref J1) (pin A6)) (node (ref J1) (pin B6)) - (node (ref U2) (pin 33)) - (node (ref R3) (pin 2))) + (node (ref U2) (pin 22))) (net (code 4) (name "usb.usb.dm") (node (ref J1) (pin A7)) (node (ref J1) (pin B7)) - (node (ref U2) (pin 32))) + (node (ref U2) (pin 21))) (net (code 5) (name "usb.conn.cc.cc1") (node (ref J1) (pin A5)) (node (ref R1) (pin 2))) @@ -416,77 +682,161 @@ (node (ref U1) (pin 2)) (node (ref C2) (pin 1)) (node (ref U2) (pin 1)) - (node (ref U2) (pin 24)) - (node (ref U2) (pin 36)) - (node (ref U2) (pin 48)) - (node (ref U2) (pin 9)) - (node (ref C3) (pin 1)) - (node (ref C4) (pin 1)) + (node (ref U2) (pin 17)) + (node (ref U2) (pin 5)) + (node (ref J2) (pin 1)) (node (ref C5) (pin 1)) (node (ref C6) (pin 1)) (node (ref C7) (pin 1)) - (node (ref C8) (pin 1)) - (node (ref J2) (pin 1)) - (node (ref R3) (pin 1))) + (node (ref D1) (pin 2)) + (node (ref J3) (pin 6)) + (node (ref J3) (pin 9)) + (node (ref C12) (pin 1)) + (node (ref C13) (pin 1))) (net (code 8) (name "mcu.gpio.0_0") - (node (ref U2) (pin 10)) + (node (ref U2) (pin 18)) (node (ref SW1) (pin 2)) (node (ref SW2) (pin 2)) (node (ref SW3) (pin 2))) (net (code 9) (name "mcu.gpio.0_1") - (node (ref U2) (pin 11)) + (node (ref U2) (pin 19)) (node (ref SW4) (pin 2)) (node (ref SW5) (pin 2)) (node (ref SW6) (pin 2))) -(net (code 10) (name "mcu.gpio.1_0") - (node (ref U2) (pin 12)) - (node (ref D1) (pin 2)) - (node (ref D4) (pin 2))) -(net (code 11) (name "mcu.gpio.1_1") - (node (ref U2) (pin 13)) +(net (code 10) (name "mcu.gpio.0_2") + (node (ref U2) (pin 20)) + (node (ref SW7) (pin 2)) + (node (ref SW8) (pin 2)) + (node (ref SW9) (pin 2))) +(net (code 11) (name "mcu.gpio.0_3") + (node (ref U2) (pin 25)) + (node (ref SW10) (pin 2)) + (node (ref SW11) (pin 2)) + (node (ref SW12) (pin 2))) +(net (code 12) (name "mcu.gpio.1_0") + (node (ref U2) (pin 26)) (node (ref D2) (pin 2)) - (node (ref D5) (pin 2))) -(net (code 12) (name "mcu.gpio.1_2") - (node (ref U2) (pin 14)) + (node (ref D5) (pin 2)) + (node (ref D8) (pin 2)) + (node (ref D11) (pin 2))) +(net (code 13) (name "mcu.gpio.1_1") + (node (ref U2) (pin 27)) (node (ref D3) (pin 2)) - (node (ref D6) (pin 2))) -(net (code 13) (name "mcu.xtal_node.xi") - (node (ref U2) (pin 5)) + (node (ref D6) (pin 2)) + (node (ref D9) (pin 2)) + (node (ref D12) (pin 2))) +(net (code 14) (name "mcu.gpio.1_2") + (node (ref U2) (pin 28)) + (node (ref D4) (pin 2)) + (node (ref D7) (pin 2)) + (node (ref D10) (pin 2)) + (node (ref D13) (pin 2))) +(net (code 15) (name "mcu.xtal_node.xi") (node (ref X1) (pin 1)) - (node (ref C9) (pin 1))) -(net (code 14) (name "mcu.xtal_node.xo") - (node (ref U2) (pin 6)) + (node (ref C3) (pin 1)) + (node (ref U2) (pin 2))) +(net (code 16) (name "mcu.xtal_node.xo") (node (ref X1) (pin 3)) - (node (ref C10) (pin 1))) -(net (code 15) (name "mcu.swd_node.swdio") - (node (ref U2) (pin 34)) - (node (ref J2) (pin 2))) -(net (code 16) (name "mcu.swd_node.swclk") - (node (ref U2) (pin 37)) + (node (ref C4) (pin 1)) + (node (ref U2) (pin 3))) +(net (code 17) (name "mcu.ic.nrst") + (node (ref U2) (pin 4)) + (node (ref C8) (pin 1))) +(net (code 18) (name "mcu.ic.swdio") + (node (ref U2) (pin 23)) + (node (ref J2) (pin 3))) +(net (code 19) (name "mcu.ic.swclk") + (node (ref U2) (pin 24)) (node (ref J2) (pin 4))) -(net (code 17) (name "mcu.reset_node") - (node (ref U2) (pin 7)) - (node (ref J2) (pin 10))) -(net (code 18) (name "mcu.swd.tdi") - (node (ref J2) (pin 8))) -(net (code 19) (name "mcu.swd.swo") - (node (ref J2) (pin 6))) -(net (code 20) (name "sw.sw[0,0].sw") +(net (code 20) (name "ledr.signal") + (node (ref U2) (pin 6)) + (node (ref R3) (pin 2))) +(net (code 21) (name "ledr.package.k") + (node (ref D1) (pin 1)) + (node (ref R3) (pin 1))) +(net (code 22) (name "sw.sw[0,0].sw") (node (ref SW1) (pin 1)) - (node (ref D1) (pin 1))) -(net (code 21) (name "sw.sw[0,1].sw") - (node (ref SW2) (pin 1)) (node (ref D2) (pin 1))) -(net (code 22) (name "sw.sw[0,2].sw") - (node (ref SW3) (pin 1)) +(net (code 23) (name "sw.sw[0,1].sw") + (node (ref SW2) (pin 1)) (node (ref D3) (pin 1))) -(net (code 23) (name "sw.sw[1,0].sw") - (node (ref SW4) (pin 1)) +(net (code 24) (name "sw.sw[0,2].sw") + (node (ref SW3) (pin 1)) (node (ref D4) (pin 1))) -(net (code 24) (name "sw.sw[1,1].sw") - (node (ref SW5) (pin 1)) +(net (code 25) (name "sw.sw[1,0].sw") + (node (ref SW4) (pin 1)) (node (ref D5) (pin 1))) -(net (code 25) (name "sw.sw[1,2].sw") +(net (code 26) (name "sw.sw[1,1].sw") + (node (ref SW5) (pin 1)) + (node (ref D6) (pin 1))) +(net (code 27) (name "sw.sw[1,2].sw") (node (ref SW6) (pin 1)) - (node (ref D6) (pin 1)))) + (node (ref D7) (pin 1))) +(net (code 28) (name "sw.sw[2,0].sw") + (node (ref SW7) (pin 1)) + (node (ref D8) (pin 1))) +(net (code 29) (name "sw.sw[2,1].sw") + (node (ref SW8) (pin 1)) + (node (ref D9) (pin 1))) +(net (code 30) (name "sw.sw[2,2].sw") + (node (ref SW9) (pin 1)) + (node (ref D10) (pin 1))) +(net (code 31) (name "sw.sw[3,0].sw") + (node (ref SW10) (pin 1)) + (node (ref D11) (pin 1))) +(net (code 32) (name "sw.sw[3,1].sw") + (node (ref SW11) (pin 1)) + (node (ref D12) (pin 1))) +(net (code 33) (name "sw.sw[3,2].sw") + (node (ref SW12) (pin 1)) + (node (ref D13) (pin 1))) +(net (code 34) (name "enc.a") + (node (ref U2) (pin 7)) + (node (ref SW13) (pin A))) +(net (code 35) (name "enc.b") + (node (ref U2) (pin 8)) + (node (ref SW13) (pin B))) +(net (code 36) (name "enc.sw") + (node (ref U2) (pin 9)) + (node (ref SW13) (pin S1))) +(net (code 37) (name "oled.reset") + (node (ref U2) (pin 15)) + (node (ref J3) (pin 14))) +(net (code 38) (name "oled.spi.sck") + (node (ref U2) (pin 11)) + (node (ref J3) (pin 18))) +(net (code 39) (name "oled.spi.mosi") + (node (ref U2) (pin 13)) + (node (ref J3) (pin 19))) +(net (code 40) (name "oled.spi.miso") + (node (ref U2) (pin 12))) +(net (code 41) (name "oled.cs") + (node (ref U2) (pin 10)) + (node (ref J3) (pin 13))) +(net (code 42) (name "oled.dc") + (node (ref U2) (pin 14)) + (node (ref J3) (pin 15))) +(net (code 43) (name "oled.device.vcc") + (node (ref J3) (pin 28)) + (node (ref C14) (pin 1))) +(net (code 44) (name "oled.device.iref") + (node (ref J3) (pin 26)) + (node (ref R4) (pin 2))) +(net (code 45) (name "oled.device.vcomh") + (node (ref J3) (pin 27)) + (node (ref C11) (pin 1))) +(net (code 46) (name "oled.device.c1p") + (node (ref J3) (pin 4)) + (node (ref C9) (pin 1))) +(net (code 47) (name "oled.device.c1n") + (node (ref J3) (pin 5)) + (node (ref C9) (pin 2))) +(net (code 48) (name "oled.device.c2p") + (node (ref J3) (pin 2)) + (node (ref C10) (pin 1))) +(net (code 49) (name "oled.device.c2n") + (node (ref J3) (pin 3)) + (node (ref C10) (pin 2))) +(net (code 50) (name "oled.device.d2") + (node (ref J3) (pin 20)))) ) \ No newline at end of file From a9657eb9b42a8e477b602bedd860d8798c1664c1 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 6 Jun 2026 13:44:04 -0700 Subject: [PATCH 7/7] update comment and netlist --- edg/parts/microcontroller/Ch32v203.py | 2 +- examples/BleJoystick/BleJoystick_btns.net.ref | 152 ++++++++++-------- 2 files changed, 84 insertions(+), 70 deletions(-) diff --git a/edg/parts/microcontroller/Ch32v203.py b/edg/parts/microcontroller/Ch32v203.py index b9cbb623f..97845108e 100644 --- a/edg/parts/microcontroller/Ch32v203.py +++ b/edg/parts/microcontroller/Ch32v203.py @@ -41,7 +41,7 @@ def contents(self) -> None: class Ch32vSdi2Tc2030(Ch32vSdi2Header): - """UNOFFICIAL tag connect header, based on the SWD pinout and mapping SWDIO to SWIO.""" + """UNOFFICIAL tag connect header, based on the SWD pinout.""" @override def contents(self) -> None: diff --git a/examples/BleJoystick/BleJoystick_btns.net.ref b/examples/BleJoystick/BleJoystick_btns.net.ref index c46066f20..dff4e7830 100644 --- a/examples/BleJoystick/BleJoystick_btns.net.ref +++ b/examples/BleJoystick/BleJoystick_btns.net.ref @@ -108,6 +108,18 @@ (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 "JC14") + (value "btns.ioe.reset_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.reset_cap.cap")) + (property (name "edg_short_path") (value "btns.ioe.reset_cap")) + (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/ioe/") (tstamps "/043701b8/0281013e/")) + (tstamps "12d103b7")) (comp (ref "JSW1") (value "btns.sw[0]") (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") @@ -228,14 +240,14 @@ (property (name "edg_value") (value "A1304ELHLX-T")) (sheetpath (names "/btns/trig/") (tstamps "/043701b8/046301b7/")) (tstamps "013700cd")) -(comp (ref "JC14") +(comp (ref "JC15") (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_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/trig/") (tstamps "/043701b8/046301b7/")) @@ -264,14 +276,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_js/led[0]/") (tstamps "/043701b8/090e0293/07e5021e/")) (tstamps "08950271")) -(comp (ref "JC15") +(comp (ref "JC16") (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_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[0]/") (tstamps "/043701b8/090e0293/07e5021e/")) @@ -288,14 +300,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_js/led[1]/") (tstamps "/043701b8/090e0293/07e7021f/")) (tstamps "08950271")) -(comp (ref "JC16") +(comp (ref "JC17") (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_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[1]/") (tstamps "/043701b8/090e0293/07e7021f/")) @@ -312,14 +324,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_js/led[2]/") (tstamps "/043701b8/090e0293/07e90220/")) (tstamps "08950271")) -(comp (ref "JC17") +(comp (ref "JC18") (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_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[2]/") (tstamps "/043701b8/090e0293/07e90220/")) @@ -336,14 +348,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_js/led[3]/") (tstamps "/043701b8/090e0293/07eb0221/")) (tstamps "08950271")) -(comp (ref "JC18") +(comp (ref "JC19") (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_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[3]/") (tstamps "/043701b8/090e0293/07eb0221/")) @@ -360,14 +372,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_js/led[4]/") (tstamps "/043701b8/090e0293/07ed0222/")) (tstamps "08950271")) -(comp (ref "JC19") +(comp (ref "JC20") (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_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[4]/") (tstamps "/043701b8/090e0293/07ed0222/")) @@ -384,14 +396,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_js/led[5]/") (tstamps "/043701b8/090e0293/07ef0223/")) (tstamps "08950271")) -(comp (ref "JC20") +(comp (ref "JC21") (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_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[5]/") (tstamps "/043701b8/090e0293/07ef0223/")) @@ -408,14 +420,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_js/led[6]/") (tstamps "/043701b8/090e0293/07f10224/")) (tstamps "08950271")) -(comp (ref "JC21") +(comp (ref "JC22") (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_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[6]/") (tstamps "/043701b8/090e0293/07f10224/")) @@ -432,14 +444,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_js/led[7]/") (tstamps "/043701b8/090e0293/07f30225/")) (tstamps "08950271")) -(comp (ref "JC22") +(comp (ref "JC23") (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_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_js/led[7]/") (tstamps "/043701b8/090e0293/07f30225/")) @@ -456,14 +468,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_dpad/led[0]/") (tstamps "/043701b8/0f39034f/07e5021e/")) (tstamps "08950271")) -(comp (ref "JC23") +(comp (ref "JC24") (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_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[0]/") (tstamps "/043701b8/0f39034f/07e5021e/")) @@ -480,14 +492,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_dpad/led[1]/") (tstamps "/043701b8/0f39034f/07e7021f/")) (tstamps "08950271")) -(comp (ref "JC24") +(comp (ref "JC25") (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_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[1]/") (tstamps "/043701b8/0f39034f/07e7021f/")) @@ -504,14 +516,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_dpad/led[2]/") (tstamps "/043701b8/0f39034f/07e90220/")) (tstamps "08950271")) -(comp (ref "JC25") +(comp (ref "JC26") (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_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[2]/") (tstamps "/043701b8/0f39034f/07e90220/")) @@ -528,14 +540,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_dpad/led[3]/") (tstamps "/043701b8/0f39034f/07eb0221/")) (tstamps "08950271")) -(comp (ref "JC26") +(comp (ref "JC27") (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_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[3]/") (tstamps "/043701b8/0f39034f/07eb0221/")) @@ -552,14 +564,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_dpad/led[4]/") (tstamps "/043701b8/0f39034f/07ed0222/")) (tstamps "08950271")) -(comp (ref "JC27") +(comp (ref "JC28") (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_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[4]/") (tstamps "/043701b8/0f39034f/07ed0222/")) @@ -576,14 +588,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_dpad/led[5]/") (tstamps "/043701b8/0f39034f/07ef0223/")) (tstamps "08950271")) -(comp (ref "JC28") +(comp (ref "JC29") (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_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[5]/") (tstamps "/043701b8/0f39034f/07ef0223/")) @@ -600,14 +612,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_dpad/led[6]/") (tstamps "/043701b8/0f39034f/07f10224/")) (tstamps "08950271")) -(comp (ref "JC29") +(comp (ref "JC30") (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_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[6]/") (tstamps "/043701b8/0f39034f/07f10224/")) @@ -624,14 +636,14 @@ (property (name "edg_value") (value "WS2812C-2020-V1")) (sheetpath (names "/btns/npx_dpad/led[7]/") (tstamps "/043701b8/0f39034f/07f30225/")) (tstamps "08950271")) -(comp (ref "JC30") +(comp (ref "JC31") (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_refdes") (value "JC31")) (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/")) @@ -654,6 +666,7 @@ (node (ref JU9) (pin 7)) (node (ref JJ6) (pin 5)) (node (ref JC13) (pin 2)) + (node (ref JC14) (pin 2)) (node (ref JSW1) (pin 2)) (node (ref JSW2) (pin 2)) (node (ref JSW3) (pin 2)) @@ -664,39 +677,39 @@ (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 JD5) (pin 2)) (node (ref JC16) (pin 2)) - (node (ref JD7) (pin 2)) + (node (ref JD6) (pin 2)) (node (ref JC17) (pin 2)) - (node (ref JD8) (pin 2)) + (node (ref JD7) (pin 2)) (node (ref JC18) (pin 2)) - (node (ref JD9) (pin 2)) + (node (ref JD8) (pin 2)) (node (ref JC19) (pin 2)) - (node (ref JD10) (pin 2)) + (node (ref JD9) (pin 2)) (node (ref JC20) (pin 2)) - (node (ref JD11) (pin 2)) + (node (ref JD10) (pin 2)) (node (ref JC21) (pin 2)) - (node (ref JD12) (pin 2)) + (node (ref JD11) (pin 2)) (node (ref JC22) (pin 2)) - (node (ref JD13) (pin 2)) + (node (ref JD12) (pin 2)) (node (ref JC23) (pin 2)) - (node (ref JD14) (pin 2)) + (node (ref JD13) (pin 2)) (node (ref JC24) (pin 2)) - (node (ref JD15) (pin 2)) + (node (ref JD14) (pin 2)) (node (ref JC25) (pin 2)) - (node (ref JD16) (pin 2)) + (node (ref JD15) (pin 2)) (node (ref JC26) (pin 2)) - (node (ref JD17) (pin 2)) + (node (ref JD16) (pin 2)) (node (ref JC27) (pin 2)) - (node (ref JD18) (pin 2)) + (node (ref JD17) (pin 2)) (node (ref JC28) (pin 2)) - (node (ref JD19) (pin 2)) + (node (ref JD18) (pin 2)) (node (ref JC29) (pin 2)) - (node (ref JD20) (pin 2)) + (node (ref JD19) (pin 2)) (node (ref JC30) (pin 2)) + (node (ref JD20) (pin 2)) + (node (ref JC31) (pin 2)) (node (ref JJ8) (pin 1)) (node (ref JJ8) (pin 6))) (net (code 2) (name "Jbtns.pwr") @@ -705,42 +718,42 @@ (node (ref JJ6) (pin 1)) (node (ref JC13) (pin 1)) (node (ref JU10) (pin 1)) - (node (ref JC14) (pin 1)) + (node (ref JC15) (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 JD6) (pin 4)) (node (ref JC17) (pin 1)) - (node (ref JD8) (pin 4)) + (node (ref JD7) (pin 4)) (node (ref JC18) (pin 1)) - (node (ref JD9) (pin 4)) + (node (ref JD8) (pin 4)) (node (ref JC19) (pin 1)) - (node (ref JD10) (pin 4)) + (node (ref JD9) (pin 4)) (node (ref JC20) (pin 1)) - (node (ref JD11) (pin 4)) + (node (ref JD10) (pin 4)) (node (ref JC21) (pin 1)) - (node (ref JD12) (pin 4)) + (node (ref JD11) (pin 4)) (node (ref JC22) (pin 1)) - (node (ref JD13) (pin 4)) + (node (ref JD12) (pin 4)) (node (ref JC23) (pin 1)) - (node (ref JD14) (pin 4)) + (node (ref JD13) (pin 4)) (node (ref JC24) (pin 1)) - (node (ref JD15) (pin 4)) + (node (ref JD14) (pin 4)) (node (ref JC25) (pin 1)) - (node (ref JD16) (pin 4)) + (node (ref JD15) (pin 4)) (node (ref JC26) (pin 1)) - (node (ref JD17) (pin 4)) + (node (ref JD16) (pin 4)) (node (ref JC27) (pin 1)) - (node (ref JD18) (pin 4)) + (node (ref JD17) (pin 4)) (node (ref JC28) (pin 1)) - (node (ref JD19) (pin 4)) + (node (ref JD18) (pin 4)) (node (ref JC29) (pin 1)) - (node (ref JD20) (pin 4)) + (node (ref JD19) (pin 4)) (node (ref JC30) (pin 1)) + (node (ref JD20) (pin 4)) + (node (ref JC31) (pin 1)) (node (ref JJ8) (pin 7)) (node (ref JJ8) (pin 8))) (net (code 4) (name "Jbtns.i2c.scl") @@ -757,7 +770,8 @@ (node (ref JJ8) (pin 5))) (net (code 7) (name "Jbtns.ioe.ic.nrst") (node (ref JU9) (pin 4)) - (node (ref JJ6) (pin 3))) + (node (ref JJ6) (pin 3)) + (node (ref JC14) (pin 1))) (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")