打印
[STM32F1]

【转】STM32F103RC,FATFS,w25x16移植笔记

[复制链接]
734|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一坨代码|  楼主 | 2016-12-4 01:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

这些天移植了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;}
沙发
mintspring| | 2016-12-4 10:41 | 只看该作者
楼主你搞的什么鬼,排版乱糟糟的,瞎弄。

使用特权

评论回复
板凳
mintspring| | 2016-12-4 10:42 | 只看该作者
你贴代码真是跟你网名一样,一坨一坨的。

使用特权

评论回复
地板
一坨代码|  楼主 | 2016-12-4 22:46 | 只看该作者
mintspring 发表于 2016-12-4 10:42
你贴代码真是跟你网名一样,一坨一坨的。

格式乱了

使用特权

评论回复
5
mintspring| | 2016-12-10 20:07 | 只看该作者
要贴到代码里面,高级模式下有个插入代码的标签。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

109

帖子

2

粉丝