打印

ADC的一个想法,大家看能否实现。

[复制链接]
2441|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
redmov|  楼主 | 2010-7-3 11:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
已知条件:
1、我用的是stm32f103vct6 的内部ADC ,外接了一片SPI FLASH M25P64, 做数据存储;
2、我的目的是做持续的ADC转换并保存,ADC的转换频率为2K;
3、M25P64的页编程时间为1.4ms;页大小为256
4、我打算先把ADC的转换数据放到片内的内存里,到了256时在DMA传到FLASH中
求:
1、是否能通过DMA传输,完成不间断的数据采集呢?
2、如果能,大家给我出出主意,如果不能大家说说理由。

致谢:对所有回帖、不回贴的网友表示感谢。
沙发
午夜霓虹| | 2010-7-3 11:58 | 只看该作者
感觉不太显示,我没做过,值说考虑,把数据从adc存到RAM,没有任何问题,2k采样不算高,从ram到flash只能在CPU的干预下才能完成存储。

使用特权

评论回复
板凳
redmov|  楼主 | 2010-7-3 15:02 | 只看该作者
本帖最后由 redmov 于 2010-7-3 15:03 编辑

不是偶DMA么?
ram到 flash 不行?

还有别的方法么??
把adc的值连续传到flash中??? 我主要担心的是 把adc的结果写到flash时,占用太多的时间,影响了adc正常采样

使用特权

评论回复
地板
无冕之王| | 2010-7-3 15:09 | 只看该作者
似乎不太现实

使用特权

评论回复
5
无冕之王| | 2010-7-3 15:10 | 只看该作者
不过可以尝试一下

使用特权

评论回复
6
hgjinwei| | 2010-7-3 15:55 | 只看该作者
SPI Flash 是命令操作的,按页写。肯定要使用CPU管理。这要实现只能用缓冲形式。而且得保证采样速度不能高于Flash的编程速度。

使用特权

评论回复
7
redmov|  楼主 | 2010-7-3 17:04 | 只看该作者
那能否用stm32的内部资源做缓冲呢,因为我的板子没做这块。
谢谢。在下不才,还请多多指教。
一直以为有了DMA就可以不用CPU参与(或很少参与)SPI FLASH的命令操作呢。。。。
悲剧了!!!

使用特权

评论回复
8
isoar| | 2010-7-4 06:53 | 只看该作者
这种传感器采集送大容量存储的模式是很常用的,不间断采集是必须的要求,一般这种东西的做法都是通过设置中断优先级来完成的,也就是ADC采样享有不可中断的高优先级,其它函数的优先级要低且可以被中断。
具体做法就是按相应的时间间隔采样,保存到RAM中,缓冲的大小视你的资源而定,采到满一个缓冲后启动写FLASH的程序保存数据。缓冲至少要设置两个交换页,或者用环形队列的方式工作(以最小写入长度为一个单位),以减小每次写FLASH的时间。

DMA是由DMA控制器代替CPU操作内存方式工作的,是通过数据总线完成的。你使用SPI口的FLASH是肯定用不了DMA的,换成NOR FLASH也许可以,但是没用过你的控制器不知道是否支持。

使用特权

评论回复
9
hgjinwei| | 2010-7-4 08:48 | 只看该作者
SPI 使用DMA模式我已经试过了,行得通的。就是将每页要写的数据放在一个缓冲区,然后由MDA负责将数据搬移到SPI_DR,这样做可以减少SPI中断发生的次数。至少不比每发送一个字节中断一次。

使用特权

评论回复
10
txcy| | 2010-7-4 08:51 | 只看该作者
既要用SPI传送,又要采用DMA模式?

使用特权

评论回复
11
hgjinwei| | 2010-7-4 09:16 | 只看该作者
恩,DMA只负责将要发送的数据搬移到SPI_DR,然后由SPI控制SPI传送。

使用特权

评论回复
12
香水城| | 2010-7-4 11:05 | 只看该作者
9楼说的正确。

使用特权

评论回复
13
redmov|  楼主 | 2010-7-4 11:07 | 只看该作者
一知半解啊,是时候手做做了。
hgjinwei  能否共享一下你的代码??

spi通讯 需要2个步骤:1、将数据放到 SPI_DR 2.由SPI控制器 发送???从上面看spi 写flash 是必须用cpu了。不知道还能剩多少时间来控制ADC 并保证不间断采集。

使用特权

评论回复
14
janeslee| | 2010-7-4 11:30 | 只看该作者
简单:
1,ADC用DMA+循环缓冲,此循环缓冲是由2个乒乓缓冲组成,ADC的DMA设置半满中断和满中断;
2,ADC DMA中断后,SPI FLASH写

使用特权

评论回复
15
janeslee| | 2010-7-4 11:32 | 只看该作者
SPI也采用DMA传输,下一个写之前需要查询上次写是否READY。要保证写入时间小于ADC DMA中断间隔,如果写入时间太长,可以采用ADC数据存满一个PAGE之后再写入。

使用特权

评论回复
16
redmov|  楼主 | 2010-7-4 11:55 | 只看该作者
谢谢 ,我试验下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

34

帖子

3

粉丝