如何保存NAND Flash数据完整之 “掉电丢数据”底层原因

汇鼎金融 25-12-24

随着越来越多客户从 NOR Flash 迁移到CS品牌的 SD NAND 存储产品,有工程师会遇到“明明写入成功了,为什么设备突然断电后,数据消失了?”的问题。

这种情况听起来像“异常”,但其实,它是系统层面必然存在的特性。这里我们来解释一下底层原因,从而更容易找到解决方法。

01|NAND Flash 不是实时写入设备

相比 NOR,NAND Flash 采用完全不同的底层结构:

NAND 的 写入粒度是 Page(页)

NAND 的 擦除粒度是 Block(块)

也就是说:即使只写入 1 个字节,最终也要以整页数据方式写入。

写入过程不是一步完成,而是:

数据进入控制器 → 缓存 → 整理成 Page → 写入 NAND → 更新映射表

这意味着,在数据落盘之前,会存在一段“过渡期”。

如果断电发生在这个阶段,数据就有可能未完成写入——自然也不会被保存。

02|Flash 管理算法决定写入结果不是瞬间固定

为了延长寿命、减少写扩散、优化访问性能,SD NAND 内部有:

FTL(Flash Translation Layer)

Wear-Leveling(均衡写入)

Garbage Collection(垃圾回收)

ECC/BCH/LDPC 校验机制

这些机制会带来一个事实:写操作并不是同步落盘,而是异步过程。

更重要的是:

有时 NAND 已经写完数据,但映射表还未更新

有些 Page 数据正在被复制或合并

有时系统正在进行垃圾回收(GC)

这些阶段若意外断电,就可能出现:

写入数据丢失

数据结构损坏

文件变成“看得见却打不开”

这不是故障,而是 NAND 的工作方式。

03|文件系统不会立即写盘,而是“延迟写入”

很多用户以为:只要 APP、系统或驱动 write() 成功,数据就已经写到存储器里。

事实上,大多数文件系统,包括:

FAT32 / exFAT

LittleFS

Linux EXT4 / F2FS

RTOS 上的嵌入式 FS

都采用写入缓存策略(Write-Back Cache),即:数据会先存在系统内存或设备缓存中,而不是立即写入存储芯片。

这是为了:

加快速度

减少 NAND 写入次数

增加寿命

但是,这也带来结果:写入成功 ≠ 数据已安全保存。

04|为什么用 NOR 时没问题?

很简单:

换句话说:使用 NAND,就意味着系统行为会从“实时写入”,变成“阶段性写入”。这不是优劣差异,而是技术路线的不同。

05|理解存储介质,才能正确使用它

掉电数据丢失并不是 SD NAND 的“问题”,而是使用 NAND 介质时必须考虑的设计因素。影响因素包括:

写入策略

供电稳定性

文件系统设计

控制器算法

写入数据量大小和写入频率

是否存在频繁随机小写入场景

了解了底层原理,在面对出现问题的场景时,我们和客户也更容易找到解决方案。也欢迎有这种困惑的客户联系我们,我们会结合您的具体应用场景,写入模型给出对应的解决方法。

亲爱的卡友们,欢迎光临雷龙发展

审核编辑 黄宇