3. 存储介质选型:Flash、EEPROM、SD卡、NAND Flash 对比
做运动控制固件,存储选型是个绕不开的坎儿。
我见过不少项目,前期随便选了个存储芯片,结果量产时发现擦写寿命不够,或者掉电丢数据,改都来不及。说白了,存储介质选错了,整个固件升级方案就是空中楼阁。
今天咱们就把四种常见的存储介质掰开揉碎聊一聊。Flash、EEPROM、SD卡、NAND Flash,它们各自适合什么场景?坑在哪里?我用自己的项目经验给你讲透。
3.1 四种存储介质的核心差异
先看一张对比表,心里有个底。
| 特性 | EEPROM | NOR Flash | NAND Flash | SD卡(NAND+控制器) |
|---|---|---|---|---|
| 存储容量 | 几KB~几MB | 几MB~几十MB | 几百MB~几TB | 几GB~几TB |
| 擦写寿命 | 100万次以上 | 10万次左右 | 1万~10万次 | 取决于内部NAND |
| 读写速度 | 慢(字节级) | 中(随机读快) | 快(页级读写) | 快(带缓存) |
| 擦除方式 | 字节擦除 | 扇区擦除 | 块擦除 | 块擦除(内部管理) |
| 坏块管理 | 无 | 无 | 需要软件处理 | 内置控制器处理 |
| 接口 | I2C/SPI | SPI/Parallel | SPI/Parallel | SDIO/SPI |
| 典型成本 | 高(每KB) | 中 | 低(每MB) | 低(每GB) |
| 固件升级适用性 | ❌ 不适合 | ✅ 适合小固件 | ✅ 适合大固件 | ✅ 适合超大固件 |
这张表我建议你收藏。每次选型前拿出来对照一下,能省不少弯路。
3.2 EEPROM:小数据存储的可靠选择
EEPROM 这东西,我最早接触是在做工业传感器的时候。当时需要存储校准参数和设备序列号,数据量不大,但要求掉电不丢。
EEPROM 最大的优点是字节级擦写。你改一个字节,就只擦一个字节,不像 Flash 那样要擦整个扇区。而且它的擦写寿命高达 100 万次以上,适合频繁修改的小数据。
- 设备配置参数(PID、IP地址、校准值)
- 运行日志(少量、频繁写入)
- 固件版本号、升级标志位
3.3 NOR Flash:代码就地执行(XIP)的利器
NOR Flash 有个独门绝技——XIP(Execute In Place)。说白了,就是 CPU 可以直接从 NOR Flash 里读指令执行,不用先把代码搬到 RAM 里。
这个特性在运动控制里特别有用。比如你做一个伺服驱动器,启动时要求毫秒级响应,没时间等代码从外部存储搬运到 RAM。NOR Flash 直接映射到地址空间,上电就能跑。
但 NOR Flash 也有短板。容量做不大,成本高。你想存个 100MB 的固件?NOR Flash 的价格会让你怀疑人生。
3.4 NAND Flash:大容量固件的首选
NAND Flash 是目前嵌入式设备里最主流的固件存储介质。容量大、价格低,几百 MB 到几 TB 随便选。
但 NAND Flash 有个让人头疼的问题——坏块。出厂时就可能有坏块,使用过程中还会产生新的坏块。你想想看,如果固件刚好写在坏块上,升级到一半系统就挂了。
- 必须做坏块管理(BBM),跳过坏块
- 需要 ECC 校验,纠正位翻转错误
- 擦除以块为单位(通常 128KB 或 256KB)
- 写入以页为单位(通常 2KB 或 4KB)
我在做一款工业相机时,就吃过 NAND Flash 的亏。当时没做坏块管理,结果生产了 1000 台设备,有 30 台升级失败。后来老老实实加了坏块表和 ECC,问题才解决。
3.5 SD 卡:大容量 + 即插即用
SD 卡本质上就是 NAND Flash 加了一个控制器。坏块管理、ECC、磨损均衡,控制器都帮你做了。你只需要通过 SDIO 或 SPI 接口读写文件就行。
SD 卡最大的优势是容量大、可插拔。比如你做一个人机界面,需要存几百张图片和字库文件,SD 卡是最省事的方案。
但 SD 卡也有坑。它的文件系统(FAT32/exFAT)在掉电时容易损坏。我曾经遇到过客户插拔 SD 卡时正好在写数据,结果文件系统崩溃,卡里的固件全丢了。后来我加了掉电检测和文件系统日志,才算稳住。
3.6 选型决策树
说了这么多,到底怎么选?我画了一张决策图,你照着走就行。
3.7 我的推荐组合方案
做了这么多年运动控制固件,我总结了一套比较稳的存储方案,分享给你参考。
- Bootloader → 存放在 NOR Flash(2MB 足够)
- 应用程序固件 → 存放在 NAND Flash(根据大小选 128MB~1GB)
- 配置参数 → 存放在 EEPROM(64KB 足够)
- 升级文件缓存 → 存放在 SD 卡(可选,用于离线升级)
这个方案的好处是各司其职。Bootloader 在 NOR Flash 里,启动快、安全。应用程序在 NAND Flash 里,容量大、成本低。参数在 EEPROM 里,随便改不怕坏。SD 卡作为升级媒介,现场维护方便。
嗯,存储介质选型就聊到这儿。记住一句话:没有最好的存储介质,只有最适合你项目的方案。选型时多想想你的固件有多大、升级频率多高、现场维护方不方便,答案自然就有了。
公众号:蓝海资料掘金营,微信deep3321