🌟 关注「嵌入式软件客栈」公众号 🌟,解锁实战技巧!💻🚀
设备突然罢工:
- 正在使用的SSD突然无法写入数据
- 工业控制设备的Flash存储无预警失效
- 物联网设备频繁死机,需要重新烧录固件
- 数据记录仪丢失了关键数据
Flash存储虽然没有机械硬盘的移动部件,但它有一个不为人知的"死亡计时器"——擦写次数限制。
一、NAND Flash与NOR Flash的寿命限制
1.基本工作原理
Flash存储是一种非易失性存储器,即断电后数据仍然保存。根据内部结构和访问方式的不同,Flash主要分为NAND Flash和NOR Flash两大类型。

NOR Flash:
- 支持随机读取,可按字节寻址
- 执行代码能力强(XIP,eXecute In Place)
- 读取速度快,写入和擦除速度较慢
- 主要用于存储程序代码
NAND Flash:
- 采用页读取,不支持随机字节访问
- 需要先将数据读入缓冲区才能访问
- 读取速度较慢,但写入和擦除速度快
- 单位成本低,密度高,主要用于数据存储
两种Flash的基本存储单元都是浮栅晶体管,通过控制浮栅中的电子数量来存储数据。
写入过程:向浮栅注入电子
擦除过程:从浮栅移除电子
读取过程:检测浮栅中的电子数量
重要的是,无论NAND还是NOR,都有一个关键特性:必须先擦除再写入。这种"擦-写"周期是Flash寿命的基本计量单位。
2.寿命差异
两种Flash存储具有不同的擦写寿命特性:
| Flash类型 | 擦除单位 | 典型P/E循环次数 | 相对成本 | 典型应用场景 |
|---|---|---|---|---|
| NOR Flash | ||||
| - 标准NOR | 扇区(64KB-128KB) | 10,000-100,000 | 较高 | 启动代码、固件存储 |
| - 串行NOR | 扇区(4KB-64KB) | 10,000-100,000 | 中等 | 嵌入式系统引导程序 |
| NAND Flash | ||||
| - SLC NAND | 块(128KB-256KB) | 60,000-100,000 | 高 | 工业控制、关键任务系统 |
| - MLC NAND | 块(512KB-2MB) | 3,000-10,000 | 中等 | 企业级SSD、高端消费电子 |
| - TLC NAND | 块(1MB-4MB) | 1,000-3,000 | 较低 | 消费级SSD、移动设备 |
| - QLC NAND | 块(1MB-4MB) | 500-1,000 | 最低 | 大容量存储、归档存储 |
NAND与NOR的关键差异:
- NOR Flash通常具有更高的擦写耐久性,但容量较小且成本较高
- NAND Flash容量大、成本低,但单元寿命通常较短
- NOR Flash擦除粒度较小,NAND Flash擦除以较大的块为单位
3. 影响Flash寿命的关键因素
无论是NAND还是NOR Flash,其寿命都受多种因素影响:
温度:高温会加速电荷泄漏,显著缩短寿命。NOR Flash通常比NAND Flash具有更好的高温稳定性。
数据保留时间:要求更长的数据保留时间会降低可用擦写次数。NOR Flash的数据保留能力通常优于NAND Flash。
写入模式:
- NOR Flash:频繁的小块随机写入会加速寿命消耗
- NAND Flash:不对齐的写入和频繁的小页写入会增加写入放大
控制器算法:
- NOR Flash通常内置简单的控制器
- NAND Flash依赖复杂的控制器实现坏块管理、磨损均衡和错误校正
二、寿命计算方法详解
1. 基本计算公式
Flash存储的寿命通常以可写入的总数据量表示,基本计算公式为:
总写入数据量(TBW) = 存储容量 × 擦写循环次数 / 写入放大因子
NOR Flash特有考量:
- 擦除粒度较小,通常以扇区为单位
- 写入放大因子通常较小(1.1-1.5)
- 适合代码存储,写入频率低
NAND Flash特有考量:
- 擦除粒度大,以块为单位
- 写入放大因子较大(2-15),取决于控制器效率
- 需要考虑坏块率增长
2. 写入放大因子(WAF)的影响
写入放大因子在NAND和NOR Flash中的表现不同:
NOR Flash的WAF:
- 通常较小(1.1-1.5)
- 主要来源于代码更新和配置修改
- 随机写入影响较小
NAND Flash的WAF:
- 通常较大(2-15)
- 受垃圾回收、磨损均衡影响显著
- 随机小块写入会导致WAF急剧上升
不同应用场景的WAF差异:
| 使用场景 | NAND WAF | NOR WAF | 原因 |
|---|---|---|---|
| 固件存储 | N/A | ~1.1 | NOR主要用于代码存储,很少更新 |
| 日志记录 | ~2-3 | ~1.2-1.5 | 顺序写入,NAND需要块擦除 |
| 数据库 | ~10-15 | N/A | 高度随机写入,NAND需频繁垃圾回收 |
| 文件系统 | ~4-6 | ~1.3-2 | 混合访问模式 |
3. 温度和数据保留时间的影响
温度和数据保留时间对NAND和NOR Flash都有显著影响,但影响程度不同:
温度调整因子(AT):
| 存储温度 | NAND Flash AT | NOR Flash AT |
|---|---|---|
| 40°C (基准) | 1 | 1 |
| 55°C | ~6.4 | ~3.2 |
| 70°C | ~35 | ~15 |
| 85°C | ~171 | ~60 |
NOR Flash通常具有更好的高温稳定性,这也是其常用于汽车和工业应用的原因之一。
存储时间因子(STF):
NAND Flash STF = 目标数据保留时间(月) / 12
NOR Flash STF = 目标数据保留时间(月) / 24
NOR Flash通常具有更长的数据保留能力。
4. 综合计算示例
NOR Flash示例:
以一个8MB NOR Flash为例,用于存储固件和配置数据,计算其寿命:
基准条件:40°C存储温度,5年数据保留,每月更新一次固件
每月写入量 = 1MB (固件更新)
每年写入量 = 12MB
NOR Flash擦写次数 = 100,000
STF = 60/24 = 2.5
调整后擦写次数 = 100,000/2.5 = 40,000
设备理论寿命 = 8MB × 40,000 / (12MB × 1.2) = 22,222年
实际上,其他因素会限制寿命,但NOR Flash的擦写耐久性不会成为瓶颈。
NAND Flash示例:
以一个64GB SLC NAND SSD为例,计算其在不同条件下的寿命:
基准条件:40°C存储温度,1年数据保留,顺序写入(WAF=2)
总写入数据量 = 64GB × 100,000次 / 2 = 3,200TB
恶劣条件:70°C存储温度,2年数据保留,混合写入(WAF=6)
总写入数据量 = 64GB × 100,000次 / (6 × 35 × 2) = 15.2TB
可见,在恶劣条件下,同一NAND设备的寿命可能缩短到原来的不到1%!
三、延长寿命的存储策略
1. 软件层面的优化策略
(1) NOR Flash优化策略
- 增量更新:只更新变化的代码段,而非整个固件
- 配置数据集中:将频繁变化的配置数据集中在特定扇区
- 磨损均衡:轮换使用不同扇区存储配置数据
// NOR Flash优化示例:增量更新
// 不良示例:更新整个固件
write_entire_firmware(new_firmware, FIRMWARE_SIZE);
// 优良示例:只更新变化的部分
for (int i = 0; i < FIRMWARE_BLOCKS; i++) {
if (memcmp(current_firmware[i], new_firmware[i], BLOCK_SIZE) != 0) {
erase_block(i);
write_block(i, new_firmware[i], BLOCK_SIZE);
}
}
(2) NAND Flash优化策略
- 批量写入:积累数据后批量写入,而非频繁小量写入
- 页对齐写入:按NAND页大小对齐数据写入
- 减少元数据更新:优化文件系统元数据结构
// NAND Flash优化示例:批量写入
// 不良示例:频繁小量写入
for (int i = 0; i < 1000; i++) {
write_to_flash(small_data);
}
// 优良示例:批量写入
buffer_data(1000 * small_data);
write_to_flash(large_buffer);
(3) 文件系统选择
NOR Flash适用文件系统:
- SPIFFS:适合小容量NOR Flash
- LittleFS:更现代的NOR Flash文件系统,支持磨损均衡
NAND Flash适用文件系统:
- JFFS2:早期NAND文件系统
- UBIFS:专为NAND设计的现代文件系统
- F2FS:针对SSD和eMMC优化的文件系统
这些文件系统都实现了日志结构化设计,通过追加写入而非原地更新来减少写入放大。
2. 硬件设计层面的策略
(1) NOR Flash硬件优化
- 双区域设计:实现A/B固件分区,支持安全更新和回滚
- 关键数据冗余:多位置存储关键配置数据
- 适当容量选择:选择比实际需求大的NOR Flash,支持更好的磨损分散
(2) NAND Flash硬件优化
-
过度配置(Over-provisioning):预留部分容量不对用户可见
- 消费级SSD:通常7-15%过度配置
- 企业级SSD:通常28-100%过度配置
-
温度管理:
- 添加适当的散热设计
- 监控Flash温度,在高温时限制写入速度
-
混合存储策略:
- 引导代码:使用NOR Flash
- 操作系统:使用SLC NAND
- 用户数据:使用MLC/TLC NAND
3. 应用层面的数据管理策略
(1) NOR Flash应用策略
-
配置数据分级:
- 频繁变化的配置:存储在RAM,定期同步
- 稳定配置:存储在NOR Flash
-
代码更新策略:
- 差分更新:只传输和更新变化的部分
- 安全更新:保留旧版本直到新版本验证成功
(2) NAND Flash应用策略
-
数据压缩:
- 无损压缩:适用于需要精确恢复的数据
- 有损压缩:适用于传感器数据等可接受精度损失的场景
-
增量更新:
- 只更新变化的部分,而非整个文件
- 特别适用于数据库和日志文件
-
缓存策略:
- 内存缓存:延迟写入,合并多次更新
- 分层缓存:利用NOR Flash作为NAND Flash的缓存层
关注 嵌入式软件客栈 公众号,获取更多内容

996

被折叠的 条评论
为什么被折叠?



