DMA SDcard fatfs方式的adc 数据写入速度

2019-07-20 11:17发布

本帖最后由 peacewyz 于 2017-10-11 10:24 编辑

大家好,新手做项目,遇到问题,请大家指教
外部三路adc采用125HZ(采样间隔为8000us采样率,外部采样完成后会给出信号(125HZ),CPU接收到这个信号时进入中断,中断触发需要进行如下任务:1.   STM32F407读取三路SPI(ADC)的数据     占用60us2.   STM32F407发送通过SCI发送三路数据到PC  占用600us3.   读取RTC日期,时间信息     1.2us4.   三路SPI数据存入SD卡      5200us5.   每个两个小时新建文件夹,写入头文件(200 byte),占用14400us
写入SD卡的时候特别耗时,按照一般的读写速度1M/s的速度,1kb/ms,也不至于这么慢啊,目前我是采用F407例程中的FATFS改的, 试了DMA方式和查询方式,不过并无太多改善
                errorstatus=SD_SetDeviceMode(SD_DMA_MODE);                           //DMA 方式                  //errorstatus=SD_SetDeviceMode(SD_POLLING_MODE);                 //查询方式
是我写入的太频繁还是怎么回事?我想采用类似探索者F407的板子上例程中DMA方式的双缓冲的方式,可是不得要领,希望能有高手指点,或者有类似的example,
下面是代码
                printf("C1:%d C2:%d C3:%d ",channelvalue[0],channelvalue[1],channelvalue[2]);  //600us               
                RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);                                                  //1.2us                RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);                        GPIO_SetBits(GPIOB,GPIO_Pin_1);                        if(t%4 ==0)                                                                                            //测试的时候,每隔4s创建一个新文件                        {                                                                                wav_recorder();                                                                               //创建文件夹                                OBSINFO();                                                                                     //写入头文件信息,也就是上面的时间信息以及一些基本信息,200byte 左右,共耗时20ms                                t=0;                        }                GPIO_ResetBits(GPIOB,GPIO_Pin_1);                        write_pro(channelvalue[0],channelvalue[1],channelvalue[2],channelvalue[3]);                        //5ms                                channelvalue[0]=0;                channelvalue[1]=0;                channelvalue[2]=0;                channelvalue[3]=0;

QQ 2844724493

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
peacewyz
1楼-- · 2019-07-20 16:42
 精彩回答 2  元偷偷看……
火透
2楼-- · 2019-07-20 21:39
你的SDIO接口速率是不是初始频率400KHz,你的时间测量是否准确啊?我的是HAL库,与你的有点不一样的,还有我之前用STM32F429标准外设库也写过文件,也是在原子哥探索者基础上改的,速率还不错,你这个需要检查下硬件接口是否配置正确,还有就是你的软件写入是否有问题吧
talenthn
3楼-- · 2019-07-21 02:28
 精彩回答 2  元偷偷看……
火透
4楼-- · 2019-07-21 05:51
 精彩回答 2  元偷偷看……
zyf450720160
5楼-- · 2019-07-21 09:46
我现在跟楼主一样。采集了IMU的数据。200hz,18个float数据。然后将18个float转成字符串形式,存入sd卡中,花掉了140ms。。。完全没法跟上我传感器的数据。不知道为什么

一周热门 更多>