2Gb SPI NAND 选型看过来!
起因
前阵子在几个技术群里,看到不少人在讨论一个共同的问题:项目固件越来越大,UI素材越来越丰富,以前的SPI NOR Flash容量不够用了。换eMMC吧,主控不一定支持,走线也麻烦;换并行NAND吧,引脚多得让人头大。
我自己最近也在折腾一个开源智能家居网关的项目,正好卡在这个节点上。系统要跑裁剪版的Linux,还得存点本地语音资源,算下来256MB左右比较合适。于是花了一些时间研究SPI NAND这个品类,最后拿到了一颗XTX(芯天下)的XT26G02C,2Gbit也就是256MByte,8个脚的WSON封装。花了两天时间翻规格书、搭环境简单测了一下,把一些体验和参数整理出来,给有类似需求的朋友参考。
声明:纯个人技术分享,非商业推广,不含任何购买引导。
一、为什么关注这颗料
先说容量。256MB在消费电子里不算大,但在嵌入式Linux设备里,刚好卡在一个很微妙的位置。跑个裁剪过的系统,放些UI资源,再留个OTA升级包的位置,差不多刚好够用。再小就捉襟见肘,再大一级的价格和封装又不划算。
再看接口。这颗料是SPI接口,支持标准SPI、Dual SPI和Quad SPI,最快能跑到104MHz。好处是只需要6根信号线(CS、CLK、DI、DO、WP#、HOLD#),对主控引脚非常友好。我用的是STM32F4,直接挂到Quad SPI接口上就能用。
封装是WSON8,8×6mm。这个尺寸比很多人的大拇指指甲盖还小一圈,而且引脚定义和市面上常见的8脚SPI NOR Flash是兼容的。也就是说,如果板子上原来用的是NOR,想换成这颗NAND,硬件上基本可以直接替换,不用改PCB。
供电是标准的3.3V,范围2.7V到3.6V。工作温度-40°C到+85°C,工业级规格。
二、最吸引我的点:内置ECC
玩过NAND的朋友都知道,位翻转(Bit Flip)是个绕不开的问题。数据存进去的时候是对的,过段时间读出来可能就变了几个bit。如果是配置文件或者关键系统数据,这个问题可能直接导致设备变砖。
传统做法是主控端做ECC算法,或者在文件系统层做校验。但如果主控本身不带硬件ECC模块,软件实现的运算量不小,而且代码复杂,容易有bug。
XT26G02C的做法是把ECC做到芯片内部。规格书里写的是以528字节为单位,可纠正8bit错误。写入的时候芯片自己算校验码存到备用区,读取的时候自动校验和修正,主控读到的已经是修正完的数据。
实际测试中,我反复读写了几千次,没有出现数据不一致的情况。当然几千次的样本量说明不了长期可靠性,但至少验证了ECC机制在正常工作。
这个设计带来的实际好处是:主控侧不需要实现任何ECC算法,驱动代码量明显减少。对于用低端MCU或者不想在存储驱动上花太多时间的项目来说,确实省了不少事。
三、内部数据搬运功能
这是一个规格书里不太显眼但实际很有用的功能。
在做固件升级或者垃圾回收的时候,经常需要把数据从一个页搬到另一个页。传统做法是:主控把数据从Flash读到RAM,修改后再写回Flash。这个过程要占用SPI总线和CPU时间。
XT26G02C支持内部数据搬运,也就是数据在芯片内部直接搬,不需要经过主控。主控只需要发一条指令告诉芯片“把A页搬到B页”,然后等芯片忙完就可以了,中间不需要参与数据传输。
这个功能在做磨损均衡(Wear Leveling)的时候特别有用,可以减少主控的参与度,释放算力给其他任务。
四、安全和防克隆
现在IoT设备的安全问题越来越受关注。XT26G02C提供了两个相关的特性:
一个是硬件写保护。通过WP引脚配合状态寄存器的设置,可以对特定区域进行物理级写保护。Bootloader分区锁上之后,就算是系统自己也没法改,防止意外擦写或者恶意篡改。
另一个是唯一ID(UID)。每颗芯片出厂时都写了一个128-bit的唯一标识符,只读不可修改。可以在固件里把程序运行和这个ID绑定,芯片ID对不上就不工作。这个方案在防止抄板克隆方面比较实用。
五、坏块管理需要注意什么
NAND出厂就有坏块,这是行业常态,不是质量问题。XT26G02C总共有2048个块,保证有效块不少于2008个。
出厂坏块的标记在每个Block第一页的备用区第一个字节,好块是0xFF,坏块是非0xFF。
写驱动的时候,建议在上电初始化阶段扫描全片建立坏块表,之后所有读写操作都先查表。另外有个重要的提醒:不要执行全片擦除命令,否则所有坏块标记会被清除,之后就没法区分出厂坏块和后来产生的坏块了。这个问题我之前在别的项目里踩过坑,产线脚本里一定要禁止这个操作。
六、接口和时序实测
我用的主控是STM32F407,Quad SPI模式,时钟跑在80MHz(主控上限,芯片本身能到104MHz)。
实际测下来,页编程时间在350到380微秒之间,和规格书标称的360微秒基本吻合。块擦除大约3.5到4毫秒。页读取时间约125微秒。读吞吐量测到大概280Mbit/s左右,离理论峰值有差距,主要是主控SPI控制器效率的限制。
用于加载Linux内核镜像,从发起到进入系统大概不到两秒,体感上速度不错。
七、PCB Layout需要注意的小细节
WSON8封装底部有散热焊盘,Layout的时候记得接地,有助于散热。
电源去耦方面,编程和擦除时电流大约25到40毫安,不算大,但在VCC脚旁边放个0.1μF陶瓷电容再加个10μF的,心里踏实。
如果SPI时钟跑得比较高(接近100MHz),走线建议稍微注意一下,线上可以串个小电阻抑制过冲。
八、适合哪些场景
根据这几天的体验,我整理了几个比较适合的场景:
智能门锁:现在门锁要存人脸特征、指纹库、语音包,256MB够用了。WSON8封装小,能塞进门锁的狭长PCB。
路由器/光猫:固件越来越大,还要支持OTA双分区,256MB可以放两套系统还有富余。内置ECC降低了长期运行数据出错的风险。
行车记录仪:需要循环写入,页编程速度够快,贴片封装抗震,工业级温宽覆盖了车载环境。
开源硬件/DIY项目:如果你在做一个跑Linux的掌机、智能音箱或者网关设备,256MB的SPI NAND比NOR便宜,比eMMC好布线,是个折中方案。

九、一点总结
XT26G02C在256MB这个容量点上,把内置ECC、Quad SPI高速接口、工业级温宽和小封装凑到了一起。对于正在评估SPI NAND方案的工程师或者DIY玩家来说,值得花点时间看看规格书,判断是否适合自己的项目。
以上是这几天的上手体验和规格梳理,后续如果调通了文件系统层,再补充一篇移植记录。欢迎在评论区交流选型心得和踩坑经验。
本文基于XT26G02C数据手册及个人测试整理,仅供参考,具体参数以官方最新版规格书为准。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
