5874|10

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教一个SD卡的问题 [复制链接]



在STM32上移植了一个FATFS文件系统,可以正确读取文件但是写文件总是不对,f_write(&file, FlashBuf, 512, &bw)已经成功执行但是读出来文件是空的,电脑里显示也是空的第一次搞FAT文件请各位赐教。。。

附上程序



void WriteTest()
{
    FATFS fs;       /*Work area (file system object) for logical drive*/
    FIL file;      /*file objects*/
        UINT bw, br;    /*File R/W count*/

        int i = 0;
        for(i=0; i<512; i++)
        {
                FlashBuf
= 'A';
        }        
        /*Register a work area for logical drive 0*/
    f_mount(0, &fs);

    /*Create file*/
    if(f_open(&file, "test2.dat", FA_CREATE_ALWAYS | FA_WRITE | FA_READ)) return;
        else
        {        
                if(f_write(&file, FlashBuf, 512, &bw))return;        //这里已写成功
                else
                {        
                        if(f_read(&file, FlashBuf, 512, &br)) return; //
                        //读成功但是文件是空的,br为0,读已经写好的文件是正确的
                }
                /*Close all files*/
                    f_close(&file);
        }
        
    /*Unregister a work area before discard it*/
    f_mount(0, 0);
}
此帖出自stm32/stm8论坛

最新回复

                                 觉得你写就没成功。  详情 回复 发表于 2010-3-4 15:19
点赞 关注
 

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 详细说明下,最好把程序附上
此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 程序附上了,熟悉的朋友能否指点下,写文件有什么地方要注意的?
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 楼主怎么判断读成功了
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
回四楼
if(f_read(&file, FlashBuf, 512, &br)) return;  这里没有return所以我认为读成功了,现在关键是写不了文件,
if(f_write(&file, FlashBuf, 512, &bw))return; 这句也没有return,但是执行完后文件是空的。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 没人帮忙,自己顶下。。还没找到问题
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 f_seek(&file,0)调整文件指针到头上,否则写文件后,文件指针在文件尾了,是读成功但是读到数字为0
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 这里也是个问题,但是写完后在电脑里读也是空的
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 你说f_write(&file, FlashBuf, 512, &bw)已经成功执行,你怎么证明你的数据已经写到SD卡里了?你的写SD卡的操作正确否?
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

10
 


我看看底层驱动是否正确,还发现个问题,上面的问题是我建立一个文件后接着写出现的,当我打开一个已存在的文件然后执行写后总是在红色那句就返回了flag值为1。

如下是FATFS写文件函数的部分代码

        
FRESULT f_write (
        FIL *fp,                        /* Pointer to the file object */
        const void *buff,        /* Pointer to the data to be written */
        UINT btw,                        /* Number of bytes to write */
        UINT *bw                        /* Pointer to number of bytes written */
)
{
        FRESULT res;
        DWORD sect;
        UINT wcnt, cc;
        CLUST clust;
        const BYTE *wbuff = buff;


        *bw = 0;
        res = validate(fp->fs, fp->id);                                        /* Check validity of the object */
        if (res != FR_OK) return res;
        if (fp->flag & FA__ERROR) return FR_RW_ERROR;        /* Check error flag */
        if (!(fp->flag & FA_WRITE)) return FR_DENIED;        /* Check access mode */
        if (fp->fsize + btw < fp->fsize) return FR_OK;        /* File size cannot reach 4GB
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 觉得你写就没成功。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表