使用ch32v307移植FatFs,再次打开已经写入的数据的文件,提示没有此文件的问题

各位大佬好,我是个新人菜鸟,希望大佬能指点下,万分感谢。

在移植FatFs的过程中出现了一个诡异的问题:挂载成功--新建文件(f_open)成功--写入数据成功--读取写入的数据也成功--关闭文件成功。但是再次打开这个文件的时候,就会提示找不到的这个文件(FRESULT的报错编号为4),找了好几天的依然没有找到问题的原因。包括在f_write()后增加一个刷新缓存的函数f_sync(),依然没有解决。

Flash----W25Q128

FatFs版本---- FatFs R0.15

SPI参考的是官方例程:SPI_FLASH

移植参考野火的教程

下面是部分代码

int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	SystemCoreClockUpdate();
	Delay_Init();
	USART_Printf_Init(115200);	
	SPI_Flash_Init();
	printf("SystemClk:%d\r\n",SystemCoreClock);
	printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
	printf("FatFs文件系统的移植\r\n");

	res = f_mount(&fsObject, "1:", 1);
	if(res == FR_NO_FILESYSTEM)                                 // flash没有文件系统时进行格式化,创建文件系统
	{
	    printf("FLASH中还没有文件系统,开始格式化FLASH,创建文件系统\r\n");
	    res = f_mkfs("1:", 0, work, sizeof(work));              // 格式化flash
	    res = f_unmount ("1:");
	    res = f_mount(&fsObject, "1:", 1);
	}
	printf("文件系统挂载,枚举编号:%d\r\n",res);

	res = f_open(&fp, "1:test.txt", FA_OPEN_ALWAYS | FA_WRITE | FA_READ);
	if (res == FR_OK)
	{
	    printf("打开文件文件成功,枚举编号:%d\r\n",res);
        res = f_write(&fp, wData, 16, &bw);
        f_sync(&fp);
        printf("写入文件,其结果的枚举编号:%d\r\n",res);
        if (res == FR_OK)
        {
            printf("已经写入的字符个数:%d\r\n",bw);
            printf("test.txt文件中的字节数:%d\r\n",f_size(&fp));

        }
    }
	res = f_close(&fp);
	printf("写完关闭文件,其结果的枚举编号:%d\r\n",res);
	res = f_open(&fp, "1:test.txt", FA_WRITE | FA_READ);
	printf("打开文件准备开始读,其结果的枚举编号:%d\r\n",res);
	if (res == FR_OK)
	{
        printf("打开文件成功!\r\n");
        f_rewind(&fp);                                      // 将光标重新定位到开始,
        res = f_read(&fp, rData, f_size(&fp), &br);
        printf("已经读出的字符个数:%d\r\n",br);
        if (res == FR_OK)
        {
            printf("文件的内容:%s\r\n",rData);
        }
    }
    res = f_close(&fp);
    printf("读完关闭文件,其结果的枚举编号:%d\r\n",res);
	while(1)
    {

	}
}


您好,可以参考下图调用截图圈出的语句试一下,若方便,可将工程发至我的邮箱(lzs@wch.cn)这边具体看一下

image.png


@TECH62 您好邮件已经发送。麻烦您了


请问问题解决了吗?怎么解决的呢?


您好,参考一下该贴回复

/bbs/thread-122751-1.html

 


只有登录才能回复,可以选择微信账号登录