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

zxd10000   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、如果能,大家给我出出主意,如果不能大家说说理由。

致谢:对所有回帖、不回贴的网友表示感谢。

回复评论 (15)

                                 感觉不太显示,我没做过,值说考虑,把数据从adc存到RAM,没有任何问题,2k采样不算高,从ram到flash只能在CPU的干预下才能完成存储。
点赞  2010-7-3 11:58


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

还有别的方法么??
把adc的值连续传到flash中??? 我主要担心的是 把adc的结果写到flash时,占用太多的时间,影响了adc正常采样
点赞  2010-7-3 15:02
                                 似乎不太现实
点赞  2010-7-3 15:09
                                 不过可以尝试一下
点赞  2010-7-3 15:10
                                 SPI Flash 是命令操作的,按页写。肯定要使用CPU管理。这要实现只能用缓冲形式。而且得保证采样速度不能高于Flash的编程速度。
点赞  2010-7-3 15:55
那能否用stm32的内部资源做缓冲呢,因为我的板子没做这块。
谢谢。在下不才,还请多多指教。
一直以为有了DMA就可以不用CPU参与(或很少参与)SPI FLASH的命令操作呢。。。。
悲剧了!!!
点赞  2010-7-3 17:04
这种传感器采集送大容量存储的模式是很常用的,不间断采集是必须的要求,一般这种东西的做法都是通过设置中断优先级来完成的,也就是ADC采样享有不可中断的高优先级,其它函数的优先级要低且可以被中断。
具体做法就是按相应的时间间隔采样,保存到RAM中,缓冲的大小视你的资源而定,采到满一个缓冲后启动写FLASH的程序保存数据。缓冲至少要设置两个交换页,或者用环形队列的方式工作(以最小写入长度为一个单位),以减小每次写FLASH的时间。

DMA是由DMA控制器代替CPU操作内存方式工作的,是通过数据总线完成的。你使用SPI口的FLASH是肯定用不了DMA的,换成NOR FLASH也许可以,但是没用过你的控制器不知道是否支持。
点赞  2010-7-4 06:53
                                 SPI 使用DMA模式我已经试过了,行得通的。就是将每页要写的数据放在一个缓冲区,然后由MDA负责将数据搬移到SPI_DR,这样做可以减少SPI中断发生的次数。至少不比每发送一个字节中断一次。
点赞  2010-7-4 08:48
                                 既要用SPI传送,又要采用DMA模式?
点赞  2010-7-4 08:51
                                 恩,DMA只负责将要发送的数据搬移到SPI_DR,然后由SPI控制SPI传送。
点赞  2010-7-4 09:16
                                 9楼说的正确。
点赞  2010-7-4 11:05
一知半解啊,是时候手做做了。
hgjinwei  能否共享一下你的代码??

spi通讯 需要2个步骤:1、将数据放到 SPI_DR 2.由SPI控制器 发送???从上面看spi 写flash 是必须用cpu了。不知道还能剩多少时间来控制ADC 并保证不间断采集。
点赞  2010-7-4 11:07
简单:
1,ADC用DMA+循环缓冲,此循环缓冲是由2个乒乓缓冲组成,ADC的DMA设置半满中断和满中断;
2,ADC DMA中断后,SPI FLASH写
点赞  2010-7-4 11:30
                                 SPI也采用DMA传输,下一个写之前需要查询上次写是否READY。要保证写入时间小于ADC DMA中断间隔,如果写入时间太长,可以采用ADC数据存满一个PAGE之后再写入。
点赞  2010-7-4 11:32
                                 谢谢 ,我试验下。
点赞  2010-7-4 11:55
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复