TA的每日心情 | 开心 2018-6-21 08:39 |
---|
签到天数: 8 天 连续签到: 2 天 [LV.3]偶尔看看II
|
前期工作都准备好了,接下来就该移植FatFs了。FatFs是一个简洁的FAT文件系统的实现,主要应用在中小型的嵌入式系统上。可以直接从官网上下载最新的代码
http://elm-chan.org/fsw/ff/00index_e.html
FatFs的目录结构非常简洁,文件系统内部的实现及API就两个文件:ff.c和ff.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卡
- static status_t sdcardWaitCardInsert(void)
- {
- /* Save host information. */
- g_sd.host.base = SD_HOST_BASEADDR;
- g_sd.host.sourceClock_Hz = SD_HOST_CLK_FREQ;
- /* card detect type */
- //g_sd.usrParam.cd = &s_sdCardDetect;
- /* SD host init function */
- if (SD_HostInit(&g_sd) != kStatus_Success)
- {
- PRINTF("\r\nSD host init fail\r\n");
- return kStatus_Fail;
- }
- #if 0
- /* power off card */
- SD_PowerOffCard(g_sd.host.base, g_sd.usrParam.pwr);
- /* wait card insert */
- if (SD_WaitCardDetectStatus(SD_HOST_BASEADDR, &s_sdCardDetect, true) == kStatus_Success)
- {
- PRINTF("\r\nCard inserted.\r\n");
- /* power on the card */
- SD_PowerOnCard(g_sd.host.base, g_sd.usrParam.pwr);
- }
- else
- {
- PRINTF("\r\nCard detect fail.\r\n");
- return kStatus_Fail;
- }
- #else
- if (SD_CardInit(&g_sd))
- {
- PRINTF("\r\nCard detect fail.\r\n");
- return kStatus_Fail;
- }
- PRINTF("\r\nCard inserted.\r\n");
- #endif
- return kStatus_Success;
- }
复制代码
改完这些之后编译下载,FatFs测试正常
下一步就是把_FS_REENTRANT打开,然后针对FreeRTOS做相应的适配了
|
|