量产烧录(programming)的一致性和校验,这问题要是摆到桌面上说,能吵起来。我做了几年半导体原厂一级代理,服务过的客户从消费电子到工业控制都有,最大的体会就一句话:大多数工厂根本不是被技术难倒的,是被“好像差不多”这四个字坑死的。
文章里我不会给你堆什么复杂理论,就讲我在产线上看到的、动手处理过的真实情况。这个内容适合谁看?适合刚搭完量产线、正准备把固件文件交给代工厂的硬件工程师,也适合在工厂里负责烧录工位、天天跟不良品打交道的PE工程师。你要是觉得自己厂里“烧录这块已经很成熟了”,那更建议花几分钟看完,因为问题往往就藏在你最放心的环节里。
1. 先看看量产烧录到底在烧什么
1.1 烧录的本质:代码怎么进芯片
量产烧录就是把固件或引导程序写进芯片的存储介质里。这句话听着简单,但芯片的存储类型多了,每种烧法都不一样。
最常见的三类:MCU内部Flash、外挂SPI NOR Flash、eMMC/EMMC存储。
MCU内部Flash,比如STM32系列,用得最多的是SWD或者JTAG接口,通过调试工具把hex或者bin文件写进去。这类烧录速度快不快?看接口频率,SWD跑个几兆赫兹,写一片几百KB的固件也就几秒到十几秒不等。
SPI NOR Flash,比如W25Q系列,产线上往往先用离线烧录器把固件“烤”进Flash,再由贴片机上料贴板。离线烧录有个特性,烧录器和Flash之间通过SPI协议通讯,写入指令是0x02(Page Program),一页一般是256字节,整片写完之后还要回读校验。
eMMC就麻烦一些,它的接口协议复杂,量产时通常要借助专门的烧录治具或者原厂量产工具,写进去的一般是整个文件系统镜像,不只是一个固件bin。
这里有个每类方案都必须回答的问题:你怎么知道烧进去的东西跟源文件一字不差?就靠校验。
1.2 同一颗芯片为什么会出现“千奇百怪”的烧录结果
我见过太多工厂,同一批板子,同一个源文件,用同一个烧录器,结果烧出来的板子有能跑的、有不能跑的、有跑一段时间才挂的。如果只是偶尔一两片,可以说芯片问题;如果比例到千分之几甚至百分之一,那就不是芯片问题,是烧录流程问题。
最常见的几个“看上去没问题”的坑:
一是源文件本身有问题。工程师在电脑上编译完,没做最终确认就拷到量产机台,结果文件是半个小时的旧版本,或者拷的过程中文件损坏,配置位全部错乱。
二是烧录器固件或者软件版本不统一。同一个型号的烧录器,有人说“软件我升级过”,有人说“我用的是老版本稳定”,结果两台机器烧出来的选项字节都不一样。后面我会细讲这个。
三是操作人员偷步骤。产线上的作业指导书写了“烧录后必须回读校验”,但实际跳过了,因为校验要占时间,而产线有节拍压力。
四是电源或者时钟不稳。烧录对电压和时钟的稳定性非常敏感,特别是一些需要外部晶振或者高电压编程的芯片,稍微一抖就写不进去。
这些问题的根源不是某一个环节坏了,而是整条链路缺少一致性约束。所谓一致性,核心就是“每次烧录、每台设备、每批芯片,执行的都是同一个动作,得到的是同一个结果”。
2. 一致性的核心:人和工具都在同一页
2.1 最容易被忽视的版本一致性
很多工程师觉得,固件版本文件一致就行,烧录器版本谁还会管?但实际上烧录器软件版本不同,可能调整了时序参数或者算法,最终写进Flash的数据虽然看起来一样,状态寄存器配置可能已经变了。
举个我遇到过的例子:客户一款产品用了SPI NOR Flash,前端量产时两台离线烧录器都在跑,固件源文件一样,烧录配置一样,但一台软件版本是v3.20,一台是v3.24。结果烧出来的芯片都能读,逻辑功能也都正常,可其中一版软件默认把Flash的高性能读模式寄存器位配上了,另一版没有。产品单独测没问题,装到客户整机上,主控按标准时序读数据,有些板子直接读超时。
这个问题在产线上根本测不出来,因为产线测试用的治具是同一套,问题只会出现在客户的整机环境里。
所以在量产烧录的配置文件里,除了固件bin之外,烧录器软件版本、烧录算法版本、Flash型号列表这三样必须一起锁定,形成一个“烧录身份三件套”。任何一项变动,都要重新做小批量验证,不能直接切产线。
2.2 源文件、校验码、配置文件三者必须锁死
我建议每个量产项目维护一个《烧录基线配置单》,像这样:
| 项目 | 内容 | 说明 |
|---|---|---|
| 固件源文件名 | app_v2.3.1_20240912.bin | 文件名带版本和日期 |
| 文件大小 | 256 KB | 源文件的字节数 |
| MD5校验值 | A3F21C98... | 源文件输出的哈希值 |
| CRC32校验值 | 9E4A7B61 | 源文件的CRC32 |
| 烧录器型号 | 某品牌离线编程器 | 统一型号甚至统一台位 |
| 软件版本 | v3.24 | 必须与验证版本一致 |
| Flash料号 | W25Q256JW | 明确到具体型号版本 |
| 配置参数 | 时钟频率、VCC电压、页大小 | 不随意改动 |
这个表放入工程受控系统里,每次烧录任务下发时候,产线PMC和操作员都要先核对这个表,而不是只拿一个U盘去拷文件。
这里有个非常实用的细节:全厂的U盘是病毒和版本混乱的重灾区。量产文件必须从受控的服务器共享目录下发,或者用专用的、只读的烧录文件存储介质,禁止直接拿工程电脑U盘往烧录器上插。
3. 校验到底怎么校才靠谱
3.1 三种常用校验算法怎么选
校验的本质就是计算一个“摘要”,拿它跟源文件的摘要比对。产线上最常见的三种算法:
校验和(Checksum):把所有字节相加,取最低字节或者取反加一。实现最简单,任何单片机哪怕8位机都能算,但容易碰撞,两个不同文件可能算出相同校验和。适合做简单的完整性判断,不适合做安全校验。
CRC32:循环冗余校验,多项式一般是IEEE 802.3标准那个0x04C11DB7。它能捕捉常见的位错误、突发错误,碰撞概率远低于校验和,硬件上很多Flash控制器内部直接支持,速度极快。量产烧录校验的默认选择就是它。
MD5和SHA系列哈希:MD5已经不适合安全场景,但做普通完整性校验仍然能用;SHA-256安全强度高,一般用在固件包的发布验证上,比如代工厂收到源文件后先算一次SHA-256确认文件没被改动,再进烧录流程。
产线选择的原则很简单:第一层,文件从服务器拷到烧录器,用MD5或SHA-256确认文件没有被损坏或替换;第二层,烧录后回读比对,用CRC32;第三层,如果是MCU方案,可以在bootloader里固定一段启动自校验逻辑,上电后对应用程序区做CRC检查。
这三层不是冗余,而是各自负责不同的风险面。第一层防的是文件传输过程出错,第二层防的是烧录过程中的位错误,第三层防的是芯片老化或写入后数据漂移。
3.2 读回校验(Read Verify)不同的实现层次
很多烧录器软件里有一个选项叫“Read Verify”,勾上之后烧录器写完数据会把整片再读出来,跟缓冲区里的数据比对。这看起来简单,实际操作里有讲究。
有些烧录方案为了省时间,只做“部分校验”,比如只回读文件的前1KB和后1KB,或者每隔多少个地址抽检一次。这种策略在节省时间是有效的,但没法覆盖中间区域的数据错误。你想想看,Flash编程时最容易出问题的是跨页编程的边界,或者块擦除后的残留位,这些位置可能正好被抽检跳过了。所以我宁可多花点时间做全片回读,除非时间节拍实在吃不消,才考虑用“整片区域+关键配置区”的两段式校验策略。
还有一层更高级的校验,是针对MCU选项字节或加密位。比如某些MCU不但要写程序,还要设置读保护等级、配置选项字节。如果校验流程只比对程序区,却漏了选项字节,可能产品在出厂时一切正常,但客户在批量升级时发现芯片被锁死或者关掉了调试口,这个就是典型的“校验范围没覆盖全”引发的售后问题。
我强烈建议量产作业指导书里写明:校验范围 = 程序区 + 配置区 + 选项字节区,一个都不能少。
3.3 校验失败阈值:大部分厂根本没设
这是我在代工厂里见得最多的问题。产线上烧录器明明可以统计校验失败率,但没有设阈值,坏了就重烧,重烧还不行就扔维修区,从来没有人去关注这0.1%或者0.5%的失败率是不是在恶化。
要知道,烧录校验失败率不会无故升高。如果这个值从千分之一慢慢爬到了百分之五,背后可能的原因包括:Flash供货商换了晶圆批次、烧录器Socket磨损导致接触不良、车间温湿度变化、料盘的静电防护失效。你要是没有阈值,这些问题就会淹没在大量“偶然坏片”里。
做法很简单:给每种产品设一个烧录不良率的警戒线和行动线,比如警戒线0.3%,行动线0.5%。一旦连续几天超过警戒线,就启动专项排查,而不是等客户退货了再查。这个做法看起来朴素,但真的能救回很多隐性问题。
4. 量产烧录方案的实战配置
4.1 离线烧录怎么选型
离线烧录,就是先把芯片放进烧录座里,烧完再取出来上贴片机。它的优势是速度快、可以多工位并行,劣势是多了“放芯片、取芯片”的动作,容易磨损管脚或者导致静电损伤。
选离线烧录器的时候,我建议关注四个参数:
第一,Socket寿命和更换成本。烧录座是消耗品,接触探针的寿命一般几万到几十万次,但用久了接触阻抗会上升,导致烧录电压跌落,数据写不进去。工厂最好给烧录座建立点检记录,每周用标准样片做一次基准校验。
第二,并行烧录路数。常见的4路、8路、16路都有,但并行路数越多,对电源的要求越高,同时多路本身容易出现个别通道时序偏差。有些烧录器支持“每路独立时钟校准”,上线前一定要做一次通道一致性测试。
第三,对Flash器件型号的支持程度。产线千万别只看“兼容W25Q系列”这种描述,具体到某个型号的某个版本,烧录算法是否单独验证过,这个要问清楚。我见过代理商说“这个型号没烧过,试试看”,结果测试参数全乱,最后烧出来一批坏片。
第四,文件管理方式。选型时优先选支持网络映射、文件MD5校验、操作员权限管理的型号。便宜的单机型烧录器虽然省了钱,但管理全靠人,一致性很难保障。
4.2 在线烧录的常见坑
在线烧录,是在板子焊好之后,通过板上的烧录口(SWD、JTAG、UART等)把程序写进芯片。这种方式的优点的环节少,不用预先烧Flash再贴片,但坑也最多。
我踩过最典型的坑是:产线为了赶时间,把SWD时钟调到了芯片规格书的最高值,结果芯片本身没问题,但连接线稍微长一点、或者转接板上有个接插件接触不良,就出现“时好时坏”的烧录失败。这种问题很难复现,排查起来非常费劲。后来我建议客户锁死为规格书的80%跑量产,稳定最重要,速度再快也快不过这几十秒。
在线烧录还要注意复位引脚和Boot引脚的处理。有些MCU的烧录模式依赖Boot引脚的上下拉状态,产线如果跟量产测试共用治具,治具在切换时可能把这几个引脚的电平搞乱,导致脱机烧录时芯片进入了错误的启动模式。处理办法是在量产治具里做明确的上电时序,保证在烧录器连接到目标板之前,芯片的电源已经稳定,Boot引脚电平已经固定。
另外,在线烧录的目标板可能是PCB变体,不同批次可能改了去耦电容或者上下拉电阻。这些硬件微调可能影响烧录信号完整性。所以我建议每次PCB改版,哪怕只改了一个丝印,也要重新做一轮烧录验证再放行量产。
4.3 工装、电压、温度对一致性的影响
不要小看烧录治具的机械结构。我见过一款产品烧录不良率偏高,排查到最后,发现是因为烧录治具的压合机构在下压时,刚好会挡到目标板的一颗电源电容,导致芯片供电被短暂拉低,写入时数据出错。这种问题在“人工对位压合”的工装里特别常见。
再讲电压。Flash在烧录时对VCC的要求比读操作更严格,比如有的器件规格书里写明编程电压范围是2.7V到3.6V,看起来挺宽,但量产治具如果使用USB供电,线缆一长就掉压,到了芯片VCC引脚可能只剩2.5V。这个时候擦除操作会偶发失败,而且失败率跟线缆长度、接触老化程度都有关系,很难定位。我建议量产工位使用稳压源统一供电,并且在烧录器软件里设置电源监测,电压超出范围直接报错,不要闷头烧。
温度对离线烧录的影响也很大。Flash在低温环境下擦写所需时间变长,如果烧录器的擦除超时时间是按常温设定的,冬天车间温度从25℃掉到18℃,就可能出现批量擦除超时错误。这听起来很玄,但真的发生过。对策就是车间温度控制,或者烧录器参数里把超时裕量放足。
5. 常见问题排查与实操经验
5.1 烧录不良实录与排查思路
同样一种“烧录失败”现象,背后原因可能完全不同。我把自己处理过的案例整理成一个速查表,方便你排查时对标:
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 个别芯片完全无法识别 | Socket接触不良、芯片管脚氧化 | 先换一颗新芯片确认是工具问题还是芯片问题;检查Socket弹针 |
| 烧录过程报错,重烧后正常 | Flash内部状态机异常、电源短时波动 | 观察是否集中在某个工位;检查该工位电压和接地 |
| 烧录成功但功能异常 | 固件文件错了、配置位没写 | 核对文件MD5,检查配置文件是否被改动 |
| 读回校验错误集中在Flash某一区域 | 烧录时序问题或Flash芯片本身弱位 | 降低烧录时钟,换一个批次的芯片做交叉验证 |
| 温度变化后不良率上升 | 擦除/编程超时参数太紧 | 放宽超时设置,检查现场温湿度 |
| 整批烧录文件一致但产品版本不一致 | 烧录器通道间配置不一致 | 检查多路烧录器的各通道配置文件是否独立设置 |
| 老产品生产多年突然不良率升高 | 物料批次变更、Socket磨损、员工换新手 | 查物料变更通知单,查Socket点检记录 |
排查时有个基本功:学会看烧录日志。好的烧录器会记录每次烧录的操作者、时间、文件版本、校验结果、失败扇区,如果这些信息没有,出了问题就只能瞎猜。所以上线前先把日志存储和导出配置好,这一点比烧录器品牌本身更重要。
5.2 一个必须盯的数据:良率变化趋势
每次去代工厂稽核,我最喜欢看两个报表。一个是工单烧录汇总表,看每个订单、每个班次、每个工位的通过率;另一个是坏品分析记录,看退回的芯片有没有做失效定位,还是直接丢了。
为什么要看趋势,不看单点?因为单点的不良率受偶然因素影响太大,今天高温35℃,不良率0.5%,明天降温了是0.1%,你单看一天的数据就会以为有改善。拉长到一周甚至一个月,趋势就出来了。如果能做到每天记录不良的芯片编号和对应工位,异常起来时,你能直接从编号倒查是哪个班次、哪台设备烧的。
这个数据一定要让一线操作员意识到重要性,不要让他们觉得“多记一个数据就是多干一份活”。我在工厂推行过一个很土的方法:每天收线时,操作员在烧录日报上签“良率趋势正常”或者“有异常”,异常的话当日必须拉响质量群。就这一个动作,帮助客户把一批因为Socket磨损导致的间歇不良在客户投诉之前抓住了。
5.3 代理视角的建议清单
作为原厂一级代理,我每天面对的客户诉求只有一个:程序烧进去,出货没问题。基于这些经验,给你一份可以直接抄的检查清单:
第一,芯片纳入产线前,先做小批量试烧。任何一颗新物料,哪怕是同型号不同后缀版本,都要先烧20到50片,拿去做可靠性测试和功能确认,确认无误后把试烧配置正式冻结。
第二,首件确认不能少。量产开始后,每班次生产前用标准源文件烧录一片标准样片,回读比对全部内容,确认烧录器、治具、环境都正常后才批量生产。这个动作叫首件确认,也就是我们常说的“首件全检”。
第三,每个月做一次烧录器基准校验。用实验室保存的基准样片,或者用母片复制每次相同比对,检查各通道的一致性、校验值、烧录时长。超过阈值立刻换Socket或校准仪器。
第四,文件和配置变更必须走流程。工程师觉得“改一个校验选项不影响功能”而在产线上直接改了,这就是灾难的开端。任何配置变更,无论大小,都要拿一份受控记录通知到产线,并且由PE确认。
第五,存档每一批出货对应的烧录文件校验值。如果客户后期反馈产品程序异常,你能第一时间知道是烧录环节的问题还是芯片本身的问题。这个存档可以是表格、系统记录,但一定要能追溯到具体文件版本和校验值。
6. 写到最后:烧录这道工序的“良心”问题
量产烧录在整个产品制造流程里,是最不起眼的工序之一。它不产生高附加值,不像SMT贴片那样需要高级设备,也不像功能测试那样能直接显示产品好坏。但恰恰是这道“不起眼”的工序,决定了十万台产品是蜂拥出货还是批量召回。
我在代理这个位置上见过的教训太多了。最大的感慨是:很多工厂不怕买贵的烧录器,却舍不得花半天时间建立一套完整的文件受控和校验追踪流程。贵设备只能保证它能正确执行,但不能保证你执行的策略是正确的。真正让产品出厂后不出事的,是“每一次烧录都在受控状态下进行”这个承诺的执行力。
我个人的经验是,如果你只能做一件改进,那就先从“烧录文件MD5校验”和“烧录后全片回读比对”这两步开始,它们成本极低,见效极快。把这两步固化下来,后面的问题会少一大半。量产烧录这件事不需要什么高深魔法,它是把每一步的确定性都做到位之后,自然呈现的结果。