3、外部存储设备选型:SPI Flash、SD 卡、NAND Flash 对比

做 LVGL 图片加载,第一步不是写代码,而是选存储。我见过不少项目,代码写完了才发现存储带宽不够,或者容量差一点,最后只能推倒重来。今天咱们就把三种主流方案掰开揉碎,看看它们各自适合什么场景。

3.1 三种存储的核心差异

先看一张总览表,后面再逐个细聊。

参数 SPI Flash SD 卡 NAND Flash
接口类型 SPI(4线/6线) SDIO / SPI 并行 / ONFI / Toggle
典型容量 1MB ~ 256MB 1GB ~ 512GB 128MB ~ 8TB
读取速度 10~80 MB/s 10~100 MB/s 50~400 MB/s
写入速度 1~10 MB/s 5~40 MB/s 10~200 MB/s
坏块管理 无(出厂全好) 内置控制器 需软件处理
文件系统 LittleFS / SPIFFS FAT32 / exFAT UBIFS / YAFFS
引脚数量 6~8 个 6~9 个 20~48 个
典型成本(每MB) 较高 极低 最低

核心结论:SPI Flash 适合小容量、高可靠性场景;SD 卡适合大容量、快速开发;NAND Flash 适合大容量、高性能但需要更多软件投入。

3.2 SPI Flash:小而美的选择

SPI Flash 是我个人用得最多的方案。为什么?因为它简单、稳定、引脚少。一个 6 引脚的芯片就能搞定 16MB 存储,对于 LVGL 的图片资源来说,16MB 已经能存不少东西了。

优点:

  • 硬件设计简单,4 条数据线就能跑
  • 没有坏块问题,出厂就是全好的
  • 读取速度快,QSPI 模式能到 80MB/s
  • 功耗低,适合电池设备

缺点:

  • 容量天花板低,256MB 基本到头了
  • 写入速度慢,擦除一个扇区要几十毫秒
  • 单位成本高,大容量场景不划算

我的经验:如果图片总量在 32MB 以内,优先选 SPI Flash。我曾经在一个智能家居面板上用了 W25Q64(8MB),存了 30 张 240×240 的 16 位色图片,绰绰有余。而且 SPI Flash 的驱动代码网上到处都是,移植起来特别快。

3.3 SD 卡:大容量首选

SD 卡的优势很明显——容量大、便宜、即插即用。你想想看,一张 32GB 的 TF 卡才十几块钱,能存多少张图片?

优点:

  • 容量巨大,GB 级别起步
  • 内置控制器,坏块管理、磨损均衡都帮你做了
  • 文件系统成熟,FAT32 在 PC 上直接读写
  • 热插拔,方便调试和更新资源

缺点:

  • SDIO 接口占用引脚多,至少 6 个
  • SPI 模式速度慢,只有 10~20MB/s
  • 功耗高,不适合电池供电
  • 可靠性不如 Flash,接触不良会掉卡

避坑指南:我曾经在一个户外设备上用了 SD 卡,结果客户反馈说图片偶尔加载不出来。查了半天,发现是 SD 卡座在振动环境下接触不良。后来换成 SPI Flash + 少量缓存,问题就解决了。所以,如果设备有振动或高温环境,慎用 SD 卡。

3.4 NAND Flash:高性能但高门槛

NAND Flash 是嵌入式存储的「重武器」。它速度快、容量大、成本低,但代价是软件复杂度高。

优点:

  • 读取速度极快,并行接口能到 400MB/s
  • 容量大,TB 级别不是问题
  • 单位成本最低,适合海量存储

缺点:

  • 有坏块,出厂就有,使用中还会产生
  • 需要 ECC 纠错和坏块管理
  • 文件系统复杂,UBIFS 或 YAFFS 学习成本高
  • 引脚多,PCB 布局麻烦

什么时候用 NAND?如果你的图片库超过 256MB,或者需要同时存储视频、日志等大文件,NAND 是唯一选择。但要做好心理准备,软件工作量至少是 SPI Flash 的 3 倍。

3.5 选型决策流程

说了这么多,到底怎么选?我画了一张决策图,你可以照着走一遍。

外部存储选型决策流程 开始选型 图片总量是否 < 256MB? (含未来扩展余量) 是 引脚 < 8 个? (或 PCB 空间有限) 是 SPI Flash W25Qxx / MX25Lxx 否 SD 卡 TF 卡 / MicroSD 否 读取速度 > 50MB/s? (或需要同时加载多张图) 是 NAND Flash SLC / MLC / TLC 否 SD 卡 SPI 模式即可 说明 SPI Flash 适合小容量、低引脚场景;SD 卡适合大容量、快速开发; NAND Flash 适合大容量、高性能但需要更多软件投入。

3.6 实际项目中的选择建议

根据我这些年做过的项目,给你几个具体建议:

  1. 智能家居面板、小屏设备:图片总量 8~32MB,用 SPI Flash 就够了。W25Q64 或 W25Q128 是经典选择。
  2. 车载仪表、工控 HMI:图片总量 64~256MB,需要高可靠性。建议用 SPI Flash 或 SLC NAND,不要用 SD 卡。
  3. 消费电子、开发板:图片总量 1GB 以上,需要频繁更新资源。SD 卡最方便,PC 上拷进去就能用。
  4. 视频播放、多图库应用:图片总量 1GB 以上,且需要高速加载。上 NAND Flash + UBIFS,性能拉满。

我的习惯:做原型阶段先用 SD 卡,因为调试方便。等产品定型了,再根据实际容量和成本换成 SPI Flash 或 NAND。这样前期开发快,后期量产成本可控。

3.7 本章小结

三种存储方案各有千秋,没有绝对的好坏。选型的关键是搞清楚你的图片总量、引脚预算、性能要求和可靠性需求。嗯,这里要注意一点:别只看容量,还要看读取速度和软件复杂度。有时候省了硬件成本,却多花了三个月开发时间,得不偿失。