在STM32中移植FATFS文件系统
.
. STM32的FATFS文件系统移植笔记
一、序言
经常在网上、群里看到很多人问关于STM32的FATFS文件系统移植的问题,刚好自己最近也在调试这个程序,为了让大家少走弯路,我把我的调试过程和方法也贡献给大家。
二、FATFS简介
FatFs Module是一种完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列单片机上而只需做简单的修改。它支持FATl2、FATl6和FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对8位单片机和16位单片机做了优化。
三、移植准备
1、FATFS源代码的获取,可以到官网下载:966c28fbbdd126fff705cc1755270722182e59ed/fsw/ff/00index_e最新版本是R0.09版本,我们就移植这个版本的。
2、解压文件会得到两个文件夹,一个是doc文件夹,这里是FATFS的一些使用文档和说明,以后在文件编程的时候可以查看该文档。另一个是src文件夹,里面就是我们所要的源文件。
3、建立一个STM32的工程,为方便调试,我们应重载printf()底层函数实现串口打印输出。可以参考已经建立好的printf()打印输出工程:.viewtool./bbs/foru ...
d=77&extra=page%3D1
四、开始移植
1、在已经建立好的工程目录User文件夹下新建两个文件夹,FATFS_V0.09和SPI_SD_Card,FATFS_V0.09用于存放FATFS源文件,SPI_SD_Card用于存放SPI的驱动文件。
2、如图1将ff.c添加到工程文件夹中,并新建diskio.c文件,在diskio.c文件中实现五个函数:
1.DSTATUS disk_initialize (BYTE);//SD卡的初始化
2. DSTATUS disk_status (BYTE);//获取SD卡的状态,这里可以不用管
3. DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);//从SD卡读取数据
4. DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);//将数据写入SD
卡,若该文件系统为只读文件系统则不用实现该函数
5. DRESULT disk_ioctl (BYTE, BYTE, void*);//获取SD卡文件系统相关信息
6.
复制代码
.
图1
3、初步实现以上五个函数
FATFS初始化函数:
1.DSTATUS disk_initialize (
2. BYTE drv /* Physical drive nmuber (0..) */
3. )
4. {
5. switch (drv)
6. {
7. case 0 :
8. return RES_OK;
9. case 1 :
10. return RES_OK;
11. case 2 :
12. return RES_OK;
13. case 3 :
14. return RES_OK;
15. default:
16. return STA_NOINIT;
17. }
18. }
复制代码
.
. 1.DSTATUS disk_status (
2. BYTE drv /* Physical drive nmuber (0..) */
3. )
4. {
5. switch (drv)
6. {
7. case 0 :
8. return RES_OK;
9. case 1 :
10. return RES_OK;
11. case 2 :
12. return RES_OK;
13. default:
14. return STA_NOINIT;
15. }
16. }
复制代码
FATFS底层读数据函数:
1.DRESULT disk_read (
2. BYTE drv, /* Physical drive nmuber (0..) */
3. BYTE *buff, /* Data buffer to store read data
*/
4. DWORD sector, /* Sector address (LBA) */
5. BYTE count /* Number of sectors to read (1..255) */
6. )
7. {
8. if( !count )
9. {
10. return RES_PARERR; /* count不能等于0,否则返回参数错误 */
11. }
12. switch (drv)
13. {
14. case 0:
15. if(count==1) /* 1个sector的读操作
*/
16. {
17. return RES_OK;
18. }
.
. 19. else /* 多个sector的读操作
*/
20. {
21. return RES_OK;
22. }
23. case 1:
24. if(count==1) /* 1个sector的读操作
*/
25. {
26. return RES_OK;
27. }
28. else /* 多个sector的读操作
*/
29. {
30. return RES_OK;
31. }
32.
33. default:
34. return RES_ERROR;
35. }
36. }
复制代码
FATFS底层写数据函数:
1.DRESULT disk_write (
2. BYTE drv, /* Physical drive nmuber (0..)
*/
3. const BYTE *buff, /* Data to be written */
4. DWORD sector, /* Sector address (LBA) */
5. BYTE count /* Number of sectors to write (1..255) */
6. )
7. {
8. if( !count )
9. {
10. return RES_PARERR; /* count不能等于0,否则返回参数错误 */
11. }
12. switch (drv)
13. {
相关推荐:
- [基础教育]2016-2022年中国钢芯铝绞线市场现状调
- [基础教育]语文部编版初一语文下册练习题 句式变
- [基础教育]南京继续教育参考答案--深入学习贯彻习
- [基础教育]国旗下讲话稿——珍惜时间好读书
- [基础教育]北师大版六年级数学下册圆锥的体积教学
- [基础教育]人教版-音乐-四年级下册-四年级下册音
- [基础教育]乔布斯2019年斯坦福大学毕业典礼致辞.d
- [基础教育]2015年加油站安全知识竞赛试题及答案
- [基础教育]2020年教师年度考核个人工作总结
- [基础教育]2019年中考历史试题-2019年大庆市初中
- [基础教育]初三仁爱英语第一轮总复习教案
- [基础教育]SG-A094电气配管安装工程隐蔽验收记录
- [基础教育]冀教版小学数学三年级下册第六单元教材
- [基础教育]青岛版(五制)小学科学二年级下册16《制
- [基础教育]2018-2019年初中科学初一中考真卷测试
- [基础教育]幼儿园大班期末简短评语精选
- [基础教育]2018云南临沧公务员考试申论技巧:这样
- [基础教育]学校食堂经营管理方案
- [基础教育]新中国砥砺奋进的七十年原文
- [基础教育]真空泵的选型及常用计算公式
- 高职田径课程教学现状与对策
- 全髋关节置换术在老年股骨颈骨折患者中
- 青人社厅函〔2016〕576号(附件)工资
- cp101-07砂子检验作业指导书 - secret
- 微观经济学 第八章 博弈论 习题
- 2014高考真题(词语运用)汇编及答案
- 2018年人教版七年级语文下册《第三单元
- 苏教版数学四年级上册第一单元试题 - M
- 四川大学新闻与传播考研2000-2010年真
- 浙江万里学院英语专业四年制本科教学计
- 最新2018马年事业祝福语-范文word版(2
- 最全模具行业术语英文翻译
- 皮亚杰的发展心理学理论
- 64篇高考情景式默写 练习题及答案
- 仿写(学生稿)
- 《SQL Server数据库技术》试卷A
- 第七章作业答案
- 江苏省赣榆县海头高级中学高中语文必修
- 浙江省2001年10月自考正常人体解剖学答
- 2012英语重点短语




