# -*- coding: utf-8 -*- """P4-USB 网表:5 路 USB 通断(TPS22918 负载开关,只切 VBUS,D± 板上直通)。 一路一列,信号自上而下:J12~J16 USB-A 上游 -> U24~U28 -> J17~J21 4P 出线座。 用法见 build.py。""" import sys, os HERE = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, HERE) sys.path.insert(0, os.path.join(HERE, 'skills', 'easyeda-sch-geometry', 'scripts')) import local_netcheck as N w, gnd, pwr, port, txt = N.w, N.gnd, N.pwr, N.port, N.txt def gndu(x, y): """地旗 rot=180:引脚在下、符号在上,供导线从下方接入。""" N.FLAGS.append(('Ground', 'GND', x, y, 180)) XS = [130, 345, 560, 775, 990] for n, X in enumerate(XS, 1): up = '+5V' # 2026-09-03 起:板上 U30 的 5V 轨(原来是 USB-A 来的上游 5V) vb = 'VBUS%d' % n # 开关之后送手机的 5V dm = 'USB%d_DM' % n dp = 'USB%d_DP' % n en = 'VBUS_EN%d' % n ct = 'CT%d' % n # ── D± 从 P4B-HUB 的 U32 下行口进来(原来是从 USB-A 座直取)── # 两个端口错开 40 的 y,标签才不撞在一起 w(dm, (X + 5, 740), (X + 5, 305)); port(dm, X + 5, 740, 0, 'IN') w(dp, (X - 5, 700), (X - 5, 305)); port(dp, X - 5, 700, 0, 'IN') # ── GND 母线直下到 4P 出线座 ───────────────────────────────── w('GND', (X - 15, 620), (X - 15, 305)) w('GND', (X - 15, 600), (X - 45, 600)) w('GND', (X - 45, 600), (X - 45, 580)); gnd(X - 45, 580) # ── 板上 5V 轨 -> 开关 VIN,带 2.2uF 输入电容 C70n ──────────── w(up, (X + 15, 660), (X + 15, 610)); port(up, X + 15, 660, 0, 'IN') w(up, (X + 15, 610), (X + 75, 610)) w(up, (X + 75, 610), (X + 75, 600)) # U.VIN w(up, (X + 35, 610), (X + 35, 595)) # C70n.2 w('GND', (X + 35, 555), (X + 35, 540)); gnd(X + 35, 540) # ── 开关 GND ───────────────────────────────────────────────── w('GND', (X + 85, 600), (X + 85, 620)) w('GND', (X + 85, 620), (X + 65, 620)) w('GND', (X + 65, 620), (X + 65, 640)); gndu(X + 65, 640) # ── 开关 ON:VBUS_ENn 端口 + 100k 下拉 R70n ─────────────────── w(en, (X + 95, 600), (X + 95, 685)) w(en, (X + 95, 685), (X + 25, 685)) w(en, (X + 25, 685), (X + 25, 675)); port(en, X + 25, 675, 0, 'IN') w(en, (X + 95, 660), (X + 125, 660)) # -> R70n.1 w('GND', (X + 125, 620), (X + 125, 605)); gnd(X + 125, 605) # ── 开关输出 VBUSn:QOD 短接 VOUT,100nF 输出电容 C71n ──────── w(vb, (X + 75, 480), (X + 75, 330)) w(vb, (X + 75, 330), (X + 15, 330)) w(vb, (X + 15, 330), (X + 15, 305)) # -> J(16+n).1 w(vb, (X + 85, 480), (X + 85, 455)) # QOD w(vb, (X + 85, 455), (X + 75, 455)) w(vb, (X + 75, 420), (X + 55, 420)) # C71n.1 w('GND', (X + 55, 380), (X + 55, 365)); gnd(X + 55, 365) # ── CT 摆率电容 C72n(100pF C0G)───────────────────────────── w(ct, (X + 95, 480), (X + 95, 450)) w('GND', (X + 95, 420), (X + 95, 405)); gnd(X + 95, 405) # ── 4P 出线座的两个固定脚接地 ──────────────────────────────── w('GND', (X - 35, 305), (X - 35, 320)) w('GND', (X - 35, 320), (X - 15, 320)) # 固定脚 5 的地旗要绕过连接器右侧的型号文字(X+56~X+121)才放得下 w('GND', (X + 35, 305), (X + 130, 305)); gnd(X + 130, 305) txt('CH%d' % n, X + 45, 705, 13) # ── 文字 ──────────────────────────────────────────────────────── txt('【P4-USB】五路 USB 通断:只切 VBUS,D± 板上直通(上游 = P4B-HUB 的 U32)', 45, 796, 14) txt('TPS22918: 1~5.5V / 2A / Ron 52mΩ,ON 脚不得悬空', 45, 185, 11) txt('R701~705 100k 下拉 → ESP32 复位期间 VBUS 全断', 45, 168, 11) txt('CT 100pF C0G: tR≈425µs,涌流≈94mA(10µF 负载)', 45, 151, 11) txt('QOD 短接 VOUT: 内部 RPD≈24Ω,关断约 200µs 归零', 45, 134, 11) txt('CIN 2.2µF > COUT 100nF;VBUS 来自板上 5V 轨 U30,不吃上游线电流(§9.4)', 45, 117, 11) txt('2026-09-03 改板载 Hub:J12~J16 五个 USB-A 已删,D± 改由 U32 下行口供给(§15.1)', 45, 100, 11) NC = {}