野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16193|回复: 10

求助:FATFS例程无法正常运行,及调试时遇见的问题

[复制链接]
发表于 2016-8-27 10:50:12 | 显示全部楼层 |阅读模式
有两个问题:
1)文件系统移植不成功后,我尝试debug,想通过监视res这个枚举变量的值来找出错误,这是监视窗口显示的res值: FR_INVALID_OBJECT,它相应的枚举常量值是9

QQ截图20160827103906.png                    QQ截图20160827104354.png
           图1 调试界面                                                                                  图2  串口助手调试结果
然后,我又试着用printf函数输出res的值,如上图1中的第51行,结果调试助手输出的是:13,即FR_NO_FILESYSTEM,如图2。
想请问一下各位大神,这是怎么回事?

2)这些问题应该怎么解决呢,我用的是4G的SD卡,程序也几乎就是例程,为什么无法出效果?@fire
回复

使用道具 举报

 楼主| 发表于 2016-8-27 11:01:51 | 显示全部楼层
对了,用的是V2的板子
回复 支持 反对

使用道具 举报

发表于 2016-8-27 11:36:13 | 显示全部楼层
提示没有在你的目标存储器上建立文件系统,
先是系统有没有挂载成功,试试res = f_mount(0,&fs);如果成功

再试试使用FatFs自带的f_mkfs()函数格式化SD卡, 但注意底层函数的正确(disk_ioctl()).



回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-27 12:07:01 | 显示全部楼层
望蓝天 发表于 2016-8-27 11:36
提示没有在你的目标存储器上建立文件系统,
先是系统有没有挂载成功,试试res = f_mount(0,&fs);如果成功
...

你好,例程里已经调用了f_mount(0,&fs);
就在49行:res=f_open(&fnew, "0:newfile.txt", FA_CREATE_ALWAYS | FA_WRITE );的上一行。
整个main函数是这样的:
#include "stm32f10x.h"
#include "bsp_sdio_sdcard.h"
#include "bsp_usart1.h"       
#include "ff.h"

FIL fnew;                                                                                                        /* file objects */
FATFS fs;                                                                                                        /* Work area (file system object) for logical drives */
FRESULT res;
UINT br, bw;                                                    /* File R/W count */
BYTE buffer[4096]={0};                         /* file copy buffer */
BYTE textFileBuffer[] = "Welcome to use Wildfire iso stm32 Development Board today is a good day";

int main(void)
{
   /* USART1 config */
                USART1_Config();
                printf("\r\n ÕâÊÇÒ»¸ö fatfs test demo \r\n");
       
                /* Sdio Interrupt Config */
                NVIC_Configuration();
       
                /* Register work area for each volume (Always succeeds regardless of disk status) */
                f_mount(0,&fs);
       
          
//                f_mkdir("sub");
//                f_mkdir("sub/sub1");

                /* function disk_initialize() has been called in f_open */
       
                /* Create new file on the drive 0 */
                res = f_open(&fnew, "0:newfile.txt", FA_CREATE_ALWAYS | FA_WRITE );
       
                 printf("%d\n",res);    //Êä³öö¾Ù±äÁ¿resµÄÖµ
       
                if ( res == FR_OK )
                {
                        res = f_write(&fnew, textFileBuffer, sizeof(textFileBuffer), &bw);
                        printf("\r\n Îļþ´´½¨³É¹¦\r\n");
                        f_close(&fnew);      
                }
                else if(res == FR_EXIST )
                {
                        printf("\r\n ÎļþÒÑ´æÔÚ¦\r\n");
                }
               
                res = f_open(&fnew, "0:newfile.txt", FA_OPEN_EXISTING | FA_READ);
               
                res = f_read(&fnew, buffer, sizeof(buffer), &br);

                printf("\r\n %s ", buffer);
               
                /* Close open files */
                f_close(&fnew);                                              
                 
    /* Unregister work area prior to discard it */
    f_mount(0, NULL);
               
                while(1);
}

我只添加了一个printf函数,用来检查 调用f_open();后的返回值res。
回复 支持 反对

使用道具 举报

发表于 2016-8-27 18:09:40 | 显示全部楼层
用原本配套的例程能否正常运行?然后修改了程序之后就不正常了?
回复 支持 反对

使用道具 举报

发表于 2016-8-27 19:38:39 | 显示全部楼层
调用f_mkfs()初始化试试??
初始化——取消挂载——再挂载。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-28 10:09:04 | 显示全部楼层
开拖拉机的孩子 发表于 2016-8-27 18:09
用原本配套的例程能否正常运行?然后修改了程序之后就不正常了?

用例程也不行,网上搜了下资料,有说是SD卡本身的问题,建议的是格式化一下,但是因为刚接触文件系统,还不太会调用f_mkfs(),我等会研究研究。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-28 10:10:28 | 显示全部楼层
望蓝天 发表于 2016-8-27 19:38
调用f_mkfs()初始化试试??
初始化——取消挂载——再挂载。

嗯嗯,我等会试试,因为刚接触文件系统,还不熟悉,怕调用出错,所以我先研究研究看怎么用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-3 12:06:23 | 显示全部楼层
望蓝天 发表于 2016-8-27 19:38
调用f_mkfs()初始化试试??
初始化——取消挂载——再挂载。

你好,请问你知道格式化SD卡的那个disk_ioctl咋编写么(SD卡的操作用的是SDIO模式)?如果知道的话,望赐教,表示已经没头绪好多天了。。。。。小弟先谢过了
回复 支持 反对

使用道具 举报

发表于 2016-9-3 12:24:52 | 显示全部楼层
雾z~霭 发表于 2016-9-3 12:06
你好,请问你知道格式化SD卡的那个disk_ioctl咋编写么(SD卡的操作用的是SDIO模式)?如果知道的话,望赐 ...

我也不明白诶,我没怎么接触文件系统,之前那些都是基础的,所以知道一点。不好意思 哦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-3 16:10:40 | 显示全部楼层
望蓝天 发表于 2016-9-3 12:24
我也不明白诶,我没怎么接触文件系统,之前那些都是基础的,所以知道一点。不好意思 哦

哦,还是谢谢你
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 03:46 , Processed in 0.053814 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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