
下载了原理图,PCB也能打开,是否就可以直接下单?先别急。有一种返工很隐蔽:你看的在线图纸和你下载的工程,名字一样,细节却已经不同。等软件、接线图和板子各认一套命名,排错就成了猜谜。
这次拿一块 D1s/F133 核心板做练习,把审查范围收在两件具体的事上:锁定图文代码对应的工程版本,以及检查电源与启动接口的关键标注。最后做一个可以实际运行的 Python 工具,把“眼睛看过了”变成可重复的检查。
这里没有实体上电、Linux 启动或 DRC 结果。读者得到的是下单前的审查方法与工具,不是一份已验证的整机复刻教程。
核对工程时,在线 PCB 的 SPI 数据线使用 SPI0_MOSI/MISO,下载的硬件包则使用 SPI0_D0/D1/D2/D3。只记住工程链接或文档 ID,无法解释这处差异。
本次以下载的硬件 ZIP 为唯一输入,把其中的原理图和 PCB JSON 同时导入嘉立创 EDA 独立副本,然后重新导出。原文件没有改接线,也没有改器件参数。这样,下面的图、脚本输入和附件才有一个共同起点。

图1:原理图总览用于定位分区。细小标注请结合下方局部图或附件中的高清 PNG、矢量 PDF 阅读。
版本记录不必写成一大本。至少记住三个东西:来源地址、输入文件的 SHA-256、此次检查和导出的日期。文件名相同但内容不同,哈希会告诉你;图纸改了却继续复用旧测试结果,也会留下明确的断点。
本次输入压缩包的 SHA-256 为:
EE2D3C1B9A1B1E31D8E38F7444C725CE1931463C6E8F9656C890AE56FF518EBC
图2:POWER 分区完整保留了反馈、电感、使能和原图备注。图中的 U1 是一颗 EA3036A,内部有三路开关通道。
电源区最容易被一句“三路电源”带偏:三路通道不等于三颗稳压芯片。图中三个 VIN 接到 VBUS,三个 SW 分别经过 L1、L2、L3;输出标签是 3V3、1V8、0V9。
按图纸可整理出如下核对表。它记录的是标注值,不是测量值。
输出标签 | 电感 | 反馈上臂/下臂 |
|---|---|---|
3V3 | L1,1.5 μH | R2 680 kΩ / R4 150 kΩ |
1V8 | L2,1.5 μH | R5 300 kΩ / R8 150 kΩ |
0V9 | L3,1.5 μH | R9 75 kΩ / R10 150 kΩ |
这个表能帮助查错,却不能直接宣告输出合格。要算反馈设定值,仍须拿到实际采购器件的数据手册,确认反馈基准与容差;要判断能否带起负载,还需要各电源域的启动和峰值电流。
原图电源区留了一句“EA3036可能不够,先试试看”。这句话值得留下:它说明负载余量当时就不是已经闭合的结论。芯片型号、电感值和网络标签齐全,也无法替代启动压降、纹波和热设计检查。

图3:主芯片上部引脚局部。电源标签分别落在不同引脚附近;相邻位置不代表相同电源域。
读电源图时,可以用“输出标签—主芯片电源脚—去耦”这条路线做逐项复核。尤其要区分 VDD-CORE、各组 VCC 与模拟相关电源。本文只展示图纸标注,不把符号与标签的存在当作每个引脚都已满足芯片要求。

图4:SPI 与 Card 分区,能直接读到 Flash 引脚和 TF 卡信号标注。
U2 的型号标注为 25F256。按这张图,SPI0_D0 接到 5 脚 DI(DQ0),SPI0_D1 接到 2 脚 DO(DQ1);SPI0_D2、SPI0_D3 分别接到 3 脚 WP#(DQ2) 和 7 脚 HOLD#(DQ3)。6 脚是 CLK,1 脚是片选。
这解释了为什么不能在全文里直接把 D0/D1 全部替换成 MOSI/MISO:图里还有 DQ2、DQ3 及其上拉。是否采用四线模式,需要继续核对实际 Flash 器件、主控复用与软件配置,本文没有验证这些运行条件。
Card 分区使用 SDC0_CMD、SDC0_CLK 和 SDC0_D0 至 SDC0_D3。网络标注能对上,卡槽封装却仍可能不对。复刻前必须核对实际卡槽料号、焊盘编号、插卡方向和机械尺寸,不能把看起来相同的外壳当作封装兼容。
最省事的检查是搜索整个 JSON:只要找到 SPI0_D0 就算通过。问题在于,它可能出现在备注里,甚至只是 SPI0_D01 的一部分。这样的 PASS 很好看,也很容易误导。
配套工具改为解析 JSON,再读取 EasyEDA 的实际记录:原理图只统计 N 网络标签和 F 电源标志,PCB 只统计 PAD 与 TRACK 的网络字段。封装内部记录也会展开。核心函数如下,完整命令行程序和测试在附件中。
from collections import Counter
def inventory(document):
counts = Counter()
if "schematics" in document:
sheets = [s["dataStr"] for s in document["schematics"]]
elif "shape" in document:
sheets = [document]
else:
raise ValueError("Unsupported EasyEDA document structure")
for sheet in sheets:
pcb = str(sheet.get("head", {}).get("docType")) == "3"
for shape in sheet["shape"]:
for record in shape.split("#@$"):
fields = record.split("~")
kind = fields[0]
if pcb:
index = {"PAD": 7, "TRACK": 3}.get(kind)
if index is not None:
counts[fields[index]] += 1
elif kind == "N":
counts[fields[5]] += 1
elif kind == "F":
parts = record.split("^^")
if len(parts) < 3:
raise ValueError("Malformed net flag")
counts[parts[2].split("~")[0]] += 1
return counts它针对附件中的 EasyEDA Standard JSON 结构编写。遇到其他格式或损坏记录,应报错后检查输入,不能把解析异常改成“已通过”。
解压附件,在有 Python 3.12 的电脑上运行,不需要安装第三方库:
python net_audit.py hardware/schematic.json hardware/pcb.json
python -m unittest -v test_net_audit.py两份输入的电源、SPI、SD 和 USB 预期名称均存在。SPI 记录次数如下:
网络 | 原理图记录数 | PCB焊盘/走线记录数 |
|---|---|---|
SPI0_CS | 2 | 6 |
SPI0_CLK | 2 | 3 |
SPI0_D0 | 3 | 8 |
SPI0_D1 | 2 | 4 |
SPI0_D2 | 2 | 6 |
SPI0_D3 | 2 | 6 |
记录数不是器件数,也不是连通长度。PCB 一条网络可以由多个焊盘和多个走线记录组成,原理图同名标签也可能重复出现。这个结果只能回答“预期的准确名称是否进入了对应记录”,不能回答两点是否真正连通、布线是否合格或能否启动。
三个测试分别覆盖备注与前缀误命中、封装内焊盘与走线计数、未知结构与损坏标志拒绝。本次实际运行均通过。改进的价值就在这里:让检查证据更可信,同时让工具的能力边界更清楚。

图5:顶面方向的顶层铜、顶层丝印、外形与焊盘视图。

图6:从板底观察的底层视图。导出母图经过整体水平翻转,观察方向与图5不同。
两张图适合检查器件区域、连接器位置和顶底层走线分布。它们没有展示这块四层板的两个内层,因此不能仅凭图5、图6判断完整地回路或高速信号质量;铺铜面积大也不能自动推导出回流路径连续。
下一步应在完整工程里检查层叠与内层、关键电源回路、过孔连接及制造规则,再运行 DRC。电气规则检查与实际测量各解决不同问题,本文没有用高清图片替代这些结果。
此外,Mini PCIe 外形不能当作标准 PCIe 电气兼容的保证。图纸中的卡边接口引出自定义信号,配底板时仍要逐脚核对。TF 卡槽、未完成的音频部分以及模块相关的 Wi-Fi 配置,也都没有在这次审查中被验证为可用。
下单前先把版本锁住,再把已知问题写成具体检查项,会比拿到板子后逐个猜接口更省时间。这篇文章完成的是第一轮文件与标注审查,后续上电和软件验证应另存证据,不能沿用这里的 PASS。
YuzukiNezha-D1s-article-materials.zip,含完整 net_audit.py、测试、对应 JSON、原始说明与验证记录。跨平台读者可访问 https://mc.dfrobot.com.cn/article-386230.html 查找附件。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。