最近调试FATFS,通过STM32对SPI Flash进行读写操作。昨天晚上调通了,今天早上再调试,发现f_mount返回FR_NOFILESYSTEM。
依据网上所说,对磁盘格式化f_mkfs,卡死在FATFS库的ff.c->f_mkfs()的某个for循环里。
FATFS &fs;
//初始化省略
//res返回FR_NO_FILESYSTEM
res = f_mount(&fs, "0:", 1);
if(res == FR_NO_FILESYSTEM){
//格式化,卡死
res = f_mkfs("0:", 0, 0);
}
f_mkfs卡死的for循环代码位置
if (!au) { /* AU auto selection */
vs = n_vol / (2000 / (SS(fs) / 512));
for (i = 0; vs < vst[i]; i++) ;//<----卡死在这里
au = cst[i];
}
最后对SPI Flash进行了全片擦除命令,之后就可以正常操作了。
复盘猜想,大概是因为调试时,没有正确退出调试状态,在SPI Flash读写的时候下电,无意中破坏了创建好的文件系统,但也没法正确进行格式化。所以会之前读写正常,之后初始化失败。全片擦除之后再进行初始化操作就正常了,就是全片擦除速度很慢,128MB大概要30s。文章来源:https://www.toymoban.com/news/detail-784593.html
FATFS &fs;
//初始化省略
//若res返回FR_NO_FILESYSTEM,进入格式化
res = f_mount(&fs, "0:", 1);
if(res == FR_NO_FILESYSTEM){
//换成自己的全片擦除函数
SPI_Flash_Erase_Chip();
//格式化
res = f_mkfs("0:", 0, 0);
}
网上好像也搜不到,搞了一整天。文章来源地址https://www.toymoban.com/news/detail-784593.html
到了这里,关于【STM32】FATFS文件系统f_mkfs卡死的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!