查看: 3447|回复: 0

[原创] 野火i.MX RT1052 MINI试用-7-FatFS实验

[复制链接]
  • TA的每日心情
    开心
    2019-6-20 14:08
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2018-7-12 23:58:20 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 mabo124 于 2018-7-13 00:05 编辑

          这周学习进行基于RT1052下的FatFS读写SD卡实验,参考原子哥的例程为模板(本想参考原子哥的例程,自己移植FatFS,结果尝试了3天,最终放弃了),添加了读写sd卡操作,为下一步存储照片做好打好基础。这里总结如下。
          1. FatFS是一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统。 FatFs 的编写遵循ANSI C,因此不依赖于硬件平台。它不需要做任何修改,便可以嵌入到便宜的微控制器中,如 8051, PIC, AVR, SH, Z80, H8, ARM 等等。
        2.MicroSD卡原理图
          (1) MicroSD卡 和 SD卡的区别在于不同的协议,外观和速度都不同,但是存储方式一样。
         (2)Micro SD Card,原名Trans-flash Card(TF卡)是一种极细小的快闪存储器卡,其主要应用于移动电话、GPS设备、便携式音乐播放器和一些快闪存储器盘中。
         (3) SD卡是安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(外语缩写PDA)和多媒体播放器,是目前消费数码设备中应用最广泛的一种存储卡。   
    33.png 查的资料可知,SD卡有两种操作接口:SDIO和SPI。 使用SDIO口的速度比较快,SPI的速度比较慢 。这里Micro SD卡也有相应两种接口。
    野火 RT1052的原理图采用的SDIO接口方式。
          3.  Fatfs 移植。FatFs 软件包括以下文件。
          ffconf.h     FatFs 模块配置文件
              ff.h            FatFs 和应用模块公用的包含文件
              ff.c            FatFs 模块
              diskio.h     FatFs and disk I/O 模块公用的包含文件
              integer.h   数据类型定义
              option      可选的外部功能
              diskio.c     FatFs 与disk I/O 模块接口层文件(不属于 FatFs 需要由用户提供)
          4. SD卡驱动
          SD卡的驱动使用的fsl提供库文件fsl_sd.c、fsl_sdmmc_event.c、fsl_sdmmc_host.c和fsl_sdmmc_common.c。
           5.  FATFS的应用示例
           (1)   初始化RT1052系统工作(此处省略)
           (2)检查SD卡
    1. while(USDHC1_Init())  
    2.         {
    3.        printf("\r\n SD Card Error! \r\n");
    4.        delay_ms(500);                                       
    5.        printf("\r\n Please Check! \r\n");
    6.        delay_ms(500);
    7.         }
    复制代码
            (3)初始化FatFS并挂载SD卡
    1. exfuns_init();                          // 为FatFS相关变量申请内存
    2.   f_mount(fs[0],"0:",1);             // 挂载SD卡
    复制代码
                    f_mount函数在ff.c文件的第3493行,声明如下。
    1. /*-----------------------------------------------------------------------*/
    2. /* Mount/Unmount a Logical Drive                                         */
    3. /*-----------------------------------------------------------------------*/
    4. FRESULT f_mount (
    5.         FATFS* fs,                        /* Pointer to the filesystem object (NULL:unmount)*/
    6.         const TCHAR* path,        /* Logical drive number to be mounted/unmounted */
    7.         BYTE opt                        /* Mode option 0:Do not mount (delayed mount), 1:Mount immediately */
    8. )
    复制代码
             (4) 读取SD卡信息
    1. while(exf_getfree("0:",&total,&free))           // 获取SD卡的总容量和剩余容量
    2.         {
    3.         printf("\r\n SD Card Fatfs Error! \r\n");
    4.         delay_ms(200);
    5.         }                                                                                                                                      
    6.   printf("\r\n FATFS OK! \r\n");
    7.         printf("\r\n SD Total Size:  %d   MB \r\n" ,total>>10);
    8.         printf("\r\n SD  Free Size:  %d   MB \r\n",free>>10);
    复制代码
               (5)对SD卡进行读操作。打开SD卡根目录下的文件data.txt,这里,SD卡中没有这个文件,所以就创建此文件。
    1. res = f_open(file, "0:/data.txt", FA_OPEN_ALWAYS | FA_READ | FA_WRITE );

    2.   if( res != FR_OK )
    3.      printf("\r\n f_open() fail.. \r\n");
    4.         else
    5.      printf("\r\n f_open() success.. \r\n");
    复制代码
                (6)对SD卡进行写操作。在(5)基础上,向相应文件写入字符串(下一次实验可以尝试open/puts一个图像文件)。
    1. res = f_lseek(file,file->fptr);        

    2.         n = f_puts("\r\n hello mabo..\r\n", file) ;     //  向文件写入字符串
    3.         if( n<1 )  // 判断写操作是否成功
    复制代码
                  (7)关闭文件,卸载SD卡
    1. f_close(file);
    2.         f_mount(fs[0],"0:",0);
    复制代码
            6. 实验效果图。左下图为串口输出结果,右下图为windows下sd卡的读取效果(J盘里有一个data.txt文件,里面有相应字符串“\r\n hello mabo.. \r\n”)。
    11.png 22.png


    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2025-1-12 21:53 , Processed in 0.127697 second(s), 16 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.