野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20883|回复: 14

野火书中的FATFS SDIO例程请教

[复制链接]
发表于 2013-7-19 15:59:04 | 显示全部楼层 |阅读模式
野火书中的FATFS SDIO例程 下载测试0K     我要向一个txt文件里面写入一些数据      在1023之前还是成功写入     但数组改成大于1023就写入不成功     一直卡死在    while(SD_GetStatus() != SD_TRANSFER_OK); 这一句          请问有什么方法可以修改一次性能写大于1023个字节的????     我想一次性写入4096个字节      
回复

使用道具 举报

发表于 2013-7-20 00:32:40 | 显示全部楼层
应该是支持的吧,明天我去测试一下
回复 支持 反对

使用道具 举报

发表于 2013-7-20 14:04:53 | 显示全部楼层
  1. /******************** (C) COPYRIGHT 2012 WildFire Team **************************
  2. * 文件名  :main.c
  3. * 描述    :MicroSD卡(SDIO模式)测试实验,并将测试信息通过串口1在电脑的超级终端上
  4. *           打印出来         
  5. * 实验平台:野火STM32开发板
  6. * 库版本  :ST3.5.0
  7. *
  8. * 作者    :wildfire team
  9. * 论坛    :http://www.amobbs.com/forum-1008-1.html
  10. * 淘宝    :http://firestm32.taobao.com
  11. *********************************************************************************/
  12. /* Includes ------------------------------------------------------------------*/
  13. #include "stm32f10x.h"
  14. #include "sdio_sdcard.h"
  15. #include "usart1.h"       
  16. #include "ff.h"

  17. int res;  
  18. int a;

  19. FIL fsrc,fdst;
  20. FATFS fs;
  21. UINT br, bw;            // File R/W count
  22. BYTE buffer[512];       // file copy buffer
  23. //BYTE textFileBuffer[] = "感谢您选用 野火STM32开发板 !^_^ \r\n";
  24. BYTE textFileBuffer[4096] = {0};


  25. int main(void)
  26. {       
  27.          int i=0 ;
  28.          for(i=0;i<4096;i++)
  29.          {
  30.            textFileBuffer[i]='a';
  31.          }
  32.    /* USART1 config */
  33.         USART1_Config();

  34.         /* Interrupt Config */
  35.   NVIC_Configuration();

  36.         printf("\r\n 这是一个MicroSD卡文件系统实验(FATFS R0.09)\n");

  37.         printf ( "\r\n disk_initialize starting......\n " );

  38.         printf("byte=%d",sizeof(textFileBuffer));
  39.         f_mount(0,&fs);                  

  40.         res = f_open(&fdst,"0:/Demo.TXT",FA_CREATE_NEW | FA_WRITE);
  41.          
  42.         if ( res == FR_OK )
  43.          {
  44.     /* 将缓冲区的数据写到文件中 */
  45.                 res = f_write(&fdst, textFileBuffer, sizeof(textFileBuffer), &bw);
  46.           printf( "\r\n 文件创建成功 \n" );   
  47.       /*关闭文件 */
  48.                     f_close(&fdst);      
  49.           }
  50.    else if ( res == FR_EXIST )
  51.          {
  52.                 printf( "\r\n 文件已经存在 \n" );

  53.          }

  54.    /*---------------- 将刚刚新建的文件里面的内容打印到超级终端 -----------------------*/
  55.   /* 以只读的方式打开刚刚创建的文件 */
  56.         res = f_open(&fdst, "0:/Demo.TXT", FA_OPEN_EXISTING | FA_READ); /* 打开文件 */               
  57.         br = 1;
  58.         a = 0;       
  59.   for (;;)
  60.         {
  61.                 for ( a=0; a<512; a++ )                                   /* 清缓冲区 */
  62.                         buffer[a]=0;
  63.                          
  64.           res = f_read( &fdst, buffer, sizeof(buffer), &br ); /* 将文件里面的内容读到缓冲区 */
  65.                 printf("\r\n %s ", buffer);                                               
  66.           if (res || br == 0) break;                          /* 错误或者到了文件尾 */                           
  67.   }
  68.         f_close(&fdst);                                              /* 关闭打开的文件 */       

  69.          
  70.   while (1)
  71.   {}
  72. }

  73.           
  74. /******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/
复制代码
测试写入4096个字节正常~
回复 支持 反对

使用道具 举报

发表于 2013-7-20 14:08:44 | 显示全部楼层
以上代码我只修改了SDIO-fatfs例程的第25~26行,和31~35行,及第46行。程序运行正常,串口输出如下图。

向sd卡写入4096字节

向sd卡写入4096字节
回复 支持 反对

使用道具 举报

发表于 2013-8-2 18:25:33 | 显示全部楼层
不知道你们的历程中的ff。h头文件中的其他函数是否好用,我的(比如:f_mkdir等多数函数)出现undefined的情况。不知道你们的是什么样的情况?如果非常好用的话就共享一下代码呗
回复 支持 反对

使用道具 举报

发表于 2013-8-2 20:35:10 | 显示全部楼层
yangyankunlc 发表于 2013-8-2 18:25
不知道你们的历程中的ff。h头文件中的其他函数是否好用,我的(比如:f_mkdir等多数函数)出现undefined的情 ...

野火的例程可以在这里下载:http://www.firebbs.cn/forum.php? ... &extra=page%3D1
回复 支持 反对

使用道具 举报

发表于 2013-8-3 07:40:42 | 显示全部楼层
随风 发表于 2013-8-2 20:35
野火的例程可以在这里下载:http://www.firebbs.cn/forum.php?mod=viewthread&tid=24&extra=page%3D1

谢谢哈。这就去看看
回复 支持 反对

使用道具 举报

发表于 2013-10-6 18:58:18 | 显示全部楼层
还是那样啊,就是从这下载下来,直接编译完,也是还会出现(比如:f_mkdir等多数函数)出现undefined的情况,你们就没有遇到吗?那你们的FRESULT        f_mkdir (const TCHAR*);这个函数能用吗
回复 支持 反对

使用道具 举报

发表于 2013-10-11 19:30:20 | 显示全部楼层
yangyankunlc 发表于 2013-10-6 18:58
还是那样啊,就是从这下载下来,直接编译完,也是还会出现(比如:f_mkdir等多数函数)出现undefined的情况 ...

这种情况是你没在ffconf.h开启那些函数!
回复 支持 反对

使用道具 举报

发表于 2013-10-12 23:24:29 | 显示全部楼层
迷路的Tuzki 发表于 2013-10-11 19:30
这种情况是你没在ffconf.h开启那些函数!

默认状态就是不好用,f_unlink  这个函数也不好用
回复 支持 反对

使用道具 举报

发表于 2013-10-12 23:26:03 | 显示全部楼层
ffconf.h  里是这样配置的
#define _FS_MINIMIZE        1        /* 0 to 3 */
#define _FS_READONLY        0        /* 0:Read/Write or 1:Read only */

还是出现 undefined的情况,我也不知道怎么回事呢
回复 支持 反对

使用道具 举报

发表于 2013-10-12 23:54:17 | 显示全部楼层
天之痕 发表于 2013-10-12 23:26
ffconf.h  里是这样配置的
#define _FS_MINIMIZE        1        /* 0 to 3 */
#define _FS_READONLY        0        /* 0:Read/Writ ...

在你发的帖子附了程序,你看看~
回复 支持 反对

使用道具 举报

发表于 2013-10-13 08:24:34 | 显示全部楼层
迷路的Tuzki 发表于 2013-10-11 19:30
这种情况是你没在ffconf.h开启那些函数!

大体的看了一下,确实有很多都是设置的Disable或者是部分功能。的确应该是发现问题的原因了,真是非常感谢啊,不过最近比较忙,过几天一定要重新好好研究一下FatFs文件系统,虽然我现在还不是很清楚具体要去更改设置哪些参数,还是非常感谢啦(如果你能再指导一下,配置成全功能的Fatfs文件系统的参数,那就更感谢了)
回复 支持 反对

使用道具 举报

发表于 2014-3-2 10:17:23 | 显示全部楼层
flyleaf 发表于 2013-7-20 14:08
以上代码我只修改了SDIO-fatfs例程的第25~26行,和31~35行,及第46行。程序运行正常,串口输出如下图。

火哥我也遇到了类似的问题,也是写入数据时卡在了 while(SD_GetStatus() != SD_TRANSFER_OK);这一句,但是每次还都可以新建文件,就是不能写入数据,不知道您是怎么解决的啊
回复 支持 反对

使用道具 举报

发表于 2014-10-31 10:23:52 | 显示全部楼层
flyleaf 发表于 2013-7-20 00:32
应该是支持的吧,明天我去测试一下

老师你好!问你一个问题我用f_write这个函数用一次写入大于512字符之后把SD卡用电脑打开显示内容不是我写的数据

一次写入小于512字符是在电脑上打开是显示是正常的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 19:29 , Processed in 0.035151 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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