SDNAND(贴片式SD卡)采用FAT32文件系统时,其文件分配表(FAT)的结构与标准FAT32一致,但需结合嵌入式存储特性优化。以下是其核心结构解析:
SDNAND的FAT32文件系统分为四个区域,物理结构如下:
保留区(Reserved Region)
BPB_BytsPerSec
(扇区大小,通常512B)
BPB_SecPerClus
(每簇扇区数,如4扇区=2KB)
BPB_RootClus
(根目录起始簇号,通常为2)
引导扇区(DBR):首扇区,存储关键参数:
FSInfo扇区:记录空闲簇数量及下一个空闲簇号,加速文件分配
备份引导扇区:位于保留区偏移扇区(由BPB_BkBootSec
指定,通常为6号扇区),用于故障恢复
FAT区(File Allocation Table)
0x00000000
:空闲簇
0x0FFFFFF7
:坏簇
0x0FFFFFF8~0x0FFFFFFF
:文件结束簇(EOF)
其他值:指向下一簇的簇号
FAT1:主文件分配表,存储簇链关系(每个表项占4字节)
FAT2:FAT1的完整备份,增强容错性
表项含义:
数据区(Data Region)
根目录:位于BPB_RootClus
指定的簇(通常簇2),以普通目录项形式存在,无独立区域
文件/子目录:从簇2开始分配,通过FAT表项链式管理
簇链管理
文件被拆分为多个簇存储,FAT表项按顺序记录文件的簇链。
示例:文件占用簇3→5→8,则FAT[3]=5, FAT[5]=8, FAT[8]=EOF57
空间分配策略
空闲簇查找:优先使用FSInfo记录的下一个空闲簇,减少全盘扫描
簇回收:删除文件时,对应簇链标记为空闲,但数据未擦除(需垃圾回收)
位于数据区簇中,32字节结构:
字段 | 长度 | 说明 |
---|---|---|
DIR_Name | 11字节 | 文件名(8.3格式或长名索引) |
DIR_Attr | 1字节 | 属性(如目录/隐藏/系统) |
DIR_FstClusHI | 2字节 | 起始簇号高16位 |
DIR_FstClusLO | 2字节 | 起始簇号低16位 |
DIR_FileSize | 4字节 | 文件大小(字节) |
注:长文件名采用多个目录项存储Unicode名
位于保留区第1扇区(BPB_FSInfo=1
):
字段 | 偏移 | 说明 |
---|---|---|
FSI_LeadSig | 0x00 | 固定值0x41615252 ("RRaA") |
FSI_Free_Count | 0x1E8 | 空闲簇总数 |
FSI_Nxt_Free | 0x1EC | 下一个建议分配的空闲簇号 |
用于优化存储分配效率
磨损均衡(Wear Leveling)
SDNAND内置FTL(Flash Translation Layer),将逻辑簇号映射到物理块,分散写操作延长寿命
写放大抑制
缓存FDT更新:将频繁写入的目录项暂存于SRAM,累积后批量写入NAND,减少碎片
掉电保护
重要元数据(如FAT)写入前缓存,确保事务原子性,避免断电导致文件系统损坏
格式化参数
簇大小选择:小文件多用小簇(如4KB),大文件用大簇(如32KB)提升速度
示例:32GB SDNAND推荐簇大小32KB(平衡空间与速度)
故障恢复机制
FAT损坏:用FAT2覆盖FAT1恢复
DBR损坏:从备份引导扇区(偏移扇区6)恢复
性能瓶颈
随机写延迟:FAT/FDT频繁更新导致写放大,需启用缓存策略
解决方案:预留10% Over-Provisioning空间,降低垃圾回收频率
结构兼容性:与通用FAT32布局一致,便于跨平台读写
嵌入式优化:通过FTL磨损均衡 + FSI o空闲簇管理,适配NAND特性
容错设计:双FAT表 + 备份DBR,应对意外断电
开发建议:优先调用标准FAT32驱动库(如FATFS),避免直接操作底层扇区;关注
FSI_Nxt_Free
字段可提升文件创建速度30%以上。
上一篇:1.8V SD NAND
下一篇:没有了!