#include "fattester.h" #include "mmc_sd.h" #include "usmart.h" #include "usart.h" #include "malloc.h" #include "ff.h" FATFS *fs[2]; // Work area (file system object) for logical drive FIL *file; FIL *ftemp; UINT br,bw; FILINFO fileinfo; DIR dir; u8 *fatbuf;//SD卡数据缓存区 u8 test_init(void) { fs[0]=(FATFS*)mymalloc(SRAMIN,sizeof(FATFS)); //为磁盘0工作区申请内存 fs[1]=(FATFS*)mymalloc(SRAMIN,sizeof(FATFS)); //为磁盘1工作区申请内存 file=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); //为file申请内存 ftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); //为ftemp申请内存 fatbuf=(u8*)mymalloc(SRAMIN,512); //为fatbuf申请内存 if(fs[0]&&fs[1]&&file&&ftemp&&fatbuf)return 0; //申请有一个失败,即失败. else return 1; } //挂载磁盘 u8 mf_mount(u8 drv) { return f_mount(drv,fs[drv]); } //打开路径下的文件 u8 mf_open(u8*path,u8 mode) { u8 res; res=f_open(file,(const TCHAR*)path,mode);//打开文件夹 return res; } //关闭文件 u8 mf_close(void) { f_close(file); return 0; } u8 mf_read(u16 len) { u16 i,t; u8 res=0; u16 tlen=0; printf("\r\nRead file data is:\r\n"); for(i=0;in_fatent - 2) * fs1->csize;//得到总扇区数 fre_sect = fre_clust * fs1->csize; //得到空闲扇区数 #if _MAX_SS!=512 tot_sect*=fs1->ssize/512; fre_sect*=fs1->ssize/512; #endif if(tot_sect<20480)//总容量小于10M { /* Print free space in unit of KB (assuming 512 bytes/sector) */ printf("\r\n磁盘总容量:%d KB\r\n" "可用空间:%d KB\r\n", tot_sect>>1,fre_sect>>1); }else { /* Print free space in unit of KB (assuming 512 bytes/sector) */ printf("\r\n磁盘总容量:%d MB\r\n" "可用空间:%d MB\r\n", tot_sect>>11,fre_sect>>11); } } return fre_sect; } //文件读写指针偏移 //offset:首地址偏移的量 //返回值:执行结果. u8 mf_lseek(u32 offset) { return f_lseek(file,offset); } //读取文件当前读写指针的位置. //返回值:位置 u32 mf_tell(void) { return f_tell(file); } //读取文件大小 //返回值:文件大小 u32 mf_size(void) { return f_size(file); } //创建目录 u8 mf_mkdir(u8*name) { return f_mkdir((const TCHAR *)name); } //格式化 u8 mf_fmkfs(u8 drv,u8 mode,u16 au) { return f_mkfs(drv,mode,au);//格式化,drv:盘符;mode:模式;au:簇大小 } //删除文件/目录 u8 mf_unlink(u8 *name) { return f_unlink((const TCHAR *)name); } //修改文件/目录名字(如果目录不同,还可以移动文件哦!) //oldname:之前的名字 //newname:新名字 u8 mf_rename(u8 *oldname,u8* newname) { return f_rename((const TCHAR *)oldname,(const TCHAR *)newname); } //从文件里面读取一段字符串 void mf_gets(u16 size) { TCHAR* rbuf; rbuf=f_gets((TCHAR*)fatbuf,size,file); if(*rbuf==0)return ;//没有数据读到 else { printf("\r\nThe String Readed Is:%s\r\n",rbuf); } } //需要_USE_STRFUNC>=1 //写一个字符到文件 u8 mf_putc(u8 c) { return f_putc((TCHAR)c,file); } //写字符串到文件 u8 mf_puts(u8*c) { return f_puts((TCHAR*)c,file); } //文件复制信息提示 //mode: //[0]:更新文件名 //[1]:更新百分比pct //[2]:更新文件夹 //[3~7]:保留 //返回值:0,正常; // 1,结束复制 u8 mf_cpymsg(u8*pname,u8 pct,u8 mode) { if(mode&0X01)printf("\r\nCopy File:%s\r\n",pname); if(mode&0X02)printf("File Copyed:%d\r\n",pct); if(mode&0X04)printf("Copy Folder:%s\r\n",pname); return 0; }