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++;
       }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
thy110
1楼-- · 2019-12-21 18:51
 精彩回答 2  元偷偷看……
wye11083
2楼-- · 2019-12-22 00:06
thy110 发表于 2018-3-24 16:22
spi是和FPGA进行通讯的,SD卡的驱动模式是SDIO模式,不是SPI

哦,那我就不清楚了,没折腾过sdio,你找找好像是io.c,看看读写sd卡的函数,可以打log看看在哪卡的,是不是每读写一次都做了一遍init。如果是你说的那样,可能每次读写都有200ms左右的延时。
aammoo
3楼-- · 2019-12-22 03:35
不要每次写入都打开关闭文件
huanger
4楼-- · 2019-12-22 04:40
在循环前打开文件一次就好,去除每次打开文件与关闭文件,也不需要每次写都要移动位置

一周热门 更多>