你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于Fatfs文件系统的请教

[复制链接]
yaowei 提问时间:2015-12-29 15:13 /
阅读主题, 点击返回1楼
收藏 评论17 发布时间:2015-12-29 15:13
17个回答
回答时间:2016-1-13 11:33:20
从速度、缓冲区上做处理。当产生错误以后,重新初始化一下是否可以解决?
yaowei 回答时间:2016-1-13 13:48:07
安 发表于 2016-1-13 11:33
从速度、缓冲区上做处理。当产生错误以后,重新初始化一下是否可以解决? ...

速度已经降下去了,你说的缓冲区是指哪个
回答时间:2016-1-13 19:13:45
接收数据放的缓冲区。
adlu 回答时间:2016-1-14 09:33:35
表示关注!
adlu 回答时间:2016-1-14 09:40:13
CubeMX生成的SD+FATFS程序确实很方便。
我用F4做录音器,也遇到类似的问题,就是连续写SD卡的时候,很容易出现FR_DISK_ERR错位。
后来把写扇区函数改了。
原函数为:
DRESULT SD_write(BYTE lun, const BYTE *buff, DWORD sector, UINT count)
{       
  DRESULT res = RES_OK;
  
  if(BSP_SD_WriteBlocks((uint32_t*)buff,
                        (uint64_t)(sector * BLOCK_SIZE),
                        BLOCK_SIZE, count) != MSD_OK)
{
   res = RES_ERROR;
  }

  return res;
}
修改后为:
DRESULT SD_write(BYTE lun, const BYTE *buff, DWORD sector, UINT count)
{
        DRESULT res = RES_OK;
        uint8_t sd_res = MSD_OK;
       
        sd_res = BSP_SD_WriteBlocks((uint32_t*)buff,
                        (uint64_t)(sector * BLOCK_SIZE),
                        BLOCK_SIZE, count);
        while (sd_res) {
                BSP_SD_Init();
                sd_res = BSP_SD_WriteBlocks((uint32_t*)buff,
                        (uint64_t)(sector * BLOCK_SIZE),
                        BLOCK_SIZE, count);
        }
        if (sd_res) {
                res = RES_ERROR;
        }
        return res;
}

也就是写出错的时候,重新初始化SD卡。
目前程序运行稳定,但是没有像LZ这样测试4小时那么长。
yaowei 回答时间:2016-1-15 19:49:54
adlu 发表于 2016-1-14 09:40
CubeMX生成的SD+FATFS程序确实很方便。
我用F4做录音器,也遇到类似的问题,就是连续写SD卡的时候,很容易 ...

就是我是一直调用自己写的一个函数,这个函数里有f_open  f_wtire   f_close,   可能写了几百次或者上千次会出现一个f_write 的错误,你的这个修改就是当SD卡挂了的时候你就让他重新初始化对吧,感谢万分 ,我也试试去
yaowei 回答时间:2016-1-15 20:01:06
adlu 发表于 2016-1-14 09:40
CubeMX生成的SD+FATFS程序确实很方便。
我用F4做录音器,也遇到类似的问题,就是连续写SD卡的时候,很容易 ...

不好意思,在问下,BSP_SD_WriteBlocks如果一直不返回OK,也就是说不为0的话,那岂不是一直死在while里
adlu 回答时间:2016-1-16 15:57:19
yaowei 发表于 2016-1-15 20:01
不好意思,在问下,BSP_SD_WriteBlocks如果一直不返回OK,也就是说不为0的话,那岂不是一直死在while里 ...

确实会有这样的可能性。我测试了一下,比如录音的过程中突然把卡拔出来,如果正好在执行这个底层函数,就会在里面死循环。

除了人为把卡拔出来的情况,正常情况下我没有遇到卡死的情况。

如果担心这个问题,最合理的做法是:增加一个变量,控制初始化的次数,如果尝试了N次之后,仍不能写成功,就退出。
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版