初始导入:PhoneRail 五路手机直供电源板
原理图/PCB 已在 EasyEDA 里做到 12 页跨页 0 漏接,固件刚完成骨架包 A1。 这次是把已有的一切一次性纳入版本控制,没有改动任何设计内容。 纳入: - 设计与需求文档、PROGRESS.md、小米8 参考原理图 PDF 与追脚脚本 - .claude/ 下的 EasyEDA 桥接工具链与几何/网表缓存(eda-parts.json、 pcb-parts.json、pcb-pads.json、p2-ch1.json 等,是重画各页的唯一事实来源) - 117 张验证截图(本项目所有方向问题都是靠人眼看截图发现的,属于证据不是垃圾) - firmware/ 的 A1 骨架与 site/ 文档站源码 .gitignore 排除:构建产物(firmware/build、host/build、sdkconfig)、 site/node_modules、__pycache__、桥接日志 _bridge.log、脚本自标的 *.stale。 .gitattributes 默认 `* -text`:现有 .py/.json 大多是 CRLF,原样存, 不让 git 重写行尾。唯一例外是 *.sh 强制 LF —— 带 \r 的 shell 脚本 bash 跑不了。 Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01QYuExfgyYa6DzRRcUso8M8
这个提交包含在:
+64
@@ -0,0 +1,64 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""跨页网络对账:列出每个网络名出现在哪些页,标出只出现在一页的(多半是漏接或拼错)。"""
|
||||
import json, sys, os
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
from eda import run
|
||||
from collections import defaultdict
|
||||
|
||||
JS = """
|
||||
const out={};
|
||||
for (const p of await eda.dmt_Schematic.getCurrentSchematicAllSchematicPagesInfo()){
|
||||
await eda.dmt_EditorControl.openDocument(p.uuid);
|
||||
const nets=[];
|
||||
for (const c of await eda.sch_PrimitiveComponent.getAll()){
|
||||
const t=c.getState_ComponentType();
|
||||
if (t==='netflag'||t==='netport'){
|
||||
let n=''; try{ n=c.getState_Net()||''; }catch(e){}
|
||||
nets.push(t+'|'+n);
|
||||
}
|
||||
}
|
||||
out[p.name]=nets;
|
||||
}
|
||||
return out;
|
||||
"""
|
||||
r = run(JS, timeout=600)
|
||||
assert r.get('success'), json.dumps(r, ensure_ascii=False)[:500]
|
||||
data = r['result']
|
||||
|
||||
pages, kinds, count = defaultdict(set), {}, defaultdict(int)
|
||||
for page, items in data.items():
|
||||
for it in items:
|
||||
k, n = it.split('|', 1)
|
||||
pages[n].add(page); count[n] += 1; kinds[n] = k
|
||||
|
||||
POWER = {'GND', '+3V3', '+12V'}
|
||||
# 五路复制后才会出现对端的网络(CH2~CH5 与 P4-USB 还没画)
|
||||
# 2026-09-04:五路都画完了,这些网络本来就该有对端;留着只是为了万一将来再加页。
|
||||
PENDING = tuple('EFUSE_EN EFUSE_FLT EFUSE_PG VDAC K2_ K3_ K4_ K5_ VBUS_EN'.split())
|
||||
# 2026-09-04 两板拆分之后,VO2_P~VO5_P 在 P5-BTB 上都有了对端(每路 3 针),
|
||||
# 原来那条「只为命名、天然单实例」的豁免已经不需要了。
|
||||
# 这个集合先留空:真出现单实例就该报出来,别再默默放行。
|
||||
NAMING_ONLY = set()
|
||||
|
||||
print('%-14s %-8s %-4s %s' % ('网络', '类型', '实例', '出现在哪些页'))
|
||||
print('-' * 78)
|
||||
bad, pend = [], []
|
||||
for n in sorted(pages):
|
||||
ps = sorted(pages[n])
|
||||
mark = ''
|
||||
if n not in POWER:
|
||||
if len(ps) == 1 and n.startswith(PENDING) and not n.endswith('1'):
|
||||
mark = ' (待 CH2~5 补对端)'; pend.append(n)
|
||||
elif n.startswith('VBUS_EN') and count[n] < 2:
|
||||
mark = ' (待 P4-USB 补对端)'; pend.append(n)
|
||||
elif n in NAMING_ONLY:
|
||||
mark = ' (只为命名,无对端;见 NAMING_ONLY 注释)'
|
||||
elif count[n] < 2:
|
||||
mark = ' <== 只有 1 个实例,必定漏接'; bad.append(n)
|
||||
print('%-14s %-8s %-4d %s%s' % (n or '(空)', kinds[n], count[n], ', '.join(ps), mark))
|
||||
|
||||
print()
|
||||
print('真正漏接(全工程只有 1 个实例): %d 个' % len(bad))
|
||||
for n in bad:
|
||||
print(' !', n, '->', sorted(pages[n]))
|
||||
print('等后续页面补对端: %d 个' % len(pend))
|
||||
在新工单中引用
屏蔽一个用户