各位大佬好,我是个新人菜鸟,希望大佬能指点下,万分感谢。
在移植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) { } }
热门产品 :
CH32L103: 32位PDUSB低功耗单片机