pixalynx/usb3-hub-10g

A USB 3.2 Gen 2 six-port hub board with USB-C PD power input, regulated 5 V/3.3 V/1.15 V rails, one upstream and four protected downstream USB-A/USB-C ports, SuperSpeed muxes, ESD protection, and controlled port power.

Version
0.0.1
License
unset
Stars
0

parts/Usb7206c.tsx

import type { ChipProps } from "tscircuit"
import { JlcFootprint } from "../lib/jlc"
import { CAD } from "../lib/cad-models"

/** Microchip USB7206C 6-port USB 3.2 Gen 2 hub, 100-VQFN 12 x 12 mm. Pin table from DS00003850F
 * Table 3-1 (research/usb7206c.txt), identical to JLC C3210686's symbol; programmable-function pins carry their Configuration 3 function
 * (Table 3-5, CFG_STRAP2 200k pull-down / CFG_STRAP1 10k pull-down). Supply pins get unique labels
 * (VCORE_9, VDD33_26, ...) so every one is declared and decoupled individually. */
export const usb7206cPins = {
  pin1: ["RESET_N"], pin2: ["VBUS_DET"], pin3: ["MSTR_I2C_DATA"], pin4: ["NC4"],
  pin5: ["DN1_DP"], pin6: ["DN1_DM"], pin7: ["DN1_TXP"], pin8: ["DN1_TXN"], pin9: ["VCORE_9"], pin10: ["DN1_RXP"], pin11: ["DN1_RXN"],
  pin12: ["NC12"], pin13: ["NC13"],
  pin14: ["DN2_DP"], pin15: ["DN2_DM"], pin16: ["DN2_TXP"], pin17: ["DN2_TXN"], pin18: ["VCORE_18"], pin19: ["DN2_RXP"], pin20: ["DN2_RXN"],
  pin21: ["CFG_STRAP1"], pin22: ["CFG_STRAP2"], pin23: ["CFG_STRAP3"], pin24: ["TESTEN"], pin25: ["VCORE_25"], pin26: ["VDD33_26"],
  pin27: ["DN3_DP"], pin28: ["DN3_DM"], pin29: ["DN3_TXP"], pin30: ["DN3_TXN"], pin31: ["VCORE_31"], pin32: ["DN3_RXP"], pin33: ["DN3_RXN"],
  pin34: ["DN4_DP"], pin35: ["DN4_DM"], pin36: ["DN4_TXP"], pin37: ["DN4_TXN"], pin38: ["VCORE_38"], pin39: ["DN4_RXP"], pin40: ["DN4_RXN"],
  pin41: ["DN6_DM"], pin42: ["DN6_DP"], pin43: ["VDD33_43"],
  pin44: ["I2S_SDI"], pin45: ["I2S_SDO"], pin46: ["I2S_SCK"], pin47: ["I2S_LRCK"], pin48: ["I2S_MCLK"], pin49: ["PF8_NC"], pin50: ["PF9_NC"],
  pin51: ["PRT_CTL3_U3"], pin52: ["PRT_CTL4_U3"], pin53: ["VDD33_53"], pin54: ["PRT_CTL5_U3"], pin55: ["VCORE_55"],
  pin56: ["PRT_CTL5"], pin57: ["PRT_CTL4"], pin58: ["PRT_CTL3"], pin59: ["PRT_CTL2"], pin60: ["PRT_CTL1"],
  pin61: ["MSTR_I2C_CLK"], pin62: ["VDD33_62"], pin63: ["TEST1"], pin64: ["TEST2"], pin65: ["TEST3"], pin66: ["MIC_DET"], pin67: ["VDD33_67"],
  pin68: ["SPI_CLK"], pin69: ["CFG_NON_REM"], pin70: ["CFG_BC_EN"], pin71: ["SPI_D1"], pin72: ["SPI_D2"], pin73: ["SPI_D3"],
  pin74: ["GPIO93"], pin75: ["SLV_I2C_CLK"], pin76: ["SLV_I2C_DATA"], pin77: ["PRT_CTL6"], pin78: ["VCORE_78"], pin79: ["VDD33_79"], pin80: ["NC80"],
  pin81: ["DN5_DP"], pin82: ["DN5_DM"], pin83: ["DN5_TXP"], pin84: ["DN5_TXN"], pin85: ["VCORE_85"], pin86: ["DN5_RXP"], pin87: ["DN5_RXN"], pin88: ["VDD33_88"],
  pin89: ["UP_DP"], pin90: ["UP_DM"], pin91: ["UP_TXP"], pin92: ["UP_TXN"], pin93: ["VCORE_93"], pin94: ["UP_RXP"], pin95: ["UP_RXN"],
  pin96: ["ATEST"], pin97: ["XTALO"], pin98: ["XTALI"], pin99: ["VDD33_99"], pin100: ["RBIAS"], pin101: ["VSS"],
} as const

export const USB7206C_VCORE = ["VCORE_9", "VCORE_18", "VCORE_25", "VCORE_31", "VCORE_38", "VCORE_55", "VCORE_78", "VCORE_85", "VCORE_93"] as const
export const USB7206C_VDD33 = ["VDD33_26", "VDD33_43", "VDD33_53", "VDD33_62", "VDD33_67", "VDD33_79", "VDD33_88", "VDD33_99"] as const

export const Usb7206c = (props: ChipProps<typeof usb7206cPins>) => (
  <chip
    {...props}
    manufacturerPartNumber="USB7206CT/KDX"
    supplierPartNumbers={{ jlcpcb: ["C3210691"] }}
    pinLabels={usb7206cPins}
    footprint={<JlcFootprint part="usb7206c" margin={0.1} />} cadModel={CAD.usb7206c}
    schWidth={3.0}
    schHeight={10.2}
    schPinArrangement={{
      // left: upstream port, control, configuration straps, unused functions (pulled down), core supply, ground
      leftSide: {
        direction: "top-to-bottom",
        pins: [
          "UP_DP", "UP_DM", "UP_TXP", "UP_TXN", "UP_RXP", "UP_RXN", "VBUS_DET", "RESET_N", "XTALI", "XTALO", "RBIAS", "ATEST",
          "CFG_STRAP1", "CFG_STRAP2", "CFG_STRAP3", "CFG_NON_REM", "CFG_BC_EN", "TESTEN", "TEST1", "TEST2", "TEST3",
          "SPI_CLK", "SPI_D1", "SPI_D2", "SPI_D3", "MSTR_I2C_CLK", "MSTR_I2C_DATA", "SLV_I2C_CLK", "SLV_I2C_DATA", "MIC_DET",
          "I2S_SDI", "I2S_SDO", "I2S_SCK", "I2S_LRCK", "I2S_MCLK", "GPIO93", "NC4", "NC12", "NC13", "NC80",
          ...USB7206C_VCORE, "VSS",
        ],
      },
      // right: downstream ports 1-4 with their power controls, disabled ports 5-6, 3.3 V supply
      rightSide: {
        direction: "top-to-bottom",
        pins: [
          "DN1_DP", "DN1_DM", "DN1_TXP", "DN1_TXN", "DN1_RXP", "DN1_RXN", "PRT_CTL1",
          "DN2_DP", "DN2_DM", "DN2_TXP", "DN2_TXN", "DN2_RXP", "DN2_RXN", "PRT_CTL2",
          "DN3_DP", "DN3_DM", "DN3_TXP", "DN3_TXN", "DN3_RXP", "DN3_RXN", "PRT_CTL3",
          "DN4_DP", "DN4_DM", "DN4_TXP", "DN4_TXN", "DN4_RXP", "DN4_RXN", "PRT_CTL4",
          "DN5_DP", "DN5_DM", "DN5_TXP", "DN5_TXN", "DN5_RXP", "DN5_RXN", "PRT_CTL5",
          "DN6_DP", "DN6_DM", "PRT_CTL6", "PRT_CTL3_U3", "PRT_CTL4_U3", "PRT_CTL5_U3", "PF8_NC", "PF9_NC", ...USB7206C_VDD33,
        ],
      },
    }}
    pinAttributes={{
      VSS: { requiresGround: true },
      ...Object.fromEntries(USB7206C_VCORE.map((p) => [p, { requiresPower: true }])),
      ...Object.fromEntries(USB7206C_VDD33.map((p) => [p, { requiresPower: true }])),
    }}
  />
)