
做IPC方案这几年SigmaStar的板子我经手过不少。从开发调试到量产拉通最容易被低估的一环就是SPI NAND Flash空片烧录。很多人觉得烧录嘛把镜像写进去就完了实际上这里面涉及的工具选型、参数配置、颗粒兼容性、产线良率任何一个环节踩坑都可能让批量生产翻车。这篇文章就把我在SSC335系列上做SPI NAND空片烧录的整套流程和经验完整梳理一遍从工具准备讲到避坑排查适合正在做SSC335方案开发转量产的朋友也适合刚接触SPI NAND离线烧录的嵌入式工程师。1. 认识SPI NAND和空片烧录这个事1.1 SSC335为什么偏爱SPI NANDSSC335这颗主控在入门级IPC市场的定位很明确成本敏感、功能齐全、功耗控制好。这类产品的主控方案几乎都会面临一个选择题系统固件装在哪种存储介质上常见答案无非三种SPI NOR Flash、SPI NAND Flash、eMMC。eMMC性能最好、管理最省心但成本摆在那里一颗常规容量的eMMC芯片价格就能吃掉不少整机BOM预算再加上eMMC芯片封装规格更高、贴片要求也相对苛刻入门级产品基本不会选它。SPI NOR Flash呢优点是支持XIP直接执行、读取简单、启动快但容量天花板太低。市面上常见的SPI NOR一般是8Mbit到128Mbit也就是1MB到16MB。SSC335的固件动辄十几MB起步如果用NOR要么牺牲功能裁剪镜像要么选超大容量NOR一颗16MB的NOR价格比同容量的NAND贵出好几倍完全不划算。SPI NAND就正好卡在中间容量从1Gbit到4Gbit甚至8Gbit价格比NOR低一大截读写速度也够用。虽然NAND有坏块管理、ECC校验这些额外负担但这些问题在U-Boot和文件系统层面早就解决好了。SSC335自带的SDK对SPI NAND的支持非常成熟U-Boot里直接就有现成的NAND驱动文件系统用UBIFS或者SquashFS都行。从实际项目来看SSC335方案里SPI NAND已经成为绝对主流1Gbit128MB的颗粒是最常见的选择既能装下完整固件还能给录像存储留一点缓存空间。1.2 空片烧录和在线升级的分工搞清楚“空片烧录”这个概念得先明白它和“在线升级/烧录”的本质区别。在线烧录指的是主控已经焊接在电路板上通过SD卡、USB、UART或者网络把固件写入Flash。这种方式适合开发调试、小批量试产、以及售后返修。它的前提是板子上已经有了一个能跑起来的最基本环境比如U-Boot能启动或者芯片ROM里有一段能引导USB/SD的代码。空片烧录则是Flash里什么都没写或者芯片还在料带/托盘里没贴到板上时用烧录器直接对Flash芯片操作把固件镜像写入。这个过程发生在SMT贴片之前或者在贴片完成后用烧录治具夹住Flash引脚操作。本质上是“先写后贴”或者“离线操作”。为什么要做空片烧录答案就两个字效率和成本。产线上如果每块板子都用SD卡在线升级一是要人工插卡、拔卡效率极低二是SD卡座、卡本身都会有成本三是升级速度受限于文件系统读写和主控处理整体节拍根本跟不上量产需求。离线烧录器的写入速度通常比在线升级快而且可以多通道并行烧录一台机器同时烧好几颗芯片节拍可控、操作简单产线工人培训成本也低。另外一个容易被忽略的点如果芯片贴到板上才发现固件版本写错了返工成本极高。空片烧录在贴片前就把固件版本锁死源头上杜绝了错料问题。2. 动手前的工具和原料准备2.1 烧录器和烧录座怎么选空片烧录的核心设备是离线烧录器。市面上选择不少从进口的DediProg到国产的中庆、周立功还有一堆主打性价比的国产新品牌。选烧录器我总结出三个核心关注点。第一算法库覆盖度。SPI NAND颗粒型号五花八门Winbond的W25N01GV、GigaDevice的GD5F1GQ、Micron的MT29F系列、国产的DS35Q1GA、XM25QH系列等等。烧录器的算法库必须能识别你打算用的颗粒。很多烧录器软件都在持续更新算法库采购之前最好先拿实际颗粒样品去测一下确认能自动识别ID、能正确读写。第二通道数和操作效率。小批量试产用单通道的烧录器就够了但量产产线强烈建议选4通道、8通道甚至更高通道数的设备。通道数决定了单次烧录数量直接决定产能天花板。此外还要看烧录速度同样是写入1Gbit的NAND不同烧录器的实际时间可能差出好几倍。算法优化的好的烧录器全片写入加校验可以控制在1分钟以内慢的可能要3分钟以上。第三上位机软件的易用程度。量产场景里操作烧录器的往往不是写代码的工程师而是产线工人。软件如果配置复杂、按钮逻辑混乱工人极易出错。选择那种“配置好模板后一键烧录”的设备能极大降低产线操作出错的概率。烧录座同样重要。SPI NAND常见的封装是WSON8和SOP8其中WSON8在IPC方案中出现频率最高。烧录座是耗材针脚会磨损弹簧会老化。买烧录座的时候注意一下适配颗粒封装尺寸——WSON8看似统一实际上不同厂商颗粒的尺寸会有细微差异焊盘位置略有不同买之前一定拿实物颗粒去比划一下。2.2 镜像文件准备和版本确认空片烧录前必须确认手里拿到的镜像文件是完整且正确的。这里的坑我在项目中见的太多了。SigmaStar SSC335平台的固件镜像一般是从SDK编译出来的整套固件包含U-Boot、Kernel、RootFS以及环境变量区等几个部分。市面上常见的做法有两种一种是直接把整个Flash区域的数据打包成一个整片镜像full image烧录器从0x000000地址开始整片写入这种最简单另一种是分区镜像每个分区单独一个文件需要按分区表里的偏移地址分别烧录。在项目开发阶段建议让BSP工程师打包出第一种整片镜像。离线烧录的时候只需要在烧录器软件里加载一个文件填入起始地址0x000000就行简单直接不容易错。如果用分区镜像需要在软件里逐个加载、填偏移地址任何一个分区的偏移填错了板子都起不来而且排查起来非常痛苦。镜像文件准备还有一个容易被忽略的问题版本管理。我实际遇到过好几个项目研发辛辛苦苦改好一个bug编译出新的固件结果产线那边还在烧录三天前的旧版本。产品到了终端客户手里出问题一查发现是最早那版固件的已知bug。所以建议烧录前在镜像文件名里加上版本号和编译日期产线每次烧录必须核对镜像版本。有条件的话在烧录工位贴一张当前版本号的醒目提示工人换料的时候自然就会核查。2.3 认识你手里的Flash颗粒拿到一批Flash颗粒不能直接就扔到烧录器里开烧。你得先搞清楚手里的是哪家型号、什么规格参数。SPI NAND有几个关键参数容量、页大小、块大小、是否内置ECC、工作电压。以最常见的Winbond W25N01GV为例容量是1Gbit页大小2048字节加64字节备用区块大小是64页也就是128K字节内置4位ECC校验工作电压3.3V。GigaDevice的GD5F1GQ也是1Gbit页结构和块结构类似但具体命令集和寄存器细节跟Winbond不完全一样。这些参数大部分会被烧录器自动识别。你把颗粒装进烧录座软件会自动发出读ID的命令9Fh返回厂商ID和设备ID然后自动匹配算法库里的型号。如果匹配不上就说明这台烧录器的算法库里没有这颗料需要手动选择近似的型号或者联系烧录器厂商更新算法库。我还想特别提醒一下电压和ID的问题。SPI NAND有3.3V和1.8V两种工作电压的版本封装长得一模一样光靠外观根本分不出来。如果烧录座接的是3.3V供电你塞进去一颗1.8V的颗粒轻则烧录失败重则可能损坏芯片。所以上线之前先查清楚颗粒规格书确认电压域。还有部分厂商的同一型号会有不同等级的颗粒比如工业级和商业级用的是同样的ID烧录器没法区分但烧录参数是通用的不影响写入。3. 完整烧录实操从参数设置到上电验证3.1 第一步把烧录器参数调对烧录器参数配置是整个流程中最关键的环节。参数配好了后面一路顺畅参数配错了烧录器报错或者烧出来的板子不能启动是家常便饭。我用DediProg的软件作为例子来说其他烧录器的逻辑也大同小异。先把烧录器用USB线连接到电脑打开上位机软件。把装好颗粒的烧录座插到烧录器的ZIF插座上或者把烧录座通过排线连到烧录器主机上。打开软件后第一步是设置芯片型号。一般会自动检测如果没有自动检测就手动选择你手里颗粒的具体型号比如W25N01GV注意区分后缀是S或Z或A不同后缀的规格有差异。如果你手里的颗粒在算法库里找不到完全一样的型号可以找同厂商同规格的近似型号但强烈不建议跨厂商替代因为命令集差异可能导致写入结果不稳定。接下来需要确认的参数有这么几项SPI时钟频率、SPI模式、烧录地址范围、操作选项擦除、写入、校验是否全部勾选、坏块处理策略。SPI时钟频率不是越高越好。烧录座夹具的接触阻抗、杜邦线的长度都会影响高频信号的质量。我在调试产线的时候遇到过把SPI时钟从100MHz调到50MHz之后烧录良率立刻提升了。如果烧录器支持调节建议用中等频率稳定第一。SPI模式一般来说NAND颗粒都支持Mode 0和Mode 3烧录器软件会自动适配不用手动干预。但有的老式烧录器需要手动选选错的话读ID都不正常。操作选项里面擦除、写入、校验这三个一定要全部勾选。擦除是把Flash里面的内容全部清成0xFF写入是把镜像数据写进去校验是把写入的数据读出来和原始镜像比对。校验环节不能省等到产品到了用户手里才发现数据不对损失就不是一颗烧录器能比的了。量产追求节拍可以理解但校验这个环节是底线。烧录地址范围整片镜像就从0x000000开始长度选整片容量。如果只烧分区镜像按实际分区地址填。有一点特别提醒很多烧录器软件允许设置“跳过空白区域”或者“只烧有效数据”这类优化选项在量产时看着诱人但风险在于如果文件系统校验逻辑对空白区域的期望是0xFF跳过写入倒是没关系可如果误判导致某些区域没写进去又无法通过校验被发现那问题就大了。我习惯的做法是首批试产全部区域完整写入摸透之后再考虑优化。3.2 第二步装料、接线、开烧参数配置完成后进入实际操作阶段。先把烧录座从防静电盒里取出来检查弹针是否有异物、弹簧是否正常回弹。装颗粒的时候注意方向WSON8封装表面有一个小圆点或者切角标记对应烧录座上的1脚方向。装反了轻则烧录失败重则电流反向把颗粒打穿。装好之后压下ZIF插座的压杆压紧。接着在烧录器软件里执行“空片检测”让软件自动识别颗粒型号和容量。识别正常后再检查一次软件界面显示的型号跟颗粒丝印是否一致。这里我要多说一句很多烧录器对同一厂商的不同后缀型号识别出来的颗粒名可能落后一版跟丝印不一致但实际兼容。如果确认参数一致能用问题不大但如果ID识别出来是另一家厂商的料那就是颗粒本身有猫腻要警惕翻新料和改标料。点击“烧录”按钮后烧录器开始自动执行先全片擦除再逐页写入最后读回校验。整个过程在烧录器软件里会显示进度条和状态信息。一颗1Gbit颗粒在50MHz左右SPI时钟下完整走完擦除、写入、校验大概需要1分半到2分钟。如果超过3分钟还没完成说明算法有问题或者接触不良应当停止排查。烧录完成的颗粒从烧录座上取下来时同样注意方向不要用力过猛。烧录好的颗粒建议按托盘分区域摆放烧完一个托盘换下一个托盘避免已经烧过和未烧的颗粒混在一起。混料是产线大忌后面每颗都要重新检测分辨纯属浪费时间。在产线实操中我特别推荐一个习惯给烧录工位配置一台放大镜或者直接用带显微功能的台式放大镜。WSON8封装的引脚在底面肉眼很难判断是否对准了烧录座针脚。经验不足的工人装料后可能没压实导致部分引脚悬空烧录时接触不良。有了放大镜检查压合状态这类问题能降低八成。3.3 第三步上板验证最容易被忽略烧录完成的颗粒贴上板子之后很多人觉得万事大吉直接组装出货。我劝你别这样干至少前几批每台都要上电验证。上电验证的目的是确认烧录出来的颗粒能正常启动系统。具体操作很简单把贴好Flash的板卡接入电源连接串口终端打开串口日志观察输出。如果系统正常启动U-Boot的打印信息会依次出现内核开始解压文件系统挂载成功最终进入正常运行状态。我第一次做SSC335量产的时候烧录器显示100%成功结果贴片回来一批板子上电之后U-Boot起不来串口打印全是乱码。后来定位到原因是烧录器软件里SPI时钟频率配太高写入过程中部分数据位翻转但烧录器自身校验算法把这个问题忽略了。从那以后我在首件验证环节特意要求产线技术员逐台启动到系统控制台输出一段运行日志才放行。量产阶段的上电验证可以做成抽检制首件全检后续按数量比例抽检。抽检比例一般建议5%到10%每批次至少抽5台。如果发现异常整批隔离复检。上了自动测试治具的产线甚至可以做100%通电测试效果更好。4. 量产避坑指南与问题排查4.1 三类高频故障实录我整理一下在SSC335系列空片烧录过程中最常遇到的问题每一条都是亲身踩过的坑。第一类颗粒识别不到或识别错误。插上烧录座后烧录器显示“No Device”或者ID跟丝印对不上。这种问题九成是接触不良。WSON8封装对烧录座的赌注很高弹针如果磨损、表面氧化、或者颗粒本体尺寸偏薄都会导致个别针脚没接触上。排查方法是重新装一次料或者换一个烧录座测试。如果换了烧录座还是老样子再考虑是不是颗粒本身有问题。还有种情况是烧录器算法库版本太旧对新型号颗粒的ID定义缺失升级软件版本即可解决。第二类烧录过程中报错擦除失败或者写入校验不一致。这类问题除了接触不良之外另一个高频原因是烧录座供电不稳。烧录器通过USB供电时如果USB口供电能力不足或者使用的USB延长线质量差烧录大容量NAND时电流需求波动会导致电压跌落写入自然出错。解决方法是把烧录器插到主机背板的原生USB口上尽量别用前置USB口和劣质Hub。产线上还可以给烧录器配置带电源适配器的独立供电版本。第三类烧录器显示成功板子却起不来。这是最让人头疼的一类问题因为烧录环节看起来一切正常问题往往出在你看不见的地方。我遇过的原因有镜像文件本身损坏镜像版本跟板卡硬件配置不匹配烧录器里设置的烧录地址偏移错误比如该从0地址写却从0x100000写了BOOT选择引脚焊接错误导致主控没有从SPI NAND启动。排查方法是先用确认没问题的烧录器、确认能启动的镜像重新烧一颗颗粒拿到板子上测试如果新烧的能启动问题就锁定在原先那批颗粒或那次烧录设置上。4.2 量产效率优化的几个建议空片烧录从单颗操作到批量产线效率优化空间其实很大。我根据自己的生产经验分享几个投入产出比相当高的优化方向。第一优先使用多通道烧录器。8通道设备配合对应数量的烧录座一个工人可以同时操作多颗芯片的烧录人力成本不变产能翻好几倍。如果公司产量还没大到需要购置多通道设备的程度也可以考虑一次采购两台甚至四台单通道设备布置在同一个工位上同样能实现并行烧录成本更低。第二把烧录参数固化成模板。在烧录器软件里把当前项目的颗粒型号、镜像文件、烧录选项全部保存成模板。产线工人只需要双击模板、一键烧录不需要进入高级设置页面。这样做既提高了操作效率也杜绝了工人误改参数导致批量烧录事故的可能。第三下载程序和烧录过程分离。很多烧录器支持先把镜像下载到烧录器的内部存储或SD卡里之后拔掉电脑独立烧录。产线工位上少一根USB线操作更灵活也避免了电脑USB口供电不稳的问题。这种模式下镜像版本在下载的时候就已经锁定工人不需要碰电脑文件版本出错概率大幅下降。第四关于烧录节拍不要在擦除、写入、校验三个环节上动小心思。省掉校验环节也许能缩短30%时间但一旦出现批量性数据错误返工时间和成本足以抵消所有节约的时间。效率优化的正确方向是算法库升级、硬件通道数提升和操作流程简化而不是牺牲质量步骤。4.3 故障排查速查表根据我长时间做烧录的经验整理了一份快速排查表。产线技术员和研发工程师都可以打印一份贴在工位上遇到问题先照表排查。故障现象可能原因排查方向识别不到颗粒接触不良、烧录座磨损、算法库过旧重新装料、更换烧录座、升级烧录器软件ID与丝印不一致翻新料、改标料、选错型号核对丝印和ID联系供应商确认物料来源擦除失败供电不稳、颗粒异常、引脚氧化更换USB口、独立供电、换一颗颗粒对比写入校验不一致SPI时钟过高、接触不良、镜像损坏降低SPI频率、重新装料、重新导出镜像烧录成功但上电无输出BOOT配置错误、镜像版本不匹配、地址偏移错误核对BOOT引脚、检查镜像版本、确认烧录地址上电后U-Boot正常但Kernel起不来分区表不一致、镜像中Kernel分区损坏核对分区表偏移、烧录前完整校验镜像文件系统挂载失败文件系统镜像损坏、ECC设置错误重新烧录RootFS分区、核对ECC配置偶尔出现烧录失败烧录座老化、环境静电、USB供电波动定期更换烧录座、检查防静电措施、独立供电排查逻辑记住一条先换最可能出问题的变量。比如先重新装料再换烧录座再换电脑接口最后考虑镜像问题。不要一上来就怀疑镜像损坏把简单问题复杂化。颗粒静电防护也要划个重点。SPI NAND属于半导体存储器件对静电敏感度高。产线上如果不做防静电处理冬天尤其容易出问题。烧录工位必须配置防静电手环、防静电桌面垫烧录器外壳也要有接地措施。操作人员拿颗粒的时候尽量接触芯片本体而不是引脚避免人体静电通过引脚进入芯片内部造成隐性损伤。这种损伤在烧录环节不一定能立刻发现可能过几天或者一段时间后才暴露极难排查只能从源头预防。最后再分享一个我自己的习惯每次批量烧录之前先拿一颗料完整走一遍“烧录—上板—上电—起系统”的流程确认整套镜像和参数都没问题再大批量生产。这个习惯帮我挡掉过好几批烧错版本固件的麻烦事。量产这种事情慢就是快前端多花五六分钟检查后面能省下几小时的返工时间算下来绝对划算。