为STM32移植FATFS,读取SD卡上FAT12/16/32文件系统[Update:2008-9-25,11:52]【恢复】 (www.ourdev.cn)
你尚未登录 |登录 |快速注册 |退出 首页 酷贴 搜索 在线 本网站由阿莫电子邮购独家赞助
论坛首页 -> STM32/STM8 技术讨论区 -> 为STM32移植FATFS,读取SD卡上FAT12/16/32文件系统[Update:2008-9-25,11:52]【恢复】 (属于论坛:STM32/8) 跳转至: 未登录
↓↓ 为STM32移植FATFS,读取SD卡上FAT12/16/32文件系统[Update:2008-9-25,11:52]【恢复】 回复数:146,点击数:11888
抱歉本贴的回复数太多,为了减轻网络流量,只显示帖子正文的前后各10个回复。本贴的正文内容中间隐藏了126个回复。你需要 点击此处 才能查看全部内容。
对为你带来的访问不便表示歉意。不过我们仍会坚持即使没有登录,仍能共享我们网站的所有资料。你没有 登录后就能消除这个访问上的不便(可增加到显示60个回复)。
如果你是新用户请先 注册。注册是免费的,并且手续简单只需要填写用户名与口令。
↓↓↓↓↓↓↓↓↓↓↓↓
【楼主位】 ifree64
积分:887
派别:
等级:------
来自:火星
给stm32移植fatfs文件系统,今天终于取得阶段性胜利。只需要提供这样几个函数即可
DSTATUS disk_initialize (BYTE);
DSTATUS disk_status (BYTE);
DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);
DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE); // 如果实现只读的文件系统就不需要了。
DRESULT disk_ioctl (BYTE, BYTE, void*);
移植成功后,可以用如下方式读取SD卡了,实在太方便了,和PC机上编程差不了多少。

    unsigned int i;
    BYTE buffer[512];    // file copy buffer
    FATFS fs;            // Work area (file system object) for logical drive
    FIL fsrc;            // file objects
    FRESULT res;         // FatFs function common result code
    UINT br;             // File R/W count
    USART1_Puts("Now, I'll read file 'i2c/uart.lst'.\n");

    // Register a work area for logical drive 0
    f_mount(0, &fs);

    // Open source file
    res = f_open(&fsrc, "i2c/uart.lst", FA_OPEN_EXISTING | FA_READ);
    if (res) 
    {
        USART1_Puts("Can't open i2c/uart.lst for read. :-(\n");
        goto exit;
    }
    
    for (;;) {
        res = f_read(&fsrc, buffer, sizeof(buffer), &br);
        if (res || br == 0) break;   // error or eof
        for( i = 0; i < br; ++i )
            USART1_Putc(buffer[i]);
    }
       
    f_close(&fsrc);
exit:
    // Unregister a work area before discard it
    f_mount(0, NULL);

源代码:
点击此处下载 ourdev_429063.rar(文件大小:206K) (原文件名:SDFATFS.rar) 


调试结果 (原文件名:fatfs.JPG) 


现在还有点问题:有时正常,有时不正常,还没找到原因。

上面的代码在sd卡初始化上有点问题,下面是修改过的版本,在我的2G SD卡上运转良好。
点击此处下载 ourdev_429587.rar(文件大小:207K) (原文件名:SDFATFS.rar)  

本贴被 ifree64 编辑过,最后修改时间:2008-09-25,11:52:57.
 
2008-09-24,20:37:28
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【1楼】 lanshuitianxia 黑蚂蚁

积分:1258
派别:
等级:------
来自:上海
呵呵 帮顶一下
__________________________
理想+行动=成功
人生不要惧怕错误,要善于从错误中总结经验。
STM32行动中....
uCOS-II学习中....
http://shop34765428.taobao.com/
2008-09-24,20:41:59
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【2楼】 ifree64
积分:887
派别:
等级:------
来自:火星
自己顶一下,沉得真快。
 
2008-09-24,21:55:25
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【3楼】 weijingyan0814 Vinnee
积分:31
派别:
等级:------
来自:
up! 3Q
 
2008-09-24,22:17:20
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【4楼】 418425051 宽

积分:431
派别:
等级:------
来自:./bbs_upload/files_usericon/armok01415890.jpg
谢谢分享,顺便抢个地板!
 
2008-09-24,22:39:40
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【5楼】 jamiedu 阿明

积分:188
派别:
等级:------
来自:羊城
好好,谢谢。
 
2008-09-24,23:01:36
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【6楼】 eddia2000
积分:328
派别:
等级:------
来自:
顶下,不要就沉了.
 
2008-09-24,23:08:05
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【7楼】 ifree64
积分:887
派别:
等级:------
来自:火星
找到不稳定的原因了。
SD卡初始化的代码有点问题,今天稍后上传修改后的代码。
谢谢楼上诸位的参与。
 
2008-09-25,07:41:21
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【8楼】 aguiddd
积分:36
派别:
等级:------
来自:
顶,我最近也在弄这个,楼主真好!
 
2008-09-25,08:27:37
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【9楼】 ifree64
积分:887
派别:
等级:------
来自:火星
楼主位代码已经更新,现在读SD卡没有问题了。
 
2008-09-25,11:28:30
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【10楼】 252177861 白色简单

积分:433
派别:
等级:------
来自:湖南
帮顶
 
2008-09-25,12:28:41
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
↑↑↑↑↑↑↑↑↑↑↑↑
抱歉本贴的回复数太多,为了减轻网络流量,只显示帖子正文的前后各10个回复。本贴的正文内容中间隐藏了126个回复。你需要 点击此处 才能查看全部内容。
对为你带来的访问不便表示歉意。不过我们仍会坚持即使没有登录,仍能共享我们网站的所有资料。你没有 登录后就能消除这个访问上的不便(可增加到显示60个回复)。
如果你是新用户请先 注册。注册是免费的,并且手续简单只需要填写用户名与口令。
↓↓↓↓↓↓↓↓↓↓↓↓
【137楼】 kaineng
积分:6
派别:
等级:------
来自:
回复【楼主位】ifree64 
-----------------------------------------------------------------------
好东西,顶!
 
2010-04-23,11:28:09
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【138楼】 xy8800
积分:21
派别:
等级:------
来自:
ding 
 
2010-04-23,20:08:22
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【139楼】 orange2348

积分:84
派别:
等级:------
来自:
mark
 
2010-05-04,17:16:11
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【140楼】 chengyi2009
积分:45
派别:
等级:------
来自:
我都弄两天,老是读失败!头也开始大了 !
 串口发来:
测试SD卡,请把SD卡插入,并确保存在/BWSTDO/test.txt 

 按下LEFT键进入SD卡测试
SD卡打开文件失败

void WriteFlash(void)
{
FATFS fs;
    FIL fil;
FRESULT res; //文件系统返回信息
    UINT len;
UINT addr=0;
UINT i;
TurnToSD();
f_mount(0,&fs);//注册一个文件系统
//写16点
//res=f_open(&fil,"/BWSTDO/hzdot16.bin",FA_OPEN_EXISTING|FA_READ);
res=f_open(&fil,"/BWSTDO/hzdot16.bin",FA_OPEN_ALWAYS|FA_WRITE|FA_READ);

    if(res!=FR_OK) 
    {
        USART1_Puts("SD卡打开16点文件失败\r\n");
        return;
    }
就到打这:
不知道是什么原因!和恼火!不知道有谁遇到没?
我用的是DX板上的例子!

 
2010-05-07,17:51:19
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【141楼】 ifree64
积分:887
派别:
等级:------
来自:火星
楼上,先测试一下你的disk_read是否真的可以读出一个扇区。然后还可以考虑换张卡试一下。

刚才又对楼上的问题进行了测试,发现可能是卡上的文件系统的问题。
我有张卡在Linux系统下具有这样的分区:
/dev/sdb /dev/sdb1
/dev/sdb1格式化为fat32文件格式,这样做在pc机上没有问题,但用fatfs去出现无法打开文件的错误。
后来我直接将/dev/sdb格式化为fat32文件格式,就解决了无法打开文件的错误。

本贴被 ifree64 编辑过,最后修改时间:2010-05-15,21:32:56.
 
2010-05-15,19:31:12
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【142楼】 ripny
积分:9
派别:
等级:------
来自:
这个系统早就玩熟了....
 
2010-05-15,19:46:05
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【143楼】 chengyi2009
积分:45
派别:
等级:------
来自:
谢谢楼上的楼上!141楼!我准备试一试!呵呵!大家多交流!问题就是经验!
 
2010-06-05,15:42:57
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【144楼】 LynFam

积分:30
派别:
等级:------
来自:成都
大家有对Fatfs比较熟悉的就出来说说经验咯..
我现在用的是DX的板子,测试了白菜的程序,没问题,可是看了一下代码,还是比较复杂~
下面这个对大家可能有帮助,程序的版权是白菜的哦~
DX32光盘实例程序,作者是电子白菜ourdev_561739.rar(文件大小:298K) (原文件名:DX32-SD.rar) 
RVMDK的工程,还在研究中,发上来大家参考吧。
 
2010-06-13,22:07:00
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【145楼】 gaerqiu
积分:4
派别:
等级:------
来自:
好像第1次读文件失败,每次都要复位一次才正常,128M的卡,不管什么文件格式都这样
1G,2G的卡正常
 
2010-06-14,22:03:46
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【146楼】 cat_li
积分:385
派别:
等级:------
来自:
收藏,好东西
 
2010-06-14,22:11:45
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【147楼】 gaerqiu
积分:4
派别:
等级:------
来自:
128M的卡第1次读失败后关闭文件,延时一下,再打开文件就可以正常读了
方法如下:
      res=f_mount(0, &fs);
      if(res!=FR_OK)
         return;

LOOP:      
      res = f_open(&fsrc, "yu1.bmp", FA_OPEN_EXISTING | FA_READ);    //打上图片文件名
      if(res!=FR_OK)
      {
         return;
      }
      res = f_read(&fsrc, &bmp, sizeof(bmp), &br);
      if(res!=FR_OK)
      {
         f_close(&fsrc);
         Delayms(10);
         goto LOOP;
         //return;
      }
 
2010-06-14,23:49:59
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【148楼】 angguohui 恬淡山林

积分:312
派别:
等级:------
来自:
顶了,虽然用楼主的移植还不行,但是我移植另一个成功,谢谢!
 
2010-07-16,10:07:58
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
【149楼】 winterss
积分:6
派别:
等级:------
来自:
LZ 请教下哈,为什么我用24MHz主时钟,12MH spi 写卡,无论是class2  class6 速度都只有80KB/s 左右?
 
2010-07-30,10:49:37
资料 邮件 回复 引用回复   ↑↑   ↓↓ 编辑 删除
↑↑↑↑↑↑↑↑↑↑↑↑
抱歉本贴的回复数太多,为了减轻网络流量,只显示帖子正文的前后各10个回复。本贴的正文内容中间隐藏了126个回复。你需要 点击此处 才能查看全部内容。
对为你带来的访问不便表示歉意。不过我们仍会坚持即使没有登录,仍能共享我们网站的所有资料。你没有 登录后就能消除这个访问上的不便(可增加到显示60个回复)。
如果你是新用户请先 注册。注册是免费的,并且手续简单只需要填写用户名与口令。
↑↑  快速回复帖子主题:为STM32移植FATFS,读取SD卡上FAT12/16/32文件系统[Update:2008-9-25,11:52]【恢复】
你尚未登录,不能回复以上帖子。
论坛首页 -> STM32/STM8 技术讨论区 -> 为STM32移植FATFS,读取SD卡上FAT12/16/32文件系统[Update:2008-9-25,11:52]【恢复】 (属于论坛:STM32/8) 跳转至: 未登录
任何建议或投诉,欢迎随时与我们联系。 ourDEV.cn 我们的电子开发网,友好交流气氛,乐于开源共享,“这里远比混乱的现实世界美好”。
网站负责人:  阿莫(armok),手机:13433056000,电邮:armok ourdev.cn(请将空格改成@)
地址与电话:  东莞市东城八一路同沙工业园内,0769-22298000,传真请按4
 阿莫邮购门市与雕刻机展示厅:东莞市莞城区莞太路和生文具礼品批发市场A2018,A2035 杨小姐 13711915767
 雕刻机的技术咨询、订单查询、生产进度,可查询:13600266008吴先生(雕刻机设计人员kaif_w)
声明:  本网站由东莞科士通(Infostone)科技有限公司属下的阿莫电子邮购部提供独家赞助。
 有正式的工商注册与网站备案。详情可到东莞工商局查询。
 本网站(ourDEV.cn)原名称为ourAVR.com(我们的AVR),自2007-09-01起从专业的AVR网转成综合电子网站。
 本网站系统由armok Using Oracle + Java/JSP + WebLogic + Linux 2001/12/20 -- 2007/09/13
 本BBS所有代码均为原创,版权归 armok 所有。本网站自:2004-10-03,16:31:17 起开始运行。
法律顾问:  本网站尊重知识产权,自2007年08月15日起,魏龙律师担任ourDEV.cn(原ourAVR.com)常年法律顾问。

本网站已经通过了东莞市公安局安全认证许可,请大家遵守国家法律法规。粤ICP备09047143号