ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SPI硬件设计全解析:从信号完整性到PCB布局实战指南

SPI硬件设计全解析:从信号完整性到PCB布局实战指南 1. 从能跑就行到上量就挂SPI硬件设计最容易被低估的环节说起SPI通信绝大多数工程师的第一反应是很简单——四根线或者加上片选五根线主机从机一对多时序一抓数据就出来了。这种轻视我太熟悉了因为我自己早年就是这么栽跟头的。当时做了一个基于MCU的数据采集板SPI挂了一个外部ADC和一块Flash。实验室里用杜邦线连开发板逻辑分析仪一抓时序干干净净读写全对。结果做到第二版PCB上主频一提到24MHzFlash读写就开始偶发出错。排查了一天最后用示波器量波形才发现时钟线的上升沿严重过冲数据线在时钟采样点附近还在震荡片选信号的毛刺直接把从机搞进了错误状态。这个项目让我彻底明白了一件事SPI的通信速率可能不高但它的硬件设计难度一点不比高速接口低。很多人误以为SPI慢所以随便连但实际上SPI是同步时钟接口它的问题从来不是跑不快而是边沿不干净、时序窗口不够用。尤其在MCU、FPGA、传感器、存储芯片混合布局的板子上SPI的信号完整性问题是实打实的只是不容易一上来就暴露。这篇文章我就以SPI通信为主线把从信号完整性分析到PCB布局的完整设计思路梳理一遍。内容包括SPI时序模型怎么理解、反射和串扰怎么算、线长和走线阻抗怎么控制、终端匹配要不要加、地平面怎么处理、隔离和跨分割要注意什么、多层板和双面板分别怎么布局以及我自己实测中踩过的几个典型坑。适合正在做MCU外设板、传感器采集板、显示驱动板或者任何用到SPI总线且开始关注稳定性的硬件工程师参考。先说清楚一个核心观点SPI的硬件设计不是把线连上就结束而是要让每一根信号线的边沿行为都在接收端允许的时序窗口内。搞定这一点你的SPI设计就成功了大半。2. 先吃透时序模型为什么SPI对硬件设计那么敏感2.1 SPI的四种工作模式不是软件配置那么简单SPI通信有四种模式由时钟极性CPOL和时钟相位CPHA组合决定。很多工程师对模式的理解停留在配置寄存器时选对参数这个层面但从硬件设计角度看模式直接决定了边沿关系的紧张程度。模式0CPOL0CPHA0空闲时钟为低数据在上升沿采样下降沿切换。模式1CPOL0CPHA1空闲时钟为低数据在下降沿采样上升沿切换。模式2CPOL1CPHA0空闲时钟为高数据在下降沿采样上升沿切换。模式3CPOL1CPHA1空闲时钟为高数据在上升沿采样下降沿切换。绝大多数器件默认支持模式0但传感器、Flash、显示屏驱动芯片里什么模式都有。硬件设计必须确认从机在哪个边沿采样数据、在哪个边沿输出数据然后保证主机和从机的边沿关系在整条链路延迟叠加之后依然满足建立时间和保持时间要求。这里有一个常见的认知误区很多人觉得主从模式配置一样就行。实际上从机的数据输出是在某个边沿之后的它经过从机内部延迟、PCB走线延迟最后到达主机时主机的采样边沿能不能等到这个数据完全取决于硬件时序预算。如果PCB走线太长或负载太重数据到的太晚哪怕软件配置完全正确照样读回错误数据。2.2 建立时间和保持时间才是SPI设计的灵魂把SPI时序拆到底其实就是两个参数建立时间t_SU和保持时间t_H。主机在采样边沿到来之前数据线上的电平必须已经稳定至少t_SU采样边沿之后数据线上的电平还必须保持至少t_H。只要这两条不满足采样结果就是不确定的。从硬件设计角度影响这两个时间窗口的因素包括PCB走线延迟信号在FR-4板材上的传播速度大约是6英寸/纳秒约15cm/ns走线每长1cm就引入约0.067ns的延迟。听起来不多但SPI时钟周期在24MHz下也就41.7ns留给建立时间的预算通常只有几纳秒。驱动器上升/下降时间MCU的GPIO推挽输出上升时间通常在2~10ns之间负载电容越大边沿越缓。边沿太缓会缩小有效数据窗口。接收端输入阈值偏移不同器件的VIH/VIL阈值不同边沿越缓越过阈值区的时间越长不确定性越大。串扰和反射引起的振铃振铃会叠加在信号上可能导致接收端在采样时刻看到错误的电平。我在实际项目中做一个粗略的时序预算时一般会这样算假设SPI时钟为24MHz周期41.7ns主机数据输出延迟t_V为5ns走线延迟为1ns从机建立时间要求为5ns。那么留给信号的稳定裕量就是 41.7 - 5 - 1 - 5 30.7ns看起来绰绰有余。但如果走线长度达到30cm走线延迟变成2ns再加上阻抗不匹配导致的振铃持续3~4个周期情况立刻不一样。这也是为什么SPI在短距离、低速时怎么连都行但一旦速率上到几十MHz或者走线跨板、经过连接器问题就会集中爆发。2.3 用眼图思维看SPI信号虽然SPI很少像PCIe那样专门做眼图测试但眼图思维对SPI调试非常有用。你可以把SCLK的每个周期想象成一个眼睛数据信号只有在眼睛张得足够大的时候跳变才是安全的。眼睛的宽度由建立时间和保持时间决定眼睛的高度由信号幅度和噪声容限决定。用示波器看SPI信号时我建议重点观察三件事SCLK的上升沿是否单调如果上升沿出现台阶或回勾说明阻抗不连续或驱动能力不足。数据线在SCLK采样点附近是否还在抖动如果在采样边沿附近还能看到明显的振铃说明时序裕量已经被压缩得很危险了。CS片选信号的毛刺片选信号如果有毛刺可能导致从机被意外选中或取消选中产生完全无法理解的通信故障。设备不齐也不用慌普通示波器100MHz以上带宽配合合理的触发设置基本能覆盖SPI的信号完整性观察需求。3. 信号完整性三板斧反射、串扰、地弹SPI一个都躲不掉3.1 反射SPI走线超过临界长度就得当传输线处理很多人觉得反射是高速信号才需要考虑的事SPI这么慢走线随便拉。这个想法需要修正一下。判断走线要不要按传输线处理看的是走线长度和信号上升沿对应的空间长度之间的关系。工程上有一个经验公式如果走线长度超过信号上升沿对应空间长度的1/6就应该考虑传输线效应。假设SPI时钟的上升时间为3ns信号在PCB上的传播速度约为1.5×10^8 m/sFR-4板材那么上升沿对应的空间长度 3ns × 0.15m/ns 0.45m。1/6 × 0.45m 7.5cm。也就是说只要SPI走线超过7.5cm反射的影响就不能完全忽略。这还只是按3ns上升沿算的。如果MCU的IO驱动能力很强上升沿能做到1ns临界长度就压缩到2.5cm。很多板子上SPI走线随随便便就超过这个长度了。反射的根源是阻抗不匹配。信号在传播过程中每遇到一个阻抗变化点走线宽度变化、过孔、连接器、T型分叉都会产生反射。反射波回到驱动端再次反射来回震荡就形成了振铃。处理SPI反射问题的优先级我建议这样排缩短走线让走线尽量短小于临界长度自然万事大吉。控制走线阻抗至少保证走线阻抗在一个合理范围比如50Ω±10%减少阻抗突变。必要时加终端匹配在接收端加一个对地电阻并联匹配或者串联电阻源端匹配。3.2 终端匹配别一上来就加先搞清楚反射类型网上很多文章一谈到信号完整性就说串电阻、并电阻但到底什么时候加、加多少很少有人讲清楚。我的经验是分情况处理源端串联匹配在与驱动器输出端串联一个电阻典型值22Ω~47Ω电阻阻值加上驱动器本身的输出阻抗约等于走线特征阻抗。它吸收的是从负载端反射回来的能量防止驱动端二次反射。接收端并联匹配在接收端对地或对电源并联一个电阻阻值等于走线特征阻抗。它直接吸收到达接收端的能量从源头消除反射。对于SPI这种低速接口我一般优先用源端串联匹配原因有两个并联匹配会引入额外的直流功耗SPI信号是周期翻转的功耗浪费比较明显。源端串联匹配不增加负载对信号幅度的影响更可控。具体阻值怎么选用示波器实测最靠谱。先把不匹配的波形抓下来看振铃的幅度和频率然后从小到大换电阻。以我的经验SPI信号源端串22Ω~33Ω通常就能把振铃压到可接受范围。不过要注意串联电阻也会和接收端输入电容形成一个低通滤波器稍微增加边沿时间。速率很高的SPI50MHz以上需要权衡。还有一个实用技巧如果SPI从机是裸露的芯片且驱动能力很弱可以考虑只在SCLK上加匹配数据线和CS先不加。因为SCLK是连续翻转的信号反射问题最严重而数据线和CS通常有较长的稳定时间对振铃的容忍度高一些。3.3 串扰SPI多条线并行走的隐患SPI至少四根线SCLK、MOSI、MISO、CS在PCB上经常平行走线。线间距不够的话串扰问题就会浮现。串扰的本质是电磁耦合。一条线上的信号跳变会通过互容和互感耦合到相邻线上。SPI中最典型的串扰场景是SCLK的快速跳变耦合到MISO或CS上干扰采样。尤其在MISO是输入线的情况下收到的数据可能被叠加噪声。串扰的大小主要取决于三个因素线间距间距越近耦合越强。工程经验是1倍线宽间距1W时耦合明显3倍线宽间距3W时耦合可忽略。我一般要求SPI信号线的间距不小于2倍线宽最好3倍。平行走线长度平行越长耦合越多。3cm以上平行就要注意了。参考平面有无完整的地平面直接影响回流路径的面积进而影响串扰。处理串扰的优先级也很明确先拉间距再包地最后才是屏蔽。拉间距是零成本、零风险的方案优先做。如果板面积实在紧张可以把SCLK和它的回流地之间的回路面积减小——也就是让SCLK的地回流路径尽量短、尽量宽。包地信号线两侧加地线是次选方案但要注意包地线本身不能成为寄生天线的载体。3.4 地弹和回流路径SPI设计里最隐蔽的坑地弹是指在数字开关过程中芯片内部或PCB上的地电位发生瞬时波动。SPI对地弹非常敏感因为接收端判断信号电平是相对于自己的地参考的。如果源端和接收端的地电位在采样瞬间不一样就可能误判。地弹的典型来源同时翻转的IO太多MCU有多个GPIO同时翻转时芯片内部地引脚上的电流突变会产生压降导致输出信号的地参考偏移。地平面不完整地平面被分割比如为了模拟数字隔离回流电流被迫绕路形成回路电感。过孔太少芯片的地引脚到地平面的过孔阻抗过大开关电流产生压降。SPI设计中最常见的地弹场景就是传感器或ADC的地和MCU的地之间存在较大的电位差。很多人为了隔离干扰把传感器模块单独接地结果SPI通信反而丢包。这就是典型的回流路径被切断。我的建议是同一条SPI总线上的所有器件必须共享同一个完整的地参考。如果需要隔离应该在SPI信号链路上加隔离器件数字隔离器而不是在PCB上割地。这个原则在后面的布局部分还会细讲。4. PCB布局实战从层叠规划到布线细节4.1 层叠设计的取舍不是层数越多越好SPI信号的PCB层叠设计核心任务是给信号提供连续的参考平面。单面板和双面板因为缺少完整的地平面SPI设计的难度会显著增加四层板及以上则容易得多。双面板2层SPI布局的关键策略顶层走SPI信号底层尽量完整铺地不切割。信号线下方必须有地保证回流路径连续。如果信号线需要换层在换层过孔旁边放一个地过孔确保回流路径无缝衔接。双面板无法做到严格的阻抗控制但可以通过估算走线宽度和介质厚度来大致匹配50Ω。四层板4层SPI布局的关键策略常见层叠是信号-地-电源-信号。SPI信号走在顶层参考平面是第二层的地或者SPI信号走底层参考平面是第三层的电源前提是电源平面足够完整且噪声可控。我倾向于让SPI参考地平面因为地比电源更干净。如果板子上同时有模拟电路和数字电路四层板的信号-地-电源-信号结构对SPI来说也是友好的SPI信号参考内层完整地平面模拟信号参考另一侧的地。关键是跨分割的问题——SPI信号线绝对不能跨越地平面的分割缝隙。六层板及以上SPI信号的层叠选择更灵活但核心原则不变信号紧邻地平面且不跨分割。4.2 布局顺序先把SPI域的地基打牢PCB布局时我习惯先把SPI相关的器件在域的层面进行规划识别SPI总线上的所有器件MCU主机、Flash、ADC、传感器、显示驱动等。把它们的物理位置集中在一个区域内避免SPI信号横穿整个板子。优先布置从机器件从机器件的去耦电容优先摆放靠近电源引脚。SPI从机的去耦不好会直接导致信号眼图变差。确定SPI信号的走线走廊在MCU和从机之间预留一个相对干净的走线通道通道内尽量避免其他高速信号平行穿越。再布局其他功能电路电源、模拟信号、非SPI的数字信号尽量绕行不要和SPI通道交叉。很多布局问题的根源在于器件摆放时没考虑SPI信号的回流路径。回流电流总是走阻抗最小的路径也就是紧贴信号线的投影区域。如果信号线下面恰好是模拟地的一部分数字回流就会污染模拟地。4.3 布线规则的具体参数和避让原则以下是经过多个项目验证的SPI布线规则直接给参数方便参考布线项推荐值说明线宽6~10 mil0.15~0.25mm双面板取6mil四层板取6~8mil线间距≥2倍线宽最好≥3倍线宽相邻SPI信号线间距与其他信号线间距≥3倍线宽避免SPI线与时钟线/数据线串扰走线长度尽量短建议≤15cm超过15cm建议加源端匹配SCLK/MOSI/MISO/CS等长同组线长差≤5mm减少线长差异导致的时序偏移过孔≤2个/信号线每增加一个过孔增加约0.5~1ns延迟信号线下方必须有完整参考平面避免跨越分割缝隙稍微较真的话等长设计有多重要对SPI这种并行同步接口来说SCLK、MOSI、MISO、CS四条线的长度差会转化为采样时刻的偏移。假设SCLK比MISO长了3cm那么MISO信号就会比SCLK的采样边沿晚到约0.2ns这在低速下无所谓但50MHz时已经接近建立时间的10%了。所以我给了一个5mm内的宽松等长要求真正的高速SPI设计可以严格到1~2mm。4.4 电源和去耦SPI从机为啥总是状态混乱SPI通信不稳定很多时候不是信号线本身的问题而是从机芯片的电源质量太差。从机的数字核心在SCLK边沿采样时会产生瞬态电流需求如果去耦电容离电源引脚太远电源电压就会出现跌落导致芯片内部逻辑误判。去耦的工程原则每个从机电源引脚旁放一个0.1μF的MLCC距离引脚不要超过2mm过孔连接要短而粗。如果有较大的IO翻转再并一个1μF~10μF的钽电容或陶瓷电容。去耦电容的回流路径也要短电容的地端通过过孔直接打到底层地平面不要绕线。我在做传感器板时遇到过一种情况SPI读数据偶尔全0xFF用示波器看SCLK和数据线波形都正常最后发现是传感器内部LDO输出在每次采样时跌落了200mV。加了一颗4.7μF电容解决问题。信号线上找不出问题时回头看电源往往有惊喜。4.5 隔离与电平转换场景下的SPI布局SPI经常需要跨电压域通信比如MCU是3.3V传感器是5V或者需要做电气隔离。这个场景下布局要特别注意。电平转换SPI信号线上用电平转换芯片如TXS0108E、SN74LVC4245等或者分压电阻方案。布局上要让转换芯片靠近接收端转换芯片的电源去耦同样重要。分压电阻方案只适合低速1MHz高速SPI老老实实用电平转换芯片。数字隔离数字隔离器如ISO7741、ADuM3401等放在SPI信号链路的中间位置。布局时要注意隔离器两侧分别属于不同的地域信号线不能跨越隔离边界。换句话说隔离器本身就是地分割的物理边界它的两侧要分别有独立的参考平面。在隔离场景下我强烈建议SPI信号不要直接跨越隔离带而是通过隔离器转接。如果隔离器选型得当SPI速率可以跑到10MHz以上也没有问题。4.6 SPI菊花链布局的特殊考虑SPI菊花链Daisy Chain是多个从机串联的拓扑结构数据从第一个从机传到第二个依次类推。这种结构的硬件布局和常规一主多从每个从机独立CS有很大区别。菊花链布局的要点信号流向要清晰MOSI从主机→从机1→从机2→……→从机NMISO从最后一级返回主机。物理布局最好也按照这个顺序排列避免信号来回折返。级间延迟要均匀每一级从机都会引入固定的传播延迟寄存器延迟PCB走线延迟要远小于这个值避免相干累加。CS信号可以共享菊花链中所有从机共享CS因为数据是逐级传递的CS的作用是同步开始传输。最后一级的MISO到主机这一段的走线长度要单独控制因为它是整个链路累积延迟最长的路径。菊花链还有一个隐藏问题如果某个从机的电源没上电它的信号引脚可能处于高阻态导致后级信号中断。布局时要确保所有从机电源域一致或者选用支持掉电隔离的器件。5. 做完板子怎么验证从示波器到信号完整性仿真5.1 没条件上仿真时怎么用示波器快速评估SPI信号质量不是所有项目都有条件用ADS或HyperLynx做信号完整性仿真但示波器是每个硬件工程师都有的。用示波器评估SPI信号质量时我推荐按以下流程操作触发设置用SCLK触发观察MOSI、MISO、CS信号。触发模式设为上升沿触发时基设置为几个时钟周期确保能看到稳定的波形。观察上升沿和下降沿重点看SCLK上升沿是否单调、有无回勾。过冲幅度低于5%通常是可接受的。观察数据线的稳定窗口把示波器时间轴展开看数据线在SCLK采样边沿前后是否有足够的平坦区。如果有明显的振铃出现在采样点附近需要处理。测量时序参数如果示波器支持直接测量数据建立时间和保持时间。把测量值和手册要求对比看裕量还有多少。多抓几帧波形SPI通信时数据是变化的不同数据模式下的波形不同。用SCLK触发多抓几帧确认最差情况下的信号质量。一个容易被忽略的点探头的接地线要短。示波器探头的接地夹如果太长会引入额外电感测出来的波形可能比实际波形更差。我习惯用探头自带的短接地弹簧针测量高速SPI信号时尤其重要。5.2 信号完整性仿真的价值和最低限度要求如果项目要求高可靠度汽车电子、工业控制或者SPI速率超过50MHz仿真就很有必要了。常见的仿真工具包括ADS、HyperLynx、SIwave等。对SPI来说最低限度的仿真任务如下提取关键网络SCLK、MISO的频率响应确认走线是否有严重的阻抗不连续。时域反射仿真TDR注入阶跃信号观察反射点位置定位阻抗突变的位置。抖动和眼图仿真把SPI信号按真实码型驱动观察接收端的眼图是否满足器件要求。仿真不是为了好看而是为了在投板前把风险降到最低。不过也要说句实话SPI的仿真通常不需要做到PCIe/SERDES那种精细程度。只要把走线阻抗控制了、长度缩短了、回流路径完整了SPI基本不会出大问题。仿真更像是验证而不是发现真正决定成败的还是布局阶段的设计决策。5.3 调试经验库SPI通信失效的典型现象和定位思路SPI通信不生效是最让人头疼的故障之一因为它可能出现在硬件也可能出现在软件。我在多个项目里积累了一些典型现象和定位思路整理成表格方便大家排查故障现象可能根因快速定位方法读回数据全0xFF或全0x00从机未响应、CS无效、从机电源异常示波器抓CS和MISO确认从机有没有拉低MISO数据偶发错位间隔性错误时钟相位/极性配错逻辑分析仪对比主机和从机边沿关系数据在某个速率以上全错时序裕量不足走线过长或负载过重降速测试确认是否为时序问题单板OK批量不良器件参数离散、PCB制造偏差、焊接问题检查从机输入阈值和驱动能力差异靠近电机/继电器时通信乱码空间电磁干扰耦合到长走线示波器抓波形看是否有脉冲干扰叠加温度升高后通信失效驱动能力变弱、时序裕量随温度恶化热风枪局部加热观察故障温度点换一片MCU后通信异常不同MCU的IO驱动强度不同检查MCU IO配置调整为相同的驱动强度定位SPI问题有一个黄金法则先让通信变慢再找硬件问题。软件上把SPI时钟降到一个非常保守的频率比如100kHz如果这时候通信正常说明问题基本出在信号完整性或时序裕量上如果仍然异常再考虑接线、电平、从机配置等更基础的问题。先把问题降速复现再逐步提速找临界点这种排障思路能省掉大量无谓的折腾。6. 两个值得说的实战细节阻抗匹配实测和接口/接插件选型6.1 一个源端匹配电阻的实测对比之前做的一块带SPI Flash的板子SCLK走线长度约8cm实测波形在上升沿有过冲幅度约700mV且带振铃。我在MCU的SCLK输出端串了一个33Ω电阻同时把MOSI也串了33ΩCS串了10Ω。串完电阻之后重新抓波形过冲从700mV降到了200mV以内。振铃基本消失上升沿稍微变缓但仍在可接受范围。通信稳定性明显提升Flash读写在24MHz下连续跑了12小时无异常。这次实测给我的经验是源端串联匹配是SPI性价比最高的修复手段。成本就是几个电阻效果立竿见影。但要注意不是所有MCU的IO都需要串——如果IO驱动能力本身较弱信号上升沿本来就缓串电阻后边沿会变得更缓反而可能拖累时序。这时候要实测权衡。6.2 板对板连接器SPI跨板连接的隐藏风险SPI信号经常需要跨板传输比如主板和传感器子板之间通过排针/排母连接。这种场景下SPI信号完整性面临的挑战不只是PCB走线还包括连接器的寄生参数。连接器的寄生电容和寄生电感会改变信号路径的阻抗引起反射。板对板连接器常见的SPI问题连接器引脚间距过密信号引脚之间的串扰增大。连接器未定义阻抗尤其排针排母阻抗完全不可控。连接器接地引脚不足回流路径被拉长地弹加剧。我的建议是优先选用有阻抗规范的连接器如Samtec、Hirose的板对板连接器至少要有多个地引脚且分布均匀。SPI信号在连接器附近做包地处理两侧各加一条地线减少引脚间串扰。连接器两侧都加源端匹配电阻匹配电阻的位置尽量靠近连接器。跨板SPI的速率要保守通过连接器时我一般会把SPI速率控制在10MHz以下除非做了严格的仿真验证。6.3 别忘了ESD和EMCSPI接口的防护设计SPI接口如果引出到面板或外部接插件比如调试口、扩展口要考虑ESD防护和EMC设计。ESD防护的做法是在SPI信号线上加TVS管TVS管的放置位置要靠近连接器引脚且TVS管的地端到地平面的路径要非常短。参考设计上TVS管通常直接放在连接器后面连线距离不超过2mm。EMC方面SPI信号如果引出到排线FPC/FFC排线本身就相当于一根天线。建议排线里的SPI信号线用地线隔开形成地-信号-地-信号-地的排列。排线长度尽量短超过10cm时考虑使用屏蔽排线。如果SPI速率较高20MHz且排线较长建议改用LVDS或差分SPI方案。7. 一个完整的小型SPI板布局示例从框图到实物7.1 示例场景和器件选型假设我们要设计一块MCU主板板上有一颗SPI Flash8Mbit和一个SPI温度传感器MCU通过排针引出SPI总线供外部扩展。关键参数MCU的SPI主频8MHz保守设置后续计划提升到20MHz。板子尺寸60mm × 40mm四层板。电源3.3VMCU和Flash、传感器共用电源域。7.2 布局决策过程拿到需求我的布局决策顺序如下确定SPI器件的位置MCU放在板子左侧SPI Flash放在右上角温度传感器放在右下角外部扩展排针放在板子右下侧。这样SPI器件围成了一个紧凑的SPI域信号走线控制在30mm以内。层叠规划四层板信号-地-电源-信号。顶层走SPI信号和MCU的外围第二层是完整地平面第三层是3.3V电源平面分割成几个岛底层走低速控制信号和少量辅助电路。电源规划MCU的3.3V电源从板子底部的LDO引入经过LC滤波后分发给三个SPI器件。每个器件电源引脚旁放0.1μF去耦电容位置严格贴近引脚。SPI信号布线SCLK、MOSI、MISO、CS四条线从MCU出去走顶层线宽6mil间距12mil2倍线宽。四条线长度差控制在3mm以内。回流路径检查SCLK走线下方第二层地平面保持完整不跨越任何分割缝隙。外部扩展排针区域的SPI信号两侧加包地。7.3 板子回来后的实测板子回来后我先用逻辑分析仪抓了8MHz下的SPI通信波形读写Flash正常。然后把主频调到20MHz做了100万次读写循环测试全部通过。用示波器看SCLK波形上升沿单调过冲约180mV3.3V信号的5.5%在可接受范围内。MISO在SCLK采样边沿前约10ns已经稳定建立时间裕量充足。这个例子想说明的是SPI硬件设计到位之后通信稳定性是默认值不需要额外费心。真正需要调试的反而是那些一开始就忽视布局规则的设计。7.4 如果做双面板布局策略有什么不同双面板做SPI设计约束更大但也不是不能做。核心变化是地平面不完整只能在底层尽量铺地但信号线下方无法保证100%有地。解决方法是把SPI信号线集中在一个区域让底层有连续的铜皮。阻抗控制困难双面板的介质厚度通常是1.6mm50Ω阻抗对应的线宽要很宽约3mm不现实。所以双面板SPI不追求50Ω而是追求短和粗——走线尽量短线宽尽量大10mil以上减少电感。必须加源端匹配双面板的反射问题更严重建议SCLK和MOSI都串22Ω~33Ω电阻。降低速率预期双面板SPI速率控制在1~10MHz之间具体取决于走线长度。8. 关于SPI硬件设计的一个总结性经验从能用到好用差的都是细节做硬件设计时间长了会发现一件很有意思的事SPI通信的软件配置只花10分钟但硬件设计的功夫往往要花好几天。这好几天不是在跟什么复杂理论较劲而是在跟细节较劲——线长了1cm、过孔多了一个、去耦电容远了两毫米、地平面被切了一刀、连接器引脚间距小了一格每一个小细节单独看都不致命但它们叠加在一起就是批量不良和现场故障的根源。我在实际项目里的体会是SPI硬件设计可以浓缩成六个字短、粗、近、齐、连、净。短走线尽量短时序裕量天然更大。粗线宽不要一味追求细粗线电感小抗干扰强。近去耦电容贴近器件电源引脚器件之间尽量靠近。齐SPI四根线尽量平行短走线长度差控制好。连地平面连续不切割回流路径短而通畅。净SPI信号远离开关电源、电机驱动等干扰源必要时包地。最后再说一个实操中容易踩的坑换MCU时SPI引脚驱动能力默认配置可能不一样。有的MCU默认GPIO驱动能力弱比如2mA如果外接的从机负载较重多个从机、长走线信号边沿会变得很缓导致通信不稳定。硬件设计阶段就要确认MCU的IO驱动强度配置预留出可通过软件调节的余地。SPI通信的硬件设计看起来是小活儿但它背后的信号完整性原理和PCB布局逻辑是整个数字硬件设计的缩影。把SPI吃透了再去设计USB、以太网、DDR这些更高速的接口你会发现自己已经有了一套通用的方法论先理解时序预算再控制信号路径最后用实测验证。这套方法的价值远超SPI本身。如果这篇文章能帮你少跳一个SPI的坑那写它就值了。
返回列表