STM32F429作为主机接收FPGA的数据后,进行SD卡存储时特别慢求助

2019-12-20 21:40发布

本帖最后由 thy110 于 2018-3-24 10:17 编辑

我使用STM32F429作为主机与FPGA进行通讯,接收数据,并用STM32存储数据。通讯接口采用的是SPI接口,使用的是STM32的SPI1接口,16分频,时钟为5.625MHZ,每次传输一个16位数据,数据的传输频率为5.625MHZ/16=351.56KHZ,同时开启了DMA循环接收模式来接收数据。FPGA上AD采集模块的采样频率是12.5KHZ,因此传输速度是远远满足的。
SPI的时钟如下图:
TIM截图20180324101710.png (648.42 KB, 下载次数: 0) 下载附件 2018-3-24 10:17 上传


现在的问题是在向SD卡里面写入数据时,速度特别慢。我在STM32里面设置了一个12500的数组来缓存采集到的数据,每接收12500个数据,就写入到SD卡中一次。但是在我实验时,平均1分钟内只能存储5个周期的数据即是12500*5,其余55个周期的数据没有保存下来。SD卡采用的是SDIO模式进行驱动的。不知道有什么好的办法提高存储速率的吗?整体代码如下:
       while(1)
       {
       sprintf(datasave,"%02x%02x%s",Rx_Buffer[0],Rx_Buffer[1]," ");//通过DMA接收到的数据进行格式化
       strcat(data_all,datasave);
              if(i== 12500)//每接受12500个数据时,进行一次存储,避免频繁的进行文件的读写操作。
              {
              i=0;
              res_sd= f_open(&fnew, "0:data.txt",FA_READ|FA_WRITE );
              f_lseek(&fnew,fnew.fptr+fnew.fsize);
              res_sd=f_write(&fnew,data_all,sizeof(data_all),&fnum);
              f_close(&fnew);
              memset(data_all,0, sizeof(data_all));
              }
       i++;
       }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。