发表于 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_openf_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次之后,仍不能写成功,就退出。
页: 1 [2]
查看完整版本: 关于Fatfs文件系统的请教