PM_K-1 hardware: RP2350 core (MCU + flash + crystal + USB + boot/reset + SWD)
circuits/mcu_core.py using the authoritative KiCad MCU_RaspberryPi:RP2350A symbol. Minimal design per RP "Hardware design with RP2350" (RP-008280): - Core SMPS: VREG_VIN<-3V3, VREG_LX->3.3uH->DVDD, VREG_FB senses DVDD; VREG_AVDD via 33ohm+4.7uF RC filter; ADC_AVDD filtered; 100nF per power pin. - 12MHz crystal, MCLK-LESS (RP2350 makes I2S BCK/LRCK/DIN; PCM5102A uses its internal PLL) -- no audio oscillator, no MCLK net. Cheaper/simpler/robust; inaudible difference for a metronome (decided with the user). - W25Q128JVS QSPI flash (Fig-8 pinout); BOOTSEL = QSPI_SS via 1k + button; RUN 10k pull-up + reset button; SWD header; USB D+/D- via 27ohm series. - Full GPIO map assigned (DESIGN.md s7.1 + audio control: SPI/I2C/ADC/buttons/LED + I2S + relay-enable/mute/gnd-lift + DAC_XSMT). ERC 0 errors; netlist 0 errors. CONFIRM at layout: crystal load caps, QFN-60 footprint, and the USB-C connector + USBLC6-2 ESD + CC resistors (USB sub-block; D+/D- exit on 27R). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
51c81b45e0
commit
edb736c1d3
4 changed files with 328 additions and 0 deletions
122
hardware/eda/circuits/mcu_core.py
Normal file
122
hardware/eda/circuits/mcu_core.py
Normal file
|
|
@ -0,0 +1,122 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""PM_K-1 RP2350 core (SKiDL): MCU + QSPI flash + 12MHz crystal (MCLK-less) + USB + boot/reset + SWD.
|
||||||
|
|
||||||
|
Run INSIDE the EDA container:
|
||||||
|
cd hardware/eda && ./run.sh python3 ../eda/circuits/mcu_core.py
|
||||||
|
Outputs ERC + hardware/kicad/mcu_core.net.
|
||||||
|
|
||||||
|
VERIFIED
|
||||||
|
* RP2350A pinout: the authoritative KiCad MCU_RaspberryPi:RP2350A library symbol
|
||||||
|
(datasheet-derived). Power/clock/QSPI/USB/debug pins referenced by NUMBER, GPIO by name.
|
||||||
|
* Minimal design per RP "Hardware design with RP2350" (RP-008280): core SMPS
|
||||||
|
VREG_LX -> 3.3uH -> DVDD, VREG_FB sense to DVDD; VREG_AVDD via 33ohm+4.7uF RC filter;
|
||||||
|
100nF per power pin; W25Q128JVS QSPI flash (Fig 8 pinout); BOOTSEL = QSPI_SS via 1k +
|
||||||
|
button; RUN 10k pull-up + reset button; USB D+/D- via 27ohm series.
|
||||||
|
* CLOCK = 12MHz crystal, MCLK-LESS: RP2350 generates I2S BCK/LRCK/DIN; the PCM5102A
|
||||||
|
derives its own clock (internal PLL), so no separate audio oscillator and no MCLK net.
|
||||||
|
|
||||||
|
CONFIRM AT LAYOUT (flagged, not guessed): crystal load-cap value (~15pF, per chosen
|
||||||
|
crystal) + possible XOUT series R; QFN-60 footprint variant; and the USB-C connector +
|
||||||
|
USBLC6-2 ESD + CC resistors (a small USB sub-block; parts in BOM) -- their pinouts to be
|
||||||
|
verified then. Here USB exits via 27ohm series to USB_DP_CONN/USB_DM_CONN.
|
||||||
|
|
||||||
|
GPIO MAP (DESIGN.md s7.1 + audio control): see assignments at the bottom.
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
from skidl import *
|
||||||
|
set_default_tool(KICAD9)
|
||||||
|
P = Pin.types
|
||||||
|
R = Part("Device","R", dest=TEMPLATE, footprint="Resistor_SMD:R_0402_1005Metric")
|
||||||
|
def C(v, fp="Capacitor_SMD:C_0402_1005Metric"): return Part("Device","C", value=v, footprint=fp)
|
||||||
|
|
||||||
|
# ---- nets ----
|
||||||
|
p3v3, gnd, dvdd, vbus = Net("+3V3"), Net("GND"), Net("DVDD"), Net("VBUS_5V")
|
||||||
|
for n in (p3v3, vbus): n.drive = POWER
|
||||||
|
gnd.drive = POWER; dvdd.drive = POWER
|
||||||
|
xin, xout = Net("XIN"), Net("XOUT")
|
||||||
|
qsck,qd0,qd1,qd2,qd3,qcs = (Net("QSPI_SCLK"),Net("QSPI_SD0"),Net("QSPI_SD1"),Net("QSPI_SD2"),Net("QSPI_SD3"),Net("QSPI_SS"))
|
||||||
|
usb_dp_c, usb_dm_c = Net("USB_DP_CONN"), Net("USB_DM_CONN")
|
||||||
|
# audio + control (shared with audio chain / interconnect by name)
|
||||||
|
i2s_bck,i2s_lrck,i2s_din = Net("I2S_BCK"),Net("I2S_LRCK"),Net("I2S_DIN")
|
||||||
|
sel_linst,mute_en,gndlift_en,dac_xsmt = Net("SEL_LINST"),Net("MUTE_EN"),Net("GNDLIFT_EN"),Net("DAC_XSMT")
|
||||||
|
sig_led,clip_led,gndlift_sw,lineinst_sw = Net("SIG_LED"),Net("CLIP_LED"),Net("GNDLIFT_SW"),Net("LINEINST_SW")
|
||||||
|
spi_sck,spi_mosi,lcd_cs,lcd_dc,lcd_rst = Net("SPI_SCK"),Net("SPI_MOSI"),Net("LCD_CS"),Net("LCD_DC"),Net("LCD_RST")
|
||||||
|
i2c_sda,i2c_scl,ws2812,btn_a,btn_b,joy_x,joy_y = (Net("I2C_SDA"),Net("I2C_SCL"),Net("WS2812"),
|
||||||
|
Net("BTN_A"),Net("BTN_B"),Net("JOY_X"),Net("JOY_Y"))
|
||||||
|
|
||||||
|
# ---- RP2350A (authoritative KiCad symbol) ----
|
||||||
|
rp = Part("MCU_RaspberryPi","RP2350A", footprint="Package_DFN_QFN:QFN-60-1EP_7x7mm_P0.4mm_EP3.6x3.6mm", ref="U1")
|
||||||
|
|
||||||
|
# power: IOVDD x6, DVDD x3, plus the special supplies (by pin number)
|
||||||
|
for n in (1,11,20,30,38,45): rp[n] += p3v3 # IOVDD
|
||||||
|
for n in (6,23,39): rp[n] += dvdd # DVDD (1.1V core out)
|
||||||
|
rp[53] += p3v3; rp[54] += p3v3; rp[49] += p3v3 # USB_OTP_VDD, QSPI_IOVDD, VREG_VIN
|
||||||
|
rp[47] += gnd; rp[61] += gnd # VREG_PGND, GND/EP
|
||||||
|
# core SMPS: VREG_LX(48) -> 3.3uH -> DVDD ; VREG_FB(50) senses DVDD
|
||||||
|
lcore = Part("Device","L", value="3.3uH", footprint="Inductor_SMD:L_0806_2016Metric", ref="L1")
|
||||||
|
rp[48] += lcore[1]; lcore[2] += dvdd; rp[50] += dvdd
|
||||||
|
ccore = C("1uF","Capacitor_SMD:C_0402_1005Metric"); dvdd += ccore[1]; ccore[2] += gnd
|
||||||
|
cvin = C("4.7uF","Capacitor_SMD:C_0805_2012Metric"); rp[49] += cvin[1]; cvin[2] += gnd
|
||||||
|
# VREG_AVDD(46): 33ohm + 4.7uF RC filter from 3V3
|
||||||
|
rav = R(value="33"); cav = C("4.7uF","Capacitor_SMD:C_0805_2012Metric")
|
||||||
|
p3v3 += rav[1]; rav[2] += rp[46]; rp[46] += cav[1]; cav[2] += gnd
|
||||||
|
# ADC_AVDD(44): ferrite/0R + 100nF
|
||||||
|
rad = R(value="0"); cad = C("100nF"); p3v3 += rad[1]; rad[2] += rp[44]; rp[44] += cad[1]; cad[2] += gnd
|
||||||
|
# bulk decoupling (per-power-pin 100nF; placement is a layout concern)
|
||||||
|
for _ in range(6):
|
||||||
|
c = C("100nF"); p3v3 += c[1]; c[2] += gnd
|
||||||
|
for _ in range(2):
|
||||||
|
c = C("100nF"); dvdd += c[1]; c[2] += gnd
|
||||||
|
|
||||||
|
# ---- 12MHz crystal (MCLK-less) ----
|
||||||
|
rp[21] += xin; rp[22] += xout
|
||||||
|
xtal = Part("Device","Crystal", value="12MHz", footprint="Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm", ref="Y1")
|
||||||
|
xin += xtal[1]; xout += xtal[2]
|
||||||
|
cx1 = C("15pF"); cx2 = C("15pF"); xin += cx1[1]; cx1[2] += gnd; xout += cx2[1]; cx2[2] += gnd
|
||||||
|
|
||||||
|
# ---- QSPI flash W25Q128JVS (pinout per RP2350 hw-design Fig 8) ----
|
||||||
|
FL = Part(name="W25Q128JVS", tool=SKIDL, dest=TEMPLATE, ref_prefix="U",
|
||||||
|
footprint="Package_SO:SOIC-8_5.23x5.23mm_P1.27mm",
|
||||||
|
pins=[Pin(num=1,name="CS",func=P.INPUT),Pin(num=2,name="IO1",func=P.BIDIR),Pin(num=3,name="IO2",func=P.BIDIR),
|
||||||
|
Pin(num=4,name="GND",func=P.PWRIN),Pin(num=5,name="IO0",func=P.BIDIR),Pin(num=6,name="CLK",func=P.INPUT),
|
||||||
|
Pin(num=7,name="IO3",func=P.BIDIR),Pin(num=8,name="VCC",func=P.PWRIN)])
|
||||||
|
fl = FL(ref="U2")
|
||||||
|
fl["CLK"]+=qsck; fl["IO0"]+=qd0; fl["IO1"]+=qd1; fl["IO2"]+=qd2; fl["IO3"]+=qd3; fl["CS"]+=qcs
|
||||||
|
fl["VCC"]+=p3v3; fl["GND"]+=gnd
|
||||||
|
cfl = C("100nF"); p3v3 += cfl[1]; cfl[2] += gnd
|
||||||
|
rp[56]+=qsck; rp[57]+=qd0; rp[59]+=qd1; rp[58]+=qd2; rp[55]+=qd3; rp[60]+=qcs # QSPI_SCLK/SD0/SD1/SD2/SD3/SS
|
||||||
|
|
||||||
|
# ---- BOOTSEL: QSPI_SS -> 1k -> button -> GND ----
|
||||||
|
rboot = R(value="1k"); swboot = Part("Switch","SW_Push", footprint="Button_Switch_SMD:SW_SPST_SKQG_WithStem", ref="SW1")
|
||||||
|
qcs += rboot[1]; rboot[2] += swboot[1]; swboot[2] += gnd
|
||||||
|
|
||||||
|
# ---- RUN: 10k pull-up + reset button + 100nF ----
|
||||||
|
rrun = R(value="10k"); swrun = Part("Switch","SW_Push", footprint="Button_Switch_SMD:SW_SPST_SKQG_WithStem", ref="SW2")
|
||||||
|
p3v3 += rrun[1]; rrun[2] += rp[26]; rp[26] += swrun[1]; swrun[2] += gnd
|
||||||
|
crun = C("100nF"); rp[26] += crun[1]; crun[2] += gnd
|
||||||
|
|
||||||
|
# ---- SWD debug header (SWDIO/SWCLK/GND/3V3) ----
|
||||||
|
swd = Part("Connector_Generic","Conn_01x04", footprint="Connector_PinHeader_1.27mm:PinHeader_1x04_P1.27mm_Vertical", ref="J2")
|
||||||
|
swd[1]+=p3v3; swd[2]+=rp[25]; swd[3]+=rp[24]; swd[4]+=gnd # SWDIO=25, SWCLK=24
|
||||||
|
|
||||||
|
# ---- USB D+/D- via 27ohm series (USB-C connector + ESD = separate sub-block) ----
|
||||||
|
rdp = R(value="27"); rdm = R(value="27")
|
||||||
|
rp[52]+=rdp[1]; rdp[2]+=usb_dp_c # USB_DP
|
||||||
|
rp[51]+=rdm[1]; rdm[2]+=usb_dm_c # USB_DM
|
||||||
|
|
||||||
|
# ---- GPIO assignments (DESIGN.md s7.1 + audio control) ----
|
||||||
|
rp["GPIO2"]+=spi_sck; rp["GPIO3"]+=spi_mosi; rp["GPIO5"]+=lcd_cs; rp["GPIO6"]+=lcd_dc; rp["GPIO7"]+=lcd_rst
|
||||||
|
rp["GPIO8"]+=i2c_sda; rp["GPIO9"]+=i2c_scl
|
||||||
|
rp["GPIO10"]+=i2s_bck; rp["GPIO11"]+=i2s_lrck; rp["GPIO13"]+=i2s_din
|
||||||
|
rp["GPIO12"]+=ws2812
|
||||||
|
rp["GPIO14"]+=btn_b; rp["GPIO15"]+=btn_a
|
||||||
|
rp["GPIO16"]+=sel_linst; rp["GPIO17"]+=gndlift_en; rp["GPIO18"]+=mute_en
|
||||||
|
rp["GPIO19"]+=sig_led; rp["GPIO20"]+=clip_led
|
||||||
|
rp["GPIO21"]+=gndlift_sw; rp["GPIO22"]+=lineinst_sw
|
||||||
|
rp["GPIO26/ADC0"]+=joy_x; rp["GPIO27/ADC1"]+=joy_y
|
||||||
|
rp["GPIO0"]+=dac_xsmt
|
||||||
|
|
||||||
|
ERC()
|
||||||
|
out = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "kicad", "mcu_core.net"))
|
||||||
|
generate_netlist(file_=out)
|
||||||
|
print("MCU core netlist ->", out)
|
||||||
38
hardware/kicad/mcu_core.erc
Normal file
38
hardware/kicad/mcu_core.erc
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
ERC WARNING: Only one pin (PASSIVE pin 2/~ of R/R5) attached to net USB_DP_CONN.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 17/GPIO13 of RP2350A/U1) attached to net I2S_DIN.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 12/GPIO8 of RP2350A/U1) attached to net I2C_SDA.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 13/GPIO9 of RP2350A/U1) attached to net I2C_SCL.
|
||||||
|
ERC WARNING: Only one pin (PASSIVE pin 2/~ of R/R6) attached to net USB_DM_CONN.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 28/GPIO17 of RP2350A/U1) attached to net GNDLIFT_EN.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 34/GPIO22 of RP2350A/U1) attached to net LINEINST_SW.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 31/GPIO19 of RP2350A/U1) attached to net SIG_LED.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 32/GPIO20 of RP2350A/U1) attached to net CLIP_LED.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 10/GPIO7 of RP2350A/U1) attached to net LCD_RST.
|
||||||
|
ERC WARNING: Insufficient drive current on net N$3 for pin POWER-IN pin 44/ADC_AVDD of RP2350A/U1.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 27/GPIO16 of RP2350A/U1) attached to net SEL_LINST.
|
||||||
|
ERC WARNING: No pins attached to net VBUS_5V.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 29/GPIO18 of RP2350A/U1) attached to net MUTE_EN.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 40/GPIO26/ADC0 of RP2350A/U1) attached to net JOY_X.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 8/GPIO5 of RP2350A/U1) attached to net LCD_CS.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 33/GPIO21 of RP2350A/U1) attached to net GNDLIFT_SW.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 15/GPIO11 of RP2350A/U1) attached to net I2S_LRCK.
|
||||||
|
ERC WARNING: Insufficient drive current on net N$2 for pin POWER-IN pin 46/VREG_AVDD of RP2350A/U1.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 4/GPIO2 of RP2350A/U1) attached to net SPI_SCK.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 5/GPIO3 of RP2350A/U1) attached to net SPI_MOSI.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 14/GPIO10 of RP2350A/U1) attached to net I2S_BCK.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 9/GPIO6 of RP2350A/U1) attached to net LCD_DC.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 2/GPIO0 of RP2350A/U1) attached to net DAC_XSMT.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 16/GPIO12 of RP2350A/U1) attached to net WS2812.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 19/GPIO15 of RP2350A/U1) attached to net BTN_A.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 41/GPIO27/ADC1 of RP2350A/U1) attached to net JOY_Y.
|
||||||
|
ERC WARNING: Only one pin (BIDIRECTIONAL pin 18/GPIO14 of RP2350A/U1) attached to net BTN_B.
|
||||||
|
ERC WARNING: Unconnected pin: BIDIRECTIONAL pin 3/GPIO1 of RP2350A/U1.
|
||||||
|
ERC WARNING: Unconnected pin: BIDIRECTIONAL pin 7/GPIO4 of RP2350A/U1.
|
||||||
|
ERC WARNING: Unconnected pin: BIDIRECTIONAL pin 35/GPIO23 of RP2350A/U1.
|
||||||
|
ERC WARNING: Unconnected pin: BIDIRECTIONAL pin 36/GPIO24 of RP2350A/U1.
|
||||||
|
ERC WARNING: Unconnected pin: BIDIRECTIONAL pin 37/GPIO25 of RP2350A/U1.
|
||||||
|
ERC WARNING: Unconnected pin: BIDIRECTIONAL pin 42/GPIO28/ADC2 of RP2350A/U1.
|
||||||
|
ERC WARNING: Unconnected pin: BIDIRECTIONAL pin 43/GPIO29/ADC3 of RP2350A/U1.
|
||||||
|
ERC INFO: 35 warnings found while running ERC.
|
||||||
|
ERC INFO: 0 errors found while running ERC.
|
||||||
|
|
||||||
69
hardware/kicad/mcu_core.log
Normal file
69
hardware/kicad/mcu_core.log
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
WARNING: KICAD8_SYMBOL_DIR environment variable is missing, so the default KiCad symbol libraries won't be searched. @ [/work/hardware/kicad/<frozen importlib._bootstrap_external>:995=>/work/hardware/kicad/<frozen importlib._bootstrap>:488]
|
||||||
|
WARNING: KICAD6_SYMBOL_DIR environment variable is missing, so the default KiCad symbol libraries won't be searched. @ [/work/hardware/kicad/<frozen importlib._bootstrap_external>:995=>/work/hardware/kicad/<frozen importlib._bootstrap>:488]
|
||||||
|
WARNING: KICAD7_SYMBOL_DIR environment variable is missing, so the default KiCad symbol libraries won't be searched. @ [/work/hardware/kicad/<frozen importlib._bootstrap_external>:995=>/work/hardware/kicad/<frozen importlib._bootstrap>:488]
|
||||||
|
WARNING: fp-lib-table file was not found. Component footprints are not available.
|
||||||
|
WARNING: fp-lib-table file was not found. Component footprints are not available.
|
||||||
|
WARNING: fp-lib-table file was not found. Component footprints are not available.
|
||||||
|
WARNING: fp-lib-table file was not found. Component footprints are not available.
|
||||||
|
WARNING: Missing tag on RP2350A instantiated at /work/hardware/eda/circuits/mcu_core.py:48.
|
||||||
|
WARNING: Random tag WzkzU3SrPH generated for RP2350A.
|
||||||
|
WARNING: Missing tag on L instantiated at /work/hardware/eda/circuits/mcu_core.py:56.
|
||||||
|
WARNING: Random tag ZRF82xZcoV generated for L.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag y6cgXk8uKQ generated for C.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag myk1bo3xqO generated for C.
|
||||||
|
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/mcu_core.py:61.
|
||||||
|
WARNING: Random tag l1IYdMggul generated for R.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag 51Uwwvxchb generated for C.
|
||||||
|
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/mcu_core.py:64.
|
||||||
|
WARNING: Random tag l1G4vf47Hi generated for R.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag KWtcaRm6Xq generated for C.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag 7VoeSh3hGN generated for C.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag 2ciDIhniri generated for C.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag 4PPDFu79oz generated for C.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag f4Eje6UFPr generated for C.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag 4C9PIztwCh generated for C.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag VKOFV8i4bx generated for C.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag gt1NfAUSEV generated for C.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag 2U3fv0W96u generated for C.
|
||||||
|
WARNING: Missing tag on Crystal instantiated at /work/hardware/eda/circuits/mcu_core.py:73.
|
||||||
|
WARNING: Random tag wKboyEtRnz generated for Crystal.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag NktCUxamGs generated for C.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag MMUmST9xVa generated for C.
|
||||||
|
WARNING: Missing tag on W25Q128JVS instantiated at /work/hardware/eda/circuits/mcu_core.py:83.
|
||||||
|
WARNING: Random tag 66K8gfMnsY generated for W25Q128JVS.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag A7dCYMYInU generated for C.
|
||||||
|
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/mcu_core.py:90.
|
||||||
|
WARNING: Random tag skKkUguwnY generated for R.
|
||||||
|
WARNING: Missing tag on SW_Push instantiated at /work/hardware/eda/circuits/mcu_core.py:90.
|
||||||
|
WARNING: Random tag DHq3deG8GM generated for SW_Push.
|
||||||
|
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/mcu_core.py:94.
|
||||||
|
WARNING: Random tag NBGCx2LQUp generated for R.
|
||||||
|
WARNING: Missing tag on SW_Push instantiated at /work/hardware/eda/circuits/mcu_core.py:94.
|
||||||
|
WARNING: Random tag hGusGg3C_u generated for SW_Push.
|
||||||
|
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/mcu_core.py:30.
|
||||||
|
WARNING: Random tag JDduO1ET0q generated for C.
|
||||||
|
WARNING: Missing tag on Conn_01x04 instantiated at /work/hardware/eda/circuits/mcu_core.py:99.
|
||||||
|
WARNING: Random tag PHheIKNZd7 generated for Conn_01x04.
|
||||||
|
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/mcu_core.py:103.
|
||||||
|
WARNING: Random tag Ce0pu2O9PZ generated for R.
|
||||||
|
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/mcu_core.py:103.
|
||||||
|
WARNING: Random tag ofeoP7ISIn generated for R.
|
||||||
|
WARNING: Missing tag on instantiated at /work/hardware/kicad/<frozen importlib._bootstrap>:488.
|
||||||
|
INFO: 63 warnings found while generating netlist.
|
||||||
|
INFO: 0 errors found while generating netlist.
|
||||||
|
|
||||||
99
hardware/kicad/mcu_core_sklib.py
Normal file
99
hardware/kicad/mcu_core_sklib.py
Normal file
|
|
@ -0,0 +1,99 @@
|
||||||
|
from collections import defaultdict
|
||||||
|
from skidl import Pin, Part, Alias, SchLib, SKIDL, TEMPLATE
|
||||||
|
|
||||||
|
from skidl.pin import pin_types
|
||||||
|
|
||||||
|
SKIDL_lib_version = '0.0.1'
|
||||||
|
|
||||||
|
mcu_core = SchLib(tool=SKIDL).add_parts(*[
|
||||||
|
Part(**{ 'name':'RP2350A', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'RP2350A'}), 'ref_prefix':'U', 'fplist':['Package_DFN_QFN:QFN-60-1EP_7x7mm_P0.4mm_EP3.4x3.4mm'], 'footprint':'Package_DFN_QFN:QFN-60-1EP_7x7mm_P0.4mm_EP3.6x3.6mm', 'keywords':'RPi Pico USB QSPI I2C UART ADC SC1509', 'description':'A microcontroller by Raspberry Pi, dual CPU architecture (ARM Cortex-M33 / RISC-V Hazard3), 150MHz, no flash, 520KB SRAM, 12 PIO state machines, VQFN-60', 'datasheet':'https://datasheets.raspberrypi.com/rp2350/rp2350-datasheet.pdf', 'pins':[
|
||||||
|
Pin(num='46',name='VREG_AVDD',func=pin_types.PWRIN,unit=1),
|
||||||
|
Pin(num='53',name='USB_OTP_VDD',func=pin_types.PWRIN,unit=1),
|
||||||
|
Pin(num='54',name='QSPI_IOVDD',func=pin_types.PWRIN,unit=1),
|
||||||
|
Pin(num='47',name='VREG_PGND',func=pin_types.PWRIN,unit=1),
|
||||||
|
Pin(num='39',name='DVDD',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='6',name='DVDD',func=pin_types.PWRIN,unit=1),
|
||||||
|
Pin(num='26',name='RUN',func=pin_types.INPUT,unit=1),
|
||||||
|
Pin(num='51',name='USB_DM',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='52',name='USB_DP',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='60',name='~{QSPI_SS}',func=pin_types.OUTPUT,unit=1),
|
||||||
|
Pin(num='56',name='QSPI_SCLK',func=pin_types.OUTPUT,unit=1),
|
||||||
|
Pin(num='57',name='QSPI_SD0',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='59',name='QSPI_SD1',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='58',name='QSPI_SD2',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='55',name='QSPI_SD3',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='21',name='XIN',func=pin_types.INPUT,unit=1),
|
||||||
|
Pin(num='22',name='XOUT',func=pin_types.OUTPUT,unit=1),
|
||||||
|
Pin(num='24',name='SWCLK',func=pin_types.INPUT,unit=1),
|
||||||
|
Pin(num='25',name='SWDIO',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='44',name='ADC_AVDD',func=pin_types.PWRIN,unit=1),
|
||||||
|
Pin(num='1',name='IOVDD',func=pin_types.PWRIN,unit=1),
|
||||||
|
Pin(num='11',name='IOVDD',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='20',name='IOVDD',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='30',name='IOVDD',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='38',name='IOVDD',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='45',name='IOVDD',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='61',name='GND',func=pin_types.PWRIN,unit=1),
|
||||||
|
Pin(num='49',name='VREG_VIN',func=pin_types.PWRIN,unit=1),
|
||||||
|
Pin(num='48',name='VREG_LX',func=pin_types.PWROUT,unit=1),
|
||||||
|
Pin(num='50',name='VREG_FB',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='23',name='DVDD',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='2',name='GPIO0',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='3',name='GPIO1',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='4',name='GPIO2',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='5',name='GPIO3',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='7',name='GPIO4',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='8',name='GPIO5',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='9',name='GPIO6',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='10',name='GPIO7',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='12',name='GPIO8',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='13',name='GPIO9',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='14',name='GPIO10',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='15',name='GPIO11',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='16',name='GPIO12',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='17',name='GPIO13',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='18',name='GPIO14',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='19',name='GPIO15',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='27',name='GPIO16',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='28',name='GPIO17',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='29',name='GPIO18',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='31',name='GPIO19',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='32',name='GPIO20',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='33',name='GPIO21',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='34',name='GPIO22',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='35',name='GPIO23',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='36',name='GPIO24',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='37',name='GPIO25',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='40',name='GPIO26/ADC0',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='41',name='GPIO27/ADC1',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='42',name='GPIO28/ADC2',func=pin_types.BIDIR,unit=1),
|
||||||
|
Pin(num='43',name='GPIO29/ADC3',func=pin_types.BIDIR,unit=1)], 'unit_defs':[] }),
|
||||||
|
Part(**{ 'name':'L', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'L'}), 'ref_prefix':'L', 'fplist':[''], 'footprint':'Inductor_SMD:L_0806_2016Metric', 'keywords':'inductor choke coil reactor magnetic', 'description':'Inductor', 'datasheet':'~', 'pins':[
|
||||||
|
Pin(num='1',name='1',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='2',name='2',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] }),
|
||||||
|
Part(**{ 'name':'C', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'C'}), 'ref_prefix':'C', 'fplist':[''], 'footprint':'Capacitor_SMD:C_0402_1005Metric', 'keywords':'cap capacitor', 'description':'Unpolarized capacitor', 'datasheet':'~', 'pins':[
|
||||||
|
Pin(num='1',name='~',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='2',name='~',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] }),
|
||||||
|
Part(**{ 'name':'R', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'R'}), 'ref_prefix':'R', 'fplist':[''], 'footprint':'Resistor_SMD:R_0402_1005Metric', 'keywords':'R res resistor', 'description':'Resistor', 'datasheet':'~', 'pins':[
|
||||||
|
Pin(num='1',name='~',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='2',name='~',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] }),
|
||||||
|
Part(**{ 'name':'Crystal', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'Crystal'}), 'ref_prefix':'Y', 'fplist':[''], 'footprint':'Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm', 'keywords':'quartz ceramic resonator oscillator', 'description':'Two pin crystal', 'datasheet':'~', 'pins':[
|
||||||
|
Pin(num='1',name='1',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='2',name='2',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] }),
|
||||||
|
Part(**{ 'name':'W25Q128JVS', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'W25Q128JVS'}), 'ref_prefix':'U', 'fplist':None, 'footprint':'Package_SO:SOIC-8_5.23x5.23mm_P1.27mm', 'keywords':None, 'description':'', 'datasheet':None, 'pins':[
|
||||||
|
Pin(num='1',name='CS',func=pin_types.INPUT),
|
||||||
|
Pin(num='2',name='IO1',func=pin_types.BIDIR),
|
||||||
|
Pin(num='3',name='IO2',func=pin_types.BIDIR),
|
||||||
|
Pin(num='4',name='GND',func=pin_types.PWRIN),
|
||||||
|
Pin(num='5',name='IO0',func=pin_types.BIDIR),
|
||||||
|
Pin(num='6',name='CLK',func=pin_types.INPUT),
|
||||||
|
Pin(num='7',name='IO3',func=pin_types.BIDIR),
|
||||||
|
Pin(num='8',name='VCC',func=pin_types.PWRIN)] }),
|
||||||
|
Part(**{ 'name':'SW_Push', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'SW_Push'}), 'ref_prefix':'SW', 'fplist':[''], 'footprint':'Button_Switch_SMD:SW_SPST_SKQG_WithStem', 'keywords':'switch normally-open pushbutton push-button', 'description':'Push button switch, generic, two pins', 'datasheet':'~', 'pins':[
|
||||||
|
Pin(num='1',name='1',func=pin_types.PASSIVE),
|
||||||
|
Pin(num='2',name='2',func=pin_types.PASSIVE)], 'unit_defs':[] }),
|
||||||
|
Part(**{ 'name':'Conn_01x04', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'Conn_01x04'}), 'ref_prefix':'J', 'fplist':[''], 'footprint':'Connector_PinHeader_1.27mm:PinHeader_1x04_P1.27mm_Vertical', 'keywords':'connector', 'description':'Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)', 'datasheet':'~', 'pins':[
|
||||||
|
Pin(num='1',name='Pin_1',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='2',name='Pin_2',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='3',name='Pin_3',func=pin_types.PASSIVE,unit=1),
|
||||||
|
Pin(num='4',name='Pin_4',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] })])
|
||||||
Loading…
Reference in a new issue