查看: 3327|回复: 1

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

[复制链接]
  • TA的每日心情
    开心
    2018-6-21 08:39
  • 签到天数: 8 天

    连续签到: 2 天

    [LV.3]偶尔看看II

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

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

    我们先不考虑_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. 把头文件对应的目录添加到工程中
    pic3.jpg

    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测试正常
    pic4.jpg

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


    回复

    使用道具 举报

    该用户从未签到

    发表于 2023-10-20 13:51:28 | 显示全部楼层
    有源码吗?可以发来学习习吗?大哥,移植遇到点问题
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-18 22:46 , Processed in 0.122267 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.