打印

stm32h7“手把手移植FatFs文件系统(版本R0.12c)”(基于V7造轮子)

[复制链接]
404|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
王将|  楼主 | 2018-8-8 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
FatFs的官方网站为:http://elm-chan.org/fsw/ff/00index_e.html。FatFs是用于小型嵌入式系统的通用FAT / exFAT文件系统模块。FatFs模块的编写符合ANSI C(C89),并与磁盘I / O层完全分离。因此它独立于平台。它可以被纳入到小微控制器利用有限的资源,如8051,PIC,AVR,ARM,Z80,RX等。
1、FatFs特性DOS / Windows兼容的FAT / exFAT文件系统。平**立。易于移植。程序代码和工作区域占用空间非常小。支持的各种配置选项:
ANSI / OEM或Unicode中的长文件名。exFAT文件系统。RTOS的线程安全。多个卷(物理驱动器和分区)。可变扇区大小。多个代码页,包括DBCS。只读,可选API,I / O缓冲区等......
2、移植前准备工作移植准备工作需要两个文件
包含完整bsp驱动的基础工程【V7-001_LED】。ST官网下载的最新cube包【en.stm32cubeh7】(当前是1.4版本)。
最终实现的目的是,将【en.stm32cubeh7】的FatFs移植到我们自己的工程【V7-001_LED】,使用SD卡功能。
基础工程【V7-001_LED】解压,如图1
图1
cube包【en.stm32cubeh7】文件路径:en.stm32cubeh7\STM32Cube_FW_H7_V1.4.0\Middlewares\Third_Party\FatFs,这个是FatFs移植文件,如图2
图2
cube包【en.stm32cubeh7】文件路径:en.stm32cubeh7\STM32Cube_FW_H7_V1.4.0\Projects\STM32H743I-EVAL\Applications\FatFs\FatFs_uSD_DMA_Standalone,这个是FatFs with uSD card drive application using the DMA,简单的说是使用文件系统驱动SD卡的应用例程。该例程我们需要借鉴使用到的.c文件和.h文件如图3、图4。
图3
图4
通过以上自己准备的基础工程和cube包中的两个路径中文件,我们准备好了移植的准备工作。
3、建立FatFs文件夹及复制文件将 cube包【en.stm32cubeh7】文件路径:en.stm32cubeh7\STM32Cube_FW_H7_V1.4.0\Middlewares\Third_Party,文件夹FatFs整个拷贝到我们的基础工程路径:V7-001_LED\Libraries,如图5
图5
将文件路径:V7-001_LED\Libraries\FatFs\src\drivers中的原模板文件拷贝到新建的文件夹【template】,并将文件路径:en.stm32cubeh7\STM32Cube_FW_H7_V1.4.0\Projects\STM32H743I-EVAL\Applications\FatFs\FatFs_uSD_DMA_Standalone\Src中的文件【sd_diskio_dma.c】及文件路径:en.stm32cubeh7\STM32Cube_FW_H7_V1.4.0\Projects\STM32H743I-EVAL\Applications\FatFs\FatFs_uSD_DMA_Standalone\Inc中的文件【sd_diskio_dma.h】拷贝至基础工程中的
drivers文件夹,如图6
图6

将文件路径:en.stm32cubeh7\STM32Cube_FW_H7_V1.4.0\Projects\STM32H743I-EVAL\Applications\FatFs\FatFs_uSD_DMA_Standalone\Inc中的文件【ffconf.h】拷贝至
基础工程中的src文件夹 ,如图7
图7
至此,建立FatFs文件夹及复制文件完毕!
4、建立工程文件建立工程文件,如图8
图8
添加编译文件路径,如图9
图9
至此,工程建立完毕!
5、修改main函数及bsp文件修改main函数,及加入编写的测试文件【demo_sd_fatfs.c】,如图10
图10
在文件【bsp.h】中将头文件【bsp_sdio_sd.h】包含进来,如图11
图11
将工程编译一次,报了3个错误,如图12。
图12

逐个修改报错地方,将“stm32h743i_eval_sd.h”修改为"bsp_sdio_sd.h",如图13
图13
将文件【ffconf.h】中的_CODE_PAGE宏定义修改为936,意思是支持中文显示,如图14
图14
注:再次重新编译一次,发现此时为0错误0警告。但下载进去还不能运行。
V7开发板的SD卡接口是用的SDMMC1,而这个接口仅支持AXI SRAM区访问,其它SRAM和TCP均不支持。AXI SRAM的主频是200MHz,需要Cache配合提速,所以此例子主RAM直接使用性能最高的DTCM。仅DMA操作SDIO的地方使用AXI SRAM。 查看此文档http://www.armbbs.cn/forum.php?mod=viewthread&tid=91531,添加方法如图15
图15
注:再次重新编译一次,发现此时为0错误0警告。但下载进去只能运行前5项,第6项运行不了,如图16
图16
将文件【bsp_sdio_sd.c】中的时钟分频进行修改,如图17
图17
将文件【bsp_sdio_sd.h】中的宏定义USE_SD_TRANSCEIVER改为0,如图18
图18
修改完毕后便可以完美运行。
6、结果验证至此,stm32h7“手把手移植FatFs文件系统(版本R0.12c)”操作完毕,运行效果截图,如图19(只截图了命令6)
图19

使用特权

评论回复

相关帖子

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

本版积分规则

419

主题

419

帖子

0

粉丝