打印

请教一个SD卡的问题

[复制链接]
2913|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Start09|  楼主 | 2010-2-26 16:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Start09 于 2010-2-28 09:18 编辑

在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);
}
沙发
hsbjb| | 2010-2-27 16:22 | 只看该作者
详细说明下,最好把程序附上

使用特权

评论回复
板凳
Start09|  楼主 | 2010-2-28 09:15 | 只看该作者
程序附上了,熟悉的朋友能否指点下,写文件有什么地方要注意的?

使用特权

评论回复
地板
txcy| | 2010-2-28 16:18 | 只看该作者
楼主怎么判断读成功了

使用特权

评论回复
5
Start09|  楼主 | 2010-2-28 23:46 | 只看该作者
回四楼
if(f_read(&file, FlashBuf, 512, &br)) return;  这里没有return所以我认为读成功了,现在关键是写不了文件,
if(f_write(&file, FlashBuf, 512, &bw))return; 这句也没有return,但是执行完后文件是空的。

使用特权

评论回复
6
Start09|  楼主 | 2010-3-3 16:18 | 只看该作者
没人帮忙,自己顶下。。还没找到问题

使用特权

评论回复
7
cyzzzz| | 2010-3-3 21:02 | 只看该作者
f_seek(&file,0)调整文件指针到头上,否则写文件后,文件指针在文件尾了,是读成功但是读到数字为0

使用特权

评论回复
8
Start09|  楼主 | 2010-3-4 11:49 | 只看该作者
这里也是个问题,但是写完后在电脑里读也是空的

使用特权

评论回复
9
ST_ARM| | 2010-3-4 13:17 | 只看该作者
你说f_write(&file, FlashBuf, 512, &bw)已经成功执行,你怎么证明你的数据已经写到SD卡里了?你的写SD卡的操作正确否?

使用特权

评论回复
10
Start09|  楼主 | 2010-3-4 14:23 | 只看该作者
本帖最后由 Start09 于 2010-3-4 14:25 编辑

我看看底层驱动是否正确,还发现个问题,上面的问题是我建立一个文件后接着写出现的,当我打开一个已存在的文件然后执行写后总是在红色那句就返回了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

使用特权

评论回复
11
tianma2005| | 2010-3-4 15:19 | 只看该作者
觉得你写就没成功。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

18

帖子

1

粉丝