打印

STM32F103ZC单片机SD卡写入数据间歇性错误,请教各位大神

[复制链接]
3967|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
forever3609|  楼主 | 2013-4-27 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 forever3609 于 2013-4-27 15:47 编辑

最近在尝试使用stm32f103zc芯片来保存数据到SD卡中,同时在SD卡上挂载了FAT32操作系统,目前对SD卡读写功能已经可以实现,问题是数据在写入过程中偶尔出现写入错误,重新初始化卡又可以继续读写了,请各位大神帮帮忙。使用FatFs - FAT file system module include file  R0.06        (C)ChaN, 2008文件系统。FATFS源代码: FATFSsrc.rar (39.85 KB)
沙发
forever3609|  楼主 | 2013-4-27 15:17 | 只看该作者
补充一下,我使用SDIO模式读写SD卡,每次写入的数据量固定为1KB,文件系统格式化时选择簇大小为4KB。

使用特权

评论回复
板凳
forever3609|  楼主 | 2013-4-27 15:20 | 只看该作者
请大家帮帮忙,项目要结题了,比较急。谢谢。

使用特权

评论回复
地板
airwill| | 2013-4-27 17:48 | 只看该作者
由于有 OS 的抢先处理, 可能导致写卡因为 OS 的任务抢占而中间出现导致错误的停止过程.
解决办法:
1. 将写卡放在最高任务中试试.
2. 写卡的关键时段, 禁止中断.

使用特权

评论回复
5
forever3609|  楼主 | 2013-4-27 18:48 | 只看该作者
airwill 发表于 2013-4-27 17:48
由于有 OS 的抢先处理, 可能导致写卡因为 OS 的任务抢占而中间出现导致错误的停止过程.
解决办法:
1. 将写 ...

好的,我试试,十分感谢。

使用特权

评论回复
6
cjhk| | 2013-4-27 19:29 | 只看该作者
呵呵   还是版主给力  不错   谢谢了   版主   谢谢

使用特权

评论回复
评论
forever3609 2013-4-27 21:34 回复TA
我还是没解决这个问题,请赐教一下,呵呵。 
7
forever3609|  楼主 | 2013-4-27 21:29 | 只看该作者
airwill 发表于 2013-4-27 17:48
由于有 OS 的抢先处理, 可能导致写卡因为 OS 的任务抢占而中间出现导致错误的停止过程.
解决办法:
1. 将写 ...

版主,你好。我刚才试着在SD卡读写是关闭了所有中断,包括SYSTICK中断也关闭了。可是在打开文件时或者写入SD卡时还是会报错,请问可能是什么原因,我把源代码贴上来。
SysTick->CTRL &= 0xFE;  // counter disable
      
fres = f_open(&fsrc, "vdr.rec", FA_OPEN_EXISTING | FA_WRITE);

f_sync(&fsrc);
   
fres = f_lseek(&fsrc, fsrc.fsize);

    if(fres != FR_OK)
    {
      fres = f_close(&fsrc);
      return 2;  // write error
    }
   
    if (SD_Write_Error_Flag)
    {
        fres = f_write(&fsrc,Sensor_SDandUSART_Buffer_temp_writing_error,
                                SD_Write_Error_Flag*Sensor_SDandUSART_Buffer_MsgNum*Sensor_SDandUSART_Buffer_MsgLength, &br);
        fres = f_write(&fsrc, Sensor_SDandUSART_Buffer_temp,
                          Sensor_SDandUSART_Buffer_MsgNum*Sensor_SDandUSART_Buffer_MsgLength, &br);   
    }
    else
    {
//      SysTick->CTRL &= 0xFE;  // counter disable
      fres = f_write(&fsrc, Sensor_SDandUSART_Buffer_temp,
                          Sensor_SDandUSART_Buffer_MsgNum*Sensor_SDandUSART_Buffer_MsgLength, &br); //write to sd card with 1024 bytes
//      SysTick->CTRL |= 0x01;  // counter able
    }
   
    if(fres != FR_OK)
    {
      fres = f_close(&fsrc);
      return 2;  // write error
    }

    f_sync(&fsrc);
    SysTick->CTRL |= 0x01;  // counter able

    Delay_xms(8000);
   
    fres = f_close(&fsrc);
   
    if(fres != FR_OK)
    {
      return 2;  // write error
    }

使用特权

评论回复
8
forever3609|  楼主 | 2013-4-27 21:36 | 只看该作者
forever3609 发表于 2013-4-27 15:17
补充一下,我使用SDIO模式读写SD卡,每次写入的数据量固定为1KB,文件系统格式化时选择簇大小为4KB。 ...

现在改为每簇大小为1KB,每次写入4KB

使用特权

评论回复
9
forever3609|  楼主 | 2013-5-2 21:40 | 只看该作者
后来发现我那张卡貌似有点问题,换了一张SD卡以后貌似出错概率降低很多,但是仍然会偶尔出错,第一次在这发帖,感谢各位的捧场。

使用特权

评论回复
10
wadeangle| | 2013-5-20 22:17 | 只看该作者
用的ZNFAT 写入出错 fatfs好用吗

使用特权

评论回复
11
wxd7026| | 2013-5-30 09:31 | 只看该作者
您好 请问您项目完成了吗 我也要把430f149采集到的数据存到sd卡里 也是写入有点问题 能否指教下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

28

帖子

1

粉丝