原创 C8051F320与NandFlash实现U盘之文件系统

2007-10-19 11:19 5123 9 14 分类: MCU/ 嵌入式
 U盘的文件系统可以采用FAT12/FAT16FAT12/16文件系统有五个部分构成:MBR, DBR, FAT, FDT, DATA. 由于U盘不像硬盘那样需要引导,因此可以没有MBR区。DBR中记录了逻辑存储区域的信息。这些信息包括:扇区大小,扇区数,FAT备份数,每簇扇区数,目录项数。有了这些信息PC通过读取磁盘的DBR后,就可以把U盘的NandFlash存储器作为一个连续的逻辑存储区域来访问。FAT区是存放文件分配表的区域。操作系统分配磁盘是按簇来分的,文件存储的基本单位是簇。一个大文件可以放在多个簇里,如果文件不足一簇,即使是一个字节也必须占用一个簇。可是一个文件占用多个簇,操作系统是怎样知道文件是占用了那几个簇了呢。FAT表就是记录文件占用簇信息的,FAT1616BIT来记录文件占用簇的信息,每个16BIT中记录着下一个簇的簇号,就像一个单向链表一样,知道的文件的第一簇后,顺着FAT表中记录的簇号找下去直到文件的最后一簇为止。FAT 的项数和簇的大小,决定了文件系统能支持的最大磁盘空间。假设FAT16的簇的大小为32KB,那么FAT16可支持的最大存储为2^16个簇2GB. FAT12FAT16类似,只不过FAT12是用12BIT来表示簇号,假设一个FAT12文件系统的簇为2KB, 那么它支持的存储空间为2^12个簇8MB.

下面是存储一个144KB的文件在FAT16FAT12下的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类似只不过用34BIT的数来表示簇号,0xFFF是文件结束标志。紧跟着FAT表后面的是备份的FAT区域,然后是根目录区,根目录区里存放目录项,一个目录项占用32个字节,它描述了文件的名字,属性,大小等信息。一个扇区可以有512/32= 16个目录项,目录项的多少可以在DBR中指定。最后一个区域就是真正存放文件的数据区了。



PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户190635 2009-5-4 10:32

xyz317 楼上的我也在做采集用的U盘。用的也是C8051F320    email: xieweidong_2002@163.com QQ 190171688    你怎么联系?

用户1083285 2008-2-29 20:54

我按照您的电路和程序做的U盘,无法格式化和打开U盘,不知道问题出在哪里呢?

用户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

相关推荐阅读
用户97533 2008-06-20 18:34
还有几块空板,想送给有意用LPC2368的网友,交个朋友
还有几块空板,想送给有意用LPC2368的网友,交个朋友,优先考虑南京的朋友, 因为本人现在南京, 让俺们共同努力, 一齐进步! ...
用户97533 2008-06-14 10:07
上传已调试好的源程序,原理图
上传源程序和板子原理图请点击下载。原理图是POWERLOIGC格式的。...
用户97533 2008-06-13 19:01
LPC2368网络板DIY——RTC 调试记录(七)
       RTC的使用,首先要设置RTC的时钟源,2368可以有两种方式,1 使用PLL 分频得到32.768K的时钟,2 直接用外部32.768的晶体,不知NXP为何搞这两种方式,个人认为可能是...
用户97533 2008-06-13 18:51
LPC2368网络板DIY——CSTN 调试记录(六)
        CSTN屏的大小是 162X132,6.5K色,我用的是8位并行的传输模式,点亮一个点需要两个发送周期。先送高字节,再送低字节。在调试的时候发现,图片的颜色老是不对,CSTN的驱动时序...
用户97533 2008-06-13 18:43
LPC2368网络板DIY——I2C PCF8574 调试记录(五)
调试完了FAST GPIO,开始进入I2C接口调试,主要实现对PCF8574的控制,整个程序是个状态机,I2C 中断服务程序根据不同的状态确定下一步要做的事情。首先确定8574的地址,由于原理图上我接...
用户97533 2008-06-13 18:31
LPC2368网络板DIY——FastGPIO 调试记录(四)
LPC2368的GPIO可以配置为low speed 和high speed 两种模式,PORT0,PORT1默认为low speed模式,PORT2,PORT3, PORT4只能工作在high sp...
我要评论
5
9
关闭 站长推荐上一条 /3 下一条