SPI总线端接注意事项


22

因此,在上一个问题中,我问过有关在短距离内使用SPI总线进行板对板通信的问题。建议我尝试使用终端电阻。我将电阻器放置在靠近目的地的位置(但不完全在那儿,距离为1厘米)并接地(因为这是一块没有终端电阻器占用空间的电路板,我不得不即兴创作。我无法将电阻器焊接到设备上,因为它是TQFP且引脚细腻。

通过一些基本测试,我发现一个1K电阻几乎不能减少过冲。470欧姆和180欧姆效果更好。我走的越低,效果越好。180欧姆时,过冲约为伏特或更低。现在,不幸的是,我无法承受更多的损失,因为电流超出了我的MCU可以承受的范围。我确实通过串联使用330 Ohm的电阻来解决该问题,当前版本的电路板。这使过冲达到3.7 V,上升时间为10或11 ns。但是我真的很想在下一个修订版中使用“适当的”解决方案。我的频率要求保持不变:2 MHz,但希望使用4 MHz。

因此,我觉得我应该在这里问:在董事会的下一个修订版中,我应该在线路上放置一些坚固的缓冲器吗?查找缓冲区并不是一个真正的问题,但是电流消耗将大大增加-我在SPI上有8个需要端接的设备,而每条设备始终有3条线路始终处于活动状态。例如,SCK适用于所有8个设备。每个设备都有一个100欧姆的终端电阻。因此,电流消耗为12 * 3.3 / 100 = 390 mA!

那么,这里最好的方法是什么?我应该使用肖特基二极管作为钳位器进行“有源端接”吗?

编辑:关于线路阻抗:如前所述,目的是连接4个外部板。所有的垫到垫的距离都相同(12英寸)。但是,也有与MCU在同一板上的设备-但这些设备不需要端接-长度约为1英寸(或更短),并且过冲很少(300或mV)。到达外部电路板的走线的长度和宽度大致相同。板上的第二层是不间断的接地层。


一种常见的方法是放置一个与线路阻抗匹配的串联电阻。尝试使用50ohm的串行终端。如果将走线和连接设计为某种固定阻抗,将会有所帮助。不过,请尝试使用较低的串行终端,然后看看您发现了什么。他建议接地端接32欧姆,实际上,您可以通过在电源轨上放置64欧姆,在接地轨上放置64欧姆,来降低功率,降低3dB。
Kortuk 2012年

@Kortuk不幸的是,一个32欧姆的电阻并没有显着降低过冲。但是,足迹也位于错误的位置(从来没有打算用作终结器),而不是从源头开始,因此可能不确定。关于线路阻抗,所有线路具有大致相同的长度和宽度。它们都在一个完整的地面上运行,该平面位于第二层。
萨德

1
串联端接是源头,如果将其置于负载处,则无济于事。尝试将50ohm直接串联在您的信号源上,以查看影响。
Kortuk 2012年

您可以将其视为stevenvh所描述的,如果您将其视为集总模型,则整条线路都充当电容器,而电阻则充当R,以实现低通。如果您查看传输线模型,那里将有一个匹配的电阻,这意味着您有一半的振幅波传播,然后当它到达另一端并反射到最大值时反射。
Kortuk 2012年

Answers:


32

谈论信号终止就像打开一罐蠕虫一样。这是一个巨大的主题,很难用几百个单词来概括。因此,我不会。我将在这个答案中遗漏大量内容。但是我也要给您一个大警告:有关在网络上端接电阻器的很多错误信息。实际上,我会说网上发现的大多数错误或误导的内容。有一天,我会写一些大的东西并将其发布到我的博客中,但今天不会。

首先要注意的是,用于终端的电阻值必须与走线阻抗有关。大多数情况下,电阻值与走线阻抗相同。如果您不知道走线阻抗是多少,则应该找出它。有许多在线阻抗计算器可用。Google搜索将带来更多信息。

大多数PCB走线的阻抗都在40到120欧姆之间,这就是为什么您发现1k终端电阻几乎没有作用而100欧姆电阻更好的原因。

终止的类型很多,但我们可以将它们大致分为两类:源终止和终止终止。源终结点在驱动程序上,终结点终结在远端。在每个类别中,有许多类型的终止。每种类型最适合不同的用途,没有一种类型可以满足所有需求。

您的终端实际上​​是一个不好的终端,它是一个远端接地的电阻。实际上,这是错误的。人们这样做,但这不是理想的。理想情况下,该电阻应连接到电源轨一半的另一电源轨。因此,如果I / O电压为3.3v,则该电阻将不会连接至GND,而将另一电源轨连接至3.3v(即1.65v)的一半。该电源轨的电压调节器必须特殊,因为它需要提供吸收电流,而大多数调节器仅提供电流。为此用途的稳压器将在数据表的第一页中提及有关终止的信息。

大多数终端的最大问题是它们消耗大量电流。这是有原因的,但我不会介绍。对于低电流使用,我们必须查看源端接。最简单,最常见的源极端接形式是驱动器输出端的简单串联电阻。该电阻的值与走线阻抗相同。

源终端的工作原理与终端终端不同,但最终效果是相同的。它通过控制信号反射来工作,而不是首先防止反射。因此,它仅在驱动器输出提供单个负载时才有效。如果存在多个负载,则应采取其他措施(例如使用端接或多个源端接电阻器)。 源端接的巨大好处是它不会像端接那样加载驱动程序。

我之前说过,用于源端接的串联电阻必须位于驱动器处,并且其电阻值必须与走线阻抗相同。这太过简单了。有一个重要的细节要知道。大多数驱动程序的输出都有一些阻力。该电阻通常在10-30欧姆范围内。输出电阻和电阻的总和必须等于走线阻抗。假设您的走线为50欧姆,而驱动器为20欧姆。在这种情况下,由于30 + 20 = 50,您的电阻器将为30欧姆。如果数据表中没有说明驱动器的输出阻抗/电阻是多少,则可以假定它为20欧姆-然后查看PCB上的信号并查看是否需要调整。

另一重要的事情是:当您在检偏镜上查看这些信号时,必须在接收机处进行探测。探测其他任何地方都可能会给您造成失真的波形,并让您认为情况比实际情况更糟。另外,请确保接地夹尽可能短。

结论:使用33到50欧姆的电阻切换到源终端,您应该没事。通常需要注意的事项。


大卫,非常感谢您提供详尽的答复。所有这些都是很合理的,但是我认为系统中还有另外一个复杂的问题-SPI线路从一块板到另一块板。因此,估计线路阻抗可能很困难-信号在主板上传输大约3英寸,通过6英寸带状电缆,然后再次沿3英寸走线传播,直到到达目的地。带状电缆的电线是交替的接地(例如SCK,GND,MOSI,GND等),您的30-20欧姆建议是否仍然有效?
Saad 2012年

@Saad在这种情况下(我已经做了很多),我要做的是在驱动器上使用单个电阻,并在原型构建后调整其值。这是一个折衷方案,但确实可行。我现在实际上有几个系统可以在1英尺的电缆上运行SPI,每个PCB上都有3-6英寸的走线。其中一些以30 MHz运行!是的,从33或47欧姆开始,然后从那里进行调整。

3
已经+1,但是显示如何连接源端接(即串联,而不是从线到地)的图表将非常有帮助。
Photon 2012年

16

由于距离很近,我认为终端电阻不是一个好主意。如您所见,它们必须非常低才能完成这项工作,然后,如果您还以相同的阻抗驱动线路,则线路会吸收大量电流,并且电压会衰减2倍。

您的时钟频率并不是很高,因此即使您需要支持4 MHz比特率的频率也不会造成麻烦。问题是您有快速的边沿驱动线路,这些线路的谐波在100s MHz内,这确实会造成麻烦。在所需的频率下,您将拥有集总系统,而不是传输线。这使事情变得容易得多。

因此,解决方案是衰减您真正不需要但会引起麻烦的高频。可以在驱动任何线路之后立即使用简单的RC低通滤波器来完成此操作。这部分是330电阻现在正在做的事情。它们形成具有线路寄生电容的低通滤波器。显然,这还不够和/或不够可预测。可以通过每条线路上的一些有意电容来解决此问题。

您想以4 MHz运行总线,这意味着它需要支持的最快信号是4 MHz方波。这意味着每个电平的长度为125 ns。假设我们希望其至少为4个时间常数,这意味着98%的建立时间。这意味着我们要允许的最大时间常数为31 ns。31ns /330Ω= 94 pF。这就是您需要获得31 ns时间常数的330串联电阻的总负载。总是会有一些寄生电容,您无法预测,所以我看看47 pF的情况如何。这样就为10-20 pF的隐藏电容留出了空间,同时又不超过我们的最大允许时间常数。

串联电阻应尽可能靠近驱动总线的所有引脚。假设驱动一个总线时,总线上的所有其他引脚将为CMOS输入。对于仅由单个引脚驱动的线路(例如仅由主机驱动的时钟线路),应将47 pF尽可能靠近电阻放置。对于可以在不同时间由不同引脚驱动的线路(例如MISO),请将47 pF放置在所有驱动器中间的某个位置。不管有多少驱动器,每条线仅获得一个47 pF电容器,但是每个驱动器只有一个电阻。

上面的计算旨在作为一个很好的指导。有些参数是未知的,因此需要预先考虑。从串联的330Ω和接地的47 pF开始,但不要害怕根据实际观察到的结果来改变。


2

在没有任何终止的情况下,当信号从低阻抗源发送到高阻抗接收器时,该信号将反复来回反弹;每次往返时,信号相位将翻转180度。

如果不希望信号到达目的地时会反射信号,则可以使用端接。这将导致信号在目的地被干净地吸收而不被反射,但是许多常见的实现方式将导致信号源看到很大的DC负载。

在许多情况下,如果在信号源处插入一个串联电阻,则可能会获得实际上有用的结果。如果在线路的远端没有接收器,则信号到达那里时将被反射,但是任何此类反射将被源吸收而不是被重新反射。还要注意,电源端接不会在驱动线路的设备上施加直流负载。

在没有终端的情况下,如果一条线路由低阻抗驱动并以高阻抗接收,则接收设备可能会看到高于驱动电压的电压(理论上,如果源驱动阻抗为零并且接收阻抗是无限的)。如果信号源或接收器正确端接,则接收到的电压将几乎等于驱动电压(如果零阻抗源正在驱动适当阻抗的接收器,或者适当阻抗源正在驱动无限阻抗接收器,接收的电压将等于驱动电压)。如果两者均正确端接,则接收电压将为驱动电压的一半。

这里的仿真演示了这一点。它包括一个脉冲发生器,它每秒产生大约49次脉冲链,两个串联的5ms延迟线(往返时间为1/50秒)和两端的可切换终端电阻。

该电路包括三个SPDT开关。单击一个以更改其状态。下部的两个开关控制源终端和目标终端。对于那些,“向上”表示良好的终止,而“向下”表示不良。上部开关控制线路是由自动脉冲发生器驱动还是由手动逻辑输入驱动。要手动沿线路发送脉冲,请将上方的开关“向下”切换,然后为其旁边的“ L”计时。

到达目的地的信号将是清洁的,如果任一源或目的地被正确终止。如果两者均正确端接,则接收信号电压将为驱动电压的一半。如果其中一个正确端接,但另一个未正确端接,则接收到的电压将约为驱动电压的91%(“错误”的电阻器“错”了十倍,因此无法吸收大约(10/11)的能量)。如果两者均未终止,则接收到的电压最初约为驱动电压的1.656倍,但每20毫秒就会出现怪异的反射。


1

尝试使用AC端接(例如,将470 pF电容器与110 Ohm电阻串联),然后将此串联组合从SPI Clock目标的输出端接地。端接会在边沿时间长度内消耗大约30 mA的电流,这很容易做到,但否则为零电流。对于双向数据线,它变得有些棘手。我在SPI数据线的主端和从端都放置了一个470 pF,220 Ohm的AC终端,并且可以正常工作,即可以接受的过冲和下冲。

我欢迎对此发表评论。


0

由于先前的帖子打在了头上,所以不要太详细。归结为SPI是不平衡线路。即使您的时钟频率较低,也需要注意快速的ns时钟沿。以我为例,在主机侧发现一个与SPI CLK线串联的470欧姆电阻。从莱迪思移除电阻并实施针对不平衡线路的推荐解决方案和上面发布的建议(我只能从从站实施一半的解决方案,并相应地调整滤波器的盖子)我能够将SPI带状通信电缆的长度从10cm至160cm,无通讯错误:

改善串行接口的抗噪声能力:莱迪思半导体白皮书(2014年7月)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.