astra/am3352-sbc

A 4-layer AM3352 single-board computer with 128‑MiB DDR3, PMIC power regulation, USB‑C 5‑V PD input, dual USB host ports, HDMI output with ESD protection, microSD/UART/JTAG interfaces, addressable RGB indicators, and a PWM-driven buzzer.

Version
0.1.19
License
unset
Stars
0

design/usb.tsx

import { KS227M016E07RR0VH2FP0 as UsbBulkCap } from "../components/bulk-capacitor";
import { Fragment } from "react";
import { UsbA } from "../components/usb-a";
import { USBLC6_2SC6 } from "../components/usb-esd";
import { SignalTrace, Cap, Res, cpuPin, link } from "./nets";

export function UsbPorts() {
  return (
    <>
      {/* TI SLVS514P Table 5-2: active-high, independently limited host power. */}
      <chip
        name="U_USB_PWR"
        manufacturerPartNumber="TPS2052BDR"
        footprint="soic8"
        pcbX={24}
        pcbY={18}
        pinLabels={{
          pin1: "GND",
          pin2: "IN",
          pin3: "EN1",
          pin4: "EN2",
          pin5: "OC2",
          pin6: "OUT2",
          pin7: "OUT1",
          pin8: "OC1",
        }}
      />
      {link("U_USB_PWR", "IN", "VIN_5V")}
      {link("U_USB_PWR", "GND", "GND")}
      <Cap name="C_USB_PWR" net="VIN_5V" value="10uF" x={24} y={14} />
      {[0, 1].map((i) => (
        <Fragment key={i}>
          <UsbA
            name={`J_USB${i}`}
            pcbX={16 + i * 20}
            pcbY={27}
            pcbRotation={180}
          />
          <USBLC6_2SC6 name={`U_USB_ESD${i}`} pcbX={16 + i * 20} pcbY={22} />
          {link(`J_USB${i}`, "VBUS", `USB${i}_VBUS`)}
          {link(`J_USB${i}`, "GND", "GND")}
          {link(`J_USB${i}`, "SHIELD", "GND")}
          {link("U_USB_PWR", `OUT${i + 1}`, `USB${i}_VBUS`)}
          {link("U_USB_PWR", `EN${i + 1}`, `USB${i}_DRVVBUS`)}
          {link("U_USB_PWR", `OC${i + 1}`, `USB${i}_OCn`)}
          {link(`U_USB_ESD${i}`, "GND", "GND")}
          {link(`U_USB_ESD${i}`, "VBUS", `USB${i}_VBUS`)}
          <Res
            name={`R_USB_EN${i}`}
            a={`USB${i}_DRVVBUS`}
            b="GND"
            value="100k"
            x={17 + i * 3}
            y={15}
          />
          <Res
            name={`R_USB_OC${i}`}
            a={`USB${i}_OCn`}
            b="V3V3"
            x={23 + i * 3}
            y={12}
          />
          <UsbBulkCap
            name={`C_USB_BULK${i}`}
            pcbX={i ? 42 : 9}
            pcbY={i ? 16 : 19}
          />
          {link(`C_USB_BULK${i}`, "pin1", `USB${i}_VBUS`)}
          {link(`C_USB_BULK${i}`, "pin2", "GND")}
          <Cap
            name={`C_USB_ESD${i}`}
            net={`USB${i}_VBUS`}
            x={14 + i * 18}
            y={18}
          />
          <SignalTrace
            name={`USB${i}_HOST_ID`}
            from={cpuPin(`USB${i}_ID`)}
            to="net.GND"
            routingPhaseIndex={7}
          />
          {[
            ["DP", "IO1_A", "IO1_B"],
            ["DM", "IO2_A", "IO2_B"],
          ].map(([signal, a, b]) => (
            <Fragment key={signal}>
              <SignalTrace
                name={`USB${i}_${signal}_CPU`}
                from={cpuPin(`USB${i}_${signal}`)}
                to={`U_USB_ESD${i}.${a}`}
                routingPhaseIndex={3}
              />
              <SignalTrace
                name={`USB${i}_${signal}_PORT`}
                from={`U_USB_ESD${i}.${b}`}
                to={`J_USB${i}.${signal}`}
                routingPhaseIndex={3}
              />
            </Fragment>
          ))}
          {["CPU", "PORT"].map((segment) => (
            <differentialpair
              name={`USB${i}_${segment}`}
              positiveConnection={`USB${i}_DP_${segment}`}
              negativeConnection={`USB${i}_DM_${segment}`}
              targetDifferentialImpedance="90ohm"
              maxLengthSkew={0.15}
              pcbTraceGap={0.1}
            />
          ))}
        </Fragment>
      ))}
      {link("U1", "T14", "USB0_OCn")}
      {/* SPRS717L Table 4-2: V17/GPMC_A11, mode 7 = gpio1_27, VDDSHV3. */}
      {link("U1", "V17", "USB1_OCn")}
    </>
  );
}