本帖最后由 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++;
}
我晕,我看错了,你带宽不够。sd卡速率才40KB/s,太慢了。加上一些其它开销,慢是肯定的。你至少要保证个500KB/s吧。试试。另外4KB扇区勿动。
一周热门 更多>