abse/gameboy-advance
This code defines a collection of hardware components, including microcontrollers, sensors, display modules, power management ICs, and passive/passive components, each modeled as 3D symbols with specific footprints, pin configurations, and associated models for PCB and schematic design.
- Version
- 0.0.10
- License
- unset
- Stars
- 0
index.crystal-top.circuit.tsx
PCB
Schematic
import { PowerBoost_MT3608 } from "./subcircuits/PowerBoost_MT3608/PowerBoost_MT3608.circuit"
import { AudioAmplifier3W_PAM8403 } from "./subcircuits/AudioAmplifier3W_PAM8403/AudioAmplifier3W_PAM8403.circuit"
import { A_50P________FPC___ } from "./imports/A_50P________FPC___"
import { LXW_TS_6X6X5_SMD } from "./imports/LXW_TS_6X6X5_SMD"
import { AO3400A } from "./imports/AO3400A"
import { SK_12E12_G5 } from "./imports/SK_12E12_G5"
import { Microcontroller_RP2350_CrystalTop } from "./Microcontroller_RP2350_CrystalTop.circuit"
import { AP2112K_3_3TRG1 } from "./imports/AP2112K_3_3TRG1"
import { SS34 } from "./imports/SS34"
import { APS6404L_3SQR_ZR } from "./imports/APS6404L_3SQR_ZR"
import { DM3AT_SF_PEJM5 } from "./imports/DM3AT_SF_PEJM5"
import { CL05B104KO5NNNC } from "./imports/CL05B104KO5NNNC"
import { A_0402WGF1002TCE } from "./imports/A_0402WGF1002TCE"
const denseTraceProps = { thickness: "0.1mm" } as const
const batteryTraceProps = { thickness: "0.3mm" } as const
const powerTraceProps = { thickness: "0.4mm" } as const
const gndLabel = { displayName: "GND", schDisplayLabel: "GND" } as const
const v3v3Label = { displayName: "V3V3", schDisplayLabel: "V3V3" } as const
const vsysLabel = { displayName: "VSYS", schDisplayLabel: "VSYS" } as const
const vbusLabel = { displayName: "VBUS", schDisplayLabel: "VBUS" } as const
const schSections = { power: "power", controls: "controls", display: "display", storage: "storage" } as const
/** Exact board copy for the isolated crystal-side placement experiment. */
export default ({
mcuSubcircuit = false,
layers = 4,
copperIslands = true,
}: { mcuSubcircuit?: boolean; layers?: 2 | 4; copperIslands?: boolean } = {}) => (
<board
title="Game Boy Advance RP2350 crystal-side placement experiment"
autorouter="beta-pipeline9"
width="144.5mm"
height="82mm"
layers={layers}
minViaHoleDiameter="0.3mm"
minViaPadDiameter="0.45mm"
outline={[
{ x: -66, y: -41 }, { x: 66, y: -41 }, { x: 69.5, y: -39.5 },
{ x: 71.5, y: -36.5 }, { x: 72.25, y: -32 }, { x: 72.25, y: 18 },
{ x: 70.5, y: 26 }, { x: 67, y: 33 }, { x: 61, y: 38 },
{ x: 53, y: 41 }, { x: -53, y: 41 }, { x: -61, y: 38 },
{ x: -67, y: 33 }, { x: -70.5, y: 26 }, { x: -72.25, y: 18 },
{ x: -72.25, y: -32 }, { x: -71.5, y: -36.5 }, { x: -69.5, y: -39.5 },
]}
>
<schematicrect schX={0} schY={-10} width={84} height={28} strokeWidth={0.08} color="#777777" />
<schematictext text="RP2350 + USB-C" schX={-40.6} schY={-22.4} fontSize={1.4} anchor="top_left" color="#333333" />
<schematicrect schX={-27} schY={16} width={30} height={24} strokeWidth={0.08} color="#777777" />
<schematictext text="Power" schX={-40.6} schY={5.6} fontSize={1.4} anchor="top_left" color="#333333" />
<schematicrect schX={-2} schY={16} width={20} height={24} strokeWidth={0.08} color="#777777" />
<schematictext text="Display" schX={-10.6} schY={5.6} fontSize={1.4} anchor="top_left" color="#333333" />
<schematicrect schX={25} schY={16} width={34} height={24} strokeWidth={0.08} color="#777777" />
<schematictext text="Audio" schX={9.4} schY={5.6} fontSize={1.4} anchor="top_left" color="#333333" />
<schematicrect schX={-27} schY={40} width={30} height={24} strokeWidth={0.08} color="#777777" />
<schematictext text="Controls" schX={-40.6} schY={29.6} fontSize={1.4} anchor="top_left" color="#333333" />
<net name="GND" isGroundNet />
<net name="V3V3" isPowerNet />
<net name="VSYS" isPowerNet />
<net name="VBUS" isPowerNet />
<net name="BAT_POS" isPowerNet />
<net name="BAT_SWITCHED" isPowerNet />
<net name="AUDIO_PWM" />
<hole name="MH_TOP_LEFT" diameter="3.3mm" pcbX={-50} pcbY={-32} />
<hole name="MH_TOP_RIGHT" diameter="3.3mm" pcbX={50} pcbY={-32} />
<hole name="MH_BOTTOM_LEFT" diameter="3.3mm" pcbX={-60} pcbY={31} />
<hole name="MH_BOTTOM_RIGHT" diameter="3.3mm" pcbX={60} pcbY={31} />
<Microcontroller_RP2350_CrystalTop name="MCU" subcircuit={mcuSubcircuit} pcbRotation={180} pcbX={0} pcbY={15.4} />
<PowerBoost_MT3608 name="POWER" pcbX={-32} pcbY={-53} schX={-29} schY={15} inductorPcbY={17.5} />
<trace name="POWER_BAT_POS_INTERFACE" from="net.BAT_POS" to=".POWER > net.POWER_BAT_POS" {...batteryTraceProps} />
<trace name="POWER_BAT_SWITCHED_INTERFACE" from="net.BAT_SWITCHED" to=".POWER > net.POWER_BAT_SWITCHED" {...batteryTraceProps} />
<trace name="POWER_VBUS_INTERFACE" from="net.VBUS" to=".POWER > net.POWER_VBUS" {...powerTraceProps} />
<trace name="POWER_VSYS_INTERFACE" from="net.VSYS" to=".POWER > net.POWER_VSYS" {...powerTraceProps} />
<trace name="POWER_GND_INTERFACE" from="net.GND" to=".POWER > net.POWER_GND" {...gndLabel} />
<trace name="USB_VBUS_TO_POWER" from=".MCU .J_USB > .A4B9" to="net.VBUS" {...powerTraceProps} {...vbusLabel} />
<trace name="MCU_GND" from=".MCU .U1 > .GND" to="net.GND" {...gndLabel} />
<trace name="MCU_V3V3" from=".MCU .U1 > .VREG_VIN" to="net.V3V3" {...powerTraceProps} {...v3v3Label} />
{/*
Storage uses two independent devices on spare RP2350 GPIOs. The clock is
shared: only the selected device may observe traffic, because each has a
dedicated active-low chip-select. APS6404L supplies 8 MiB of SDR/QSPI
PSRAM for a game cache; game images remain stored on the microSD card.
*/}
<APS6404L_3SQR_ZR
name="U_PSRAM"
noConnect={["EP"]}
schSectionName={schSections.storage}
pcbX={-15}
pcbY={15}
schX={-22}
schY={-6}
/>
<CL05B104KO5NNNC name="C_PSRAM" maxDecouplingTraceLength="5.5mm" schSectionName={schSections.storage} pcbX={-17.7} pcbY={15} schX={-27} schY={-6} />
<A_0402WGF1002TCE name="R_PSRAM_CE" schSectionName={schSections.storage} pcbX={-18.5} pcbY={11} schX={-20} schY={-8} />
<trace name="PSRAM_CE" from=".U_PSRAM > .CE" to=".MCU .U1 > .GPIO26_ADC0" {...denseTraceProps} />
<trace name="PSRAM_SIO0" from=".U_PSRAM > .SIO0" to=".MCU .U1 > .GPIO13" {...denseTraceProps} />
<trace name="PSRAM_SIO1" from=".U_PSRAM > .SIO1" to=".MCU .U1 > .GPIO14" {...denseTraceProps} />
<trace name="PSRAM_SIO2" from=".U_PSRAM > .SIO2" to=".MCU .U1 > .GPIO15" {...denseTraceProps} />
<trace name="PSRAM_SIO3" from=".U_PSRAM > .SIO3" to=".MCU .U1 > .GPIO25" {...denseTraceProps} />
<trace name="PSRAM_SCLK" from=".U_PSRAM > .SCLK" to=".MCU .U1 > .GPIO12" {...denseTraceProps} />
<trace name="PSRAM_VDD" from=".U_PSRAM > .VDD" to="net.V3V3" {...v3v3Label} />
<trace name="PSRAM_GND" from=".U_PSRAM > .VSS" to="net.GND" {...gndLabel} />
<trace name="PSRAM_DECOUPLING" from=".C_PSRAM > .pin1" to=".U_PSRAM > .VDD" maxLength="5.5mm" />
<trace name="PSRAM_DECOUPLING_GND" from=".C_PSRAM > .pin2" to="net.GND" {...gndLabel} />
<trace name="PSRAM_CE_PULLUP" from=".R_PSRAM_CE > .pin1" to=".U_PSRAM > .CE" />
<trace name="PSRAM_CE_PULLUP_V3V3" from=".R_PSRAM_CE > .pin2" to="net.V3V3" {...v3v3Label} />
{/* Hirose DM3AT is a top-mounted, push-push microSD socket. Its card
opening faces the upper board edge so the card can be inserted from
outside the handheld. SPI-mode DAT1/DAT2 and card-detect are unused. */}
<DM3AT_SF_PEJM5
name="J_SD"
noConnect={["DAT1", "DAT2", "SW_A", "SW_B"]}
schSectionName={schSections.storage}
pcbX={30}
pcbY={-31}
schX={-9}
schY={-6}
/>
<CL05B104KO5NNNC name="C_SD" maxDecouplingTraceLength="5.5mm" schSectionName={schSections.storage} pcbX={29.5} pcbY={-21} schX={-13} schY={-8} />
<A_0402WGF1002TCE name="R_SD_CMD" schSectionName={schSections.storage} pcbX={23} pcbY={-19} schX={-7} schY={-9} />
<A_0402WGF1002TCE name="R_SD_CS" schSectionName={schSections.storage} pcbX={26} pcbY={-19} schX={-5} schY={-9} />
<trace name="SD_CLK" from=".J_SD > .CLK" to=".MCU .U1 > .GPIO12" {...denseTraceProps} />
<trace name="SD_CMD" from=".J_SD > .CMD" to=".MCU .U1 > .GPIO27_ADC1" {...denseTraceProps} />
<trace name="SD_MISO" from=".J_SD > .DAT0" to=".MCU .U1 > .GPIO28_ADC2" {...denseTraceProps} />
<trace name="SD_CS" from=".J_SD > .CD_DAT3" to=".MCU .U1 > .GPIO29_ADC3" {...denseTraceProps} />
<trace name="SD_VDD" from=".J_SD > .VDD" to="net.V3V3" {...v3v3Label} />
<trace name="SD_GND" from=".J_SD > .VSS" to="net.GND" {...gndLabel} />
<trace name="SD_SHIELD1" from=".J_SD > .SHIELD1" to="net.GND" {...gndLabel} />
<trace name="SD_SHIELD2" from=".J_SD > .SHIELD2" to="net.GND" {...gndLabel} />
<trace name="SD_SHIELD3" from=".J_SD > .SHIELD3" to="net.GND" {...gndLabel} />
<trace name="SD_SHIELD4" from=".J_SD > .SHIELD4" to="net.GND" {...gndLabel} />
<trace name="SD_DECOUPLING" from=".C_SD > .pin1" to=".J_SD > .VDD" maxLength="5.5mm" />
<trace name="SD_DECOUPLING_GND" from=".C_SD > .pin2" to="net.GND" {...gndLabel} />
<trace name="SD_CMD_PULLUP" from=".R_SD_CMD > .pin1" to=".J_SD > .CMD" />
<trace name="SD_CMD_PULLUP_V3V3" from=".R_SD_CMD > .pin2" to="net.V3V3" {...v3v3Label} />
<trace name="SD_CS_PULLUP" from=".R_SD_CS > .pin1" to=".J_SD > .CD_DAT3" />
<trace name="SD_CS_PULLUP_V3V3" from=".R_SD_CS > .pin2" to="net.V3V3" {...v3v3Label} />
<SS34 name="D_USB_POWER" pcbX={-16} pcbY={32} schX={-29} schY={24} />
<trace name="USB_POWER_IN" from="net.VBUS" to=".D_USB_POWER > .anode" {...powerTraceProps} />
<trace name="USB_POWER_OUT" from=".D_USB_POWER > .cathode" to="net.VSYS" {...powerTraceProps} />
<AP2112K_3_3TRG1 name="U_3V3" pcbX={-19} pcbY={19} pcbRotation={180} schX={-21} schY={23} noConnect={["NC"]} />
<capacitor name="C_3V3_IN" capacitance="1uF" maxDecouplingTraceLength="5.5mm" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C15849"] }} pcbX={-23.2} pcbY={20} pcbRotation={180} schX={-25} schY={24.5} />
<capacitor name="C_3V3_OUT" capacitance="1uF" maxDecouplingTraceLength="5.5mm" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C15849"] }} pcbX={-17.9} pcbY={22.5} pcbRotation={90} schX={-17} schY={24.5} />
<trace name="REG_3V3_IN" from="net.VSYS" to=".U_3V3 > .VIN" {...powerTraceProps} />
<trace name="REG_3V3_ENABLE" from=".U_3V3 > .EN" to="net.VSYS" />
<trace name="REG_3V3_GND" from=".U_3V3 > .GND" to="net.GND" />
<trace name="REG_3V3_OUT" from=".U_3V3 > .VOUT" to="net.V3V3" {...powerTraceProps} />
<trace name="REG_3V3_INPUT_CAP" from=".C_3V3_IN > .pin1" to=".U_3V3 > .VIN" maxLength="5.5mm" />
<trace name="REG_3V3_INPUT_CAP_GND" from=".C_3V3_IN > .pin2" to="net.GND" />
<trace name="REG_3V3_OUTPUT_CAP" from=".C_3V3_OUT > .pin1" to=".U_3V3 > .VOUT" maxLength="5.5mm" />
<trace name="REG_3V3_OUTPUT_CAP_GND" from=".C_3V3_OUT > .pin2" to="net.GND" />
<AudioAmplifier3W_PAM8403 name="AUDIO" pcbX={-53} pcbY={-8} pcbRotation={0} schX={25} schY={12} />
<trace name="AUDIO_PWM_INTERFACE" from="net.AUDIO_PWM" to=".AUDIO > net.AUDIO_PWM_INTERNAL" {...denseTraceProps} />
<trace name="AUDIO_V3V3_INTERFACE" from="net.V3V3" to=".AUDIO > net.V3V3_INTERNAL" {...powerTraceProps} />
<trace name="AUDIO_VSYS_INTERFACE" from="net.VSYS" to=".AUDIO > net.VSYS_INTERNAL" {...powerTraceProps} />
<trace name="AUDIO_GND_INTERFACE" from="net.GND" to=".AUDIO > net.GND_INTERNAL" {...gndLabel} />
<trace name="AUDIO_SIGNAL" from=".MCU .U1 > .GPIO22" to="net.AUDIO_PWM" />
{/*
BuyDisplay ER-TFT035IPS-6: 50-pin, 0.5 mm, bottom-contact FPC.
IM0/IM1/IM2 are tied high to select ILI9488 4-wire SPI.
C9900007861 is the matching JLCPCB-assembled ZIF connector.
*/}
<A_50P________FPC___
name="J_LCD"
schSectionName={schSections.display}
pcbX={35}
pcbY={15.4}
pcbRotation={90}
schX={-2}
schY={16}
noConnect={[
"pin4", "pin5", "pin6", "pin11", "pin12", "pin13", "pin14",
"pin15", "pin16", "pin17", "pin18", "pin19", "pin20", "pin21",
"pin22", "pin23", "pin24", "pin25", "pin26", "pin27", "pin28",
"pin29", "pin30", "pin31", "pin32", "pin35", "pin39", "pin51", "pin52",
]}
/>
<capacitor name="C_LCD_VDDI" capacitance="1uF" maxDecouplingTraceLength="5.5mm" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C15849"] }} schSectionName={schSections.display} pcbX={29.8} pcbY={9} schX={-6} schY={14} />
<capacitor name="C_LCD_VCI" capacitance="1uF" maxDecouplingTraceLength="5.5mm" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C15849"] }} schSectionName={schSections.display} pcbX={29.8} pcbY={7} schX={2} schY={14} />
<resistor name="R_TOUCH_SCL" resistance="4.7k" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C5713440"] }} schSectionName={schSections.display} pcbX={29} pcbY={4} schX={-7} schY={17} />
<resistor name="R_TOUCH_SDA" resistance="4.7k" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C5713440"] }} schSectionName={schSections.display} pcbX={29} pcbY={2} schX={-5} schY={17} />
<resistor name="R_TOUCH_IRQ" resistance="4.7k" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C5713440"] }} schSectionName={schSections.display} pcbX={29} pcbY={5.5} schX={3} schY={17} />
{/* 22 Ω limits the 5 V panel backlight to about 80 mA; C6114273 is a
currently stocked 1206, 0.5 W JLCPCB resistor. */}
<resistor name="R_LCD_LED" resistance="22" footprint="1206" supplierPartNumbers={{ jlcpcb: ["C6114273"] }} schSectionName={schSections.display} pcbX={29} pcbY={27.5} schX={-8} schY={13} />
<AO3400A name="Q_LCD_BL" schSectionName={schSections.display} pcbX={42} pcbY={27.5} schX={5} schY={13} />
<resistor name="R_LCD_BL_PULLDOWN" resistance="10k" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C25744"] }} schSectionName={schSections.display} pcbX={42} pcbY={22} schX={7} schY={13} />
<cutout name="BAT_CABLE_SLOT" shape="rect" width="8mm" height="5mm" pcbX="15mm" pcbY="-35mm" />
<SK_12E12_G5 name="J_PWR_SW" schSectionName={schSections.power} pcbX={60} pcbY={-30} pcbRotation={0} schX={-33} schY={8} schHeight={0.6} noConnect={["pin3"]} />
<trace name="BATTERY_TO_SWITCH" from="net.BAT_POS" to=".J_PWR_SW > .pin1" {...batteryTraceProps} />
<trace name="SWITCH_TO_BOOST" from=".J_PWR_SW > .pin2" to="net.BAT_SWITCHED" {...batteryTraceProps} />
<LXW_TS_6X6X5_SMD name="SW_UP" schSectionName={schSections.controls} pcbX={-64} pcbY={-7} schX={-36} schY={31} />
<LXW_TS_6X6X5_SMD name="SW_DOWN" schSectionName={schSections.controls} pcbX={-64} pcbY={7} schX={-36} schY={34} />
<LXW_TS_6X6X5_SMD name="SW_LEFT" schSectionName={schSections.controls} pcbX={-52} pcbY={7} schX={-36} schY={37} />
<LXW_TS_6X6X5_SMD name="SW_RIGHT" schSectionName={schSections.controls} pcbX={-52} pcbY={-8} schX={-36} schY={40} />
<LXW_TS_6X6X5_SMD name="SW_A" schSectionName={schSections.controls} pcbX={64} pcbY={-7} schX={-27} schY={31} />
<LXW_TS_6X6X5_SMD name="SW_B" schSectionName={schSections.controls} pcbX={64} pcbY={7} schX={-27} schY={34} />
<LXW_TS_6X6X5_SMD name="SW_X" schSectionName={schSections.controls} pcbX={52} pcbY={-7} schX={-27} schY={37} />
<LXW_TS_6X6X5_SMD name="SW_Y" schSectionName={schSections.controls} pcbX={52} pcbY={7} schX={-27} schY={40} />
<LXW_TS_6X6X5_SMD name="SW_SELECT" schSectionName={schSections.controls} pcbX={-50} pcbY={27} schX={-31.5} schY={43} />
<LXW_TS_6X6X5_SMD name="SW_START" schSectionName={schSections.controls} pcbX={50} pcbY={27} schX={-27} schY={43} />
<trace name="UP" from=".SW_UP > .pin1" to=".MCU .U1 > .GPIO2" />
<trace name="UP_G" from=".SW_UP > .pin4" to="net.GND" {...gndLabel} />
<trace name="DN" from=".SW_DOWN > .pin1" to=".MCU .U1 > .GPIO3" />
<trace name="DN_G" from=".SW_DOWN > .pin4" to="net.GND" {...gndLabel} />
<trace name="LFT" from=".SW_LEFT > .pin1" to=".MCU .U1 > .GPIO4" />
<trace name="LFT_G" from=".SW_LEFT > .pin4" to="net.GND" {...gndLabel} />
<trace name="RGT" from=".SW_RIGHT > .pin1" to=".MCU .U1 > .GPIO5" />
<trace name="RGT_G" from=".SW_RIGHT > .pin4" to="net.GND" {...gndLabel} />
<trace name="A" from=".SW_A > .pin1" to=".MCU .U1 > .GPIO6" />
<trace name="A_G" from=".SW_A > .pin4" to="net.GND" {...gndLabel} />
<trace name="B" from=".SW_B > .pin1" to=".MCU .U1 > .GPIO7" />
<trace name="B_G" from=".SW_B > .pin4" to="net.GND" {...gndLabel} />
<trace name="X" from=".SW_X > .pin1" to=".MCU .U1 > .GPIO8" />
<trace name="X_G" from=".SW_X > .pin4" to="net.GND" {...gndLabel} />
<trace name="Y" from=".SW_Y > .pin1" to=".MCU .U1 > .GPIO9" />
<trace name="Y_G" from=".SW_Y > .pin4" to="net.GND" {...gndLabel} />
<trace name="SEL" from=".SW_SELECT > .pin1" to=".MCU .U1 > .GPIO22" />
<trace name="SEL_G" from=".SW_SELECT > .pin4" to="net.GND" {...gndLabel} />
<trace name="STA" from=".SW_START > .pin1" to=".MCU .U1 > .GPIO11" />
<trace name="STA_G" from=".SW_START > .pin4" to="net.GND" {...gndLabel} />
<trace name="LCD_MODE_IM0" from=".J_LCD > .pin7" to="net.V3V3" {...v3v3Label} />
<trace name="LCD_MODE_IM1" from=".J_LCD > .pin8" to="net.V3V3" {...v3v3Label} />
<trace name="LCD_MODE_IM2" from=".J_LCD > .pin9" to="net.V3V3" {...v3v3Label} />
<trace name="LCD_RESET" from=".J_LCD > .pin10" to=".MCU .U1 > .GPIO21" />
<trace name="LCD_CS" from=".J_LCD > .pin38" to=".MCU .U1 > .GPIO10" />
<trace name="LCD_DC" from=".J_LCD > .pin37" to=".MCU .U1 > .GPIO20" />
<trace name="LCD_MOSI" from=".J_LCD > .pin34" to=".MCU .U1 > .GPIO19" />
<trace name="LCD_SCK" from=".J_LCD > .pin36" to=".MCU .U1 > .GPIO18" />
<trace name="LCD_MISO" from=".J_LCD > .pin33" to=".MCU .U1 > .GPIO16" />
<trace name="LCD_VDDI_40" from=".J_LCD > .pin40" to="net.V3V3" {...v3v3Label} />
<trace name="LCD_VDDI_41" from=".J_LCD > .pin41" to="net.V3V3" {...v3v3Label} />
<trace name="LCD_VCI" from=".J_LCD > .pin42" to="net.V3V3" {...v3v3Label} />
<trace name="LCD_GND_43" from=".J_LCD > .pin43" to="net.GND" {...gndLabel} />
<trace name="LCD_GND_48" from=".J_LCD > .pin48" to="net.GND" {...gndLabel} />
<trace name="LCD_GND_49" from=".J_LCD > .pin49" to="net.GND" {...gndLabel} />
<trace name="LCD_GND_50" from=".J_LCD > .pin50" to="net.GND" {...gndLabel} />
<trace name="LCD_VDDI_CAP" from=".C_LCD_VDDI > .pin1" to=".J_LCD > .pin40" maxLength="5.5mm" />
<trace name="LCD_VDDI_CAP_GND" from=".C_LCD_VDDI > .pin2" to="net.GND" {...gndLabel} />
<trace name="LCD_VCI_CAP" from=".C_LCD_VCI > .pin1" to=".J_LCD > .pin42" maxLength="5.5mm" />
<trace name="LCD_VCI_CAP_GND" from=".C_LCD_VCI > .pin2" to="net.GND" {...gndLabel} />
<trace name="TOUCH_SCL" from=".J_LCD > .pin44" to=".MCU .U1 > .GPIO1" />
<trace name="TOUCH_SCL_PULLUP" from=".R_TOUCH_SCL > .pin1" to=".J_LCD > .pin44" />
<trace name="TOUCH_SCL_PULLUP_V3V3" from=".R_TOUCH_SCL > .pin2" to="net.V3V3" {...v3v3Label} />
<trace name="TOUCH_SDA" from=".J_LCD > .pin45" to=".MCU .U1 > .GPIO0" />
<trace name="TOUCH_SDA_PULLUP" from=".R_TOUCH_SDA > .pin1" to=".J_LCD > .pin45" />
<trace name="TOUCH_SDA_PULLUP_V3V3" from=".R_TOUCH_SDA > .pin2" to="net.V3V3" {...v3v3Label} />
<trace name="TOUCH_IRQ" from=".J_LCD > .pin46" to=".MCU .U1 > .GPIO23" />
<trace name="TOUCH_IRQ_PULLUP" from=".R_TOUCH_IRQ > .pin1" to=".J_LCD > .pin46" />
<trace name="TOUCH_IRQ_PULLUP_V3V3" from=".R_TOUCH_IRQ > .pin2" to="net.V3V3" {...v3v3Label} />
<trace name="TOUCH_RESET" from=".J_LCD > .pin47" to=".MCU .U1 > .GPIO21" />
<trace name="LCD_BACKLIGHT_ANODE" from="net.VSYS" to=".R_LCD_LED > .pin1" {...powerTraceProps} {...vsysLabel} />
<trace name="LCD_BACKLIGHT_LIMIT" from=".R_LCD_LED > .pin2" to=".J_LCD > .pin1" {...powerTraceProps} />
<trace name="LCD_BACKLIGHT_CATHODE_2" from=".J_LCD > .pin2" to=".Q_LCD_BL > .D" {...powerTraceProps} />
<trace name="LCD_BACKLIGHT_CATHODE_3" from=".J_LCD > .pin3" to=".Q_LCD_BL > .D" {...powerTraceProps} />
<trace name="LCD_BACKLIGHT_GND" from=".Q_LCD_BL > .S" to="net.GND" {...gndLabel} />
<trace name="LCD_BACKLIGHT_PWM" from=".MCU .U1 > .GPIO24" to=".Q_LCD_BL > .G" />
<trace name="LCD_BACKLIGHT_GATE_PULLDOWN" from=".R_LCD_BL_PULLDOWN > .pin1" to=".Q_LCD_BL > .G" />
<trace name="LCD_BACKLIGHT_GATE_PULLDOWN_GND" from=".R_LCD_BL_PULLDOWN > .pin2" to="net.GND" {...gndLabel} />
<trace name="SW_G" from=".J_PWR_SW > .pin4" to="net.GND" {...gndLabel} />
<trace name="SW_G2" from=".J_PWR_SW > .pin5" to="net.GND" {...gndLabel} />
<copperpour name="GND_POUR_BOTTOM" connectsTo="net.GND" layer="bottom" clearance="0.18mm" boardEdgeMargin="0.25mm" />
{copperIslands && <copperpour name="V3V3_REGULATOR_ISLAND" connectsTo="net.V3V3" layer="top" clearance="0.18mm" boardEdgeMargin={0} outline={[{ x: -18.5, y: 19.2 }, { x: -17.3, y: 19.2 }, { x: -17.3, y: 22.2 }, { x: -18.5, y: 22.2 }]} />}
{copperIslands && <copperpour name="V1V1_REGULATOR_ISLAND" connectsTo=".MCU > net.V1V1" layer="top" clearance="0.18mm" boardEdgeMargin={0} outline={[{ x: -8, y: 21.3 }, { x: -6.9, y: 21.3 }, { x: -6.9, y: 23.2 }, { x: -8.5, y: 24.8 }, { x: -9.35, y: 24.8 }, { x: -9.35, y: 23.6 }, { x: -8, y: 22.6 }]} />}
<silkscreentext text="ER-TFT035IPS-6 · 50P ZIF" fontSize="1.2mm" pcbX={35} pcbY={-1} />
<silkscreentext text="BAT" fontSize="0.9mm" pcbX={15} pcbY={-29} />
<silkscreentext text="USB-C / VBUS" fontSize="0.9mm" pcbX={0} pcbY={31} />
<silkscreentext text="microSD" fontSize="0.9mm" pcbX={20} pcbY={-20} />
<silkscreentext text="PWR SW" fontSize="0.9mm" pcbX={54} pcbY={-30} pcbRotation={90} />
<silkscreentext text="UP" fontSize="0.9mm" pcbX={-64} pcbY={-7} />
<silkscreentext text="DOWN" fontSize="0.9mm" pcbX={-64} pcbY={7} />
<silkscreentext text="LEFT" fontSize="0.9mm" pcbX={-52} pcbY={7} />
<silkscreentext text="RIGHT" fontSize="0.9mm" pcbX={-52} pcbY={-8} />
<silkscreentext text="A" fontSize="0.9mm" pcbX={64} pcbY={-7} />
<silkscreentext text="B" fontSize="0.9mm" pcbX={64} pcbY={7} />
<silkscreentext text="X" fontSize="0.9mm" pcbX={52} pcbY={-7} />
<silkscreentext text="Y" fontSize="0.9mm" pcbX={52} pcbY={7} />
<silkscreentext text="SELECT" fontSize="0.9mm" pcbX={-50} pcbY={31} />
<silkscreentext text="START" fontSize="0.9mm" pcbX={50} pcbY={31} />
<silkscreentext text="VOLUME" fontSize="0.9mm" pcbX={-65} pcbY={-20} />
<silkscreentext text="SPK" fontSize="0.9mm" pcbX={-20} pcbY={-16} />
</board>
)