用FatFs在空白SD卡上创建的第一个文件,写入内容总是错的。

2019-07-20 11:05发布

本帖最后由 xuande 于 2017-9-25 11:22 编辑

FatFs 实验,空白 SD 卡,先 f_mount ,再 f_open 创建一个空文件,再 f_lseek 指针后移,然后 f_write 写入新内容,f_close 结束。
单独这么一段测试程序,过程如下图,用仿真器操作,进入 main 以后先人工修改文件名,建立一个文件;之后用 reset 再重复建立文件:

int main(void)
{
u32        i, j, k, l;
SD_Error         SDstatus = SD_OK;
FRESULT        SDresult;
FATFS            FileSystem;
FIL                File;
/*--------------------------------------------*/
SDstatus = SD_Init();                                        // SD 卡初始化。
if        ( SDstatus == SD_OK )
        {
        i = 0;                                                     //临时标志。
        SDresult = f_mount( &FileSystem, "", 0 );                                                           //封装 FatFs 文件系统。
        if        ( SDresult != FR_OK )        {        i = 0xFF;        }
        SDresult = f_open( &File, R_tmp, FA_WRITE | FA_OPEN_ALWAYS );                        //建立文件,文件名在 R_tmp[] 中。
        if        ( SDresult != FR_OK )        {        i = 0xFF;        }
        SDresult = f_lseek( &File, 512 );                                                                        //移动文件读/写指针。
        if        ( SDresult != FR_OK )        {        i = 0xFF;        }

        if        ( i != 0 )        {        i = 0xFF;        }                                                        //创建文件出错,怎么处理?

        //测试例子
        for        ( j=0; j<0xFF; j++ )        R_tmp[ j ] = j;                                                 //准备测试数据。
        SDresult = f_write ( &File, R_tmp, 0xFF, &j );
        SDresult = f_close( &File );

        if        ( ( i == 0xFF ) || ( SDresult != FR_OK ) )         i = 0xFF;
        }

while( 1 );


现在问题是:
因为写数据的指针已经移到后面了,那么前面的内容应当自动、全部填充为一样的数据;
但是,只要是空白卡上建立的第一个文件,前面内容肯定不一致,0 数据中夹了一串字符 a,很莫名其妙;
而第二、第三就正常,全部为 0( NULL)。
如下图:

11.png

困扰几天了。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
lanlzp
1楼-- · 2019-07-20 12:17
文件系统第一次使用时需要先格式化
xuande
2楼-- · 2019-07-20 17:50
 精彩回答 2  元偷偷看……
xuande
3楼-- · 2019-07-20 21:51

目前这个问题倒也能接受,
因为实际应用里,肯定要回头重新写这段数据,只要覆盖就可以了。
但是心里很不踏实。

正点原子
4楼-- · 2019-07-20 22:10
xuande 发表于 2017-9-25 10:54
有意思的是,
那串字符 a 确实是十多天以前的一个实验,在已有文件的固定位置写入固定数量的字符 a。
但 ...

SD卡的格式化,并不会把存储的数据全部清掉,而是清掉文件系统部分的东西。
所以数据恢复软件,才可以恢复数据。
xuande
5楼-- · 2019-07-20 23:00
 精彩回答 2  元偷偷看……
正点原子
6楼-- · 2019-07-21 02:12
xuande 发表于 2017-10-17 22:04
明白了。多谢!

数据存储的问题呢?

一周热门 更多>