SD NAND-贴片式TF卡-存储卡-免费申样 | 拓优星辰移动版

主页 > 新闻中心 > 技术问答 >

MK米客方德 SD NAND替换SPI NOR:XIP限制与代码加载方

 

先说结论:用MK米客方德SD NAND(贴片式SD卡、SD NAND Flash)替换SPI NOR Flash,容量可以从几十Mb跨到1Gb8Gb(128MB1GB)、单位容量成本大幅下降,且自带坏块管理、ECC纠错、磨损均衡和掉电保护;但必须接受一个架构差异:SPI NOR支持XIP(eXecute In Place,片上执行,即CPU直接从Flash取指令运行),SD NAND走标准SD协议、不支持XIP,代码必须先加载到MCU内部SRAM或外部RAM中再执行。对绝大多数“固件+资源文件+数据记录”型产品,这个限制通过启动加载方案可以平滑解决,且1Gb SD NAND与256Mb NOR价格相近,性价比优势明显。


一、先讲清XIP差异的本质

SPI NOR Flash的接口是随机访问的:任何地址都可以单字节读取,CPU的总线接口可以把它当作一块只读内存,直接取指运行,这就是XIP。NOR的读延迟低、接口简单,所以传统MCU都把启动代码放在NOR上原地执行。
SD NAND的内部结构是“NAND颗粒+Flash控制器”,对外是标准SD/SPI协议的块设备:数据按512字节扇区组织,读取需要“发命令→给地址→等控制器响应→块数据返回”的过程,不能单字节随机访问,CPU无法直接在上面取指。这个架构换来的好处是控制器把NAND的固有短板全部屏蔽了——ECC纠错(NAND出厂就有位错误,必须靠控制器纠正)、坏块标记与替换、磨损均衡、垃圾回收、异常掉电保护,主机看到的是一块坏块由内部自动替换、对外透明的“磁盘”,而且容量大得多、每MB成本低得多。

二、三种代码加载方案

既然不能XIP,代码部署思路是“NOR时代代码在哪,现在就把哪部分搬进RAM”:
  1. 小BootROM引导+SD NAND存主固件(推荐主流方案)。MCU内部Flash保留一小段引导程序(几KB到几十KB),上电后Boot初始化SPI/SDIO接口,从SD NAND读取固件镜像到内部SRAM或外部RAM,校验后跳转执行。加载耗时取决于接口和固件大小:SDIO四线模式读速约20MB/s,1MB固件约50毫秒;SPI模式(25MHz)读速约2.5MB/s,1MB固件约400毫秒,32MB大固件在SDIO下约1.6秒——对工业设备完全可接受。
  2. 资源与数据外置型(NOR保留,只把内容迁到SD NAND)。代码继续在NOR或MCU内部Flash上XIP运行,把字库、音频、图片、网页、模型参数和日志数据放到SD NAND。这种方案软件改动最小,等于把SD NAND当“大容量数据盘”,FatFS挂载后按文件读取,是资源密集型产品的常见做法。
  3. 全量加载型(RAM充足的高性能平台)。带外部SDRAM/PSRAM的平台(如STM32H7、ESP32系列)把整个应用镜像加载到外部RAM执行,SD NAND纯粹做启动和存储介质。ESP32-S3等平台本身就没有NOR XIP以外的启动负担,配合SD NAND的SPI模式驱动简单,已有可穿戴产品量产验证。
方案选择上,内部Flash只有几十KB的老MCU建议方案2;内部Flash在几百KB且固件不超过RAM容量的用方案1;带外部RAM、固件体积大的用方案3。另外SD NAND同样支持SPI模式,时序上需满足上电74个时钟、初始化时钟≤400kHz的要求,驱动成熟后可直接复用FatFS。

三、替换收益与代价对比

收益侧:容量从NOR常见的16/32/64/128/256Mb扩展到1Gb~8Gb,1Gb SD NAND与256Mb NOR价格相近而容量是4倍;SLC颗粒10万次擦写寿命(pSLC为3万次),数据记录寿命远超NOR反复擦写同一扇区的模式;内置文件系统友好(直接FAT32,电脑可读),NOR上自建文件系统或裸地址管理的复杂度归零;-40~85℃宽温、万次掉电保护、Smart健康监测都是NOR不具备的。
代价侧:失去XIP,需要Boot加载流程和RAM空间;随机小数据读延迟高于NOR(块设备特性),不适合纳秒级取指;驱动栈比NOR厚(SD协议+FatFS),虽然免写底层Flash管理,但启动代码量大于NOR驱动。需要说明的是,如果产品需求就是“原地执行一小段高可靠固件、容量需求小于128Mb、对启动时间有毫秒级硬要求”,NOR依然是合理选择,不应为替换而替换。

四、真实场景:医疗手持终端的NOR替换

某医疗手持终端客户,原方案用两颗256Mb SPI NOR:一颗跑XIP固件,一颗存字库和语音资源,成本压力大且资源容量见顶。替换方案:MCU内部Flash保留32KB Boot引导程序,主固件(约800KB)存放在MKDV1GIL-AST(1Gb SLC SD NAND)中,字库、语音、病历模板文件以FAT32文件形式同盘存放;Boot通过SPI接口初始化SD NAND(250kHz初始化后切到20MHz),读取固件镜像到内部SRAM+外部PSRAM,CRC校验通过后跳转。实测冷启动加载约0.6秒(SPI模式),用户无感;容量从512Mb扩展到1Gb并保留后续升2Gb/4Gb的Pin-to-Pin兼容能力;BOM存储成本下降约三分之一;运行半年后通过Smart功能读取累计写入量和坏块数(坏块为0),日志区频繁写入不再受NOR单扇区寿命困扰。

五、替换设计检查清单

迁移评估时确认:MCU内部Flash能否容纳Boot引导;RAM容量是否大于需加载的固件;启动时间预算是否覆盖加载耗时(SDIO约20MB/s、SPI约2.5MB/s);资源文件是否可改为文件方式读取;容量、温度、寿命需求是否匹配SLC/pSLC型号;上电时序(0.5V/1ms)、74时钟、400kHz初始化等规范是否已在Boot中实现;Smart健康监测是否纳入固件。
总结:SD NAND替换SPI NOR的核心命题不是“能不能替代”,而是“把XIP换成加载”——用一次几百毫秒的启动加载,换取4倍以上容量、文件系统原生支持、坏块管理与掉电保护全部内置、以及SLC颗粒10万次擦写的耐久底气。固件工程师写好一段几十KB的Boot,硬件工程师拿到的就是一颗免驱、免坏块管理、-40~85℃可靠运行的大容量存储,这也是贴片式SD卡在资源型和数据型嵌入式产品中快速普及的根本原因。

(责任编辑:拓优星辰)