6936|7

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32的ADC部分的确需要注意很多 [复制链接]

至于是不是BUG,现在没必要争论.但是至少需要ST修改文档了.
ADC与DMA合起来用有隐患!这问题,至少ST的文档中对ADC和DMA联合使用部分介绍的不足.
在压力测试中,DMA有可能出现所谓"错位"问题,例如将ad0,ad1,ad2规则转换时,可能发生丢失一次ad数据,导致数据错位.
经过测试,不仅和实验环境的电磁干扰有关.初步估计是DMA传输触发有问题或ADC的触发部分有问题.
实验单次规则转换的DMA传输会在关传输完成中断时再次初始化adc和dma时出现丢数据现象.(这里的再次初始化ADC,不是复位ADC或ADC低功耗模式)
至于什么原因,我不是芯片设计者,也只能猜.
也许是片上总线的问题,也许是DMA的原因,甚至有可能是CortexM3内核本身的问题.但可以肯定不是软件问题.
当然软件上可以解决该问题
一种解决方法是adc复位,或进入低功耗模式再启动,同时dma复位.不过这样做就降低了性能,但的确有效.
还会有种无厘头的办法是,直接不用DMA.
循环采样时DMA连续运行,如果中断,特别是其他嵌套中断发生频繁时,就会出现数据错位.这在总线低负载的小测试程序中看不出来,但复杂系统中就会出现.
这种情况也许新版本的芯片有所改善,但我手中的STM103FZET6中一直出现这种现象.
此外,虽说stm32在高电磁干扰下cortex内核工作抗干扰性能不错,但部分外设会出现问题,如计数器和IIC.当然也有可能DMA在强电磁干扰下触发不正常导致ADC数据丢失.

Cortex内核现在还不成熟就推向了市场,需要一段时间来完善,问题肯定存在.
此帖出自stm32/stm8论坛

最新回复

                                 所以我需要了解你说的电磁干扰测试是什么样的干扰,干扰的强度是多少?这样我们可以有针对性地进行测试。   详情 回复 发表于 2009-7-13 08:51
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

谢谢你的中肯意见

你是否能详细说明你的“压力测试”具体细节,这样我们可以重现你说的问题,找到具体的原因并加以改进。


另外,你说的另一种情况:循环采样时DMA连续运行,如果中断,特别是其他嵌套中断发生频繁时,就会出现数据错位.这在总线低负载的小测试程序中看不出来,但复杂系统中就会出现

一个合理的解释是:DMA的原理是总线挪用,通常是在指令执行的某个阶段点暂停指令的执行,CPU让出总线给DMA设备;而发生中断时,因为要保存断点,导致DMA的响应周期延后,如果你的ADC采样速度过快,在嵌套中断发生频繁时,如果DMA的优先级设定不好,理论上确实可能造成DAM错误。

所以请尝试把ADC通道的DMA优先级提高,并适当把某些中断优先级降低。要知道嵌套中断和DMA都是要抢占总线资源的。
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

的确有可能是内部总线丢失数据

实际运行中有可能多通道的单次规则转换dma中断一直进不去,例如
采样4通道,单次规则转换,dma计数设为4,但可能丢失第一次转换,导致dma计数一直停在1.

按照常见思路,都是在定时器中断中启动dma来进行ad采样,但显然ADC触发DMA时有问题,因为此时如果将ADC设备复位或进断电模式再退出,DMA传输将正常.

一般都是在一轮adc转换时丢第一次数据,而且现象随机,这里中断频繁但还不至于阻塞总线.当然,我的设计中也使用了多个dma通道,adc的dma方式出问题较多,总线轻载时也出同样的问题.

现象给人的感觉是似乎ADC第一次转换完成后,DMA还没有进行传输时,发生中断,或其他事件(如调试器单步)等,就会丢失第一次转换的触发信号.第二次转换完成后,DMA可以获得触发.即使总线再繁忙,dma访问adc的间隔不均匀,也不应该丢失触发信号.总线数据可以丢失,表现为数据错乱,但触发信号不应该丢失.
以上分析结果是做了不少测试得到的,由多人检测,应该不存在太多低级错误.

希望香主和ST联系,个人感觉是ADC和DMA的触发部分有些问题,可能DMA和ADC只有触发信号,没有握手信号或有握手问题.当然不了解adc和Dma细节所以这里只能猜了.
不过DMA的触发问题在很多芯片的早期版本常见,有的是仲裁时丢失,有的是数据通路有问题.cortexM的总线设计比较新颖,但也有可能有很多问题,也许问题可能在这里.
此帖出自stm32/stm8论坛
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 

压力测试

我们这类的压力测试包含软件和硬件的,本来不能公布的,不过大概说说也无所谓
软件的就不说了.
硬件主要是芯片功能和设计功能的测试,很多芯片都有这样那样的问题,这事本来应该由芯片厂家做的.不过我们这里主要是验证自己的功能设计和硬件都正常.
采取的方法有一项是 功能模块单独测试,即对一个设备的功能单独测试,在整个软件写完后在加入单独监视代码.频繁中断,其他dma频繁传送数据,频繁开关中断,与其他功能模块同时使用等,此时看功能模块的数据是否正常.属于半白盒测试.
首先不加电磁干扰,电源波动,正常了逐步加入干扰条件,此时仍然监视设备,即使是1/1000的可忽略的硬件错误都要记录下来.
问题是测试里就数据手册的模糊表述就够让人折腾的了,还没到高低温,静电测试.
测试中不少设备都有问题,当然对我们来说,只关心我们的功能设计,毕竟我们不是ST的测试单位.数据手册中的很多表述很糟糕,很多东西的功能和其他芯片不同,但手册中没写.本来算法和可靠设计是主要任务,硬件和驱动是别人的活,结果硬件部分总出问题,任务就落在我们头上了.
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 

谢谢,能再说说电磁干扰测试是什么样的干扰,干扰的强度

                                 有没有量的概念?
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

6
 

压力测试的有些东西要到专业的实验室去

                                 这个内容我还是单独发给你站内信吧
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 

我也遇到过 并且和北京上海的工程师交流过

                                 我也遇到过,并且和北京上海的工程师交流过,但是后来编译器的版本提高了以后,没再出现类似的问题,以为是编译器的问题,希望大家仔细看看,并不一定是stm32造成的,或许你的软件没有问题。
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 

我们有你说的专业实验室和相应的设备

                                 所以我需要了解你说的电磁干扰测试是什么样的干扰,干扰的强度是多少?这样我们可以有针对性地进行测试。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表