在進行移植FatFs文件系統的時候,單片機採用的是STM32,移植的底層讀、寫、擦除函數都正確,但是一進行打開文件操作的時候就返回FR_NO_FILESYSTEM錯誤(13),該錯誤的原因有很多種,網友DevLab是在他的博客裏面分析的比較透徹,他的文章鏈接http://www.devlabs.cn/?p=226,分析的很到位。
但是我的錯誤出現的原因是另外的錯誤,我在執行f_open之前進行了SD_EraseTest();,SD_SingleBlockTest();、SD_MultiBlockTest();操作,這些操作將SD卡強制進行數據操作,甚至擦除和改寫了SD卡引導區的數據,導致SD卡內的FAT、FAT16、FAT32等系統丟失,從而導致了FR_NO_FILESYSTEM的錯誤,避免該錯誤的方式就是使用PC將SD卡重新格式化成FAT/FAT16/FAT32等文件系統,讓後將單片機程序中的SD_EraseTest();,SD_SingleBlockTest();、SD_MultiBlockTest();這些操作刪除掉就可以解決這些問題。
示意代碼如下:
// SD_EraseTest();
// SD_SingleBlockTest();
// SD_MultiBlockTest();
res = f_mount(0, &fs);
printf("\r\nf_mountº¯Êý·µ»ØÖµ:%d\r\n",res);
res = f_open(&testFile,"testfile.txt",FA_WRITE | FA_READ | FA_OPEN_ALWAYS);
if(res != FR_OK)
{
printf("failed to open file!\r\n",);
}
else
{
res = f_lseek(&testFile, 0);
res = f_write(&testFile,data,100,&ByteRead);
res = f_lseek(&testFile, 0);
}