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.         }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。