百为STM32开发板教程之十八——SDIO + FATFS
实验目的:在STM32学习任务十八——SDIO里我们已经介绍SD卡协议和SD卡读写测试,但是还没有增加文件系统,没法读SD卡内的文件。
在这节里我们将增加最常用的文件系统FATFS,并编程程序读写SD卡内的文件。
一、FATFS简介
二、FATFS移植
三、编程实现读写SD卡的文件
一、FATFS简介
FATFS官网主页:
http://elm-chan.org/fsw/ff/00index_e.html
FATFS是用C写的一个FAT文件系统。它的应用层和驱动层是完全分开的,所以很容易移植到其他处理器,如AVR, 8051, PIC, ARM等等。
应用层接口(Application Interface):
驱动层接口(Disk I/O Interface):
二、FATFS移植
我们移植主要是要实现驱动层接口的函数。
SDIO的移植参看"STM32学习任务十八——SDIO"
首先到FATFS官网下载FATFS最新版R0.10
下载地址: http://elm-chan.org/fsw/ff/ff10.zip
然后解压把ff10/src里面的内容拷贝到工程目录Utilities\FatFS_R0.10目录下
然后在工程里添加组FatFS,添加Utilities\FatFS_R0.10目录下的ff.c diskio.c文件。
添加Utilities\FatFS_R0.10\option目录下的.c文件。
2013-10-11 13:33 上传
下载附件 (12.47 KB)
然后实现diskio.c里面的几个函数:
DSTATUS disk_initialize (BYTE pdrv);
DSTATUS disk_status (BYTE pdrv);
DRESULT disk_read (BYTE pdrv, BYTE*buff, DWORD sector, UINT count);
DRESULT disk_write (BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);
DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
修改ffconf.h,使系统支持长文件名
把
#define _USE_LFN 0
改为
#define _USE_LFN 1
把
#define _CODE_PAGE 932
改为
#define _CODE_PAGE 936 //Simplified Chinese GBK (DBCS, OEM, Windows)
编译之后还会报错,这里还有个get_fattime函数要实现,我们在这里先实现为空,在diskio.c的最后面加入如下代码:
DWORD get_fattime (void)
{
}
修改ffconf.h,使系统支持格式化
把
#define _USE_MKFS 0
改为
#define _USE_MKFS 1
三、编程实现读写SD卡的文件
status = SD_Init(); //初始化SD卡
if(status != SD_OK)
{
printf("sd card init error.\n\r");
}
res = f_mount(&fs ,"0:", 0); //加载文件系统
if(res != FR_OK)
{
printf("f_mount error = %d\n\r",res);
}
res = f_mkfs("0:", 0, 0); //格式化SD卡
if(res != FR_OK)
{
printf("f_mkfs error = %d\n\r",res);
}
res = f_open (&F, "1.txt", FA_CREATE_ALWAYS | FA_READ | FA_WRITE); //创建读写文件1.txt
if(res != FR_OK)
{
printf("f_open error = %d\n\r",res);
}
strcpy(Buffer, "hello world");
res = f_write (&F, Buffer, strlen(Buffer), &BytesWritten); //把字符串"hello world"写入文件
if(res != FR_OK)
{
printf("f_write error = %d\n\r",res);
}
res = f_read (&F, Buffer, _MAX_SS, &BytesRead); //读出文件内的内容
if(res != FR_OK)
{
printf("f_read error = %d\n\r",res);
}
else
{
printf("f_read = %s\n\r", Buffer);
}
程序已上传到网盘:
百为STM32_SDIO_FATFS程序.rar
|