查看: 5425|回复: 11

[原创] [KL26实验]SD卡文件系统测试

[复制链接]
  • TA的每日心情
    慵懒
    2017-4-27 10:34
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    507

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1450
    最后登录
    2020-8-3
    发表于 2015-6-5 17:07:45 | 显示全部楼层 |阅读模式
    本帖最后由 流-423774 于 2015-6-5 17:15 编辑

    这个是基于我上次发过的一个贴,https://www.nxpic.org.cn/module/forum/thread-598984-1-1.html在这个基础之上,编写了上位机测试软件。上位机通过USB连接KL26单片机,通过创建文件,读文件,写文件内容,读文件内容,删除文件,扫描文件等操作,好,废话少说,看看效果
    11.jpg
    如上图软件的运行效果,SD卡是8G,先扫描一下TF卡,看看里面保存了一些什么内容
    12.png
    通过列表控件,我们看到了SD卡里面的文件内容,先创建一个文件c.txt
    13.jpg
    看到创建的c.txt文件没有,好吧,在向这个文件里面写入一些数据,然后读下这个文件
    14.jpg
    好了,现在不想用这个文件了,把他删除,删除之后扫描发现这个文件不见了
    15.png

    /*----------------------------------------------*/
    到此,再看看实现代码
    /************************************************************************
    *Name: CTRFT_Get_Files
    *Description: 搜索文件目录下所有文件
    *Return:  
    *Input:   
    *Output:
    *************************************************************************/
    FRESULT CTRFT_Get_Files (char* path)
    {
            FRESULT res;
            FILINFO fno;
            DIR dir;
            int i;
            char *fn;
    #if _USE_LFN
            static char lfn[_MAX_LFN + 1];
            fno.lfname = lfn;
            fno.lfsize = sizeof(lfn);
    #endif
            /* Open the directory */
            res = FAT1_opendir(&dir, path);
            if (res == FR_OK)
            {
                    i = strlen(path);
                    for (;;)
                    {
                            /* Read a directory item */
                            res = FAT1_readdir(&dir, &fno);
                            /* Break on error or end of dir */
                            if (res != FR_OK || fno.fname[0] == 0) break;
                            /* Ignore dot entry */
                            if (fno.fname[0] == '.') continue;
    #if _USE_LFN
                            fn = *fno.lfname ? fno.lfname : fno.fname;
    #else
                            fn = fno.fname;
    #endif
                            /* It is a directory */
                            if (fno.fattrib & AM_DIR)
                            {                               //目录
                                    sprintf(&path, "/%s", fn);
                                    printf(" - %s\r\n",path);
                                    res = CTRFT_Get_Files(path);
                                    if (res != FR_OK) break;
                                    path = 0;
                            }
                            else
                            {
                                    //文件
                            }
                    }
            }
            else
            {
                    //printf("scan files error : %d\r\n",res);
            }
            return res;
    }


    /************************************************************************
    *Name: CTRFT_Get_Files
    *Description: 创建文件
    *Return:  
    *Input:   
    *Output:
    *************************************************************************/
    int CTRFT_Create_File(char* file)
    {
            FIL fdst;
            FRESULT res;
            char CreatePath[50]={0};
            
            sprintf(CreatePath, "%s/%s", path0, file);
            res = FAT1_open(&fdst, CreatePath, FA_CREATE_ALWAYS | FA_WRITE);
            if(res != FR_OK)
            {
                    return -1;
            }
            FAT1_close(&fdst);
            return 0;
    }


    /************************************************************************
    *Name: CTRFT_Write_File
    *Description: 写文件数据
    *Return:  
    *Input:   
    *Output:
    *************************************************************************/
    int CTRFT_Write_File(char* file, char* data)
    {
            FIL fdst;
            FRESULT res;
            char OptionPath[50]={0};
            sprintf(OptionPath, "%s/%s", path0, file);

            res = FAT1_open(&fdst, OptionPath, FA_OPEN_ALWAYS | FA_WRITE);
            if (res != FR_OK)
            {
                    return -1;
            }
            res = FAT1_lseek(&fdst, FAT1_f_size(&fdst));
            if (res != FR_OK)
            {
                    FAT1_close(&fdst);
                    return -1;
            }
            res = FAT1_write(&fdst, data, strlen((char*)data), &file_bw);

            FAT1_close(&fdst);
            
            return 0;
    }


    /************************************************************************
    *Name: CTRFT_Read_File
    *Description: 读文件数据
    *Return:  
    *Input:   
    *Output:
    *************************************************************************/
    int CTRFT_Read_File(char* file)
    {
            FIL fdst;
            FRESULT res;
            char OptionPath[50]={0};
            char ReadBuff[50]={0};
            char UsbSend[100]={0};
            sprintf(OptionPath, "%s/%s", path0, file);
            res = FAT1_open(&fdst, OptionPath, FA_READ);
            if (res != FR_OK)
            {
                    return -1;
            }

            do
            {
                     res = FAT1_read(&fdst, ReadBuff, sizeof(ReadBuff), &file_bw);
                     if (res != FR_OK)
                     {
                             FAT1_close(&fdst);
                             return -1;
                     }
                   
                     res = FAT1_lseek(&fdst, file_bw);
                     if (res != FR_OK)
                     {
                             FAT1_close(&fdst);
                             return -1;
                     }
            }while (file_bw > 50);

            FAT1_close(&fdst);
            return 0;
    }


    /************************************************************************
    *Name: CTRFT_Delete_File
    *Description: 删除文件
    *Return:  
    *Input:   
    *Output:
    *************************************************************************/
    int CTRFT_Delete_File(char* file)
    {
            //FIL fdst;
            FRESULT res;
            char OptionPath[50]={0};
            sprintf(OptionPath, "%s/%s", path0, file);

            res = FAT1_unlink(OptionPath);

            if (res != FR_OK)
            {
                    return -1;
            }
            return 0;
    }


    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13153
    最后登录
    2019-1-27
    发表于 2015-6-5 17:36:35 | 显示全部楼层
    支持!
    回复

    使用道具 举报

    该用户从未签到

    14

    主题

    777

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1234
    最后登录
    2015-9-13
    发表于 2015-6-5 17:36:54 | 显示全部楼层
    感谢分享,先收藏!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2015-6-5 18:43:42 | 显示全部楼层
    谢谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-3-3 09:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    106

    主题

    836

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1527
    最后登录
    2023-6-12
    发表于 2015-6-5 19:06:38 | 显示全部楼层
    做过简单测试,再试试楼主这个
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-12 10:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    386

    帖子

    0

    高级会员

    Rank: 4

    积分
    541
    最后登录
    2018-6-28
    发表于 2015-6-5 20:29:16 | 显示全部楼层
    高手啊,
    falajf
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-10 16:14
  • 签到天数: 1442 天

    连续签到: 1 天

    [LV.10]以坛为家III

    17

    主题

    3862

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    8291
    最后登录
    2021-12-10
    发表于 2015-6-6 00:13:06 | 显示全部楼层
    很不错,感谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-10-28 22:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    20

    主题

    209

    帖子

    0

    高级会员

    Rank: 4

    积分
    763
    最后登录
    1970-1-1
    发表于 2015-6-6 00:34:13 | 显示全部楼层
    这个不错,我前段时间也玩过FATFS
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    300

    帖子

    0

    高级会员

    Rank: 4

    积分
    746
    最后登录
    2016-5-26
    发表于 2015-6-6 12:06:28 | 显示全部楼层
    谢谢分享。。
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-22 09:09
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    24

    主题

    446

    帖子

    0

    高级会员

    Rank: 4

    积分
    876
    最后登录
    2019-3-8
    发表于 2015-6-9 16:21:57 | 显示全部楼层
    好  贴 子
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-29 05:02 , Processed in 0.105061 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表