一句话: MCU 内部 Flash 容量和擦写寿命都有限。当需要存海量校准数据、多套温度曲线、波形序列、运行日志、或 OTA 固件时,就该加一颗外部 Flash 了。
适合谁读:适合嵌入式开发者、单片机初学者及遇到类似问题的工程师
内部 Flash 的限制
| 限制 | 典型值 |
|---|---|
| 容量 | 128KB ~ 2MB |
| 擦写寿命 | 约 1 万次 |
| 擦除粒度 | 页/扇区(KB 级) |
对于存固件代码绰绰有余。但对于频繁写入的数据或超大校准表,内部不够。
1. 校准点太多,16 位地址不够用
电流-功率校准表:假设每路 10 万个校准点 × 2 字节/点 = 200KB。4 路 = 800KB。
内部 Flash 才 512KB,没开始就爆了。外部 Flash 轻松上 16MB。
2. 多温度校准曲线
同一个通道在 25°C、45°C、65°C 各校准一套曲线。数据量直接翻 3 倍。
3. 通道数增加
当前 4 路,要扩到 8 路——校准表翻倍。
4. 波形/序列数据
如果需要实现任意波形发生器功能,要预存大量 DAC 输出序列。一个波形就是几 KB × N 个波形 = MB 级。
5. 运行日志
记录长期运行的历史数据——电压、电流、温度曲线。每秒几十条 × 数天 = 大量数据,而且频繁写入。
内部 Flash 擦写约 1 万次——如果每 10 秒写一次,几个小时就到寿命了。外部 Flash(如 NOR Flash)擦写寿命通常 10 万次以上。
6. OTA 固件升级
远程升级需要一个空闲区域暂存新固件镜像。新固件大小可能接近内部 Flash 的一半——存不下。
外部 Flash 作为"临时仓库":下载新固件 → 存外部 Flash → CRC 校验 → 搬到内部 Flash。
内部 vs 外部
| 内部 Flash | 外部 Flash | |
|---|---|---|
| 速度 | 快(总线直连) | 慢(SPI/QSPI 通信) |
| 容量 | MB 级 | 几十 MB |
| 擦写寿命 | ~1 万次 | ~10 万次 |
| 适合存什么 | 固件代码、少量参数 | 校准表、日志、OTA 镜像 |
| 代码执行 | 可以直接跑代码 | 通常不能(需要 XIP 支持) |
总结
| 场景 | 一句话触发条件 |
|---|---|
| 超多校准点 | 16 位地址装不下 |
| 多温度曲线 | 数据量翻 N 倍 |
| 通道扩展 | 校准表跟着翻 |
| 波形数据 | MB 级预存序列 |
| 运行日志 | 频繁写入,超过 1 万次寿命 |
| OTA 升级 | 需要一个临时仓库放新固件 |
判断标准:内部装不下 or 写入太频繁 = 加外部 Flash。
有用的话点个收藏,下次调试直接用。有问题欢迎评论区交流,看到了都会回。
下一篇:dual-track-parallel-refactoring——双镜像升级、五层架构、Flash双备份——工业级固件的设计模式