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.4
- License
- unset
- Stars
- 0
design/placement.ts
// Explicit board coordinates, verified against complete component courtyards.
const positions: Record<string, [number, number]> = {
J_A1: [10, 21],
J_A2: [26, 21],
J_C1: [38, 0],
J_C2: [38, -15],
J_HOST: [-38, 19],
J_SD: [-26, -17.5],
U_33_REG: [-10, 26],
U_ATTACH_AND: [15, -7],
U_ATTACH_INV: [15, -2],
U_C1_MUX: [28.5, 4],
U_C4_MUX: [29, -13],
U_CORE_REG: [-24, 30],
U_HUB: [0, 5],
U_HUB_FLASH: [13, -21],
U_INPUT_LIMIT: [-29, 20],
U_P1_SW: [22, 0],
U_P2_SW: [12, 14],
U_P3_SW: [26, 14],
U_P4_SW: [22, -15],
U_POWER_LOGIC: [-18, 24],
U_RESET: [-12, 16],
U_SD: [-4, -17],
U_SD_EEPROM: [7, -23],
U_SD_POWER: [-7.25, -5],
U_SD_RESET: [5, -29],
U_UP_MUX: [-25, 11],
C_33_OUT: [-3, 30],
C_CORE_OUT: [-16, 29],
C_P1_OUT: [23, -7.5],
C_P2_OUT: [14, 6.5],
C_P3_OUT: [36, 13],
C_P4_OUT: [23, -25],
L_33: [-6, 26],
L_CORE: [-22.75, 26.25],
Y_HUB: [-10, 12],
Y_SD: [-4, -10.8],
D_A2_1: [5, 17.2],
D_A2_2: [6.8, 17.2],
D_A2_3: [8.6, 17.2],
D_A2_4: [10.4, 17.2],
D_A2_5: [5, 15.9],
D_A2_6: [6.8, 15.9],
D_A3_1: [21, 17.2],
D_A3_2: [22.8, 17.2],
D_A3_3: [24.6, 17.2],
D_A3_4: [26.4, 17.2],
D_A3_5: [21, 15.9],
D_A3_6: [22.8, 15.9],
D_C1_1: [26.5, 0],
D_C1_10: [30.1, -1.3],
D_C1_11: [30.1, -2.6],
D_C1_12: [30.1, -3.9],
D_C1_2: [26.5, -1.3],
D_C1_3: [26.5, -2.6],
D_C1_4: [24.75, -3.15],
D_C1_5: [28.3, 0],
D_C1_6: [28.3, -1.3],
D_C1_7: [28.3, -2.6],
D_C1_8: [28.8, -5.4],
D_C1_9: [30.1, 0],
D_C4_1: [26.5, -15.5],
D_C4_10: [30.1, -16.3],
D_C4_11: [30.1, -17.6],
D_C4_12: [30.1, -18.9],
D_C4_2: [26.5, -16.8],
D_C4_3: [26.5, -18.1],
D_C4_4: [26.5, -19.4],
D_C4_5: [28.3, -15.5],
D_C4_6: [28.3, -16.8],
D_C4_7: [28.3, -18.1],
D_C4_8: [28.3, -19.4],
D_C4_9: [30.1, -10.5],
D_HOST_1: [-34, 12],
D_HOST_10: [-30.4, 10.7],
D_HOST_11: [-30.4, 9.4],
D_HOST_12: [-30.4, 8.1],
D_HOST_2: [-34, 10.7],
D_HOST_3: [-34, 9.4],
D_HOST_4: [-34, 8.1],
D_HOST_5: [-32.2, 12],
D_HOST_6: [-32.2, 10.7],
D_HOST_7: [-32.2, 9.4],
D_HOST_8: [-32.2, 8.1],
D_HOST_9: [-30.4, 12],
D_SD_1: [-29, 1.3],
D_SD_2: [-27.2, 1.3],
D_SD_3: [-25.4, 1.3],
D_SD_4: [-23.6, 1.3],
D_SD_5: [-29, 0],
D_SD_6: [-27.2, 0],
C_33_IN: [-13.75, 24],
C_ATTACH_AND: [10.5, -7],
C_ATTACH_INV: [10.5, -4.5],
C_CARD: [-16, 0],
C_CARD_HF: [-20, 1.5],
C_CORE_IN: [-28, 30],
C_D1_33: [27, 8.5],
C_D1_5: [24.75, 8.5],
C_D1_TXN: [17, 0.5],
C_D1_TXP: [17, 1.75],
C_D2_TXN: [4, 12.25],
C_D2_TXP: [4, 13.5],
C_D3_TXN: [21, 9.5],
C_D3_TXP: [21, 11],
C_D4_33: [24.5, -17.5],
C_D4_5: [24.5, -18.75],
C_D4_TXN: [15, -14],
C_D4_TXP: [15, -12.5],
C_EEP: [8, -14],
C_FLASH: [11, -14.5],
C_HOST: [-29, 23],
C_HUB_10: [-8, 6.2],
C_HUB_17: [-8, 3.4],
C_HUB_2: [-8, 9.4],
C_HUB_26: [-4.55, -3],
C_HUB_27: [-2.45, -3],
C_HUB_32: [-0.15, -3],
C_HUB_39: [2.15, -3],
C_HUB_42: [4.35, -3],
C_HUB_47: [6.6, -3],
C_HUB_5: [-8, 8.2],
C_HUB_54: [8, 1.4],
C_HUB_59: [8, 3.4],
C_HUB_64: [8, 5.4],
C_HUB_72: [8, 8.6],
C_HUB_78: [3, 15],
C_HUB_83: [1.75, 13],
C_HUB_90: [-0.8, 13],
C_HUB_93: [-3, 13],
C_HUB_98: [-5.25, 13],
C_HUB_X1: [-15.25, 14],
C_HUB_X2: [-14, 12.8],
C_P1_IN: [19, -3.25],
C_P2_IN: [7.7, 14],
C_P3_IN: [23.25, 11.5],
C_P4_IN: [17.7, -15],
C_POWER_LOGIC: [-18, 21],
C_RESET: [-14, 19],
C_SD_12: [-9.1, -19.75],
C_SD_16: [-5.25, -22.1],
C_SD_18: [-7.5, -22],
C_SD_25: [-1.3, -22.1],
C_SD_26: [0.85, -22.1],
C_SD_33A: [-1, -7],
C_SD_33B: [-8, -31],
C_SD_34: [1.1, -15.25],
C_SD_41: [-0.75, -11.9],
C_SD_48: [-7.25, -11.9],
C_SD_5: [-9.1, -16.25],
C_SD_IN: [-8.9, -10],
C_SD_MAIN: [-8, -27.5],
C_SD_PLL: [-0.75, -10.25],
C_SD_RESET: [1.75, -27],
C_SD_X1: [-7.25, -8.8],
C_SD_X2: [-0.75, -9.05],
C_UP_33: [-24, 7.5],
C_UP_5: [-26.25, 7.5],
C_UP_TXN: [-20, 16.2],
C_UP_TXP: [-20, 17.5],
C_VBUS: [-24.75, 22.75],
LED_CARD_PRESENT: [-33, 0],
LED_P1: [39, 8],
LED_P2: [0.25, 15],
LED_P3: [40, 19],
LED_P4: [39, -23],
LED_POWER: [-24, 3],
LED_SD_POWER: [-36, 3],
Q_ILIM_CC: [-35, 29],
Q_ILIM_SS: [-30, 27],
R_33_FB1: [-8, 23],
R_33_FB2: [-10.25, 23],
R_BC_DISABLE: [12, 2],
R_CARD_CD: [-35, 1.5],
R_CARD_LED: [-36, 0],
R_CARD_WP: [-32.75, 1.5],
R_CORE_FB1: [-20.25, 21],
R_CORE_FB2: [-26.25, 27],
R_CORE_PG: [-26.25, 25.75],
R_D1_DIR: [29, -7],
R_D1_ID: [31.25, -7],
R_D1_SENSE: [33.5, -7],
R_D4_DIR: [29, -22],
R_D4_ID: [31.25, -22],
R_D4_SENSE: [33.5, -22],
R_EEP_SCL: [5.75, -14],
R_EEP_SDA: [3.5, -14],
R_HOST_CURRENT: [-21.75, 23.25],
R_HOST_CURRENT3: [-22.5, 21],
R_HOST_DIR: [-21, 11],
R_HOST_SPEED: [-19.25, 26.5],
R_HUB_BIAS: [-10.25, 8.5],
R_HUB_CFG: [-11, 6],
R_ILIM_BASE: [-27, 16],
R_ILIM_LOW: [-31, 16],
R_ILIM_MID: [-29, 14.75],
R_INPUT_FAULT: [-24.75, 17],
R_LED_P1: [35.7, 8],
R_LED_P2: [-2.55, 15],
R_LED_P3: [36.7, 19],
R_LED_P4: [35.7, -23],
R_LED_POWER: [-27.3, 3],
R_LED_SD_POWER: [-39.3, 3],
R_NON_REM: [12, 0.5],
R_P1_CTRL: [21.25, -3.25],
R_P1_ILIM: [18.5, -2],
R_P2_CTRL: [7.7, 12.5],
R_P2_ILIM: [9, 11],
R_P3_CTRL: [21.7, 13.5],
R_P3_ILIM: [20.95, 12.25],
R_P4_CTRL: [17.7, -16.5],
R_P4_ILIM: [19, -18],
R_PULL_SD_CMD: [-20, -0.5],
R_PULL_SD_D0: [-28, 5],
R_PULL_SD_D1: [-25.75, 5],
R_PULL_SD_D2: [-23.5, 5],
R_PULL_SD_D3: [-21.25, 4],
R_RESET: [-11.75, 19],
R_SD_BIAS: [-3.75, -8.25],
R_SD_CLK: [-12, 0],
R_SD_CTRL: [-9.5, 0],
R_SD_ILIM: [-6.65, -7.5],
R_SD_RESET: [-0.5, -27.25],
R_SD_VBUS1: [1.5, -10],
R_SD_VBUS2: [1.5, -8.75],
R_SMB_SCL: [9, -2.5],
R_SMB_SDA: [9, -1],
R_UP_VSENSE: [-21, 9],
R_VBUS_DET1: [-11, 4.5],
R_VBUS_DET2: [-11, 3],
};
export const placementFor = (
name?: string,
): { pcbX?: string; pcbY?: string } => {
const position = name ? positions[name] : undefined;
return position ? { pcbX: `${position[0]}mm`, pcbY: `${position[1]}mm` } : {};
};
export const coordinatesFor = (name: string): [number, number] => {
const position = positions[name];
if (!position) throw new Error(`Unknown component: ${name}`);
return position;
};