原创 深入理解文件系统(二)

2010-3-29 16:23 3985 7 8 分类: MCU/ 嵌入式

 


      


二、将SD卡格式化成具有两个分区的磁盘。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


1、目的


1)深入理解MBRDPT等概念。


2)修改ff.c中的f_mkfs函数,得到一个新函数,f_formatu8 partition,u16 allocsize,前一个参数是指磁盘等分的个数,接受 1234四个参数,默认为1,最大为4。后一个参数是指 每簇占用的字节数


3)添加命令fdisk,调用上述函数。执行完成后,用读卡器在PC上读取该SD卡,应该显示两个可移动磁盘


 


2f_format()函数的编写


首先新建一个文件fext.c该文件就实现一个函数 f_format.c首先将f_mkfs()函数复制过来,在此基础上修改。


编译后,首先解决警告和错误:包含头文件ff.hdiskio.h。引用了ff.c中的静态函数mem_set()mem_clr(),复制过来。定义Null0。将FATFS * FatFs[_Drives]做外部声明。


同时发现,不同c源文件中 #define 同样的宏相互之间是不影响的。说明预处理的时候是一个一个文件处理的,不检查相互之间的关联。但同一个文件中,一个宏不能两次定义


#ifndef NULL


#define NULL   0


#endif  //采取这种方式,主要是防止其他 包含的头文件也对NULL进行了定义。


函数中主要修改的地方就是:


      n_part = n_part /drv;  //进行drv等分。每个磁盘的扇区总数就是这么多。


DPT对应增加的分区部分,填好分区表16个字节。特别重要的是四个地方0字节写为000x80第四字节写入0xc0表示FAT32系统。(第一次调试找不到新磁盘,就是由于这个字节默认为0)。8-11写入分区引导扇区的线性扇区地址。12-15写入该磁盘分区的大小


for ( i="0"; i<drv; i++){        //个分区都要做一次,DBR的写入,FAT分配表初始化,根目录初始化。


      b_part+= i*n_part;  //调整该分区引导扇区和FAT表起始地址。


      b_fat=b_part + n_rsv;


 


3、其它修改的地方


定义 _DRIVE2,定义_MULTI_PARTITION1,表示支持多分区。同时初始化磁盘 物理驱动与分区号转换结构体(每个逻辑磁盘对应一个结构体)。


主程序中也要定义两个文件系统结构体,每个对应一个磁盘。然后分别调用f_mount()函数。


 


 


4、调用执行


void UartCmdFdisk(u8 argc,void **argv)


{


       FRESULT res;


     res=f_format( 2, 2048 ); /2表示格式化成两个磁盘。一簇是4个扇区、2048字节。


执行完这个函数后,磁盘被分成两个分区。


 


实际结果是,命令界面上可以查询到两个分区。但是利用读卡器放到PC上,却只看到<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />250M的第一分区,不知什么原因。


 


 


 


 

文章评论1条评论)

登录后参与讨论

用户421333 2013-1-18 09:27

您好,看了您的深入理解文件系统深受启发,也做了个分区程序,用的是STM32+NAND FLASH做成的U盘,但是无法实现,深入理解文件系统(二)中的3其他修改的地方不太理解,特在这请教一下
相关推荐阅读
nthq2004 2010-05-08 20:04
USB自定义设备驱动02
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  本来还想编写应用程序测试一下自定...
nthq2004 2010-05-07 21:35
USB自定义设备驱动01
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  一、USB设备驱动入门1、学习目...
nthq2004 2010-05-04 21:01
智林开发板上实现自定义的USB HID设备
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  一、自定义HID设备的相关概念1...
nthq2004 2010-05-01 21:58
U盘例程在智林开发板上的移植
 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 一、移植前的准备工作1、有哪些操...
nthq2004 2010-04-30 19:19
U盘实现流程跟踪分析02
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   二、追踪USB大容量设备的实现...
nthq2004 2010-04-27 21:51
U盘实现流程跟踪分析01
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   一、追踪USB大容量设备的实现...
我要评论
1
7
关闭 站长推荐上一条 /2 下一条