原创
C8051F320与NandFlash实现U盘之文件系统
2007-10-19 11:19
5123
9
14
分类:
MCU/ 嵌入式
U盘的文件系统可以采用
FAT12/FAT16,
FAT12/16文件系统有五个部分构成:
MBR, DBR, FAT, FDT, DATA. 由于
U盘不像硬盘那样需要引导,因此可以没有
MBR区。
DBR中记录了逻辑
存储区域的信息。这些信息包括:扇区大小,扇区数,FAT备份数,每簇扇区数,目录项数。有了这些信息PC通过读取磁盘的DBR后,就可以把U盘的NandFlash存储器作为一个连续的逻辑存储区域来访问。FAT区是存放文件分配表的区域。操作系统分配磁盘是按簇来分的,文件存储的基本单位是簇。一个大文件可以放在多个簇里,如果文件不足一簇,即使是一个字节也必须占用一个簇。可是一个文件占用多个簇,操作系统是怎样知道文件是占用了那几个簇了呢。FAT表就是记录文件占用簇信息的,FAT16用16BIT来记录文件占用簇的信息,每个16BIT中记录着下一个簇的簇号,就像一个单向链表一样,知道的文件的第一簇后,顺着FAT表中记录的簇号找下去直到文件的最后一簇为止。FAT 的项数和簇的大小,决定
了文件系统能支持的最大磁盘空间。假设FAT16的簇的大小为32KB,那么FAT16可支持的最大存储为2^16个簇2GB. FAT12和FAT16类似,只不过FAT12是用12BIT来表示簇号,假设一个FAT12文件系统的簇为2KB, 那么它支持的存储空间为2^12个簇8MB.下面是存储一个144KB的文件在FAT16和FAT12下的FAT表的数据, 簇的大小为16KB
F8 FF FF FF 03 00 04 00
05 00 06 00 07 00 08 00
09 00 0A 00 0B 00 FF FF
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
这是FAT16存放的数据,F8表示存储媒介,0xFFFF 表示是文件的最后一簇, 0x0000表示该簇尚未被占用。144KB的文件从0x0003开始存放,到0x000B 结束。
F8 FF FF 03 40 00 05 60
00 07 80 00 09 A0 00 0B
F0 FF 00 00 00 00 00 00
00 00 00 00 00 00 00 00
这是FAT12表存放的数据,和FAT16类似只不过用3个4BIT的数来表示簇号,0xFFF是文件结束标志。紧跟着FAT表后面的是备份的FAT区域,然后是根目录区,根目录区里存放目录项,一个目录项占用32个字节,它描述了文件的名字,属性,大小等信息。一个扇区可以有512/32= 16个目录项,目录项的多少可以在DBR中指定。最后一个区域就是真正存放文件的数据区了。
用户190635 2009-5-4 10:32
用户1083285 2008-2-29 20:54
用户97533 2008-2-20 09:28
可以, NANDFLASH的封装都一样的, 硬件电路不需要
修改, 程序要改动.
用户1083285 2008-2-16 09:22
请问可不可以将Flash换大些呢?比如128M-1G1!
用户97533 2007-11-15 12:07
我的程序中DBR不是格式化时写入的,簇的扇区数是自己定的,当PC要求DBR是,有程序通过USB的IN事务发给PC