gokul/usb3-sd-hub

Engineering draft: four-layer, computer-powered USB 3 hub with one USB-C host socket, two USB-C and two USB-A accessory sockets, and a full-size SD slot. Board and three schematic previews are available. Routing and production checks are incomplete; not fabrication ready.

Version
0.1.5
License
MIT
Stars
0

components/Controllers.tsx

import { placementFor } from "../design/placement";
import { QfnFootprint } from "./QfnFootprint";
import {
	hubPinLabels,
	readerPinLabels,
	hubPinAttributes,
	readerPinAttributes,
} from "../design/pinouts";
import { hubConnections, readerConnections } from "../design/connections";

export const Controllers = () => (
	<>
		<chip
			name="U_HUB"
			manufacturerPartNumber="USB5816C-I/KD"
			pcbX="0mm"
			pcbY={5}
			{...placementFor("U_HUB")}
			pinLabels={hubPinLabels}
			pinAttributes={hubPinAttributes}
			connections={hubConnections}
			noSchematicRepresentation
			footprint={
				<QfnFootprint
					pins={100}
					pitch={0.4}
					padWidth={0.2}
					padLength={1.05}
					rowSpacing={11.7}
					bodySize={12}
					exposedPad={8.1}
				/>
			}
			cadModel={{
				jscad: { type: "cuboid", size: [12, 12, 1] },
				zOffsetFromSurface: 0.5,
			}}
			pcbStyle={{ silkscreenFontSize: 0.6 }}
		/>
		<chip
			name="U_SD"
			manufacturerPartNumber="USB2642-I/ML"
			pcbX={-7}
			pcbY={-16}
			{...placementFor("U_SD")}
			pinLabels={readerPinLabels}
			pinAttributes={readerPinAttributes}
			connections={readerConnections}
			noSchematicRepresentation
			footprint={
				<QfnFootprint
					pins={48}
					pitch={0.5}
					padWidth={0.25}
					padLength={0.75}
					rowSpacing={7}
					bodySize={7}
					exposedPad={5.3}
				/>
			}
			cadModel={{
				jscad: { type: "cuboid", size: [7, 7, 1] },
				zOffsetFromSurface: 0.5,
			}}
			pcbStyle={{ silkscreenFontSize: 0.6 }}
		/>
	</>
);

export const hubPowerPinLabels = Object.fromEntries(
	Object.entries(hubPinLabels)
		.filter(([, label]) =>
			/^(VDD|EP|TEST|RBIAS|XTAL|RESET|VBUS|CFG_|SPI_|SMB|GPIO|CC_POL|ALT_MUX|AB1|C_ATTACH|HOST_TYPE|SUSP)/.test(
				label,
			),
		)
		.map(([, label], index) => [`pin${index + 1}`, label]),
);
export const hubSignalPinLabels = Object.fromEntries(
	Object.entries(hubPinLabels)
		.filter(([, label]) => /^(UP_|D[1-6]_|PWR)/.test(label))
		.map(([, label], index) => [`pin${index + 1}`, label]),
);