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

关于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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版