1赞

1回答

1收藏

【野火i.MX RT1052学习笔记】5.移植FatFs

其他 其他 5282 人阅读 | 1 人回复 | 2018-06-14

前期工作都准备好了,接下来就该移植FatFs了。FatFs是一个简洁的FAT文件系统的实现,主要应用在中小型的嵌入式系统上。可以直接从官网上下载最新的代码
http://elm-chan.org/fsw/ff/00index_e.html
FatFs的目录结构非常简洁,文件系统内部的实现及API就两个文件:ff.cff.h;其他和字库相关的代码都在option目录中。这些代码在移植过程中基本上是不需要改动的。

和移植相关的有四个文件:diskio.c,diskio.h,integer.h以及用户配置文件ffconf.h;如果使用了操作系统,需要支持_FS_REENTRANT,还需要对syscall.c做相应的适配

我们先不考虑_FS_REENTRANT,只在驱动层支持FreeRTOS,调通了再考虑。sdk中已经有了对FatFs的支持示例代码,在sdk的目录下
RT1052\0-野火【i(1).MX RT1052 MINI 开发板】资料\sdk\SDK_2.3.0_EVK-MIMXRT1050_适配野火核心板\middleware\fatfs
也有无操作系统下在SD卡上porting的FatFs的测试demo,也在sdk目录下
RT1052\0-野火【i(1).MX RT1052 MINI 开发板】资料\sdk\SDK_2.3.0_EVK-MIMXRT1050_适配野火核心板\boards\evkmimxrt1050\driver_examples\sdcard_fatfs
因此只需要以下几步就可以把FatFs跑起来了:
1. 添加fatfs目录,把sdk下的fatfs目录拷贝过来,并创建fatfs组,并将FatFs相关的文件加到工程里来,针对SD卡使用的disk中间层是fsl_sd_disk.c
2. 把头文件对应的目录添加到工程中

3. 把demo中的ffconf.h拷贝到user目录下,先不做修改
4. 把demo中的sdcard_fatfs.c拷贝到user/bsp目录下,改名为bsp_fatfs.c,并做相应的修改,主要是:
    a) 将main函数改名为app中要调用的SDCardTest
    b) 将其中board初始化相关的调用删除,除了BOARD_USDHCClockConfiguration
    c) 可能是野火板子的硬件连接和sdk中的SD卡的检测方式不一样,如果用SD_WaitCardDetectStatus去检测是否有SD卡插入,会检测不到,因此参考野火自己的SD卡访问例程中的SD_CardInit来静态初始化SD卡
  1. static status_t sdcardWaitCardInsert(void)
  2. {
  3.     /* Save host information. */
  4.     g_sd.host.base = SD_HOST_BASEADDR;
  5.     g_sd.host.sourceClock_Hz = SD_HOST_CLK_FREQ;
  6.     /* card detect type */
  7.     //g_sd.usrParam.cd = &s_sdCardDetect;
  8.     /* SD host init function */
  9.     if (SD_HostInit(&g_sd) != kStatus_Success)
  10.     {
  11.         PRINTF("\r\nSD host init fail\r\n");
  12.         return kStatus_Fail;
  13.     }
  14.     #if 0
  15.     /* power off card */
  16.     SD_PowerOffCard(g_sd.host.base, g_sd.usrParam.pwr);
  17.     /* wait card insert */
  18.     if (SD_WaitCardDetectStatus(SD_HOST_BASEADDR, &s_sdCardDetect, true) == kStatus_Success)
  19.     {
  20.         PRINTF("\r\nCard inserted.\r\n");
  21.         /* power on the card */
  22.         SD_PowerOnCard(g_sd.host.base, g_sd.usrParam.pwr);
  23.     }
  24.     else
  25.     {
  26.         PRINTF("\r\nCard detect fail.\r\n");
  27.         return kStatus_Fail;
  28.     }
  29.     #else
  30.     if (SD_CardInit(&g_sd))
  31.     {
  32.         PRINTF("\r\nCard detect fail.\r\n");
  33.         return kStatus_Fail;
  34.     }
  35.     PRINTF("\r\nCard inserted.\r\n");
  36.     #endif

  37.     return kStatus_Success;
  38. }
复制代码

改完这些之后编译下载,FatFs测试正常

下一步就是把_FS_REENTRANT打开,然后针对FreeRTOS做相应的适配了


分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

等待沉浮

发表于 2023-10-20 13:51:28 | 只看该作者

有源码吗?可以发来学习习吗?大哥,移植遇到点问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条