各位大佬好,我是個新人菜鳥,希望大佬能指點下,萬分感謝。
在移植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文件系統(tǒng)的移植\r\n"); res?=?f_mount(&fsObject,?"1:",?1); if(res?==?FR_NO_FILESYSTEM)?????????????????????????????????//?flash沒有文件系統(tǒng)時進行格式化,創(chuàng)建文件系統(tǒng) { ????printf("FLASH中還沒有文件系統(tǒng),開始格式化FLASH,創(chuàng)建文件系統(tǒng)\r\n"); ????res?=?f_mkfs("1:",?0,?work,?sizeof(work));??????????????//?格式化flash ????res?=?f_unmount?("1:"); ????res?=?f_mount(&fsObject,?"1:",?1); } printf("文件系統(tǒng)掛載,枚舉編號:%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文件中的字節(jié)數:%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低功耗單片機