OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5917|回复: 5

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

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-10-11
在线时间
10 小时
发表于 2017-10-11 10:24:47 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 peacewyz 于 2017-10-11 10:24 编辑

大家好,新手做项目,遇到问题,请大家指教
外部三路adc采用125HZ(采样间隔为8000us采样率,外部采样完成后会给出信号(125HZ),CPU接收到这个信号时进入中断,中断触发需要进行如下任务:
1.   STM32F407读取三路SPI(ADC)的数据     占用60us
2.   STM32F407发送通过SCI发送三路数据到PC  占用600us
3.   读取RTC日期,时间信息     1.2us
4.   三路SPI数据存入SD卡      5200us
5.   每个两个小时新建文件夹,写入头文件(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\r\nC2:%d\r\nC3:%d\r\n",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


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-10-11
在线时间
10 小时
 楼主| 发表于 2017-10-12 11:19:03 | 显示全部楼层
回复

使用道具 举报

8

主题

47

帖子

1

精华

高级会员

Rank: 4

积分
675
金钱
675
注册时间
2014-9-17
在线时间
89 小时
发表于 2017-10-12 19:27:56 | 显示全部楼层
你的SDIO接口速率是不是初始频率400KHz,你的时间测量是否准确啊?我的是HAL库,与你的有点不一样的,还有我之前用STM32F429标准外设库也写过文件,也是在原子哥探索者基础上改的,速率还不错,你这个需要检查下硬件接口是否配置正确,还有就是你的软件写入是否有问题吧
当你的才华还撑不起你的野心时你就应该静下心来学习。当你的经济还撑不起你的梦想时,你就应该踏实的去工作。
回复

使用道具 举报

13

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2016-11-1
在线时间
50 小时
发表于 2017-10-29 10:57:06 | 显示全部楼层
火透 发表于 2017-10-12 19:27
你的SDIO接口速率是不是初始频率400KHz,你的时间测量是否准确啊?我的是HAL库,与你的有点不一样的,还有 ...

您好,请问一下用原子哥STM32F4基于HAL库的FATFS例程想从轮询模式改成DMA模式需要注意什么呀,为何我改完数据一存储就卡死了呢
回复

使用道具 举报

8

主题

47

帖子

1

精华

高级会员

Rank: 4

积分
675
金钱
675
注册时间
2014-9-17
在线时间
89 小时
发表于 2017-10-29 13:39:16 | 显示全部楼层
talenthn 发表于 2017-10-29 10:57
您好,请问一下用原子哥STM32F4基于HAL库的FATFS例程想从轮询模式改成DMA模式需要注意什么呀,为何我改完 ...

F4我用的标准外设库
当你的才华还撑不起你的野心时你就应该静下心来学习。当你的经济还撑不起你的梦想时,你就应该踏实的去工作。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2017-10-29
在线时间
1 小时
发表于 2017-10-29 16:57:22 | 显示全部楼层
我现在跟楼主一样。采集了IMU的数据。200hz,18个float数据。然后将18个float转成字符串形式,存入sd卡中,花掉了140ms。。。完全没法跟上我传感器的数据。不知道为什么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 01:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表