这些天移植了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;}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
disk_read 增加SPI_FLASH_BufferRead,该函数是从指定地址读取指定字节数。 DRESULT disk_read ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */){ DRESULT res; switch (pdrv) { case SPI_FLASH : SPI_FLASH_BufferRead(buff,sector * SPI_FLASH_SECTOR,count * SPI_FLASH_SECTOR); res = RES_OK; return res; } return RES_PARERR;}
|