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分区代码如下

../../_images/dfs_3.png

增加多个分区代码如下;需要注意的是:

  • 增加多个分区之前必须要先mount root分区并且成功。

  • 在增加下一个分区之前需要先在root根目录下创建这个分区的目录。

  • 下一个分区起始地址不能与上一个分区重叠。

步骤如下:

  1. 创建第二个分区的相关信息

../../_images/dfs_4.png
  1. mount文件系统

../../_images/dfs_5.png

eMMC Flash

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

../../_images/dfs_7.png

eMMC与nand/nor的文件系统不同点

  1. eMMC的sector大小是512

  2. 注册分区device的接口不一致 eMMC采用的接口如下

../../_images/dfs_6.png

其他流程都与上诉的nand流程一致。

直接下载文件系统.bin文件

此操作适用于需要加载另一个有文件的文件系统分区,步骤如下:

  1. 先准备好一个已经制作好的xxx.bin文件

  2. 找一片空闲没用的flash空间按照软件上的地址使用jink直接loadbin 下载进去,jink指令如下 loadbin ../../../xxx.bin 0x00000000

这样在mount时读取分区信息的LBR是有对应信息,就能识别到当前下载的分区文件系统

FAT文件系统使用

可直接通过 finsh 指令(RT-Thread 命令行环境 )操作文件系统,常用指令:

命令

功能说明

补充说明

ls

列出目录下文件与文件夹

df

查看文件系统磁盘空间使用情况

cat

查看文件内容

mkdir

创建目录

rm

删除文件或目录

需注意权限与递归删除逻辑

FAT文件系统注意事项

  1. 存储介质擦写寿命
    NAND Flash 有有限擦写次数,FAT 表更新频繁会加速对应块损耗。

  • 启用系统磨损均衡算法(若支持 ),均衡块擦写次数 。

  • 合理规划文件存储,减少小文件频繁创建 / 删除(小文件易导致 FAT 表频繁变更 ) 。

  1. 断电保护
    嵌入式设备易遇意外断电,未及时更新 FAT 表可能致文件系统损坏。

  • 在关键文件操作后(如写入重要配置 ),主动调用 dfs_sync 接口,强制同步文件系统缓存到存储介质 。

  • 配置合适写回策略(如牺牲部分性能,缩短缓存写入延迟 ),平衡性能与数据安全 。

  1. 长文件名支持
    传统 FAT 对长文件名支持有限(早期 8.3 格式 )。若应用需长文件名:

  • 确认所使用 FAT 实现(如 ELMFAT )对长文件名的兼容方式(通常通过 Unicode 编码扩展 ) 。

  • 注意与其他设备(如电脑 )交互时的兼容性,避免因文件名解析差异导致文件无法访问 。

DHARA 磨损均衡模块

DHARA 是嵌入式场景中针对 Flash 存储的 专用磨损均衡与坏块管理模块,为 FAT 等文件系统提供可靠底层支撑,其核心功能围绕“延长 Flash 寿命、保障数据安全、简化开发适配”设计,具体如下:

DHARA 核心功能详解

功能模块

作用说明

嵌入式场景价值

动态磨损均衡管理

1. 实时记录 Flash 各物理块的擦写次数,建立“磨损计数表”;\n2. 采用“空闲块优先+磨损均衡算法”,优先将数据写入擦写次数少的块;
3. 避免单一块因频繁写入(如 FAT 表更新、日志存储)过度擦写,提前报废。

NAND Flash 擦写寿命通常为 1 万-10 万次,通过均衡擦写可将整体 Flash 寿命提升 3-5 倍,适配嵌入式设备“长期稳定运行”需求(如工业控制器、智能手表)。

坏块自动检测与标记

1. 系统初始化时:扫描 Flash 所有块,通过“空块擦写+数据校验”识别出厂坏块;\n2. 运行过程中:读写数据时触发 ECC 校验(需 Flash 芯片支持),若校验失败则标记为“新增坏块”;
3. 维护“坏块列表”,后续文件系统操作自动跳过坏块。

避免 FAT 文件系统将数据写入坏块导致“数据丢失”“分区损坏”,减少嵌入式设备因 Flash 硬件缺陷引发的故障(如配置文件损坏、日志丢失)。

逻辑地址映射

1. 为 Flash 物理块分配唯一“逻辑块地址(LBA)”;\n2. FAT 文件系统仅操作逻辑地址,无需关注底层物理块位置;
3. 支持动态调整映射关系(如坏块替换时,将逻辑块映射到新的好块)。

屏蔽不同 Flash 芯片的硬件差异(如块大小、地址分布、坏块位置),FAT 文件系统可“跨 Flash 型号复用”,降低嵌入式产品的硬件适配成本(如从 NOR Flash 切换到 NAND Flash 无需修改文件系统代码)。

数据完整性保障

1. 集成 ECC 错误检查与纠正:对读写数据生成 ECC 校验码,轻微位翻转可自动修复,严重错误则触发坏块标记;
2. 支持“数据双备份”(可选):关键数据(如磨损计数表、坏块列表)存储两份,避免单点损坏。

应对嵌入式场景中“Flash 位翻转”问题(高温、电压波动易引发),保障 FAT 表、用户数据的完整性,降低因硬件干扰导致的文件系统崩溃风险。

磨损状态监控

1. 记录并统计各块擦写次数、总擦写次数、坏块占比等信息;\n2. 提供查询接口,支持通过指令或代码获取磨损状态;
3. (高级功能)支持“磨损预警”:当某块擦写次数接近寿命阈值时触发回调。

便于嵌入式设备进行“健康管理”,如工业设备可通过磨损状态判断 Flash 更换时机,避免突发硬件失效;也可用于优化 FAT 文件系统读写策略(如磨损严重时减少非必要写操作)。

核心功能关联逻辑(FAT + DHARA 协同)

DHARA 的核心功能与 FAT 文件系统形成“分层支撑”关系,具体流程如下:

  1. 底层支撑:DHARA 管理 Flash 物理层,完成“磨损均衡→坏块处理→地址映射”,输出“虚拟逻辑存储层”;

  2. 中层适配:FAT 文件系统通过 DHARA 提供的“逻辑块接口”读写数据,无需关注物理层细节;

  3. 上层应用:用户通过 FAT 接口(如 open/write)操作文件,数据经 FAT 表调度后,由 DHARA 负责安全写入 Flash。