PCB抄板后,微控制器能够通过调试器连接,程序却卡在“等待外部时钟就绪”这一步。此时,换一颗标称频率相同的晶体未必能解决问题。要判断故障出在哪里,先确认固件选择的时钟模式,再核对晶体规格和板上的实际负载,最后在不干扰振荡的条件下验证冷启动。
电子产品世界网《晶振不起振的原因是什么?》提出了这个常见的硬件调试问题。放到PCB逆向工程(PCB Reverse Engineering)的场景里,还有一层困难:原板能提供器件、焊盘和走线,却未必留下晶体的完整料号、固件配置或当年的测试条件。本文以微控制器外接无源石英晶体的电路为例,说明如何补齐这些证据。
第一步:先确认板上的“晶振”究竟是什么
中文物料表里,“晶振”可能指无源晶体谐振器(Crystal Resonator),也可能指有源振荡器(Crystal Oscillator,XO)。这一字之差,会改变原理图、采购料号和固件设置。
典型的无源晶体跨接在微控制器的振荡输入、输出引脚之间,与芯片内部电路共同起振。有源振荡器则需要供电,并向微控制器送入时钟信号。四个焊盘、金属外壳或顶面标注的频率,都不足以独立判断器件类型。应沿走线核对供电、接地和信号引脚,再查候选器件图纸。固件也要与实物对应:例如,STM32的外部时钟输入模式与外接晶体模式有不同的硬件连接要求。ST:STM32L0硬件开发指南
对跨国采购团队而言,BOM只写“8 MHz晶振”很难据此订货。至少应写明器件类型、封装、完整制造商料号;如果原料号无法确认,就把替代料列为候选,并写清需要验证的参数。
第二步:晶体标注“12 pF”,为什么不能直接装两颗12 pF电容?
晶体数据手册中的负载电容 \(C_L\),指晶体两端看到的有效负载。在常见的皮尔斯(Pierce)振荡电路中,两端各有一颗对地电容,其近似关系为:
\[ C_L \approx \frac{C_1 C_2}{C_1+C_2}+C_{\mathrm{stray}} \]
其中,\(C_{\mathrm{stray}}\) 表示芯片引脚、封装及PCB布局等引入的等效寄生电容。ST振荡器设计指南AN2867给出了该模型及其适用电路。
**举例:**假设某晶体要求 \(C_L=12\) pF,板上等效寄生电容估计为 3 pF,且两颗外接电容取相同值。按上式反算,每颗的起始估值是 18 pF。若直接装两颗 12 pF,计算得到的有效负载约为 9 pF。这个差异值得核查,但仅凭它不能断定板卡一定不起振。计算值用于选择初始方案,最终还要验证频率与启动表现;若芯片已启用内部可编程负载电容,也要把它计入分析。
这正是PCB抄板容易漏掉的地方:连通性检查能确认电容接到了哪个引脚,却不能告诉工程师原晶体要求多大的负载,也不能证明改版后的寄生电容与原板相同。
第三步:用测试区分“没起振”“没选中”和“测量造成停振”
| 程序能运行,但外部时钟一直未就绪 | 固件选择的是晶体模式还是外部时钟输入模式;是否仍在使用内部时钟 | 时钟源选择、使能和就绪状态的寄存器记录 |
| 原板能启动,恢复板偶尔卡住 | 两块板的晶体料号、负载电容、布局、供电及复位条件 | 在相同条件下,多次完全断电重启后的成功次数与就绪时间 |
| 探头接上后波形消失或启动行为改变 | 探头的输入电容是否扰动了振荡节点 | 移除探头后能否复现;芯片能否将该时钟送到独立输出脚观察 |
| 室温样板通过,更换批次或工作温度后异常 | 候选晶体的等效串联电阻(ESR)、驱动功率限制和温度范围 | 对应料号、批次、温度和供电条件的启动记录 |
尤其要注意第三种现象:探头也是电路的一部分。在振荡节点上测不到波形,不能直接判定原电路没有振荡。若芯片支持时钟输出脚,可优先从该脚观察,并注明输出源和分频设置;必须直接测量晶体引脚时,应采用器件厂商建议的低电容测量方法。ST AN2867:振荡器测量与验证
跨地区交付:让另一间实验室复现同一次启动
一条“晶振正常”的报告,无法告诉接收方测的是热复位还是完全断电启动,也没有说明程序最终使用了哪个时钟源。交付PCB抄板资料时,建议把结论写成一条可重复执行的测试记录:
**冷启动验证记录模板:**板卡版本与样板编号;固件版本;晶体料号及两颗负载电容值;供电与温度条件;断电后重新上电的步骤;外部时钟就绪的判据;启动次数、失败次数及最长就绪时间。
如果海外工厂使用了替代晶体,沿用同一记录格式即可对比。原板型号尚未查明时,应把“原样板在该条件下的实测结果”和“替代器件已达到的验收要求”分开写。接收方需要知道的是:哪一款器件、装在哪一版PCB上、配合哪一版固件,在什么条件下能够稳定启动。
我要赚赏金
