MrPicklePinosaur/tscircuit_demo

This circuit hardware provides a USB-to-multi-protocol (I2C/SPI/UART) bridge using an FT232H chip, powered via a 3.3V regulator, with USB-C input, ESD protection, status LEDs, a STEMMA QT connector, and various support components.

Usage: To use this component in a project: 1. Import the specific component: ```tsx import { AMS1117_3_3 } from "@tsci/MrPicklePinosaur.tscircuit_demo/imports/AMS1117_3_3" ``` 2. Use the component in a board layout: ```tsx <board> <AMS1117_3_3 name="U2" /> </board> ``` Key details: - The component has predefined pin labels: - pin1: GND - pin2: VOUT1 - pin3: VIN - pin4: VOUT2 - Supports common layout props - Has a specific SMT footprint - Includes JLCPCB supplier part number (C6186)

Version
1.0.0
License
unset
Stars
0

index.tsx

PCBPCB preview for index.tsx
SchematicSchematic preview for index.tsx
/**
 * FT232H USB-to-Multi-Protocol Carrier Board
 * 
 * Features:
 * - FTDI FT232H USB bridge (QFN-48 package)
 * - USB-C input (UFP device mode)
 * - 3.3V regulated power rail
 * - STEMMA QT connector (shared I2C/SPI/UART - software configurable)
 * - GPIO header for additional FT232H pins
 * - ESD protection on USB
 * - Status LEDs
 * - Test points for debugging
 * 
 * IMPORTANT: FT232H can only operate in ONE mode at a time:
 * - I2C mode: SCL=ADBUS0, SDA=ADBUS1+ADBUS2 (needs external pull-ups)
 * - SPI mode: SCK=ADBUS0, MOSI=ADBUS1, MISO=ADBUS2, CS=ADBUS3+
 * - UART mode: TX=ADBUS0, RX=ADBUS1
 */

import { FT232HQ_REEL } from "./imports/FT232HQ_REEL"
import { GT_USB_7010ASV } from "./imports/GT_USB_7010ASV"
import { AMS1117_3_3 } from "./imports/AMS1117_3_3"
import { USBLC6_2SC6 } from "./imports/USBLC6_2SC6"
import { FCM2012KF_601T05 } from "./imports/FCM2012KF_601T05"

export default () => {
  return (
    <board width="60mm" height="40mm">
      {/* FT232H Main USB Bridge IC - QFN-48 Package */}
      <FT232HQ_REEL name="U1" />

      {/* USB-C Connector (Device/UFP mode) */}
      <GT_USB_7010ASV name="J1" />

      {/* 3.3V LDO Voltage Regulator */}
      <AMS1117_3_3 name="U2" />

      {/* USB ESD Protection */}
      <USBLC6_2SC6 name="U3" />

      {/* STEMMA QT Connector (JST SH 4-pin, 1mm pitch) */}
      {/* This connector shares the same FT232H pins for all modes */}
      <chip
        name="J2"
        manufacturerPartNumber="HC-FPC-1.0-4P-FH20"
        supplierPartNumbers={{ jlcpcb: ["C49166830"] }}
        footprint="jst_sh_4pin_1mm"
        pinLabels={{
          pin1: "GND",
          pin2: "V3V3",
          pin3: "SDA_MOSI_TX",
          pin4: "SCL_SCLK_RX",
        }}
        schPinArrangement={{
          leftSide: {
            direction: "top-to-bottom",
            pins: ["GND", "V3V3"]
          },
          rightSide: {
            direction: "top-to-bottom",
            pins: ["SDA_MOSI_TX", "SCL_SCLK_RX"]
          }
        }}
      />

      {/* 12MHz Crystal for FT232H */}
      <chip
        name="Y1"
        footprint="hc49"
        pinLabels={{
          pin1: "X1",
          pin2: "X2"
        }}
      />

      {/* Bulk capacitors for USB power input */}
      <capacitor
        name="C1"
        capacitance="10uF"
        maxVoltageRating="16V"
        footprint="0805"
      />
      
      <capacitor
        name="C2"
        capacitance="10uF"
        maxVoltageRating="16V"
        footprint="0805"
      />

      {/* Regulator input/output capacitors */}
      <capacitor
        name="C3"
        capacitance="10uF"
        maxVoltageRating="16V"
        footprint="0805"
      />

      <capacitor
        name="C4"
        capacitance="10uF"
        maxVoltageRating="6.3V"
        footprint="0805"
      />

      {/* FT232H VCC decoupling (3.3V core) */}
      <capacitor
        name="C5"
        capacitance="100nF"
        footprint="0603"
      />

      <capacitor
        name="C6"
        capacitance="100nF"
        footprint="0603"
      />

      <capacitor
        name="C7"
        capacitance="4.7uF"
        maxVoltageRating="6.3V"
        footprint="0603"
      />

      {/* FT232H VCCIO decoupling (3.3V I/O) */}
      <capacitor
        name="C8"
        capacitance="100nF"
        footprint="0603"
      />

      <capacitor
        name="C9"
        capacitance="100nF"
        footprint="0603"
      />

      <capacitor
        name="C10"
        capacitance="100nF"
        footprint="0603"
      />

      <capacitor
        name="C11"
        capacitance="100nF"
        footprint="0603"
      />

      {/* FT232H REF pin capacitor */}
      <capacitor
        name="C12"
        capacitance="100nF"
        footprint="0603"
      />

      {/* Crystal load capacitors */}
      <capacitor
        name="C13"
        capacitance="27pF"
        footprint="0603"
      />

      <capacitor
        name="C14"
        capacitance="27pF"
        footprint="0603"
      />

      {/* USB-C CC pulldown resistors (5.1k for UFP device mode) */}
      <resistor
        name="R1"
        resistance="5.1k"
        footprint="0603"
      />

      <resistor
        name="R2"
        resistance="5.1k"
        footprint="0603"
      />

      {/* FT232H RESET# pull-up resistor */}
      <resistor
        name="R3"
        resistance="10k"
        footprint="0603"
      />

      {/* I2C pull-up resistors (4.7k typical for 3.3V I2C) */}
      {/* Optional - can be populated for I2C mode */}
      <resistor
        name="R4"
        resistance="4.7k"
        footprint="0603"
      />

      <resistor
        name="R5"
        resistance="4.7k"
        footprint="0603"
      />

      {/* LED current limiting resistors */}
      <resistor
        name="R6"
        resistance="1k"
        footprint="0603"
      />

      <resistor
        name="R7"
        resistance="1k"
        footprint="0603"
      />

      {/* Ferrite bead for power supply filtering */}
      <FCM2012KF_601T05 name="FB1" />

      {/* Status LEDs - Bi-color (Red/Green) */}
      <led
        name="LED1"
        color="green"
        footprint="0603"
      />

      <led
        name="LED2"
        color="red"
        footprint="0603"
      />

      {/* === POWER CONNECTIONS === */}
      
      {/* USB-C VBUS to ferrite bead */}
      <trace from="J1.B4A9" to="FB1.pin1" />
      <trace from="J1.A4B9" to="FB1.pin1" />
      
      {/* Ferrite bead to bulk capacitor and regulator input */}
      <trace from="FB1.pin2" to="C1.pin1" />
      <trace from="C1.pin1" to="U2.VIN" />
      <trace from="C1.pin1" to="C3.pin1" />
      
      {/* USB-C GND connections */}
      <trace from="J1.B1A12" to="net.GND" />
      <trace from="J1.A1B12" to="net.GND" />
      <trace from="C1.pin2" to="net.GND" />
      <trace from="C3.pin2" to="net.GND" />
      <trace from="U2.GND" to="net.GND" />
      
      {/* Regulator output to 3.3V net */}
      <trace from="U2.VOUT1" to="net.V3V3" />
      <trace from="U2.VOUT2" to="net.V3V3" />
      <trace from="C4.pin1" to="net.V3V3" />
      <trace from="C2.pin1" to="net.V3V3" />
      <trace from="C2.pin2" to="net.GND" />
      <trace from="C4.pin2" to="net.GND" />

      {/* === USB DATA CONNECTIONS === */}
      
      {/* USB-C CC pulldowns for UFP device mode */}
      <trace from="J1.A5" to="R1.pin1" />
      <trace from="R1.pin2" to="net.GND" />
      <trace from="J1.B5" to="R2.pin1" />
      <trace from="R2.pin2" to="net.GND" />
      
      {/* USB D+/D- through ESD protection to FT232H */}
      <trace from="J1.A6" to="U3.pin3" />  {/* D+ */}
      <trace from="J1.A7" to="U3.pin1" />  {/* D- */}
      <trace from="U3.pin2" to="net.GND" />
      <trace from="U3.pin5" to="net.V3V3" />
      <trace from="U3.pin4" to="U1.pin6" />  {/* D+ output to FT232H */}
      <trace from="U3.pin6" to="U1.pin7" />  {/* D- output to FT232H */}

      {/* === FT232H POWER CONNECTIONS === */}
      
      {/* FT232H USB power input from filtered VBUS */}
      <trace from="FB1.pin2" to="U1.pin40" />  {/* VREGIN */}
      
      {/* FT232H 3.3V core supply (VCC) with decoupling */}
      <trace from="net.V3V3" to="U1.pin38" />  {/* VCCCORE */}
      <trace from="U1.pin38" to="C5.pin1" />
      <trace from="C5.pin2" to="net.GND" />
      <trace from="C6.pin1" to="net.V3V3" />
      <trace from="C6.pin2" to="net.GND" />
      <trace from="C7.pin1" to="net.V3V3" />
      <trace from="C7.pin2" to="net.GND" />
      
      {/* FT232H 3.3V I/O supply (VCCIO) with decoupling */}
      <trace from="net.V3V3" to="U1.pin12" />  {/* VCCIO1 */}
      <trace from="net.V3V3" to="U1.pin24" />  {/* VCCIO2 */}
      <trace from="net.V3V3" to="U1.pin46" />  {/* VCCIO3 */}
      <trace from="net.V3V3" to="U1.pin3" />   {/* VPHY */}
      <trace from="net.V3V3" to="U1.pin8" />   {/* VPLL */}
      <trace from="net.V3V3" to="U1.pin37" />  {/* VCCA */}
      <trace from="net.V3V3" to="U1.pin39" />  {/* VCCD */}
      <trace from="C8.pin1" to="net.V3V3" />
      <trace from="C8.pin2" to="net.GND" />
      <trace from="C9.pin1" to="net.V3V3" />
      <trace from="C9.pin2" to="net.GND" />
      <trace from="C10.pin1" to="net.V3V3" />
      <trace from="C10.pin2" to="net.GND" />
      <trace from="C11.pin1" to="net.V3V3" />
      <trace from="C11.pin2" to="net.GND" />
      
      {/* FT232H ground connections */}
      <trace from="U1.pin10" to="net.GND" />  {/* GND1 */}
      <trace from="U1.pin11" to="net.GND" />  {/* GND2 */}
      <trace from="U1.pin22" to="net.GND" />  {/* GND3 */}
      <trace from="U1.pin23" to="net.GND" />  {/* GND4 */}
      <trace from="U1.pin35" to="net.GND" />  {/* GND5 */}
      <trace from="U1.pin36" to="net.GND" />  {/* GND6 */}
      <trace from="U1.pin47" to="net.GND" />  {/* GND7 */}
      <trace from="U1.pin48" to="net.GND" />  {/* GND8 */}
      <trace from="U1.pin49" to="net.GND" />  {/* EP (exposed pad) */}
      <trace from="U1.pin4" to="net.GND" />   {/* AGND1 */}
      <trace from="U1.pin9" to="net.GND" />   {/* AGND2 */}
      <trace from="U1.pin41" to="net.GND" />  {/* AGND3 */}
      
      {/* FT232H REF pin capacitor */}
      <trace from="U1.pin5" to="C12.pin1" />  {/* REF */}
      <trace from="C12.pin2" to="net.GND" />

      {/* === FT232H CONFIGURATION === */}
      
      {/* RESET# pull-up - Note: FT232H doesn't have RESET# pin, using PWREN# instead */}
      {/* <trace from="U1.RESET#" to="R3.pin1" /> */}
      {/* <trace from="R3.pin2" to="net.V3V3" /> */}
      
      {/* TEST pin to ground */}
      <trace from="U1.pin42" to="net.GND" />  {/* TEST */}
      
      {/* Crystal oscillator */}
      <trace from="U1.pin1" to="Y1.X1" />  {/* XCSI (crystal input) */}
      <trace from="U1.pin2" to="Y1.X2" />  {/* XCSO (crystal output) */}
      <trace from="Y1.X1" to="C13.pin1" />
      <trace from="C13.pin2" to="net.GND" />
      <trace from="Y1.X2" to="C14.pin1" />
      <trace from="C14.pin2" to="net.GND" />

      {/* === STEMMA QT CONNECTOR === */}
      
      {/* Power to STEMMA QT */}
      <trace from="J2.V3V3" to="net.V3V3" />
      <trace from="J2.GND" to="net.GND" />
      
      {/* Multi-protocol data lines (I2C/SPI/UART shared) */}
      <trace from="J2.SCL_SCLK_RX" to="U1.pin13" />  {/* ADBUS0 */}
      <trace from="J2.SDA_MOSI_TX" to="U1.pin14" />  {/* ADBUS1 */}
      
      {/* Optional I2C pull-ups (can be populated for I2C mode) */}
      <trace from="R4.pin1" to="net.V3V3" />
      <trace from="R4.pin2" to="U1.pin13" />  {/* ADBUS0 */}
      <trace from="R5.pin1" to="net.V3V3" />
      <trace from="R5.pin2" to="U1.pin14" />  {/* ADBUS1 */}

      {/* === STATUS LEDS === */}
      
      {/* Power LED (Green) */}
      <trace from="net.V3V3" to="R6.pin1" />
      <trace from="R6.pin2" to="LED1.pin1" />
      <trace from="LED1.pin2" to="net.GND" />
      
      {/* Activity LED (Red) - Note: FT232H doesn't have PWREN# in pinLabels, skipping for now */}
      {/* <trace from="U1.PWREN#" to="R7.pin1" /> */}
      <trace from="R7.pin2" to="LED2.pin1" />
      <trace from="LED2.pin2" to="net.GND" />

      {/* === GPIO HEADER === */}
      {/* 2.54mm pin header for additional GPIO and SPI signals */}
      <pinheader
        name="J3"
        pinCount={16}
        pitch="2.54mm"
        gender="male"
        pinLabels={[
          "GND",
          "3V3",
          "ADBUS2_MISO",
          "ADBUS3_CS",
          "ADBUS4",
          "ADBUS5",
          "ADBUS6",
          "ADBUS7",
          "ACBUS0",
          "ACBUS1",
          "ACBUS2",
          "ACBUS3",
          "ACBUS4",
          "ACBUS5",
          "ACBUS6",
          "ACBUS7",
        ]}
      />

      {/* GPIO header connections */}
      <trace from="J3.GND" to="net.GND" />
      <trace from="J3.3V3" to="net.V3V3" />
      <trace from="J3.ADBUS2_MISO" to="U1.pin15" />  {/* ADBUS2 */}
      <trace from="J3.ADBUS3_CS" to="U1.pin16" />    {/* ADBUS3 */}
      <trace from="J3.ADBUS4" to="U1.pin17" />       {/* ADBUS4 */}
      <trace from="J3.ADBUS5" to="U1.pin18" />       {/* ADBUS5 */}
      <trace from="J3.ADBUS6" to="U1.pin19" />       {/* ADBUS6 */}
      <trace from="J3.ADBUS7" to="U1.pin20" />       {/* ADBUS7 */}
      <trace from="J3.ACBUS0" to="U1.pin21" />       {/* ACBUS0 */}
      <trace from="J3.ACBUS1" to="U1.pin25" />       {/* ACBUS1 */}
      <trace from="J3.ACBUS2" to="U1.pin26" />       {/* ACBUS2 */}
      <trace from="J3.ACBUS3" to="U1.pin27" />       {/* ACBUS3 */}
      <trace from="J3.ACBUS4" to="U1.pin28" />       {/* ACBUS4 */}
      <trace from="J3.ACBUS5" to="U1.pin29" />       {/* ACBUS5 */}
      <trace from="J3.ACBUS6" to="U1.pin30" />       {/* ACBUS6 */}
      <trace from="J3.ACBUS7" to="U1.pin31" />       {/* ACBUS7 */}

      {/* === TEST POINTS === */}
      {/* Add test points for critical signals */}
      <testpoint name="TP1" footprintVariant="pad" padShape="circle" padDiameter="1mm" />
      <testpoint name="TP2" footprintVariant="pad" padShape="circle" padDiameter="1mm" />
      <testpoint name="TP3" footprintVariant="pad" padShape="circle" padDiameter="1mm" />
      <testpoint name="TP4" footprintVariant="pad" padShape="circle" padDiameter="1mm" />
      <testpoint name="TP5" footprintVariant="pad" padShape="circle" padDiameter="1mm" />
      <testpoint name="TP6" footprintVariant="pad" padShape="circle" padDiameter="1mm" />

      {/* Test point connections for debugging */}
      <trace from="TP1.tp" to="net.V3V3" />
      <trace from="TP2.tp" to="net.GND" />
      <trace from="TP3.tp" to="U1.pin13" />  {/* ADBUS0 */}
      <trace from="TP4.tp" to="U1.pin14" />  {/* ADBUS1 */}
      <trace from="TP5.tp" to="U1.pin7" />   {/* DP (USB D+) */}
      <trace from="TP6.tp" to="U1.pin6" />   {/* DM (USB D-) */}

  </board>
)
}