一。简单回顾
二。FATFS移植步骤
最主要的是配置ffconf.h 和 编写 diskio.c,修改diskio.c里的6个函数。
三。FATFS开发函数
移植完成后就可以调用文件系统提供的API。
所有的操作完成后都要调用f_close 关闭文件。
FATFS把API分成4类:
第一类:文件的操作
如打开文件,读写文件,关闭文件等。
第二类:目录操作
比如打开目录,关闭目录,读目录
第三类:目录的管理
第四类:驱动器磁盘的管理
在doc目录下00index_e.html文件中,有所有API的描述和实例。
四。FATFS例程讲解
1. stdio.c文件按照具体的开发平台改写里面的6个函数。
2. exfuns.c函数:
定义了操作文件的一些全局变量,并且给这些变量申请内存,内存使用内部SRAM,以及根据文件名判断文件类型的函数,小写字母转换成大写字母的函数,获取磁盘信息的函数等,方便程序代码使用。
3. fattester.c文件
把常用的一些API重新封装,有一些提示信息,方便用USMART串口调试时使用。
main函数
前面先初始化
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init(); //LED端口初始化
LCD_Init(); //初始化液晶
KEY_Init(); //初始化按键
exfuns_init(); //为fatfs相关变量申请内存
usmart_dev.init(72);
mem_init(SRAMIN); //初始化内部内存池
然后检测SD卡:
while(SD_Initialize()) //检测SD卡
{
LCD_ShowString(60,150,200,16,16,"SD Card Error!");
delay_ms(200);
LCD_Fill(60,150,240,150+16,WHITE);//清除显示
delay_ms(200);
LED0=!LED0;//DS0闪烁
}
为操作文件所用的变量申请内存,这里使用内部的SRAM
exfuns_init(); //为fatfs相关变量申请内存
然后要先挂载存储介质,挂载以后才可以操作:
f_mount(0,fs[0]); //挂载SD卡
f_mount(1,fs[1]); //挂载FLASH.
然后获取SD卡的大小和剩余空间:
exf_getfree("0",&total,&free);
然后显示出来:
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,150,200,16,16,"FATFS OK!");
LCD_ShowString(60,170,200,16,16,"SD Total Size: MB");
LCD_ShowString(60,190,200,16,16,"SD Free Size: MB");
LCD_ShowNum(172,170,total>>10,5,16); //显示SD卡总容量 MB
LCD_ShowNum(172,190,free>>10,5,16); //显示SD卡剩余容量 MB
五。通过USMART进行测试
首先打开串口调试助手,输入list命令,显示出有哪些函数可以进行调用
1. 浏览SD卡
mf_scan_files(u8 * path);
mf_scan_files(“0:”) 浏览根目录,输入"0:"
2. 打开一个文件
打开messag1.txt 文件
mf_open(u8*path,u8 mode);
mode的参数选项包括:
因为这个文件已经存在,因此这里选择:FA_OPEN_ALWAYS,不能直接输入FA_OPEN_ALWAYS,要查看FA_OPEN_ALWAYS的值是多少:0x10,因此输入0x10
这样就打开这个文件了,但并不能读。
mode应该选择FA_READ,值是0x01.
3. 打开文件后就可以读文件
mf_read(u16 len);
读出文件的内容。
4. 关闭文件
mf_close();
以上为利用USMART测试文件操作的命令。
六。新建一个文件,写入一个字符串,然后读取文件的内容
先定义变量
FIL fil; //文件句柄
FRESULT res; //命令返回值
UINT bww; //指向读出或写入字符长度的指针
char buf[100]; //读出的文件内容存储在这个数组中
res = f_open (&fil, "0:/messag.txt", FA_CREATE_ALWAYS | FA_WRITE);
先创建,然后可以进行写操作。这里应该通过res返回值,判断文件操作是否正确,&fil为文件的句柄。
然后写入"Alientek FATFS test"
f_write (&fil, "Alientek FATFS test", 50, &bww);
最后关闭文件
f_close(&fil);
下面把文件内容读出来,然后显示
res = f_open (&fil, "0:/messag.txt", FA_READ);
f_read (&fil, buf, 100, &bww);
f_close(&fil);
LCD_ShowString(10,210,200,24,24,(u8 *)buf);
注:
f_write (&fil, "Alientek FATFS test", 50, &bww);这个语句有问题,应该字符串有多长就写多长,用sizeof函数。
先定义要写的字符串:
string_buf[] = {"Alientek FATFS test"};
写指令如下:
f_write (&fil, string_buf, sizeof(string_buf)-1, &bww);
修改后调试成功。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』