首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SD NAND自带FAT32文件系统:替代Nor Flash的软件变化

SD NAND自带FAT32文件系统:替代Nor Flash的软件变化

原创
作者头像
用户11143476
发布于 2026-09-28 10:13:37
发布于 2026-09-28 10:13:37
1420
举报

Nor Flash在软件上几乎是透明的,地址一映射,读写擦按手册发命令,挂不挂文件系统都能跑。换成SD NAND,中间隔着控制器和FTL,出厂还能直接带FAT32。软件上要改什么、能省什么,这篇逐项说。

一、从裸地址读写变成文件接口

用Nor时,存一个参数往往就是往固定地址写,升级时还得自己安排哪段放代码、哪段放数据。擦除以扇区为单位,写之前要先把不想丢的内容搬走。SD NAND上更自然的做法是挂FAT32,用f_open、f_write、f_read这套文件接口,数据落在哪个物理块、块什么时候擦,由器件内部的FTL处理,主控看到的是一串连续的逻辑扇区。

刚迁移的工程师会不适应:写一个字节日志也要走文件打开关闭,感觉绕。但数据量上来之后,按文件组织日志、按日期分文件、随时拷到电脑分析,这些在Nor裸地址上都得自己造轮子。

主机和FTL之间以512字节扇区为单位对话,文件系统把簇映射到扇区链,FTL再把扇区映射到NAND物理页。三层翻译听着绕,但每一层都是标准件,主控只跟最上层的文件接口打交道。

迁移工作有几件具体事。原来按地址把结构体强转读写的代码要改成文件读写,注意结构体字节对齐,直接把内存映像写进文件,换平台或换编译器后可能错位。固件升级从固定分区搬移改成整文件写入,升级文件先放临时文件名、校验通过再替换,写一半断电也不会把旧固件弄坏。

Nor上写前必须先擦除的麻烦迁过来也消失了,覆盖写直接发写命令,擦除由FTL在后台完成。但也别把随机小写当家常便饭,频繁改动FAT表的文件同样推高写放大,这正是簇大小要调的原因。

二、主控省下的固件工作量

这是替代方案里分量很重的一笔软件账。挂raw NAND或自己管NAND的设计,主控要写ECC纠错、坏块表、磨损均衡、垃圾回收,换一代颗粒还得重新调。MK米客方德的MKDV1GCL-ABF把这些全部收进控制器:内部ECC采用BCH纠错,配合坏块管理、磨损均衡和掉电保护,主控不用维护这部分代码;它原生遵循SD协会定义的SD2.0协议,主机侧直接用成熟的标准SD/SDIO驱动,器件出厂还可预烧FAT32,产线贴片即用、f_mount直接挂载,省掉逐颗格式化的工位,相关底层算法已登记6项计算机软件著作权。

SD NAND 参考设计
SD NAND 参考设计

三、簇大小按文件粒度选

FAT32里簇是分配空间的最小单位,哪怕1字节的文件也占一整簇。FAT32配16GB容量,常见默认簇是16KB或32KB。簇选大了浪费空间,选小了写入慢、写放大高,要按业务数据的文件大小定。

米客方德FAE实测过一组数据:U1/C10卡、STM32F407主控、连续写1000个15KB文件,4KB簇下单文件10ms、吞吐1.5MB/s;32KB簇下5ms、3.0MB/s;64KB簇下4.8ms、3.1MB/s,超过32KB之后收益很小。写放大也跟着变:32KB簇下每写1GB有效数据,NAND实际写入约1.05GB;4KB簇下约1.6GB。大量小于64KB的小文件场景,32KB是甜点;大文件顺序写再考虑64KB或128KB。

文件系统选型还有个边界:FAT32单文件不能超过4GB,卷容量也有上限,单文件更大就该换exFAT。SD NAND容量普遍在Gb级,8Gb折合1GB,FAT32完全够用,犯不上为了新鲜多移植一套文件系统。

四、挂载速度:FSInfo与全盘扫描

Nor不挂文件系统,上电就能读;FAT32挂载要读元数据,正常情况下很快。FAT32有FSInfo扇区记录总簇数和可用簇数,挂载只校验DBR加FSInfo,发现不一致才全盘扫描,这一步能跳过约90%的扫描耗时。

异常断电后的全盘扫描代价要心里有数。8GB容量、32KB簇大约24万个簇,按每簇10ms延时算,扫一遍约2400秒;每簇1ms也要约240秒。设备开机有时间约束的话,挂载逻辑要做容错和超时处理,不能让扫描卡住整机启动。

挂载还有个工程细节:f_mount要判返回值,空白卡先f_mkfs再建目录,不能假定每张卡一定带文件系统。SD NAND出厂可以预烧FAT32,贴片即挂载,但代码里的异常分支仍要写全。

日志追加写入,用f_lseek定位到末尾或记住上次偏移,别每次挂载都从头扫文件找结尾。文件多了目录项遍历本身就是开销,按日期分目录是项目里常见的做法。

五、掉电时刻的软件动作

FATFS默认带缓冲,关键数据写完只调f_close不够稳。实际项目里,掉电不可靠的场景会在f_close之后再调一次f_sync,强制把FAT表和数据扇区刷到卡上,把文件系统损坏的概率压下去。

这也跟器件侧呼应。SD NAND MKDV1GCL-ABF的控制器对映射表和关键元数据做掉电保护,重新上电后固件自行重建现场,主控不用处理半截写入的物理块。软件负责及时刷缓存,硬件负责断电瞬间兜底,两边各管一段。条件允许的话,写完再回读关键字节比对一次,等于多一道校验。簇参数在f_mkfs时一次性定好、运行中没法改,所以设备定型前要按真实业务数据实测一轮再定档。

主控丢掉ECC、坏块管理、磨损均衡这堆底层固件,换来SD初始化、文件系统和簇参数调优的工作,而MKDV1GCL-ABF遵循标准SD协议、可预烧FAT32,把这部分迁移工作量也明显压小。FAT32按文件粒度选簇、用FSInfo快速挂载、关键写入后f_sync,这几件事做对,迁

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、从裸地址读写变成文件接口
  • 二、主控省下的固件工作量
  • 三、簇大小按文件粒度选
  • 四、挂载速度:FSInfo与全盘扫描
  • 五、掉电时刻的软件动作
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档