zdg102 发表于 2022-12-18 14:01:47

SPI 总线通信不正常,接示波器就好了,真神奇啥原因呢

半路出家的新手,搞了个一主多从的SPI通信电路板,之前一版没有发现问题,这一版改了布线之后,部分的SPI从机通信不正常,校验和不对。从数据来看存在移位,估计是传输过程中丢了位。
于是,接上原子哥的示波器,看看 CLK 的波形是不是哪不对。神奇的现象出现了,接上示波器,传输就正常了,试了很久都可以,松开探针就立马持续报错。
并且试了三种情况:

1. 不接示波器,手拿导线触碰 CLK 也正常了。
2.CLK 焊上飞线用的漆包线, 连着一卷漆包线,也正常了。 剪断漆包线,就不行。
3.CLK 飞线接到一个100K电阻,下拉到地, 也正常了。

对模电不懂,这会是啥原因呢,布线上下层存在锐角?





chunjiu 发表于 2022-12-18 14:04:45

PCB上地线没接或接触不良 ...

cne53102 发表于 2022-12-18 14:10:32

时钟上下沿没弄反吧

wye11083 发表于 2022-12-18 14:24:13

本帖最后由 wye11083 于 2022-12-18 14:26 编辑

10mhz的spi,串扰很大的。我用6根电线拧一起,走2mhz就跪了。

板子clk没有分割,看不同有没有对clk全面包地,没有串电阻减少反射。试试在clk分支后面每路串个22?33?的小电阻看看,不行给其它信号也在分支处每路串个电阻(不用管主从,这里就是吸反射),因为反射信号可能造成假clk触发。你串个示波器相当于增加了10pf左右的电容,吸收了一部分反射(或者可能影响了反射系数)。

这种干扰其实是最难定位的,我遇到过很多次各种各样的。甚至在一套设备里面,因为极强的噪声干扰(emi做的太烂),i2c最后用了1k强上拉+10nf电容,降频到10khz同时使用push-pull驱动,才勉强能正常工作。

zdg102 发表于 2022-12-18 15:03:38

wye11083 发表于 2022-12-18 14:24
10mhz的spi,串扰很大的。我用6根电线拧一起,走2mhz就跪了。

板子clk没有分割,看不同有没有对clk全面包 ...
(引用自4楼)

感觉应该就是你说的反射导致的。
第一次遇到,涨见识了

dong889 发表于 2022-12-18 15:38:01

调2.4G无线模块时也出现了类似问题,手摸或者示波器挂上去测量(我记得是测DATA引脚 而不是CLK引脚)时通讯就正常,拿开就不行。
这个问题暂时还没解决,但是后来把无线发送功率调低结果SPI通讯就好了,无线收发也都正常,只是降低功率牺牲了无线距离
打算研究一下这个bug,改板重新测试

Elex 发表于 2022-12-18 15:50:43

我早前调试一款国产芯片时的偶然发现,使能CLK端口的内部上拉电阻或外挂上拉电阻就好了。楼主可以试下看看是否可行

zdg102 发表于 2022-12-18 16:24:05

Elex 发表于 2022-12-18 15:50
我早前调试一款国产芯片时的偶然发现,使能CLK端口的内部上拉电阻或外挂上拉电阻就好了。楼主可以试下看看 ...
(引用自7楼)

对,我本也打算这么干,但是芯片是GD32F103,我看GD手册上写着SPI的输入端口需要设置为浮空输入,另外有16个从,全部上拉的话, (40/16)K的上拉电阻,估计扛不住。

于是就打算飞线试试, 上拉没找到合适的地方,试了一下下拉电阻,问题解决了。   百度了一下楼上说的反射问题, 感觉能对上,估计就是这个问题了。

而且很神奇的是,下拉一个从机,附近的从机也正常了。远一点的不行, 间隔着几个从机下拉CLK,就都可以了。


Elex 发表于 2022-12-18 16:29:18

zdg102 发表于 2022-12-18 16:24
对,我本也打算这么干,但是芯片是GD32F103,我看GD手册上写着SPI的输入端口需要设置为浮空输入,另外有1 ...
(引用自8楼)

芯片手册和例程都是端口不要上下拉的,但不知是bug还是怎么回事,有时实际需要上拉才好,不然一些容易数据出错。所以不必完全按手册上来,用软件设置端口上下拉是可以的话,不用外接电阻。从机可以不上下拉

yerrmin 发表于 2022-12-18 22:02:44

片选时钟和数据都接上示波器,放一起看看吧,SPI时序模式是不是没配对

hugohehuan 发表于 2022-12-19 01:08:37

你并联一个几pF的电容也会好

Xujuango 发表于 2022-12-19 08:03:03

是不是从机太多,SPI数据线上的电容不一致,导致上升下降沿不一致?你降低速率或者加缓冲器

三年模拟 发表于 2022-12-19 08:46:54

zdg102 发表于 2022-12-18 15:03
感觉应该就是你说的反射导致的。
第一次遇到,涨见识了
(引用自5楼)

2Mhz 能反射个毛 检查下代码 电路的话检查下干扰什么的

yelong98 发表于 2022-12-19 08:51:16

按我经验,50mhz以下的单端信号,只要拉通了问题就不大,什么spi刷屏,sdio读取,nor flash通信,都不需要什么等长包地之内的。差分或者高速的不在此列

zdg102 发表于 2022-12-19 08:52:06

Xujuango 发表于 2022-12-19 08:03
是不是从机太多,SPI数据线上的电容不一致,导致上升下降沿不一致?你降低速率或者加缓冲器 ...
(引用自12楼)

降低速率试过,不行,只是一定程度上降低了概率

zdg102 发表于 2022-12-19 08:53:46

yelong98 发表于 2022-12-19 08:51
按我经验,50mhz以下的单端信号,只要拉通了问题就不大,什么spi刷屏,sdio读取,nor flash通信,都不需要 ...
(引用自14楼)

我本来也是这么想的, 也就 10.5M ,但确实想不到其他原因了。

ackyee 发表于 2022-12-19 09:04:56

本帖最后由 ackyee 于 2022-12-19 09:06 编辑

除了电路上调整,也可以试试 硬件SPI的 位偏移功能   挺好用

STM32和 ZYNQ好像都带这个功能,就是 控制第一个bit 时钟是高还是低的太久之前用过不是很清楚了,但是确实应该有用

zdg102 发表于 2022-12-19 09:11:34

ackyee 发表于 2022-12-19 09:04
除了电路上调整,也可以试试 硬件SPI的 位偏移功能   挺好用

STM32和 ZYNQ好像都带这个功能,就是 控制第 ...
(引用自17楼)

这我知道,应该解决不了随机出现数据错误。

ackyee 发表于 2022-12-19 09:27:17

zdg102 发表于 2022-12-19 09:11
这我知道,应该解决不了随机出现数据错误。
(引用自18楼)

这个还真的能解决,   我有两个相同的板子 一个 接了CS 一个没接CS 没接CS的强制拉地的


结果 一个 加偏移不工作,一个不加偏移不工作{:dizzy:}

jiki911 发表于 2022-12-23 17:41:45

再主机侧加上拉电阻。这样试试。

david1234 发表于 2022-12-23 18:11:25

加示波器探头,等效于并10皮电容对地。

minomi12345678 发表于 2022-12-23 18:18:15

100k电阻并102或103电容接地

tuy0326 发表于 2022-12-23 18:19:47

ackyee 发表于 2022-12-19 09:27
这个还真的能解决,   我有两个相同的板子 一个 接了CS 一个没接CS 没接CS的强制拉地的


(引用自19楼)

这是在胡闹吗?

ackyee 发表于 2022-12-23 22:11:59

本帖最后由 ackyee 于 2022-12-23 22:14 编辑

tuy0326 发表于 2022-12-23 18:19
这是在胡闹吗?
(引用自23楼)

不胡闹呀,我用的SPI 屏幕屏幕厂家推荐的demo设计就是CS接地的(中景园的屏幕,现在那款CS接地的屏幕还在卖 出货量很大)

只要 CLK信号不被干扰 就不会有任何问题,之前做EMC CLK被干扰了 导致所有数据都偏移了, 后来对地接了个电容加了强上拉, 任凭快速脉冲群怎么打都不会有任何问题

cn.pheral 发表于 2022-12-27 23:38:29

这个问题就是信号反射,在高速传输时大概率出现,温度变化时也会出现,解决办法是spi的clk和数据线上串一个10-100的电阻,对地加一个22-100p的电容。很早有产品遇到过,当时低温箱内,准备焊一根线出来测spi波形,打死都测不出来,去掉线立即复现。
页: [1]
查看完整版本: SPI 总线通信不正常,接示波器就好了,真神奇啥原因呢