最近在做一个数据采集仪,数据采样率10Khz,通过STM32进行数据保存,但是实际使用时SD卡的写入速率特别慢,测试过程中,通过修改缓存区的大小进行测试,最快的速率也只有40KByte/s,导致很多数据的丢失,根本满足不了实时存储的要求。请问有什么好的办法提高存储速率?
- extern uint8_t Rx_Buffer[2];
- char datasave[9]="data
";
- char data_all[40960]="
";
- //通过修改缓存区的大小,传输速度变化,
- //但是当缓存为2048时,最大只到40KByte/s,
- //并且缓存区越大,存储速度越慢,这一点和其他网友的情况相反,很郁闷。
- uint8_t flag=0;
- FATFS fs;
- FIL fnew;
- FRESULT res_sd;
- UINT fnum;
-
- int i=0,j=0;
-
-
- memset(data_all, 0, sizeof(data_all));
- res_sd = f_open(&fnew, "0:data.txt",FA_CREATE_ALWAYS | FA_WRITE);
- while(1)
- {
- if(flag==1) //中断标志,读取数据
- {
- flag=0;
- if(j==5120) //缓存满了之后,写入
- {
- j=0;
- res_sd=f_write(&fnew,data_all,sizeof(data_all),&fnum);
- memset(data_all, 0, sizeof(data_all));
- i++;
- printf("%d
",i);
- if(i==117) //采集1分钟的数据并存储,采样率10Khz,1分钟共采样600000个数据,
- {
- printf("%d",i);
- f_close(&fnew);
- }
- }
- else
- {
- sprintf(datasave,"%02x%02x
",Rx_Buffer[0],Rx_Buffer[1]); //格式化采样数据
- strcat(data_all,datasave); //拼接字符串
- j++;
- }
- }
- }
复制代码
一周热门 更多>