Freertos+FAT, data is lost.

Hi: Hardware: STM32F207+S25FL128P Software:Freertos+FAT, Spansion FFS FTL Driver. Step 1: I write 20 bytes data into file /log/dat.bin, the print info as; [FileSystemFileWriteCmd:587]:Write File:/log/dat.bin data(len=20) OK! [slldWriteOp:4791]:sysaddr=0xde0020, leninbytes=32 [slldWriteOp:4791]:sysaddr=0xd73e00, leninbytes=512 [slldWriteOp:4791]:sysaddr=0xde0040, leninbytes=32 Write file(/log/dat.bin, testdata0inlogfile.) ok! I dump the file /log/dat.bin ,the print info as: DPET:dump /log/dat.bin DPET:[FileSystemFileDumpCmd:472]:File /log/dat.bin len=20! 0000: 74 65 73 74 64 61 74 61 30 69 6E 6C 6F 67 66 69 0100: 6C 65 2E 00 Step 2: I read data from flash directly, the print info as below: DPET:flashr 0xd73e00 1 20 DPET:FLASH READ(addr=0xd73e00, unit=1, length=0x14) OK! 74 65 73 74 64 61 74 61 30 69 6e 6c 6f 67 66 69 6c 65 2e 00 Step 3: reset the CPU Step 4: I dump the file /log/dat.bin ,the print info as: DPET:dump /log/dat.bin DPET:[FileSystemFileDumpCmd:466]:File /log/dat.bin len=0! I get the file length through ff_filelength() function. I can not find the data in my file! Step 5: I read the data from flash, the info as below: DPET:flashr 0xd73e00 1 20
DPET:FLASH READ(addr=0xd73e00, unit=1, length=0x14) OK! 74 65 73 74 64 61 74 61 30 69 6e 6c 6f 67 66 69
6c 65 2e 00. My question is the data was writen to the flash sucessfully, but the FAT system can not read it. Why? I do not find a function like fflush() in linux. Please help me. Thank you.

Freertos+FAT, data is lost.

Hi Lifei Yan, Would it be possible that data has not been flushed to the flash at the moment the CPU gets a reset? What I do know is that FreeRTOS+FAT will always flush data to disk as soon as you call ff_fclose(). But I do not know about your driver for the Spansion? Can you point out where to find that driver? Regards.

Freertos+FAT, data is lost.

Hi Hein Tibosch, The data has been flushed to the flash at the moment the CPU gets a reset. In Step 5 : After reset, I read the data from flash, the info as below: DPET:flashr 0xd73e00 1 20 DPET:FLASH READ(addr=0xd73e00, unit=1, length=0x14) OK! 74 65 73 74 64 61 74 61 30 69 6e 6c 6f 67 66 69 6c 65 2e 00. wo can see that after reset, the data is in flash,but FAT can not get it. We can apply Spansion driver through the link: http://www.cypress.com/forum/nor-flash/where-get-spansion-flash-file-system-and-block-driver Regards.

Freertos+FAT, data is lost.

Lifei Yan, I looked at the Cypress forum but didn’t find a link to the driver. It looks like one has to apply for it. And I’m not going to do that.
I do not find a function like fflush() in linux.
Yes there is this function: ~~~ FFErrort FFFlushCache( FFIOManager_t *pxIOManager ) ~~~ Now if you want me to check the source code, you can send it privately to h [dot] tibosch [at] freertos [dot].org

Freertos+FAT, data is lost.

Hi Hein Tibosch, Thank you very much. I made a mistake in my code. There are to methods to solve this problem . 1, In Spansion FTL configuration file ftlifex.h, the FTLRPBCACHE should be set to FALSE. 2, The function FTLFlushTableCache() and FTLFlushDataCache() should be called when FFFlushCache( FFIOManager_t pxIOManager ) is called.