这些天移植了FatFS文件系统到STM32F103RC板上,使用STM32的SPI_FLASH库,出现了一些问题现在记录下来。
接下来说一下移植的过程:
移植的最新版本为FatFS 0.12版本版本中主要包含以下几个文件:diskio.c diskio.h ff.c ff.h ffconf.h integer.h。
其中,ff相关的文件为FatFS的核心文件系统文件,diskio相关的文件为文件系统与底层硬件交互的接口文件,ffconf.h是用来配置文件系统配置的一些参数,integer.h是对不同平台变量类型的定义。
1.修改ffconf.h
_FS_READONLY //文件系统只读
_FS_MINIMIZE //移除一些函数,定义最小文件系统
_USE_STRFUNC //允许使用一些字符串函数
_USE_FIND //开启一些查询函数
_USE_MKFS //f_mkfs,可以格式化Flash
_USE_FASTSEEK //开启一些快速定位函数
_USE_EXPAND //开启一些扩展函数
_USE_CHMOD //开启权限相关的函数
_USE_LABEL //开启卷标相关函数
_USE_FORWARD //开启使用数据流而不用缓冲区
_CODE_PAGE //代码页格式
_USE_LFN //开启长文件名模式
_MAX_LFN //设置最长文件名长度
_LFN_UNICODE //设置长文件名编码格式
_STRF_ENCODE //长命名文件中字符串编码格式
_FS_RPATH //支持目录更改
_VOLUMES //支持硬盘个数
_STR_VOLUME_ID //允许字符串模式的ID
_VOLUME_STRS //字符串模式的具体字符串
_MULTI_PARTITION //允许新建多个分区
_MIN_SS //所支持最小的扇区大小
_MAX_SS //所支持最大的扇区大小
_USE_TRIM //支持空闲区域回收
_FS_NOFSINFO //支持查询文件系统信息
_FS_TINY //支持微型文件系统
_FS_EXFAT //支持扩展性文件系统
_FS_NORTC //支持不使用RTC的文件系统
_NORTC_MON //不使用RTC时的月份
_NORTC_MDAY //不使用RTC时的日
_NORTC_YEAR //不使用RTC时的年
_FS_LOCK //支持文件上锁功能
_FS_REENTRANT //支持文件重入,多线程访问
_FS_TIMEOUT //重入模式下超时周期
我的设置如下:
#define _USE_MKFS 1
#define _CODE_PAGE 936
#define _VOLUMES 1
#define _MIN_SS 512
#define _MAX_SS 512
其余均为0或默认值
2.diskio.c
disk_initialize 增加SPI_FLASH_Init()以及SPI_FLASH_ReadID()函数进行SPI_FLASH的初始化操作
DSTATUS disk_initialize (
BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
DSTATUS stat;
u32 FlashID;
switch (pdrv) {
case SPI_FLASH :
SPI_FLASH_Init();
FlashID = SPI_FLASH_ReadID();
stat = 0;
return stat;
}
return STA_NOINIT;
}
disk_read 增加SPI_FLASH_BufferRead,该函数是从指定地址读取指定字节数。
DRESULT disk_read (
BYTE pdrv, /* Physical drive nmuber to identify the drive */
BYTE *buff, /* Data buffer to