你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
安 发表于 2016-1-13 11:33 从速度、缓冲区上做处理。当产生错误以后,重新初始化一下是否可以解决? ...
adlu 发表于 2016-1-14 09:40 CubeMX生成的SD+FATFS程序确实很方便。 我用F4做录音器,也遇到类似的问题,就是连续写SD卡的时候,很容易 ...
yaowei 发表于 2016-1-15 20:01 不好意思,在问下,BSP_SD_WriteBlocks如果一直不返回OK,也就是说不为0的话,那岂不是一直死在while里 ...
速度已经降下去了,你说的缓冲区是指哪个
我用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小时那么长。
就是我是一直调用自己写的一个函数,这个函数里有f_open f_wtire f_close, 可能写了几百次或者上千次会出现一个f_write 的错误,你的这个修改就是当SD卡挂了的时候你就让他重新初始化对吧,感谢万分 ,我也试试去
不好意思,在问下,BSP_SD_WriteBlocks如果一直不返回OK,也就是说不为0的话,那岂不是一直死在while里
确实会有这样的可能性。我测试了一下,比如录音的过程中突然把卡拔出来,如果正好在执行这个底层函数,就会在里面死循环。
除了人为把卡拔出来的情况,正常情况下我没有遇到卡死的情况。
如果担心这个问题,最合理的做法是:增加一个变量,控制初始化的次数,如果尝试了N次之后,仍不能写成功,就退出。