4. 时钟与复位:烧录失败的隐形杀手
时钟和复位,是芯片正常工作的“心跳”和“起跑线”。烧录失败,十有八九跟它们有关。我见过太多工程师,拿着示波器满板子找信号,最后发现是晶振没起振,或者复位时序乱了套。这一章,咱们就把这些“隐形杀手”揪出来。
4.1 外部晶振:起振的“硬条件”
外部晶振,说白了就是给芯片提供一个精准的“节拍”。它不起振,芯片就像没心跳的人,啥也干不了。
4.1.1 起振的三个必要条件
晶振要起振,得满足三个硬条件。缺一个,它就“罢工”。
| 条件 | 说明 | 我踩过的坑 |
|---|---|---|
| 正确的负载电容 | 晶振两端对地的电容值,必须匹配晶振的负载电容(CL)。 | 有一次,我用了20pF的电容配12pF的晶振,结果起振极慢,烧录时有时无。 |
| 足够的驱动能力 | 芯片内部的振荡器电路,要能“推得动”晶振。 | 低功耗芯片配高ESR(等效串联电阻)晶振,很容易“推不动”。 |
| 干净的电源 | 晶振供电的纹波要小,噪声要低。 | 电源纹波大,晶振频率会抖,烧录直接失败。 |
4.1.2 起振时间与烧录时序
晶振起振需要时间,通常是几毫秒到几十毫秒。烧录器在开始通信前,必须等待晶振稳定。我曾经遇到一个案例,烧录器发指令太快,芯片还没准备好,结果通信失败。
解决办法: 在烧录器的配置里,增加“起振等待时间”。一般设个50ms就够用了。如果还不行,检查晶振的负载电容是否匹配。
4.2 复位电路:别让芯片“装死”
复位电路,就是给芯片一个“重新开始”的信号。复位时序不对,芯片可能一直处于复位状态,或者复位不彻底,导致烧录失败。
4.2.1 复位电平与时序要求
大多数芯片是低电平复位,也就是复位引脚拉低,芯片复位;拉高,芯片开始工作。复位时序,说白了就是复位引脚从低到高的变化过程。
- 复位脉宽: 复位信号必须保持足够长的时间,通常至少几个毫秒。太短了,芯片内部电路来不及复位。
- 复位释放: 复位信号释放后,芯片需要一段时间才能稳定工作。这段时间内,不能进行烧录操作。
4.2.2 常见的复位电路问题
复位电路看着简单,但问题不少。我总结了几种常见情况:
- 复位引脚悬空: 这是新手常犯的错误。复位引脚悬空,电平不确定,芯片可能随机复位。
- 复位电容太大: 复位电容太大,复位时间过长,烧录器可能等不及。
- 复位电路受干扰: 复位引脚靠近强干扰源,比如电机、继电器,可能导致芯片误复位。
4.3 内部RC振荡器:可靠吗?
内部RC振荡器,是芯片自带的时钟源。优点是省成本、省PCB面积。缺点是精度差、温漂大。
4.3.1 精度与温漂
内部RC振荡器的精度,通常在±1%到±5%之间。温度一变,频率也跟着变。对于烧录来说,如果芯片内部RC振荡器的精度太差,可能导致烧录通信的波特率对不上,烧录失败。
| 时钟源 | 精度 | 温漂 | 适用场景 |
|---|---|---|---|
| 外部晶振 | ±10ppm ~ ±50ppm | 极小 | 对时钟精度要求高的场景 |
| 内部RC振荡器 | ±1% ~ ±5% | 较大 | 对成本敏感、对精度要求不高的场景 |
4.3.2 内部RC振荡器的可靠性问题
内部RC振荡器还有一个问题:它可能受芯片制造工艺影响。同一批芯片,有的频率偏快,有的偏慢。我遇到过一批芯片,内部RC振荡器频率偏差太大,导致烧录失败。后来换了外部晶振,问题解决。
4.4 时钟源切换:别在关键时刻“掉链子”
有些芯片支持多个时钟源,可以在运行时切换。比如,上电时用内部RC振荡器,等外部晶振稳定后,再切换到外部晶振。这个切换过程,如果处理不好,很容易出问题。
4.4.1 切换的时机与步骤
时钟源切换,不是想切就切的。必须按照芯片手册的步骤来:
- 等待目标时钟源稳定: 切换前,必须确保目标时钟源已经稳定输出。
- 关闭中断: 切换过程中,要关闭所有中断,防止切换被打断。
- 执行切换指令: 按照芯片手册,设置相应的寄存器。
- 等待切换完成: 切换完成后,再开启中断。
4.4.2 切换失败案例分析
我曾经遇到一个项目,芯片上电后用内部RC振荡器,然后切换到外部晶振。结果,切换后芯片直接“死机”。排查了半天,发现是外部晶振还没稳定,就切换过去了。后来在切换前加了100ms的延时,问题解决。
知识体系:时钟与复位排查逻辑
下面这张图,是我自己总结的排查逻辑。遇到烧录失败,先按这个流程走一遍,能解决大部分问题。
嗯,这张图的核心逻辑就是:先看时钟,再看复位。时钟是基础,基础不稳,后面都白搭。复位是保障,保障不到位,芯片就“装死”。