OpenEdv-开源电子网

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

求助各位大神:用f407循环采集32个adc通道的值,然后存入sd卡,怎么保证存储不影响采集呢,现在情况是存储的时候采集不能采

[复制链接]

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-24
在线时间
16 小时
发表于 2022-8-15 17:46:00 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-24
在线时间
16 小时
 楼主| 发表于 2022-8-15 17:57:44 | 显示全部楼层
C:\Users\12629\Pictures\Saved Pictures
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-24
在线时间
16 小时
 楼主| 发表于 2022-8-15 18:41:38 | 显示全部楼层
现在是采集和存储在一个大的while循环里,采的时候不能存,存的时候不能采,存储512字节时间大约为5.5ms,产生512字节数据时间是2.2usX256
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-8-15 18:48:31 | 显示全部楼层
本帖最后由 LcwSwust 于 2022-8-15 18:50 编辑

利用环形队列,定时中断采集放入队列,主循环读取队列并存储。不过,你这存储速度不够快啊,SD卡的速度不至于这么慢啊,想办法加快速度吧,比如利用DMA。

专治疑难杂症
回复

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2022-8-16 09:49:47 | 显示全部楼层
帮顶   
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4728
金钱
4728
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-8-16 15:18:15 | 显示全部楼层
环形队列+DMA,最好是数据量满足SD一个块后再写入,不然SD卡很快就写废了,还有不要用太大的SD卡
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-24
在线时间
16 小时
 楼主| 发表于 2022-8-16 19:13:38 | 显示全部楼层
LcwSwust 发表于 2022-8-15 18:48
利用环形队列,定时中断采集放入队列,主循环读取队列并存储。不过,你这存储速度不够快啊,SD卡的速度不至 ...

我打开了DMA模式,感觉速度没变多少,然后想把f_write 字节数设置大点,发现超过512字节程序就不动了,这是为啥啊,不是最大可以4GB吗
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-8-17 09:34:22 | 显示全部楼层
取个名字难的 发表于 2022-8-16 19:13
我打开了DMA模式,感觉速度没变多少,然后想把f_write 字节数设置大点,发现超过512字节程序就不动了,这 ...

这我不太清楚,逐步排查吧。
我一般将SD卡当作SPIFLASH来用的,很少用文件系统。
专治疑难杂症
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-24
在线时间
16 小时
 楼主| 发表于 2022-8-18 16:14:31 | 显示全部楼层
LcwSwust 发表于 2022-8-15 18:48
利用环形队列,定时中断采集放入队列,主循环读取队列并存储。不过,你这存储速度不够快啊,SD卡的速度不至 ...

现在这个项目所用的adc需要spi循环发送命令才会产生数据,没有指令就不会返回数据,如何在中断中操作能一直产生数据存入环形队列
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-8-23 10:58:39 | 显示全部楼层
取个名字难的 发表于 2022-8-18 16:14
现在这个项目所用的adc需要spi循环发送命令才会产生数据,没有指令就不会返回数据,如何在中断中操作能一 ...

ADC和SD卡使用同一个SPI?
专治疑难杂症
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-24
在线时间
16 小时
 楼主| 发表于 2022-8-23 12:25:03 | 显示全部楼层
LcwSwust 发表于 2022-8-23 10:58
ADC和SD卡使用同一个SPI?

adc是spi,sd卡时sdio
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-24
在线时间
16 小时
 楼主| 发表于 2022-8-23 12:28:33 | 显示全部楼层
LcwSwust 发表于 2022-8-23 10:58
ADC和SD卡使用同一个SPI?

微信图片_20220823122719.png
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-24
在线时间
16 小时
 楼主| 发表于 2022-8-23 12:33:49 | 显示全部楼层
LcwSwust 发表于 2022-8-23 10:58
ADC和SD卡使用同一个SPI?

按程序这样跑不能连续采集,还会随着时间增加存储速度越来越慢,好像是lseek 寻址的缘故,但不知道怎么改,开始能有近2M/s的存储速度,五分钟后就剩下200k左右。
回复

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-24
在线时间
16 小时
 楼主| 发表于 2022-8-23 12:34:56 | 显示全部楼层
阿侑kevin 发表于 2022-8-16 15:18
环形队列+DMA,最好是数据量满足SD一个块后再写入,不然SD卡很快就写废了,还有不要用太大的SD卡

我每次写8K数据,刚开始速度很快,然后就会降速
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-8-24 10:11:32 | 显示全部楼层
取个名字难的 发表于 2022-8-23 12:33
按程序这样跑不能连续采集,还会随着时间增加存储速度越来越慢,好像是lseek 寻址的缘故,但不知道怎么改 ...

文件可以在程序while(1)之前打开,存数据就只管以追加方式存入就是,就不要重复打开了.
实在不行就自己把SD卡当作SPIFLASH来用,不用文件系统。
或者自己写一个fatfs,优化某些操作。
专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 05:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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