ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

烧录失败排查指南:九成问题不在芯片,供电、接线与配置是关键

烧录失败排查指南:九成问题不在芯片,供电、接线与配置是关键 烧录良率上不去是量产项目里特别磨人的一件事。我见过不少团队开发阶段样机怎么烧都能过一进产线良率就掉到90%以下然后开始挨个怀疑芯片、怀疑烧录器、怀疑员工操作。说实话排查了几年烧录问题之后我现在总结出一条规律真正属于“芯片坏了”的占比极低九成以上都集中在几个固定环节里。这篇文章就把我自己的排查顺序和判断依据完整整理一遍覆盖硬件供电、信号连接、工具链配置和产线管理几大块适合做嵌入式软件开发、硬件设计、DFM评审和量产导入的工程师参考。你不需要按顺序从头看到尾直接对照你的失败现象找对应章节就行。1. 收到烧录失败先别急换芯片把失败“定性”再说1.1 烧录动作到底是哪几步烧录本质上就三件事擦除、写入、校验。擦掉目标存储器里的旧内容把固件数据按地址写进去再读出来和原文件比对。任何一步卡住或出错结果都是“烧录失败”。搞清楚失败发生在哪一步比盲目换下载器重要得多。调试器报错信息其实已经帮你分好了类。比如 Keil 的 Output 窗口出现 “Flash Download failed”一般卡在擦除/写入“Erase Failed” 就是擦除阶段“Verify failed” 是校验阶段而 “No target connected”“Connection error” 这类是连话都没说上连接阶段就挂了。另外还要分“硬失败”和“软失败”。硬失败是重复烧录多次依旧失败大概率硬件损伤、芯片锁死、Flash 坏块软失败是失败一次重新插拔一下就好了这类大多是接触、时序、供电波动造成的。排查思路完全不同前者查硬件和器件本身后者查工装和工艺参数。1.2 用错误码和日志代替猜我踩过最大的坑就是不看日志直接换芯片。产线报“10%烧录失败”先让产线人员把失败的板子按错误码分类看到底是哪一类。J-Flash 有独立的 log 窗口OpenOCD 的终端会输出很明确的 error 信息ESP32 用 esptool 的串口输出也会提示类似 “A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header” 的话这些输出直接指向超时和连接问题。Keil 5 的烧录失败信息要留意 “RDDI-DAP Error”。这个报错最常见的原因是目标板供电不稳或调试接口被占用。我测试过很多次RDDI-DAP 出现时先给目标板重新上电一次有七成概率能恢复剩下的就要查线长和 SWD 时钟频率了这个在后面单独说。1.3 别忘了“烧录成功但板子不跑”也算不良还有一种更隐蔽的失败烧录器明确报成功检验工装也显示校验通过但板子亮机就死。这种现象通常不是烧录环节本身的问题而是固件地址、启动配置、BOOT 引脚或加密位不对。但产线统计良率时它一样算不良品。我建议在烧录工位后加一个“上电自检”步骤用串口抓目标板启动日志确认系统真正跑起来再放行。哪怕只是检测串口有没有打印启动信息都能拦下很多“假成功”。2. 硬件环节供电、地线、复位和 BOOT九成问题藏在这里2.1 供电电压跌落是烧录失败的隐形头号杀手批量烧录时最常见的场景是调试器通过 USB 接电脑USB 的 5V 再经过目标板上的 LDO 变成 3.3V 给芯片供电。看起来天经地义但这个链路很不稳。Flash 擦写瞬间电流会突然拉高如果 USB 口供电能力不足或 LDO 余量不够VCC 瞬间跌落几毫秒烧录器这边就会报连接失败或写入超时。我处理过一个典型案子某个 ESP32 模组的烧录批量失败率一下子从 1% 涨到 12%后来量了一下烧录瞬间的 3.3V发现跌落到了 2.7V 以下。原因就是换了一批品质不太行的 USB 线线阻变大。把目标板供电改到独立的 5V/2A 电源适配器后失败率直接归零。排查供电问题别只看万用表要用示波器监控烧录瞬间的 VCC 波形没有示波器的话至少换一个供电更充裕的电源试试这是成本最低的 A/B 测试。2.2 地线没连好一切信号都是白搭很多烧录器通过 USB 和电脑相连而电脑的 USB 地就是调试器的参考地。如果目标板同时用独立适配器供电两块板之间地电位不一定一致。地电位差导致 SWD 信号判定错误表现就是芯片有时候能识别、有时候不能甚至完全找不到目标。解决办法简单粗暴拿一根杜邦线先把烧录器的 GND 和目标板的 GND 连起来再试一次。我做产线支持时几乎每周都会碰到一两块“怎么都连不上”的板子这样一接就好了。另外要注意 USB 延长线和电脑主板的品质USB 地参考不稳也会引发类似问题。2.3 BOOT/下载模式引脚顺序比电平更重要ROM 引导类的芯片几乎都要先进入下载模式。STM32F1/F4 系列要用 BOOT0 拉高进入系统 Bootloader这时可以通过串口 ISP 或 DFU 烧录ESP32 系列下载模式要求 GPIO0 拉低然后 EN 脚给一次复位。很多“烧录不进去”的案例仔细一看是 GPIO0 确实拉低了但没给复位芯片没有重新采样启动引脚电平当然进不了下载模式。顺序一定是先设置 BOOT 引脚电平再触发复位/上电不要反过来。DSP 类的 C6748 或部分机顶盒主控也一样串口烧录前要看启动模式拨码或电阻配置。像 C6748 这种不带内部非易失 Flash 的 DSP烧的是 SPI Flash 或 NAND串口引导需要把启动管脚配置为 UART 模式。开发阶段用仿真器怎么烧都行量产时按目标方案数据手册把启动配置核对一遍能省很多沟通成本。2.4 电平匹配烧录器不是万能的不同芯片的 IO 电压差别很大。老式 5V 单片机、3.3V 的 STM32、1.8V 的 nRF51822、还有部分专用 SoC逻辑电平如果对不上SWD/JTAG 信号就判不出高低电平。选择烧录器前先确认目标板 IO 电压范围。ST-Link V2 和 J-Link 都有参考电压引脚接线时会把目标板的 VCC 引给烧录器它据此调整输出电平如果不接这个参考电压很多烧录器会默认用 3.3V 甚至直接不工作。对于 1.8V 的目标芯片务必选支持 1.8V 的版本或加电平转换别硬来。烧录器烧的也不只是 Flash有的还顺带烧写选项字节、加密位这些操作同样受电平影响配置字节写错可能导致芯片从此无法连接。3. 连接与信号完整性线越短越稳时钟越低越稳3.1 接线与线序最便宜但也最容易被忽略的坑SWD 接口正常只需要 SWDIO、SWCLK、GND 三根线就能烧录加上 RESET 会稳一些。产线员工或者你自己在开发阶段用杜邦线连接时最常见的问题是线序。SWDIO 和 SWCLK 接反或者使用了某种转接板但没有核对每个引脚定义都会造成“连不上”或者“时好时坏”。我见过一个自制的转接板把 SWCLK 和 SWDIO 丝印画反了开发时用短杜邦线勉强能烧一装进治具用长排线就全面失败。排查这类问题时先用万用表蜂鸣档沿着连接器到调试器接口逐根量一遍线序不要相信丝印。再补充一句没有特殊需求时烧录探针不要把 RESET 接到其他 GPIO 上否则目标板运行中一直被复位现象跟“烧录失败”一模一样。3.2 把烧录时钟降下来能解决一半的超时问题SWD/JTAG 的通信频率越高对线材、寄生电容、地线噪声越敏感。J-Link 默认的 SWD 速度可能到 4MHzST-Link 也支持较高的频率但在产线那种又长又乱的线缆环境下4MHz 经常握手失败或传着传着就超时。把速度降到 1MHz、500kHz 甚至 100kHz多数情况下立刻稳定。具体设置Keil 里进入 Options for Target → Debug → Settings把 Max Clock 调低J-Flash 在 Project Settings 里选 interface speedOpenOCD 的命令行就是 “adapter speed 1000”“transport select swd” 这类。ESP32 用 esptool 烧录时如果默认波特率高导致超时加低波特率参数重试。串口 ISP 也一样115200 不稳定就降到 57600 或 38400STC 单片机的下载器不是也经常建议用低波特率吗。3.3 顶针、排线和接触电阻产线良率的隐藏变量批量烧录的失败率如果随时间慢慢上升优先怀疑接触件。压针式烧录夹具用久了顶针会氧化、磨损接触电阻变大接触电阻只要到几欧姆SWD 信号就开始劣化。我建议大家定期做“连续烧录 50 片”的抽检如果失败率突然升高先清洁顶针再做接触电阻测量要求小于 1Ω不行就换一批顶针。如果是手工生产线不要用长度超过 30cm 的杜邦线烧录尤其是没有屏蔽的排线。长线就是天线除了引入噪声还容易在插拔瞬间产生毛刺信号。量产治具建议用短排线加镀金探针信号线、电源线分开走地线要粗。3.4 目标板外围电路会“捣乱”有些板子烧录失败不是烧录端问题而是目标板上电后那些外设太“吵”。比如大电容导致上电瞬间拉低电源MOSFET 驱动电路在初始化时产生大电流毛刺这些都会干扰 Flash 擦写时序。排查时做一个简单实验断开目标板上的负载和外设尤其是大功率器件只保留 MCU 最小系统去烧录如果稳住说明外围电路影响了烧录过程可以考虑在烧录工装上加电源隔离或修改上电时序。另外SD 卡烧录 Ubuntu、树莓派系统镜像这类写卡场景物理层面原理不同但可靠性逻辑类似劣质 SD 卡、读卡器接口氧化、供电不足会导致写入慢或写入失败。写系统卡时尽量用品牌卡不要贪便宜用杂牌扩容卡写完一定要校验。balenaEtcher 默认有校验选项Win32DiskImager 也有这几秒钟不要省。3.5 时钟、复位和调试口撞车问题还有两种常见“怪病”一是目标板外部晶振没起振芯片内部时钟虽然能跑但烧录时序和通信不稳换来换去都不行排查后换个晶振负载电容就恢复了。二是 SWD 引脚被复用功能抢占比如 STM32F405 的 SW 脚被配置成了 GPIO一旦烧录口被禁用调试器就再也连不上。这种“锁死”看着吓人但大部分能救把 BOOT0 拉高上电进入系统 Bootloader用串口 ISP 全片擦除再回到 SWD 烧录就可以了。不要一发现连不上就判死刑。4. 工具与配置芯片型号、烧录算法、复位方式和校验顺序4.1 Keil5 烧录失败的经典报错逐个说Keil 5 在产线场景虽然用得少但开发阶段很常见先把它讲透。“Flash Download failed - Cortex-M3/M4”这类错误优先核对两件事Target Device 是不是选对了Flash Download 页面里的 Programming Algorithm 有没有对应芯片的 .FLM 文件。换芯片型号忘了换 Flash 算法是新手最容易踩的坑。“RDDI-DAP Error”前面提过常见于调试口被占用、供电不稳、线缆太长。按顺序做三件事目标板重新上电降低 Debug 里的 Max Clock 到 1MHz 以下检查 SWDIO/SWCLK 接线和电压。实在不行用串口 ISP 擦除后重新连接。还有一个细节部分器件 Pack 没有安装时Target 下拉框里根本找不到芯片型号这也会导致后面所有设置错乱先装对应器件 Pack 再说。4.2 独立烧录器与命令行量产推荐少用 IDE量产阶段强烈建议用独立烧录工具而不是打开 IDE 点烧录。IDE 版本、编译路径、误操作都容易引入变量。J-Flash 是 SEGGER 家的老牌工具打开后选目标设备、接口类型、速度、加载固件、点 Program。要注意 Device 选错会让 Flash 算法错乱哪怕烧进去也可能校验不过。OpenOCD 适合 Linux 产线自动化和脚本集成一条命令就能完成烧录和校验openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c program app.hex verify reset exitC6748 这类 DSP 用 CCS 烧录路径相对复杂要先生成正确的 AIS 引导文件再通过串口工具写入如果直接用 CCS 烧到 RAM断电就没了量产时要分清“烧 RAM 调试”和“烧 Flash 固化”的区别。ESP32 则常用 esptoolesptool.py --port COM3 --baud 921600 write_flash 0x1000 bootloader.bin 0x8000 partition-table.bin 0x10000 app.bin这些命令参数看着繁琐但每段固件的起始地址都必须核对特别是做量产自动化时脚本里的地址写错会导致“烧录成功但起不来”的批量事故。4.3 按钮点下去之前擦除策略和校验选项先确认量产烧录最忌讳直接沿用开发时的默认设置。一个典型场景产品出厂前已经烧录过校准数据、序列号、MAC 地址这些数据存放在 Flash 的特定扇区产线再烧录时如果选了“全片擦除”校准区就没了整板报废。这种情况要把烧录策略改成“只擦除应用程序所在扇区”或使用带地址保护的烧录工具。校验选项一定要打开。J-Flash 烧录完成后默认会做 verifyOpenOCD 命令里我写了 verifyKeil 的 Flash Download 页面里也有 “Verify” 选项。实测下来很多“报成功但产品工作异常”的板子打开校验后会在量产环节被当场拦下来。至于 Flash 读保护/写保护等级太高导致的烧录失败如果是 RDP 等级 1用调试器全片擦除一般能解锁等级 2 基本是永久锁定只能换芯片量产前别轻易设置这个等级。4.4 多段固件与地址错位烧录成功的“假象”带 Bootloader 的产品量产烧录往往一次要写多段二进制。STM32 系列典型布局是 0x08000000 放 Bootloader0x08008000 放 ApplicationESP32 则是 bootloader、分区表、App 三个 bin 分别写到不同偏移。任何一段的起始地址错了校验阶段如果恰好没开就会产出“烧录成功但上电白屏/死机”的板子。我处理过一个和 Jetson 平台、树莓派镜像烧写情况类似的案件看起来场景不同本质一样镜像写入 SD 卡时分区偏移错误或写盘软件版本不匹配导致设备能通电但系统引导失败。核对地址时不要靠记忆直接看链接脚本或编译生成的 .map 文件生产脚本里把地址做成显式参数每次换固件版本时重新核对一遍。5. 批量数据的价值台账、复测和工位设计5.1 烧录工艺纪律把人、机、料、法、环固定下来良率排查如果只靠记忆和口口相传永远查不清楚。我会在项目量产前定几条死规矩固定烧录电脑、固定烧录器、固定同版本烧录软件和驱动、固定固件文件路径任何变更都走变更记录。看起来繁琐但能滤掉一大半“昨天还好好的今天就不行”的玄学问题。台账建议至少记录这几列时间、操作员、产线工位、板卡编号或批次、固件版本、烧录结果、错误码、备注。用 Excel 或者工位软件记都行关键是坚持。数据攒够两三天用数据透视表按错误码分一下层哪个环节占大头一目了然。我见过一个工厂良率 96%他们一直以为是接触问题统计数据一拉才发现 70% 都是“校验失败”最后定位到固件文件本身有坏块和数据毫无关系。5.2 失败品复测真坏还是假坏一测便知产线对烧录失败的板卡不要直接扔到维修区先做一次标准化复测换一把好的探针/线材按统一的顺序重新上电再烧。如果二次烧录能过说明器件没问题问题在夹具接触或员工操作这类占比通常很高如果二次依旧失败才需要进入返修流程检查芯片焊接、Flash 坏块、芯片本体。这步看起来很简单但能省下大量“假维修”时间。曾经有条线烧录失败率 5%复测之后发现 4.5% 二次通过剩下的 0.5% 才是真不良。前者改治具、改操作手法就能解决后者走器件分析流程完全不同的路径。给产线留一张失败标记标签写明第一次失败现象和时间复测时对照着看效率很高。5.3 治具与工位设计烧录不是搞科研越无脑越好量产烧录工位的最佳状态是操作员把板子卡进治具按下按钮看指示灯绿走红停。任何需要员工盯着命令行、手工敲命令的流程都会把人为失误带进良率里。治具方面尽量用压针式夹具探针选镀金弹簧力度适中定期清洁探针避免助焊剂残留导致接触电阻变大。工位静电防护也要到位手腕带接地桌面绝缘环境温湿度不要太离谱。烧录器本身是消耗品长期高负荷使用也有老化最好每台设备编号登记定期用一块“标准样片”自检每天开工前烧一次标准样片能通过再开始批量。这个习惯我用了很多年幽灵故障至少少一半。5.4 电脑和 USB 的那些“小概率事件”产线电脑自动休眠、USB 节能策略、USB HUB 供电不足这些听起来像小事实际都能导致烧录中途失败。量产电脑建议统一关闭 USB 自动挂起和系统休眠烧录器直接插主板 USB 口不要经过劣质 HUB。J-Link 的驱动版本也经常会“悄悄变化”换电脑后忘记装匹配驱动就会出奇怪问题。再强调一遍如果某个工位失败率明显高于其他工位先别怀疑芯片用“替换法”把烧录器和电脑换掉看问题是不是跟着设备跑。这个方法 90% 的情况下能快速锁定故障源。6. 烧录常见问题速查表照着查不烧脑6.1 快速对照表失败现象优先怀疑处理方式找不到目标芯片 / No target connected供电、线序、目标板未上电先量 VCC/GND确认 SWDIO/SWCLK 没接反最后降时钟连接不稳定时好时坏接触电阻、线缆过长、电源波动换短粗线清洁探针降到 1MHz 以下RDDI-DAP Error调试口被占用、电压不稳重新上电降 Max Clock必要时串口 ISP 全片擦除Flash Download failed芯片型号或 Flash 算法选错核对 Target Device 与 .FLM 算法文件Verify failed / 校验不过地址错、固件坏、写保护核对烧录地址检查固件哈希解除 RDPErase failed芯片锁死、Flash 损坏尝试全片擦除不行就换芯片烧录成功但板子不启动BOOT 引脚、启动地址、配置位查 BOOT 电平核对链接脚本地址抓串口日志6.2 标准排查顺序按这个顺序走能覆盖绝大多数烧录问题先看供电万用表量 VCC 和 GND示波器看有没有跌落再看接线线序、线长、接触电阻然后降速SWD 降到 1MHz 以下串口降到 115200 以下接着核对工具配置芯片型号、Flash 算法、烧录地址、校验开关最后才考虑芯片本身用替换法换一片确认。多数情况下走到第三步问题就已经解决了。我个人做量产支持的体会是烧录良率从来不是单一技术问题它是硬件设计、工具配置、产线管理和数据统计共同作用的结果。你不一定需要搞懂所有协议细节但一定要有一份自己的排查清单。最后再分享一个小习惯每次批量开工前先烧录一块“标准样片”确认今天的电脑、烧录器、线材、治具和昨天一致再开始排产。这个动作我用了很多年帮我挡掉了至少一半说不清来由的烧录故障。
返回列表