4. 芯片状态异常:芯片锁死、Boot引脚错误、芯片损坏或虚焊、复位电路异常
烧录失败的原因里,芯片本身的状态问题占了很大比例。很多工程师遇到烧录失败,第一反应是查硬件连接、查驱动,折腾半天才发现——芯片早就被锁死了,或者压根没正常工作。
这一节,我把芯片状态相关的常见问题拆开来讲。你对照着排查,能省下不少时间。
4.1 芯片锁死:读保护与写保护
芯片锁死,说白了就是芯片内部的保护机制被触发了。最常见的是读保护(RDP)和写保护(WRP)。
我在项目中遇到过好几次,客户拿回来的板子烧录不了,一查是读保护等级被改成了最高级。芯片直接拒绝任何调试接口的访问。
4.1.1 读保护(RDP)
读保护是防止别人通过调试接口(SWD/JTAG)读取芯片内部程序。STM32 系列里,RDP 分三个等级:
| 等级 | 含义 | 烧录影响 |
|---|---|---|
| Level 0 | 无保护 | 正常烧录 |
| Level 1 | 禁止读Flash | 无法读取,但可擦除后重新烧录 |
| Level 2 | 永久锁定 | 不可逆,芯片报废 |
4.1.2 写保护(WRP)
写保护是保护特定Flash区域不被意外修改。如果你烧录的地址正好落在写保护范围内,烧录器会报错。
怎么判断?
- 烧录软件提示“Write Protection Error”或“Flash Verify Failed”
- 读出来的Flash内容全是0xFF或固定值
解决办法:
- 用烧录工具(如STM32CubeProgrammer)执行“Option Bytes”擦除
- 或者用“Full Chip Erase”清空整个Flash
- 如果擦除失败,检查芯片是否进入了Level 2
4.2 Boot引脚设置错误
Boot引脚决定了芯片上电后从哪里启动。很多芯片(比如STM32)有多个启动模式,通过BOOT0和BOOT1引脚的电平组合来选择。
你想想看,如果你把Boot引脚拉到了“从系统存储器启动”模式,烧录器自然找不到你的用户程序。
| BOOT0 | BOOT1 | 启动区域 | 说明 |
|---|---|---|---|
| 0 | X | 用户Flash | 正常启动模式 |
| 1 | 0 | 系统存储器 | 内置Bootloader,可用于烧录 |
| 1 | 1 | SRAM | 调试用,一般不用于烧录 |
我曾经帮一个同事排查问题,他焊了块板子,烧录器死活连不上。我拿万用表一量,BOOT0引脚被拉到了高电平。他以为那个引脚是悬空的,结果PCB走线不小心连到了VCC。改过来就好了。
4.3 芯片损坏或虚焊
这个原因听起来简单,但实际排查起来最费时间。因为虚焊和芯片损坏的表现千奇百怪。
4.3.1 虚焊
虚焊常见于手工焊接的板子,或者BGA封装的芯片。典型症状:
- 烧录器能识别到芯片ID,但烧录到一半卡死
- 偶尔能烧录成功,偶尔失败
- 用手按压芯片表面,烧录成功率明显变化
怎么查?
- 用万用表测电源引脚对地电阻,排除短路
- 用示波器看SWD/JTAG引脚的波形,正常应该有连续的时钟和数据信号
- 用热风枪局部加热芯片,如果加热后能烧录成功,基本就是虚焊
4.3.2 芯片损坏
芯片损坏的原因很多:电源反接、过压、静电、甚至焊接温度过高。
判断方法:
- 芯片表面有裂纹、鼓包、烧焦痕迹
- 电源引脚对地短路
- 芯片严重发烫(正常工作时微温)
- 烧录器完全无法识别芯片ID
如果确认芯片损坏,别犹豫,直接换。我曾经为了省一块钱芯片,花了两小时排查,最后发现是芯片内部LDO烧了。得不偿失。
4.4 复位电路异常
复位电路是芯片正常工作的前提。复位引脚如果被拉低,芯片就一直处于复位状态,烧录器自然连不上。
常见问题:
- 复位引脚对地短路(焊接锡渣、PCB毛刺)
- 复位电容漏电或短路
- 外部复位芯片输出异常
- 手动复位按键卡住
排查步骤:
- 用万用表测复位引脚电压,正常应该是高电平(VCC)
- 用示波器看复位引脚波形,上电时应该有一个从低到高的跳变
- 如果电压异常,断开外部复位电路,单独测芯片复位引脚
我记得有一次,客户说他们的板子批量烧录时,有20%的板子烧录失败。我过去一看,复位电路用的电容是10μF,但PCB布局离芯片太远,走线又细又长。上电时复位引脚上升沿被拉得很慢,芯片启动时序不对。换成1μF电容后,问题解决。
4.5 知识结构图
下面这张图把芯片状态异常的四个主要方向串起来了。你排查时按这个顺序走,效率最高。
4.6 快速排查清单
最后,我整理了一份排查清单。你遇到烧录失败时,按这个顺序过一遍,基本能覆盖90%的芯片状态问题。
| 步骤 | 检查项 | 工具 | 正常结果 |
|---|---|---|---|
| 1 | 复位引脚电压 | 万用表 | 高电平(VCC) |
| 2 | 复位上电波形 | 示波器 | 低→高跳变,上升沿<1ms |
| 3 | BOOT0/BOOT1电平 | 万用表 | BOOT0=0, BOOT1=0 |
| 4 | 芯片电源电压 | 万用表 | 在芯片规格范围内 |
| 5 | Option Bytes状态 | 烧录器 | RDP=Level 0, WRP未使能 |
| 6 | 芯片ID识别 | 烧录器 | 能读到正确的芯片ID |
| 7 | SWD/JTAG引脚波形 | 示波器 | 有连续时钟和数据信号 |