SPI 总线通信不正常,接示波器就好了,真神奇啥原因呢
半路出家的新手,搞了个一主多从的SPI通信电路板,之前一版没有发现问题,这一版改了布线之后,部分的SPI从机通信不正常,校验和不对。从数据来看存在移位,估计是传输过程中丢了位。于是,接上原子哥的示波器,看看 CLK 的波形是不是哪不对。神奇的现象出现了,接上示波器,传输就正常了,试了很久都可以,松开探针就立马持续报错。
并且试了三种情况:
1. 不接示波器,手拿导线触碰 CLK 也正常了。
2.CLK 焊上飞线用的漆包线, 连着一卷漆包线,也正常了。 剪断漆包线,就不行。
3.CLK 飞线接到一个100K电阻,下拉到地, 也正常了。
对模电不懂,这会是啥原因呢,布线上下层存在锐角?
PCB上地线没接或接触不良 ... 时钟上下沿没弄反吧 本帖最后由 wye11083 于 2022-12-18 14:26 编辑
10mhz的spi,串扰很大的。我用6根电线拧一起,走2mhz就跪了。
板子clk没有分割,看不同有没有对clk全面包地,没有串电阻减少反射。试试在clk分支后面每路串个22?33?的小电阻看看,不行给其它信号也在分支处每路串个电阻(不用管主从,这里就是吸反射),因为反射信号可能造成假clk触发。你串个示波器相当于增加了10pf左右的电容,吸收了一部分反射(或者可能影响了反射系数)。
这种干扰其实是最难定位的,我遇到过很多次各种各样的。甚至在一套设备里面,因为极强的噪声干扰(emi做的太烂),i2c最后用了1k强上拉+10nf电容,降频到10khz同时使用push-pull驱动,才勉强能正常工作。 wye11083 发表于 2022-12-18 14:24
10mhz的spi,串扰很大的。我用6根电线拧一起,走2mhz就跪了。
板子clk没有分割,看不同有没有对clk全面包 ...
(引用自4楼)
感觉应该就是你说的反射导致的。
第一次遇到,涨见识了
调2.4G无线模块时也出现了类似问题,手摸或者示波器挂上去测量(我记得是测DATA引脚 而不是CLK引脚)时通讯就正常,拿开就不行。
这个问题暂时还没解决,但是后来把无线发送功率调低结果SPI通讯就好了,无线收发也都正常,只是降低功率牺牲了无线距离
打算研究一下这个bug,改板重新测试
我早前调试一款国产芯片时的偶然发现,使能CLK端口的内部上拉电阻或外挂上拉电阻就好了。楼主可以试下看看是否可行 Elex 发表于 2022-12-18 15:50
我早前调试一款国产芯片时的偶然发现,使能CLK端口的内部上拉电阻或外挂上拉电阻就好了。楼主可以试下看看 ...
(引用自7楼)
对,我本也打算这么干,但是芯片是GD32F103,我看GD手册上写着SPI的输入端口需要设置为浮空输入,另外有16个从,全部上拉的话, (40/16)K的上拉电阻,估计扛不住。
于是就打算飞线试试, 上拉没找到合适的地方,试了一下下拉电阻,问题解决了。 百度了一下楼上说的反射问题, 感觉能对上,估计就是这个问题了。
而且很神奇的是,下拉一个从机,附近的从机也正常了。远一点的不行, 间隔着几个从机下拉CLK,就都可以了。
zdg102 发表于 2022-12-18 16:24
对,我本也打算这么干,但是芯片是GD32F103,我看GD手册上写着SPI的输入端口需要设置为浮空输入,另外有1 ...
(引用自8楼)
芯片手册和例程都是端口不要上下拉的,但不知是bug还是怎么回事,有时实际需要上拉才好,不然一些容易数据出错。所以不必完全按手册上来,用软件设置端口上下拉是可以的话,不用外接电阻。从机可以不上下拉 片选时钟和数据都接上示波器,放一起看看吧,SPI时序模式是不是没配对 你并联一个几pF的电容也会好 是不是从机太多,SPI数据线上的电容不一致,导致上升下降沿不一致?你降低速率或者加缓冲器 zdg102 发表于 2022-12-18 15:03
感觉应该就是你说的反射导致的。
第一次遇到,涨见识了
(引用自5楼)
2Mhz 能反射个毛 检查下代码 电路的话检查下干扰什么的 按我经验,50mhz以下的单端信号,只要拉通了问题就不大,什么spi刷屏,sdio读取,nor flash通信,都不需要什么等长包地之内的。差分或者高速的不在此列 Xujuango 发表于 2022-12-19 08:03
是不是从机太多,SPI数据线上的电容不一致,导致上升下降沿不一致?你降低速率或者加缓冲器 ...
(引用自12楼)
降低速率试过,不行,只是一定程度上降低了概率 yelong98 发表于 2022-12-19 08:51
按我经验,50mhz以下的单端信号,只要拉通了问题就不大,什么spi刷屏,sdio读取,nor flash通信,都不需要 ...
(引用自14楼)
我本来也是这么想的, 也就 10.5M ,但确实想不到其他原因了。 本帖最后由 ackyee 于 2022-12-19 09:06 编辑
除了电路上调整,也可以试试 硬件SPI的 位偏移功能 挺好用
STM32和 ZYNQ好像都带这个功能,就是 控制第一个bit 时钟是高还是低的太久之前用过不是很清楚了,但是确实应该有用 ackyee 发表于 2022-12-19 09:04
除了电路上调整,也可以试试 硬件SPI的 位偏移功能 挺好用
STM32和 ZYNQ好像都带这个功能,就是 控制第 ...
(引用自17楼)
这我知道,应该解决不了随机出现数据错误。 zdg102 发表于 2022-12-19 09:11
这我知道,应该解决不了随机出现数据错误。
(引用自18楼)
这个还真的能解决, 我有两个相同的板子 一个 接了CS 一个没接CS 没接CS的强制拉地的
结果 一个 加偏移不工作,一个不加偏移不工作{:dizzy:} 再主机侧加上拉电阻。这样试试。 加示波器探头,等效于并10皮电容对地。 100k电阻并102或103电容接地 ackyee 发表于 2022-12-19 09:27
这个还真的能解决, 我有两个相同的板子 一个 接了CS 一个没接CS 没接CS的强制拉地的
(引用自19楼)
这是在胡闹吗? 本帖最后由 ackyee 于 2022-12-23 22:14 编辑
tuy0326 发表于 2022-12-23 18:19
这是在胡闹吗?
(引用自23楼)
不胡闹呀,我用的SPI 屏幕屏幕厂家推荐的demo设计就是CS接地的(中景园的屏幕,现在那款CS接地的屏幕还在卖 出货量很大)
只要 CLK信号不被干扰 就不会有任何问题,之前做EMC CLK被干扰了 导致所有数据都偏移了, 后来对地接了个电容加了强上拉, 任凭快速脉冲群怎么打都不会有任何问题
这个问题就是信号反射,在高速传输时大概率出现,温度变化时也会出现,解决办法是spi的clk和数据线上串一个10-100的电阻,对地加一个22-100p的电容。很早有产品遇到过,当时低温箱内,准备焊一根线出来测spi波形,打死都测不出来,去掉线立即复现。
页:
[1]