astra/am3352-sbc

A tscircuit package created by astra.

Version
0.1.28
License
unset
Stars
0

design/aux-jst-power.tsx

import { sch } from "../schematic/layout";
import { AuxReversePolarityPmos } from "../components/aux-reverse-polarity";
import { StandardJstPowerUpward } from "../components/jst-power";
import { AuxInputFuse } from "../components/aux-input-fuse";
import { PowerSourceSelector } from "../components/power-source-selector";
import { SignalTrace } from "./nets";

export interface AuxPowerPlacement {
  pcbX: number;
  pcbY: number;
  pcbRotation?: number;
  layer?: "top" | "bottom";
}

function powerLink(refdes: string, pin: string, net: string) {
  return (
    <SignalTrace
      name={`T_${refdes}_${pin}`}
      from={`${refdes}.${pin}`}
      to={`net.${net}`}
      routingPhaseIndex={net === "GND" ? 7 : 6}
    />
  );
}

/** Source declarations only: each interconnect is assigned to autorouting.
 * One 2.54 mm shunt selects USB pins 1–2 (default) or AUX pins 2–3.
 * The mechanical selection breaks the possible AUX→USB body-diode path.
 * Requires Q_PD.D and C_PD_SLEW.pin2 to use USB_PD_SWITCHED instead of VIN_5V.
 */
export function AuxJstPower({
  connector,
  fuse,
  reversePolarity,
  selector,
}: {
  connector: AuxPowerPlacement;
  fuse: AuxPowerPlacement;
  reversePolarity: AuxPowerPlacement;
  selector: AuxPowerPlacement;
}) {
  return (
    <>
      <StandardJstPowerUpward name="J_AUX_PWR" {...sch("J_AUX_PWR")} {...connector} />
      <AuxInputFuse name="F_AUX" {...sch("F_AUX")} {...fuse} />
      <AuxReversePolarityPmos name="Q_AUX" {...sch("Q_AUX")} {...reversePolarity} />
      <PowerSourceSelector name="JP_PWR" {...sch("JP_PWR")} {...selector} />
      {powerLink("J_AUX_PWR", "pin1", "AUX_5V")}
      {powerLink("J_AUX_PWR", "pin2", "GND")}
      {powerLink("F_AUX", "pin1", "AUX_5V")}
      {powerLink("F_AUX", "pin2", "AUX_5V_FUSED")}
      {powerLink("Q_AUX", "D", "AUX_5V_FUSED")}
      {powerLink("Q_AUX", "S", "AUX_5V_PROTECTED")}
      {powerLink("Q_AUX", "G", "GND")}
      {powerLink("JP_PWR", "pin1", "USB_PD_SWITCHED")}
      {powerLink("JP_PWR", "pin2", "VIN_5V")}
      {powerLink("JP_PWR", "pin3", "AUX_5V_PROTECTED")}
    </>
  );
}