十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

SPI NOR Flash选型避坑指南:5大坑与实操验证清单

SPI NOR Flash选型避坑指南:5大坑与实操验证清单 SPI NOR Flash 这玩意儿平时在项目里就是个不太起眼的小零件原理图上一放、Layout 一画好像就完事了。但就是这个小东西在我做智能穿戴项目的这几年里着实让我折腾了好几回。从早期的手环到后来的手表几乎每一代产品都在它身上交过学费。每次出问题现象都挺邪门——有的是休眠功耗莫名拉高有的是固件升级到一半变砖还有的是低温环境下偶发读错数据甚至有一批货在生产线上贴片后就怎么都通信不上。等到排查到最后发现根子都出在当初选型时埋下的雷。这篇文章我就把这几年在 SPI FLASH 选型上踩过的 5 个大坑连同我后来整理的一套实操验证清单一并分享出来。如果你正在做智能穿戴、TWS 耳机、医疗贴片这类对体积和功耗都极度敏感的产品这篇文章应该能帮你省下好几轮改版的折腾。1. 先把场景说清楚穿戴设备里 SPI FLASH 到底在扛什么活在讲具体坑之前有必要先对齐一下应用场景。穿戴设备和手机、路由器不一样它对 Flash 的需求有自己非常鲜明的特点。1.1 穿戴设备 Flash 的核心职责智能手表或手环里Flash 通常承担三大职责第一是代码存储。主控 MCU 的 XIP原地执行或启动代码放在这里开机第一件事就是从那里面取指。这个用途占比不大但对可靠性要求极高代码一坏整机就成砖。第二是参数存储。比如用户的运动数据、健康算法校准参数、蓝牙配对信息、GUI 配置等这些数据的特点是单次写入量小、写入频率中等、要求掉电不丢失。第三是OTA固件升级。这是当前穿戴产品对 Flash 容量需求暴增的最主要原因。一套完整的固件可能 1-2MB加上要保留回滚的 A/B 双备份Flash 容量直接奔着 8MB-16MB 去了。1.2 穿戴场景下的特殊约束穿戴设备的 Flash 选型和做路由器、做机顶盒是完全两套逻辑。体积是硬约束。一个手表主板的可用面积往往就指甲盖大小Flash 封装稍微大一点Layout 就要打架。功耗是重中之重尤其是休眠电流因为穿戴设备大部分时间都在休眠Flash 的 standby 电流直接进系统底电流。另外穿戴设备的生产量级通常不低选型还得考虑供应链的稳定性和长期供货。谁也不想产品刚量产半年Flash 厂商给你发个 EOL停产通知。这套约束叠下来SPI NOR Flash 基本是唯一解但唯一解不意味着随便选。下面这五个坑我就是这么一个个踩过来的。2. 踩坑实录五个让我改版的选型错误2.1 坑一只盯着容量选型低估了双备份机制带来的隐性消耗第一次做手表项目时当时预估固件大小在 1.5MB 左右本着够用再留点余量的思路定了个 4MB 的 Flash型号选的华邦 W25Q32。原理图、Layout 都做完了结构都定好了结果算法同事提了一个需求OTA 升级需要支持断点续传和回滚。这就意味着 Flash 里至少要同时容纳两份固件镜像——当前运行版本加新下载版本。1.5MB × 2 3MB加上文件系统分区、日志区、参数区4MB 一下子捉襟见肘。没办法只能硬着头皮换 8MB。好在当时封装引脚兼容PCBA 只改了 BOM结构没动算是不幸中的万幸。这个坑的核心在于穿戴设备的 OTA 策略会直接决定 Flash 的最低容量门槛。A/B 双备份已经是行业标配有些产品还额外加了 Recovery 分区。如果选型时只看当前固件体积不看升级策略早晚要返工。我后来养成的习惯是容量 固件实际体积 × 2双镜像系数 参数区/日志区 30% 冗余。这个冗余不是拍脑袋定的而是给后续功能迭代留的口子。穿戴产品固件体积每半年涨 20% 是常态你永远不知道算法同事下一版会加什么模型进去。2.2 坑二忽视了电压域匹配导致主控和 Flash 通信不稳定这个坑藏得比较深因为它不是每次上电都出问题而是偶发性的。有一版产品主控用的是某款 1.8V IO 的 Cortex-M4 芯片Flash 我照搬了上一个项目的型号——一颗 3.3V 供电的 SPI NOR Flash。原理图上看着没问题Flash 的 VCC 接 3.3VIO 引脚和主控直连中间没加电平转换也没串电阻。结果就是常温下跑得挺好的一进高低温箱-20℃ 环境下读 Flash 偶尔出错概率大概在千分之一左右。起初怀疑 Flash 本身质量不行换了好几颗料问题依旧。最后用示波器抓了 SPI 时钟和数据的波形才发现问题所在主控的 1.8V 高电平输出落在 3.3V Flash 的 VIH 阈值边缘上电压裕量不够。低温下主控 IO 驱动能力下降波形边沿变缓采样点就直接翻了车。这里涉及一个基础但关键的概念SPI 是同步通信主控的输出高电平必须高于从设备识别高电平的最低阈值VIH否则从设备可能读到不确定状态。3.3V Flash 的 VIH 通常是 0.7 × VCC 2.31V主控 1.8V IO 的输出高电平按规格书看能到 1.8V 左右看着差得不多但实际 PCBA 上还有走线损耗、串阻压降裕量几乎为零。正确的解法有两种。最省事的是换一颗宽压 Flash比如支持 1.65V-3.6V 供电的型号VCC 可以直接用 1.8VIO 电平自然就匹配了。另一种是加电平转换芯片或者串阻分压但会占用 PCB 面积在穿戴设备这种寸土寸金的地方不太划算。我现在的选型原则是主控 IO 电压是多少Flash 就选同电压域的版本。比如主控是 1.8V IO优先找 1.8V 的 Flash3.3V IO 就选 3.3V。这个原则让我后来再没返工过。2.3 坑三封装选型只图好焊接没算 Layout 的账这是个特别典型的低级错误但犯的人真不少。第一代手环产品Flash 封装我选了 SOP8——因为 SOP8 焊接工艺成熟、手工补焊方便、探针测试也容易。当时觉得这没啥问题等 Layout 工程师开始摆件时才意识到麻烦大了。手表主板面积被电池、马达、传感器占得七七八八留给 Flash 的区域是个长条状宽度只有 3mm。SOP8 封装宽度有 5.3mm压根塞不进去最后硬是改了一版结构才放下。后来换成了 USON82mm × 3mm封装的 Flash宽度问题直接解决。代价是 USON8 的焊盘在底部手工补焊几乎不可能产线不良品只能靠返修台或直接报废。但考虑到整体体积收益这点代价是完全值得的。封装这块我踩过之后总结出的经验是先量 PCB 可用面积再定封装顺序不能反。2mm × 3mm 或 3mm × 4mm 的 USON/WSON 封装适合手表、手环4mm × 4mm 的 SOP8 适合颈戴耳机、充电仓这类空间相对宽裕的产品。如果产品有屏蔽罩还要留意 Flash 封装高度USON8 的厚度一般在 0.55mm-0.75mm 之间SOP8 是 1.75mm会影响屏蔽罩内净空。封装这事看着小一旦定下来后面换封装基本等于重画板子代价非常高。2.4 坑四死磕读写速度却忽略了擦除时间是真正的性能瓶颈有阵子客户反馈 App 同步运动数据特别慢一同步就转圈圈。排查了一圈发现瓶颈出在 Flash 的擦除时间上。SPI NOR Flash 的特性是写入前必须先擦除而擦除是按扇区通常 4KB或块通常 64KB为单位的。不同型号的 Flash擦除时间差异巨大。举个例子同样擦除一个 4KB 扇区主流品牌的芯片标称典型值在 45ms-100ms 之间但有些低端兼容料能做到 400ms 甚至更久。数据同步场景下App 每次需要把新增的运动记录写入 Flash。如果算法按扇区擦写假设一次同步要擦 10 个扇区用 50ms 擦除时间的片子光擦除就要 500ms再加上写入时间用户体验就会明显卡顿。换成 400ms 擦除时间的片子直接卡到用户骂娘。这里补充一个理解 Flash 性能的核心公式单次写入总耗时 擦除时间 写入时间写入时间 数据量 / 写入速度很多工程师选型时只盯着写入速度 104MHz 时钟、Quad 模式能跑 50MB/s这种参数实际到了小数据量随机写入场景擦除时间才是那头真正的大象。我的实操建议是选型阶段就向原厂或代理商要 Flash 的 datasheet重点不是看首页的High Speed宣传而是翻到 AC Characteristics 章节对比 4KB Sector Erase Time 和 Page Program Time 的典型值。同样容量、同样价位的片子擦除时间可能差出去 3-4 倍这个参数直接决定小数据量写入场景的体验。2.5 坑五忽略低功耗特性差异休眠电流凭空多了 20 微安穿戴产品的底电流是逐微安抠的。一个手环的休眠电流做得好能到 15μA 以下做得不好 40μA 都打不住Flash 往往是那个隐形刺客。有一次做整机功耗测试发现底电流比预期高了 20μA 左右。量了半天最后用排除法定位到 Flash。进入 Deep Power Down 模式后实测电流还是比规格书标称值高出一截。查了一圈发现是 Flash 型号的问题——那颗料在 Deep Power Down 模式下规格书标称 5μA 典型值但实测分散性很大有些批次能到 15μA-20μA。而同类产品中另一家厂商的型号在相同模式下实测能做到个位数微安差异非常明显。穿戴设备里的 Flash 低功耗特性主要看三个指标Standby Current待机电流一般 10μA-20μA 级别Deep Power Down Current深度掉电电流低功耗型号能做到 1μA-5μAPower Down 模式的唤醒时间很多初阶工程师只关注 Standby Current忽略了 DPD 这个更低的功耗档位甚至不知道有 DPD 模式的存在。实际上穿戴主控在休眠前应该主动给 Flash 发 DPD 指令让它进入深度掉电状态这样才能把底电流压到最低。选型时我会直接在选型表里加上是否支持 DPD和DPD 电流实测值两列。实测比看规格书靠谱得多因为 datasheet 标称的都是典型值不同批次差异可能很大。3. 我的选型实操清单五步验证法看完这五个坑你可能觉得 SPI Flash 选型好复杂。其实把方法理顺了也不难。我后来把自己的流程固化成一套五步验证清单每个新项目都按这个走基本没再翻过车。3.1 第一步容量与分区规划先在 Excel 里把账算清动手选型号之前先拉一个容量需求表这个表长这样分区用途估算大小说明固件A当前版本1.5MB含 App 和协议栈固件B备份镜像1.5MBOTA 下载区Recovery256KB恢复模式参数区128KB算法校准、配对信息日志区256KB运行日志、崩溃记录冗余512KB功能迭代预留这个例子里总量算出来是 4.1MB取整就选 8MB 的 Flash留足余量。分区规划这一步非常关键建议直接在项目初期就定好分区表包括每个分区的起始地址和大小后续驱动开发和 OTA 流程都要基于这个表来设计。如果分区表在开发中期才定很可能导致容量不够用的尴尬局面。3.2 第二步电气参数交叉验证别让电压域毁掉整个设计打开主控的 datasheet找到 GPIO 的 VOH 和 VIH 参数然后打开 Flash 的 datasheet找到 VIH 和 VIL。核心是保证主控 VOH最小值 Flash VIH最大值这个不等式必须成立而且要留足至少 10% 的裕量。如果两边电压域不一致有两条路换 Flash选择宽压1.65V-3.6V或同电压域的型号加电平转换但穿戴设备上空间宝贵不推荐还有一个容易忽略的点Flash 的工作电压范围还影响读取速度。部分型号在低电压下支持的最高时钟频率会下降比如 3.3V 下能跑 104MHz1.8V 下只能跑 85MHz。如果你的系统对 Flash 读取速度有硬性要求这一步要专门确认。3.3 第三步对照实测功耗选型Datasheet 只是参考功耗不能只看规格书必须实测。我一般会准备一块最小系统板或者直接用 EVB把候选 Flash 型号贴上去用精密电源供电分别测三个状态测试状态触发方式关注指标读写状态连续读/写峰值电流、平均电流Standby片选拉高空闲状态电流值DPD发送 DPD 指令电流值越低越好测试时要注意用同一种主控、同一块 PCB、同一测试方法排除变量干扰。我遇到过同一颗料在不同主控板上的 DPD 电流差出 3 倍的情况就是主控 GPIO 配置差异导致的漏电。另外实测时一定要看实际波形不要只看万用表的平均值。Flash 写入瞬间的电流尖峰可能高达 20mA-30mA如果系统电源设计余量不足这个尖峰可能拉低电压导致主控复位。这个问题在电池供电的穿戴设备里尤其常见低电量时电池内阻增大电流尖峰带来的压降更明显。3.4 第四步上板实测读写可靠性尤其要做温度循环选型阶段不能只在 EVB 上跑一跑就完事要按产品真实使用场景做读写可靠性测试。我的标准流程是温度循环测试。在 -40℃ 到 85℃ 范围内循环每个温度点做全地址空间的写入-读取-比对连续跑 100 次以上。长时间断电保持测试。写入数据后断电放置 24 小时、72 小时、一周重新上电读取比对确认无数据丢失。边界电压测试。用可调电源把 Flash VCC 调到规格书允许的最低值和最高值分别做读写测试确认电气边界的稳定性。OTA 模拟测试。模拟多次 OTA 升级流程包含异常断电、半包数据、校验失败等场景确认 Flash 内容不会因异常流程损坏。这套测试做完Flash 本身的质量问题基本能暴露出来。我踩过的一个教训是某型号新批次 Flash 在温度循环后出现个别扇区坏块连续三批都有后来查出来是原厂工艺调整导致的质量波动。碰巧在测试阶段发现了但凡这批货流到量产售后会非常难看。3.5 第五步供应链和长期供货审查别让产品死在缺料上硬件工程师选型时很容易只盯着技术参数忽略了供应链维度。实际上Flash 这类通用元器件的供应链风险非常高尤其是消费电子市场波动大的年份。我在第五步会专门确认三件事供货来源是原厂还是代理商有没有多源替代方案原厂的 EOL 风险和政策一般看 PCN产品变更通知频率如果选了二线或国产 Flash 品牌有没有备用料可以 pin-to-pin 兼容关于 pin-to-pin 兼容这里多说一句。NOR Flash 行业有一个事实标准——华邦 W25Q 系列几乎是全行业兼容的参考设计。大部分国产 Flash 品牌比如兆易创新的 GD25 系列、武汉新芯的 XM25 系列引脚定义和指令集都尽量做到兼容 W25Q 系列。这意味着选型时可以把 W25Q 作为基准同时验证一颗国产替代料。一旦主料缺货或涨价BOM 里直接切换备料硬件不用改动。但兼容不等于完全一致不同品牌的 status register 定义、独有指令、默认读模式可能存在细微差异。驱动层面最好做一层抽象不直接操作裸指令而是通过统一的驱动接口去适配不同品牌。这个我在前面几个项目里都踩过坑——软件写死了某品牌的指令序列切备料后某些功能就不正常了。4. 大厂选型思路参考与主流型号梳理做完这套清单你可能想比较一下主流厂商的型号。我把自己用过或者调研过的几个系列整理一下给你作个参考但注意这不是推荐你照抄而是提供一套横向比较的量尺。4.1 华邦 W25Q 系列兼容性标杆华邦是 SPI NOR Flash 的绝对龙头W25Q 系列覆盖了从 512KB 到 128MB 的全系列容量市场占有率极高。它的优势在于指令集是行业事实标准几乎所有主流的 MCU SPI Flash 驱动库原生支持封装配列齐全SOP8、USON8、WSON8、TFBGA 都有供货稳定渠道成熟代理商多缺点也很明显价格相对较贵而且因为用量大市场缺货时往往是第一波被涨价或被砍单的料。穿戴设备常用的型号有 W25Q32JV4MB、W25Q64JV8MB、W25Q128JV16MB。其中 W25Q64JV 是 8MB 的畅销主流款JV 后缀代表 1.8V 版本对应低电压平台。4.2 兆易创新 GD25 系列国产替代主力兆易创新是国产 NOR Flash 的头部厂商GD25 系列和 W25Q 系列基本 pin-to-pin 兼容指令集也高度一致。价格通常比华邦低 10%-20%在消费类产品里性价比优势明显。我在多个项目里用 GD25 系列做华邦的备选料直接无缝切换。但要注意GD25 的某些细分型号在最高时钟频率和 DPD 电流上和 W25Q 略有差异选型时要以具体型号规格书为准不能按系列一概而论。4.3 其他需要考虑的选手武汉新芯 XM25 系列定位和华邦兼容价格和兆易差不多也是备选梯队成员。Adesto现已被 Dialog/Renesas 收购的 AT25 系列低功耗表现不错部分型号在 DPD 电流上做得极低适合对功耗极其敏感的医疗贴片类产品。Micron 的 N25Q 系列属于高端市场性能和可靠性指标都很强适用于工业级或车规级应用价格也明显更高。品牌系列容量范围电压域特点华邦W25Q512KB-128MB1.8V/3.3V行业兼容标杆兆易创新GD251MB-128MB1.8V/3.3V国产替代首选武汉新芯XM251MB-64MB1.8V/3.3V性价比突出AdestoAT25256KB-64MB1.8V/3.3V低功耗优等生MicronN25Q8MB-512MB1.8V/3.3V高端工业/车规选型或替代时别看品牌看具体型号的 AC 参数特别是擦除时间、写保护行为、Status Register 默认值这些细节。不同品牌默认的 QEQuad Enable位状态可能不同这在切换 Quad 模式时会踩坑驱动里最好有显式的 QE 位配置流程。5. 软硬件联调中的隐藏细节从 PCB 到驱动的三层防线选型做对了只算成功了一半。真正量产顺利还需要 PCB 设计和驱动层配合。这算是我在多次量产后总结的三层防线概念。5.1 第一层防线PCB Layout 的旁路电容与走线Flash 的 VCC 引脚旁必须有一颗 0.1μF 的陶瓷电容而且要尽可能靠近 VCC 引脚放置。Flash 在写入时的瞬态电流变化很快旁路电容太远寄生电感会削弱滤波效果。我实测过电容放在 3mm 以外和紧贴引脚写入时的电源噪声幅度差异大约 30%-50%。对于低电压版的 Flash1.8V 供电这个差异可能直接触发欠压复位。SPI 走线也要注意时钟线CLK和数据线MOSI/MISO不要并行走太长避免串扰。穿戴设备 PCB 空间紧张走线一般不会太长但如果 Flash 放得离主控比较远中间加一个 GND 隔离走线是值得的。5.2 第二层防线驱动层要跨品牌兼容驱动层不能把某个品牌的特性写死。SPI Flash 驱动里最容易踩的坑包括读 ID 指令0x9F返回的厂商 ID 和器件 ID不同品牌的值不同驱动里要用查表法适配Status Register 的位定义不同品牌可能有差异尤其是 WIP写进行中位和 QE 位部分品牌的 Flash 上电后默认是标准 SPI 模式需要额外发指令才能启用 Quad 模式驱动里要先检测当前模式再切换在驱动的初始化阶段统一执行一轮读 JEDEC ID → 按 ID 配置指令集 → 使能 Quad → 测试读写的流程基本能覆盖 90% 的兼容性问题。5.3 第三层防线产品级测试要设计 Flash 专项用例产品级的量产测试和可靠性测试Flash 相关用例建议包含这几项全地址空间读写比对确认容量和坏块情况擦写寿命验证对关键参数区做 10 万次擦写测试一般 NOR Flash 标称寿命就是 10 万次OTA 断点续传测试模拟异常断电DPD 指令进出的电流测试确认量产设备的底电流一致这套测试用例我一般会放进产测固件里生产时每台设备出厂前自动跑一遍不需要额外人力但能把有问题的 Flash 在出厂前拦截下来。6. 常见选型与测试问题排查速查表最后整理一份速查表把前面提到的关键检查点和判断标准集中放一起方便你实际工作时对照问题现象可能原因排查方向解决建议上电后主控读不到 Flash ID电压域不匹配、IO 电平不兼容用示波器量 CLK/MOSI/MISO 波形检查 Flash VCC 电压确认和主控 IO 电平匹配偶发读写数据错误电源噪声、信号质量差、Flash 质量抓 SPI 波形检查 VCC 纹波优化旁路电容位置降 SPI 时钟频率更换 Flash 品牌底电流偏高Flash 未进入 DPD、DPD 电流偏大实测 DPD 电流查 GPIO 配置调整休眠流程主动发 DPD 指令更换低功耗型号OTA 升级失败率高容量规划不足、擦写寿命不够查看日志分区报错跑擦写测试调整分区策略换成大容量或高寿命型号低温下读写不稳定电压裕量不足、Flash 低温特性差做温度循环测试量低温下电源波形更换宽压型号优化电源设计量产缺料单一货源提前做多源验证选 pin-to-pin 兼容的多品牌备料这张表其实就是前面所有内容的高度浓缩你选型时可以把每一行都当成一个 check item逐条过一遍基本不会漏项。关于 SPI Flash 选型这件事我个人的体会是它不像主控、传感器那样是项目的明星器件但它是那种选对了你觉得理所当然选错了能让你连续加班好几周的暗坑零件。穿戴产品的工程难点往往不在于某个高大上的算法而在于把这些看似简单的细节都抠到位。最后分享一条实战技巧每次选型时BOM 里务必规划一个 pin-to-pin 兼容备选料而且一定要在项目早期就用主备两套料各打一批板子做验证。等量产后才验证备料时间窗口往往已经不允许你从容切换了。这个小习惯价值远远超过它表面看起来的成本。
返回列表