FAT
Solution中NAND/eMMC方案使用FAT + DHARA的方案。
FAT介绍
FAT(File Allocation Table ,文件分配表)是 Windows NT 等系统早期广泛支持的一种较为简单的文件系统 ,在嵌入式场景中也常因兼容性等被选用。 该 文件系统的特点是文件分配表(FAT),它实际上是一个驻留在卷顶部的表。 为了保护卷,将保留 FAT 的两个副本,以防一个副本损坏。 此外,FAT 表和根目录必须存储在固定位置,以便系统启动文件可以正确定位。
使用 FAT 格式化的磁盘在群集中分配,其大小由卷的大小确定。 创建文件时,在目录中创建一个条目,并建立包含数据的第一个群集编号。 FAT 表中的此项指示这是文件的最后一个群集,或指向下一个群集。
更新 FAT 表非常重要且耗时。 如果未定期更新 FAT 表,可能会导致数据丢失。 这是耗时的,因为每次更新 FAT 表时,磁盘读取头都必须重新定位到驱动器的逻辑轨道零。
FAT 目录结构没有组织,并且为驱动器上的第一个打开位置提供文件。 此外,FAT 仅支持只读、隐藏、系统和存档文件属性。
FAT文件系统配置
创建文件系统代码
Nand/NOR flash
Nand/NOR flash芯片mount root分区代码如下

增加多个分区代码如下;需要注意的是:
增加多个分区之前必须要先mount root分区并且成功。
在增加下一个分区之前需要先在root根目录下创建这个分区的目录。
下一个分区起始地址不能与上一个分区重叠。
步骤如下:
创建第二个分区的相关信息

mount文件系统

eMMC Flash
由于eMMC的初始化需要一定的时间,因此要在eMMC上面mount文件系统需要等待eMMC初始化完成。

eMMC与nand/nor的文件系统不同点
eMMC的sector大小是512
注册分区device的接口不一致 eMMC采用的接口如下

其他流程都与上诉的nand流程一致。
直接下载文件系统.bin文件
此操作适用于需要加载另一个有文件的文件系统分区,步骤如下:
先准备好一个已经制作好的xxx.bin文件
找一片空闲没用的flash空间按照软件上的地址使用jink直接loadbin 下载进去,jink指令如下
loadbin ../../../xxx.bin 0x00000000
这样在mount时读取分区信息的LBR是有对应信息,就能识别到当前下载的分区文件系统
FAT文件系统使用
可直接通过 finsh 指令(RT-Thread 命令行环境 )操作文件系统,常用指令:
命令 |
功能说明 |
补充说明 |
---|---|---|
|
列出目录下文件与文件夹 |
|
|
查看文件系统磁盘空间使用情况 |
|
|
查看文件内容 |
|
|
创建目录 |
|
|
删除文件或目录 |
需注意权限与递归删除逻辑 |
FAT文件系统注意事项
存储介质擦写寿命
NAND Flash 有有限擦写次数,FAT 表更新频繁会加速对应块损耗。
启用系统磨损均衡算法(若支持 ),均衡块擦写次数 。
合理规划文件存储,减少小文件频繁创建 / 删除(小文件易导致 FAT 表频繁变更 ) 。
断电保护
嵌入式设备易遇意外断电,未及时更新 FAT 表可能致文件系统损坏。
在关键文件操作后(如写入重要配置 ),主动调用 dfs_sync 接口,强制同步文件系统缓存到存储介质 。
配置合适写回策略(如牺牲部分性能,缩短缓存写入延迟 ),平衡性能与数据安全 。
长文件名支持
传统 FAT 对长文件名支持有限(早期 8.3 格式 )。若应用需长文件名:
确认所使用 FAT 实现(如 ELMFAT )对长文件名的兼容方式(通常通过 Unicode 编码扩展 ) 。
注意与其他设备(如电脑 )交互时的兼容性,避免因文件名解析差异导致文件无法访问 。
DHARA 磨损均衡模块
DHARA 是嵌入式场景中针对 Flash 存储的 专用磨损均衡与坏块管理模块,为 FAT 等文件系统提供可靠底层支撑,其核心功能围绕“延长 Flash 寿命、保障数据安全、简化开发适配”设计,具体如下:
DHARA 核心功能详解
功能模块 |
作用说明 |
嵌入式场景价值 |
---|---|---|
动态磨损均衡管理 |
1. 实时记录 Flash 各物理块的擦写次数,建立“磨损计数表”;\n2. 采用“空闲块优先+磨损均衡算法”,优先将数据写入擦写次数少的块; |
NAND Flash 擦写寿命通常为 1 万-10 万次,通过均衡擦写可将整体 Flash 寿命提升 3-5 倍,适配嵌入式设备“长期稳定运行”需求(如工业控制器、智能手表)。 |
坏块自动检测与标记 |
1. 系统初始化时:扫描 Flash 所有块,通过“空块擦写+数据校验”识别出厂坏块;\n2. 运行过程中:读写数据时触发 ECC 校验(需 Flash 芯片支持),若校验失败则标记为“新增坏块”; |
避免 FAT 文件系统将数据写入坏块导致“数据丢失”“分区损坏”,减少嵌入式设备因 Flash 硬件缺陷引发的故障(如配置文件损坏、日志丢失)。 |
逻辑地址映射 |
1. 为 Flash 物理块分配唯一“逻辑块地址(LBA)”;\n2. FAT 文件系统仅操作逻辑地址,无需关注底层物理块位置; |
屏蔽不同 Flash 芯片的硬件差异(如块大小、地址分布、坏块位置),FAT 文件系统可“跨 Flash 型号复用”,降低嵌入式产品的硬件适配成本(如从 NOR Flash 切换到 NAND Flash 无需修改文件系统代码)。 |
数据完整性保障 |
1. 集成 ECC 错误检查与纠正:对读写数据生成 ECC 校验码,轻微位翻转可自动修复,严重错误则触发坏块标记; |
应对嵌入式场景中“Flash 位翻转”问题(高温、电压波动易引发),保障 FAT 表、用户数据的完整性,降低因硬件干扰导致的文件系统崩溃风险。 |
磨损状态监控 |
1. 记录并统计各块擦写次数、总擦写次数、坏块占比等信息;\n2. 提供查询接口,支持通过指令或代码获取磨损状态; |
便于嵌入式设备进行“健康管理”,如工业设备可通过磨损状态判断 Flash 更换时机,避免突发硬件失效;也可用于优化 FAT 文件系统读写策略(如磨损严重时减少非必要写操作)。 |
核心功能关联逻辑(FAT + DHARA 协同)
DHARA 的核心功能与 FAT 文件系统形成“分层支撑”关系,具体流程如下:
底层支撑:DHARA 管理 Flash 物理层,完成“磨损均衡→坏块处理→地址映射”,输出“虚拟逻辑存储层”;
中层适配:FAT 文件系统通过 DHARA 提供的“逻辑块接口”读写数据,无需关注物理层细节;
上层应用:用户通过 FAT 接口(如
open
/write
)操作文件,数据经 FAT 表调度后,由 DHARA 负责安全写入 Flash。