stm32F429+SDIO+Fatfs对sd卡进行读写时,速率特别慢

2019-12-19 18:12发布

最近在做一个数据采集仪,数据采样率10Khz,通过STM32进行数据保存,但是实际使用时SD卡的写入速率特别慢,测试过程中,通过修改缓存区的大小进行测试,最快的速率也只有40KByte/s,导致很多数据的丢失,根本满足不了实时存储的要求。请问有什么好的办法提高存储速率?

  1. extern uint8_t Rx_Buffer[2];
  2. char datasave[9]="data ";
  3. char data_all[40960]=" ";
  4. //通过修改缓存区的大小,传输速度变化,
  5. //但是当缓存为2048时,最大只到40KByte/s,
  6. //并且缓存区越大,存储速度越慢,这一点和其他网友的情况相反,很郁闷。
  7. uint8_t flag=0;


  8. FATFS fs;                                                                                                       
  9. FIL fnew;                                                                                               
  10. FRESULT res_sd;            
  11. UINT fnum;                                                      
  12.        
  13.         int i=0,j=0;
  14.        
  15.        
  16.         memset(data_all, 0, sizeof(data_all));
  17.         res_sd = f_open(&fnew, "0:data.txt",FA_CREATE_ALWAYS | FA_WRITE);
  18.         while(1)
  19.         {       
  20.                  if(flag==1)        //中断标志,读取数据
  21.                  {
  22.                          flag=0;
  23.                          if(j==5120)                //缓存满了之后,写入
  24.                          {
  25.                                 j=0;
  26.                                 res_sd=f_write(&fnew,data_all,sizeof(data_all),&fnum);
  27.                                 memset(data_all, 0, sizeof(data_all));
  28.                                 i++;
  29.                                  printf("%d ",i);
  30.                                 if(i==117)                //采集1分钟的数据并存储,采样率10Khz,1分钟共采样600000个数据,
  31.                                 {
  32.                                 printf("%d",i);       
  33.                                 f_close(&fnew);
  34.                                 }               
  35.                          }
  36.                          else
  37.                          {
  38.                                 sprintf(datasave,"%02x%02x    ",Rx_Buffer[0],Rx_Buffer[1]);  //格式化采样数据
  39.                                 strcat(data_all,datasave);                                                                          //拼接字符串
  40.                                 j++;
  41.                          }
  42.                 }
  43.         }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
飞天558
1楼-- · 2019-12-19 22:04
 精彩回答 2  元偷偷看……
flamma
2楼-- · 2019-12-20 00:19
首先SD卡本身的速度要快, 其次如果你是用Cube MX的话,不要这点字节就写一次SD, 尽量在内存里面缓存更多的数据, 最好大于32K, 一次性写入的数据足够大速度才快。
thy110
3楼-- · 2019-12-20 04:23
算了,还是先把数据写到SDRAM里面去,然后在一起读出来,虽然可能一段时间的数据没有采集,但是至少采集保存到的数据都是完整的。
creep
4楼-- · 2019-12-20 05:09
可以先测试下使用SD卡连续写命令试试,看看和用文件系统写是否差别大。
hwh1328
5楼-- · 2019-12-20 06:32
没采用DMA传送?

一周热门 更多>