FAT16目录

时间:2012-09-21 06:54:38

标签: microcontroller directory-structure fat16

我正在开发一个低级应用程序,它在资源受限的微控制器上使用FAT16文件系统结构,这需要我编写自己的自定义访问代码。我已经考虑过使用像Petit FAT和FatFS这样的库,但遗憾的是我不认为其中任何一个都能满足我的需求。尽管如此,它们仍然是FAT工作方式的有用参考。

我仍然遇到麻烦的一个方面是子目录条目。

根据this,目录条目能够指向1个起始群集。对于数据文件,这只是第一个数据集群。对于目录,这是子目录的起始集群(可能是另一个目录条目)。

如果从根目录到基本文件只有一个目录路径,这可以正常工作,但我不明白这是如何允许你分支到任何给定目录下的多个文件/目录。

离。目录结构:

- root dir 1
    - sub dir 1
        - file 1
    - sub dir 2
        - file 2
- root dir 2
    - sub dir 3

基于我对FAT16结构的理解,

在FAT之后,将立即成为第一个根目录条目的集群,其中包含root dir 1的信息。然后,第一个群集字段将包含sub dir 1的群集地址,该群集的第一个群集字段将包含file 1的群集地址,该群集的第一个群集指向数据群集。

然后,第二个根目录条目将在包含root dir 2信息的FAT结束之后从第二个集群开始。它的第一个集群将指向sub dir 3的集群,第一个集群将指向一个空集群(在FAT中标记)。

我在这里缺少什么?我无法想出一种从根目录条目导航到sub dir 2的方法。

1 个答案:

答案 0 :(得分:3)

首先,为了清除混淆,一个目录条目不占用单个集群。从您的源代码可以看出,单个目录条目只有32个字节,其中集群的大小可能介于4KB到64KB之间,具体取决于您正在使用的FAT的磁盘大小/版本。因此,FAT之后的内容实际上是目录条目的

对于子目录,您可以在父目录条目中找到其目录条目表的起始集群。它们不一定要打包到磁盘的开头。

为了进一步解释,让我们看一下原始示例的略微修改版本:

\ (root)
    - dir 1
        - sub dir 1
            - file 1
        - sub dir 2
            - file 2
    - dir 2
        - sub dir 3

要遍历sub dir 2

  1. 找到根目录条目表,该表包含在FAT之后的群集中;
  2. 从根目录条目表中查找条目dir 1,并获取其起始集群;
  3. 从您上面获得的群集中加载dir 1的目录条目表;
  4. 查找条目sub dir 2并获取其起始群集;
  5. 加载上面获得的群集;
  6. 然后您应该拥有sub dir 2的目录条目表。