Board logo

标题: STM32+SDIO+FATFS文件系统 直读SD卡 [打印本页]

作者: yuyang911220    时间: 2015-3-28 11:19     标题: STM32+SDIO+FATFS文件系统 直读SD卡

STM32+SDIO+FATFS文件系统 直读SD卡
java 2011-03-26 17:01
网上关于的FATFS 的文章很多 不过都太老旧,很多东西已经不适用了 。我建议阁下到官方去下载最新的版本目前是最新是R0.08b ,使用最新的版本好处是很多网上很多要改来改去的地方只要你使用了新版本那就是完全可以规避的。另外STM32的SDIO驱动也一定要用最新的,老版本问题很多不少人的失败就在这。我这次用的是V3.3的库没有任何改动就可以了,现在最新的好像在3.4以上了。好了说说移植ffconf.h是配置的头文件简单的修改宏就可以了,英文注释的很完全而且网上也有翻译我不多说了自己看http://www.openrtos.cn/fatfs主要在这里进行功能裁剪写写我的配置。
#define _FS_TINY  0

#define _FS_READONLY 0

#define _FS_MINIMIZE 1


#define _USE_STRFUNC 0


#define _USE_MKFS  0


#define _USE_FORWARD 0


#define _USE_FASTSEEK 0

#define _CODE_PAGE 1/ /1   - ASCII only (Valid for non LFN cfg.)
#define _USE_LFN 0  
#define _MAX_LFN 255  
#define _FS_SHARE 0
#define _FS_SHARE 0
#define_FS_REENTRANT 0  
#define_FS_TIMEOUT  1000
#define _SYNC_t   HANDLE
integer.h主要定义了文件的类型 若是最新的可以不用修改。
好了 说说最关键的I/O module我自己建立一个文件diskio.c新的版本要自己建立函数文件官方连个模板都没提供作者似乎不怎么照顾新人呢~
都说要移植5个函数 其实两个就足以了。




#include "diskio.h"
#include "stm32f10x.h"
#include "stm32_eval_sdio_sd.h"
#defineBLOCK_SIZE           512


DSTATUS disk_initialize (
BYTEdrv   
)
{
SD_Error  Status;

if (drv)
{
  return STA_NOINIT;
}

  Status = SD_Init();
if (Status!=SD_OK )
{
  return STA_NOINIT;
}
else
{
  return RES_OK;
}
}


DSTATUS disk_status (

BYTEdrv  
)
{
return RES_OK; //懒的管了 有空写写 可以加个
}

DRESULT disk_read (
BYTEdrv,  
BYTE*buff,  
DWORD sector,
BYTEcount  
)
{
// SD_Error Status;
if (count > 1)
{
  SD_ReadMultiBlocks(buff,sector*BLOCK_SIZE, BLOCK_SIZE, count); //扇区地址*512就是实际地址默认一个扇区就是512个字节

}
else
{
  SD_ReadBlock(buff,sector*BLOCK_SIZE, BLOCK_SIZE);
}
return RES_OK;
}




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0