搜索
bottom↓
回复: 21

请教一下大家,关于SPI干扰的问题?如何消除干扰?

[复制链接]

出0入0汤圆

发表于 2020-7-17 16:22:48 | 显示全部楼层 |阅读模式
最近小弟在做一个项目,使用的是NRF52832+STM32F103ZE的芯片,通信方式是两个芯片采用SPI方式连接。52832是主模式,STM32从模式,并且启用DMA。

52832会持续给STM32发送数据。在运行一两天后,会出现STM32接收到数据乱码的现象。断电重启后,大部分会恢复稳定运行。有极少数需要断电更长时间,再重启才会恢复正常。

软件代码方面做了很多改进,效果不是很好。

现在怀疑是硬件方面的问题。SPI再传输过程中被干扰,使CLK信号乱了。

想请教一下大家有什么好的解决方案,可以排查下。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入4汤圆

发表于 2020-7-17 16:43:46 | 显示全部楼层
不要长时间EN使能

出0入4汤圆

发表于 2020-7-17 17:06:34 | 显示全部楼层
没有帧结构吗?  包头, 长度, 校验....都没有?  

出235入8汤圆

发表于 2020-7-17 17:24:26 | 显示全部楼层
可以实际量下SPI的信号质量。特别是有问题时与无问题时的信号。
或者,把SPI的时钟速率降下来,降到原来的1/3.看下是否改善。
我觉得更像是代码有问题,硬件信号出问题,不会一直有问题

出100入95汤圆

发表于 2020-7-17 17:36:32 来自手机 | 显示全部楼层
z31com 发表于 2020-7-17 17:24
可以实际量下SPI的信号质量。特别是有问题时与无问题时的信号。
或者,把SPI的时钟速率降下来,降到原来的1 ...

硬件有问题不会是前面好,后面坏。硬件问题是随时都有可能有问题。这个更像是软件问题。

出0入0汤圆

发表于 2020-7-17 17:54:25 | 显示全部楼层
我觉得吧,如果是干扰的话,是随机出问题,而不是运行了一段时间后再出现乱码.
而且SPI的时钟也不算是很高频,被干扰的可能性较低
相对来说我怀疑的是SLAVE端的STM芯片的晶振的精度漂移了,导致时钟同步异常.
我建议你用示波器一直抓SPI信号做串行信号解析,然后一直跑到你说的乱码出现,然后观察spi波形是否完整,串行解析结果是否正确,
这样可是适当收束问题范围.

出0入442汤圆

发表于 2020-7-17 19:07:32 来自手机 | 显示全部楼层
Divingbear 发表于 2020-7-17 17:54
我觉得吧,如果是干扰的话,是随机出问题,而不是运行了一段时间后再出现乱码.
而且SPI的时钟也不算是很高频, ...

兄弟,spi是源同步的,带时钟pin。。

lz这个看上去像是内存没管理好,把栈或堆写坏了,表象是随机的,实际是写乱了。运行时间长了又用到动态内存管理在stm32这货上容易出现。

出0入0汤圆

发表于 2020-7-17 19:14:59 | 显示全部楼层
有一个帧错误中断,如果出现就重新初始化SPI

出15入178汤圆

发表于 2020-7-18 00:19:15 | 显示全部楼层
目前也用到了主从SPI做波形采样,国产M0,帧同步是有必要的,即使偶然干扰消除能恢复就行。
猜测楼主不是这个问题,在办公室持续运行正常吗?

出0入0汤圆

发表于 2020-7-18 00:59:15 来自手机 | 显示全部楼层
不使用dma应该就好了

出0入0汤圆

发表于 2020-7-18 08:25:34 | 显示全部楼层
SPI如果出错了,那你复位SPI也没用的,STM32的SPI有个大问题,应该CS管脚复位后一定时间,就初始化SPI的接收寄存器,但是STM32的不是如此……

出0入0汤圆

 楼主| 发表于 2020-7-20 11:24:07 | 显示全部楼层
wajlh 发表于 2020-7-17 16:43
不要长时间EN使能

指的是SPI的cs引脚的,这个是由NRF52832控制的,每次传输都会拉低,其余时间为高电平

出0入0汤圆

 楼主| 发表于 2020-7-20 11:26:49 | 显示全部楼层
z31com 发表于 2020-7-17 17:24
可以实际量下SPI的信号质量。特别是有问题时与无问题时的信号。
或者,把SPI的时钟速率降下来,降到原来的1 ...

怎么测量SPI的信号质量呢?
周末排查了有问题与无问题的SPI信号。无区别。

软件方面,用的是RT-Thread操作系统,采用专门给这个SPI分配了内存池,写飞的概率不大。

出0入0汤圆

 楼主| 发表于 2020-7-20 11:30:03 | 显示全部楼层
Divingbear 发表于 2020-7-17 17:54
我觉得吧,如果是干扰的话,是随机出问题,而不是运行了一段时间后再出现乱码.
而且SPI的时钟也不算是很高频, ...

也有可能是晶振的问题,因为体积的原因,现在采用的是8MHz的贴片晶振,负载电容为18pF,晶振的外交电容C1=C2=30pF。

用逻辑分析仪抓取信号,波形解码无变化。

出0入0汤圆

 楼主| 发表于 2020-7-20 11:31:42 | 显示全部楼层
wye11083 发表于 2020-7-17 19:07
兄弟,spi是源同步的,带时钟pin。。

lz这个看上去像是内存没管理好,把栈或堆写坏了,表象是随机的,实 ...

现在软件上用的是操作系统,给这货专门分配了内存池,如果写飞的话,任何数据应该都发不出了吧。

出0入8汤圆

发表于 2020-7-20 19:01:44 | 显示全部楼层
以前我做的一个项目
也是有这种问题
之前做了很多版,都好的很
直到有个批次的很多都有这个问题
查来查去,发现是时钟速度过快
降低时钟就OK了

出5入10汤圆

发表于 2020-7-20 20:06:02 | 显示全部楼层
楼主SPI 时钟频率是多少呢?

出0入8汤圆

发表于 2020-7-21 00:32:35 来自手机 | 显示全部楼层
降低时钟频率试试

出0入0汤圆

发表于 2020-7-21 08:40:50 来自手机 | 显示全部楼层
遇到同样问题

出0入0汤圆

发表于 2020-7-21 10:48:08 | 显示全部楼层
不要用DMA,不要用DMA,不要用DMA......

血的教训!!!!!!!!!!

STM32的SPI用DMA接收,如果时钟CLK受到干扰,后面的DMA接收会一直出错,只有重新初始化整个SPI模板才能正常。所以,如果一定要用DMA接收,那么就要加帧校验模式,在校验出错的时候重新初始化从机SPI模块,然后通知主SPI设备重新发送一遍。

出0入0汤圆

发表于 2020-7-21 12:12:20 | 显示全部楼层
Divingbear 发表于 2020-7-17 17:54
我觉得吧,如果是干扰的话,是随机出问题,而不是运行了一段时间后再出现乱码.
而且SPI的时钟也不算是很高频, ...

STM32是SCK引脚同步时钟的,不存在时钟不同步的问题。

出0入0汤圆

发表于 2020-7-21 12:15:09 | 显示全部楼层
STM32接收的数据从串口打印出来,看出错的规律再分析
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 20:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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