OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2523|回复: 5

sd fatfs 写文件问题

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-10-27
在线时间
24 小时
发表于 2016-10-27 14:40:50 | 显示全部楼层 |阅读模式
12金钱
本帖最后由 zeroawp 于 2016-10-28 16:06 编辑

用MINISTM32的FATFS例程,发现文件无法正常创建。
运行结果如下:
Begin Write file...
Write data len:512
Write Error:9
Write data over.
Write SD OK!


错误9表示The file/directory object is invalid,文件在电脑上打开有文件名,但是无法打开。

代码如下:
[mw_shl_code=c,true]#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"               
#include "delay.h"        
#include "led.h"
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "lcd.h"           
#include "rtc.h"
#include "wkup.h"
#include "adc.h"
#include "dma.h"
#include "24cxx.h"
#include "flash.h"
#include "touch.h"
#include "24l01.h"
#include "mmc_sd.h"
#include "string.h"                 
#include "malloc.h"        
#include "exfuns.h"                     
#include "fattester.h"
//Mini STM32&#191;a·¢°&#229;·&#182;ày′ú&#194;&#235;20
//SD&#191;¨ êμ&#209;é
//&#213;yμ&#227;&#212;-×ó@ALIENTEK
//&#188;&#188;ê&#245;&#194;&#219;ì3:www.openedv.com
                                u8 Fatfs_Write(u8 *path);                                                                                                                                                                                                                        
u8 buf[512];//SD&#191;¨êy&#190;Y&#187;o′&#230;&#199;&#248;
FIL *filea;
int main(void)
{        
u8 t=0,res;                                
    char data[512];
        u32 sd_size;
        u16 i=0;               
u8 getcid,*cid_data;        
          //Stm32_Clock_Init(9);//&#207;μí3ê±&#214;óéè&#214;&#195;
        delay_init(72);                //&#209;óê±3&#245;ê&#188;&#187;ˉ
        //uart_init(72,9600); //′&#174;&#191;ú13&#245;ê&#188;&#187;ˉ            
        //LCD_Init();                        //3&#245;ê&#188;&#187;ˉòo&#190;§
        //LED_Init();         //LED3&#245;ê&#188;&#187;ˉ                                                                                                                              
        mem_init(SRAMIN);                //3&#245;ê&#188;&#187;ˉ&#196;ú2&#191;&#196;ú′&#230;3&#216;            
         exfuns_init();                        //&#206;afatfs&#207;à1&#216;±&#228;á&#191;éê&#199;&#235;&#196;ú′&#230;  
          f_mount(0,fs[0]);                 //1ò&#212;&#216;SD&#191;¨
                                          
         //POINT_COLOR=RED;//éè&#214;&#195;×&#214;ì&#229;&#206;aoìé&#171;           
//        LCD_ShowString(60,50,"Mini STM32");        
//        LCD_ShowString(60,70,"SD Card TEST");        
//        LCD_ShowString(60,90,"ATOM@ALIENTEK");
//        LCD_ShowString(60,110,"2011/1/1");               
        printf("SD Card TEST\n");
                //printf("temperature1:%6.2f&#161;&#230; Humidity1 RH%6.2f%%\n",temperature,Humidity);
        while(SD_Initialize()!=0)//&#188;ì2a2&#187;μ&#189;SD&#191;¨
        {
                //LCD_ShowString(60,130,"SD Card Failed!");
                printf("SD Card Failed!\n");
                delay_ms(500);
                //LCD_ShowString(60,130,"Please Check!      ");
                delay_ms(500);
                LED0=!LED0;//DS0éá&#203;&#184;
        }
        //&#188;ì2aSD&#191;¨3é1|                                                                                             
//        LCD_ShowString(60,130,"SD Card Checked OK ");
//        LCD_ShowString(60,150,"SD Card Size:    Mb");
        printf("SD Card Checked OK!\n");
        
        sd_size=SD_GetCapacity();
        //sd_size=SD_GetSectorCount();
        //LCD_ShowNum(164,150,sd_size>>20,4,16);//&#207;&#212;ê&#190;SD&#191;¨èYá&#191;
        printf("sd_size:%ld\n",sd_size);
        
         mf_mount(0); //&#212;úFatFs&#196;£&#191;éé&#207;×¢2á/×¢&#207;úò&#187;&#184;&#246;1¤×÷&#199;&#248;(&#206;&#196;&#188;t&#207;μí3&#182;&#212;&#207;ó)
                                                   //&#203;μ&#195;÷£o1&#161;¢ò&#187;&#182;¨òa&#207;è&#182;¨ò&#229;ò&#187;&#184;&#246; FATFS
                                                   //      2&#161;¢&#212;úò&#198;&#214;2μ&#196;1y3ì&#214;Dò&#187;&#209;ùòaó&#195;F_MOUNToˉêy
                                                   //      3&#161;¢&#212;úê1ó&#195;è&#206;o&#206;&#198;&#228;&#203;&#251;&#206;&#196;&#188;toˉêy&#214;&#174;&#199;°£&#172;±&#216;D&#235;ê1ó&#195;&#184;&#195;oˉêy&#206;a&#195;&#191;&#184;&#246;&#190;í×¢2áò&#187;&#184;&#246;1¤×÷&#199;&#248;&#161;£
                                                   //         òa×¢&#207;úò&#187;&#184;&#246;1¤×÷&#199;&#248;£&#172;&#214;&#187;òa&#214;&#184;&#182;¨FileSystemObject&#206;aNULL&#188;′&#191;é£&#172;è&#187;oó&#184;&#195;1¤×÷&#199;&#248;&#191;éò&#212;±&#187;&#182;a&#198;ú&#161;£

        //′ò&#191;adata.txt&#206;&#196;&#188;t è&#231;1&#251;òa′ò&#191;aμ&#196;&#206;&#196;&#188;t2&#187;′&#230;&#212;ú£&#172;&#212;ò·μ&#187;&#216;ê§°ü                                 
     //res = f_open(&file,"data.txt",FA_OPEN_EXISTING | FA_READ);            // &#191;&#213;°×&#206;&#196;&#188;t&#182;&#212;&#207;ó&#189;á11&#214;&#184;&#213;&#235;,&#206;&#196;&#188;t&#195;&#251;&#214;&#184;&#213;&#235;,&#196;£ê&#189;±ê&#214;&#190;        £¨′ò&#191;a&#191;éò&#212;£&#169;
        //  res = f_open(&file,"mcu.doc",FA_CREATE_ALWAYS  | FA_WRITE);        // &#191;&#213;°×&#206;&#196;&#188;t&#182;&#212;&#207;ó&#189;á11&#214;&#184;&#213;&#235;,&#206;&#196;&#188;t&#195;&#251;&#214;&#184;&#213;&#235;,&#196;£ê&#189;±ê&#214;&#190;        £¨&#189;¨á¢&#191;éò&#212;£&#169;
        //  res = f_open(&file,"asi",FA_CREATE_NEW  | FA_WRITE);                    //&#206;aê2&#195;′D&#194;&#189;¨ò&#187;&#184;&#246;&#206;&#196;&#188;t&#187;á3&#246;&#207;&#214;&#206;&#196;&#188;tò&#209;&#190;-′&#230;&#212;ú&#196;&#216;£&#191;
         mf_mkdir("123");           //&#189;¨á¢μúò&#187;&#184;&#246;&#206;&#196;&#188;t&#188;D123
        printf("Create folder 123 OK!\n");
//    mf_mkdir("123/sub2");      //&#212;ú123&#207;&#194;&#189;¨á¢ò&#187;&#184;&#246;&#206;&#196;&#188;t&#188;Dsub2
//        printf("Create folder 123/sub2 OK!\n");
//    mf_mkdir("123/sub2/sub3");        //&#212;ú123&#207;&#194;£&#172;sub2à&#239;&#189;¨á¢ò&#187;&#184;&#246;sub3
//                printf("Create folder 123/sub2/sub3 OK!\n");
//                  mf_mkdir("0123");
//mf_open("0:/123/sub2/sub3/read.txt", FA_CREATE_ALWAYS  | FA_WRITE); //&#212;ú01¤×÷&#199;&#248;123&#214;Dμ&#196;sub2à&#239;μ&#196;sub3&#206;&#196;&#188;t&#188;D&#214;D&#189;¨á¢read.txt
mf_open("0:/123/read.txt", FA_OPEN_ALWAYS  | FA_WRITE); //&#212;ú01¤×÷&#199;&#248;123&#214;Dμ&#196;sub2à&#239;μ&#196;sub3&#206;&#196;&#188;t&#188;D&#214;D&#189;¨á¢read.txt
  printf("Create read.txt OK!\n");
//mf_open("0:SD1.txt", FA_CREATE_ALWAYS  | FA_WRITE); //&#212;ú01¤×÷&#199;&#248;123&#214;Dμ&#196;sub2à&#239;μ&#196;sub3&#206;&#196;&#188;t&#188;D&#214;D&#189;¨á¢read.txt
//  printf("Create read.txt OK!\n");
   delay_ms(500);
         for(i=0;i<512;i++)
        {
        //        data = i+0x30;
        data='i';
        }
         mf_write((u8*)data,512);
        printf("Write SD OK!\n");
        mf_close();   //1&#216;±&#213;′ò&#191;aμ&#196;&#206;&#196;&#188;t
         
     mf_mount(0); // ×¢&#207;ú1¤×÷&#199;&#248;(&#212;ú·&#207;&#198;ú&#199;°)
                 printf("Complete!");

        while(1)
        {
                delay_ms(200);
                LED0=!LED0;

        }
}




[/mw_shl_code]

MINISTM32_SD.rar

2.82 MB, 下载次数: 32

源代码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-10-27
在线时间
24 小时
 楼主| 发表于 2016-10-27 16:02:42 | 显示全部楼层
本帖最后由 zeroawp 于 2016-10-27 16:46 编辑

高手们能帮忙看一下吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-10-27 20:25:22 | 显示全部楼层
data这个数组,放全局变量试试
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-10-27
在线时间
24 小时
 楼主| 发表于 2016-10-28 08:48:23 | 显示全部楼层
正点原子 发表于 2016-10-27 20:25
data这个数组,放全局变量试试

不行,还是一样。
除了读容量是ok的,建文件夹,读写文件都不行。
建文件夹res返回的是A hard error occurred in the low level disk I/O layer。
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-10-27
在线时间
24 小时
 楼主| 发表于 2016-10-28 16:06:14 | 显示全部楼层
自己顶
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-10-27
在线时间
24 小时
 楼主| 发表于 2016-10-31 11:57:08 | 显示全部楼层
原因好像是多扇区写入失败造成的,大家可以帮我看另外一个帖子:http://openedv.com/forum.php?mod ... mp;extra=#pid495813
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 16:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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