当前位置: 首页 > news >正文

第5篇:《高速SPI走线:等长控制+阻抗匹配+串扰抑制三板斧》

大家好,我是老张。

上篇讲了覆铜的正确姿势,今天聊一个嵌入式画板最常碰到的高速信号问题:SPI走线

SPI在低速的时候(几MHz以下),杜邦线随便飞、走线随便画,都能跑得好好的。但一上到10MHz、20MHz甚至更高,各种妖蛾子就来了——数据偶尔出错、某些板子正常某些不正常、温度一高就不行。这些问题用万用表量不通断根本发现不了,因为它们不是“通不通”的问题,是“信号质量”的问题。

今天这篇,老张用三个板斧把高速SPI走线讲清楚:等长控制、阻抗匹配、串扰抑制。文末附SPI Layout检查清单。

目录

一、为什么SPI跑高速就出问题?

二、第一板斧:等长控制

为什么需要等长?

等长要控制到什么程度?

怎么做等长?

三、第二板斧:阻抗匹配

什么是阻抗匹配问题?

什么时候需要做阻抗匹配?

怎么做:源端串联电阻

四、第三板斧:串扰抑制

串扰是什么?

串扰抑制三板斧

五、测量与验证:别用万用表,用示波器

六、翻车实录:10MHz SPI的“偶发误码”

七、SPI Layout检查清单

八、本篇总结


一、为什么SPI跑高速就出问题?

低速时,信号波长远远大于走线长度,整条走线上电压几乎同时变化,走线看作一根理想导线就行。但当频率升高,信号边沿变陡,走线就不能再看成简单的导线了——它是一根传输线

传输线有两个关键特性:

  • 信号传播有延迟:电信号在FR-4板材上传播速度约15cm/ns。如果两根走线长度不同,同一时钟沿发出的数据到达接收端的时间就不同。

  • 阻抗不连续会反射:走线的特性阻抗如果和源端或负载端不匹配,信号会在端点之间来回反射,产生振铃。

SPI的问题,本质就是这两个因素叠加:时序偏移导致建立/保持时间不够,反射振铃导致误触发。

二、第一板斧:等长控制

为什么需要等长?

SPI通信中,主设备在SCK的某个边沿(通常是上升沿)发出数据,从设备在下一个边沿(通常是下降沿)采样数据。数据线MOSI上的信号必须在采样沿之前稳定下来,并且保持到采样沿之后。

如果SCK走线和MOSI走线长度相差很大,时钟沿到达从设备时,数据可能还在路上飞。从设备采到的就是错误的数据。

等长要控制到什么程度?

电信号在FR-4外层走线上传播速度约140~160mm/ns。保守取150mm/ns。1mm走线长度差对应的时间偏移约6.7ps。

SPI时钟周期和最大长度差的关系:

  • 10MHz(周期100ns):长度差带来的时序偏移控制在周期的1/10以内比较安全,即10ns,对应约1.5mm长度差。放宽到1/5(20ns)约3mm。

  • 20MHz(周期50ns):安全偏移5ns,对应约0.75mm。放宽到10ns约1.5mm。

  • 50MHz(周期20ns):安全偏移2ns,对应约0.3mm。基本上要求严格等长。

老张的实战经验

  • 10MHz以下:SCK和MOSI/MISO长度差控制在5mm以内即可,大部分板子天然满足。

  • 10~30MHz:控制在2mm以内。Layout时注意一下走线长度,必要时做蛇形绕线。

  • 30MHz以上:控制在1mm以内,最好做严格等长。同时MISO和MOSI都要分别和SCK做等长。

怎么做等长?

第一步:在EDA软件里打开走线长度显示。立创EDA和KiCad都支持实时显示走线长度。

第二步:以SCK走线长度为基准。先走完SCK,记住它的长度。再走MOSI和MISO,让长度尽量接近SCK。

第三步:如果空间不够做等长,走蛇形线。蛇形线就是走线绕几个弯来增加长度。注意蛇形线的拐弯间距至少为线宽的3倍以上,避免相邻弯道之间的耦合影响阻抗。

注意:等长指的是从芯片焊盘到芯片焊盘的总长度,包括过孔。一个过孔大约等效0.5~1mm走线长度。如果你的数据线打了两个过孔而时钟线没打,长度差可能就超标了。

三、第二板斧:阻抗匹配

什么是阻抗匹配问题?

SPI信号在走线上传输,如果走线的特性阻抗和源端输出阻抗不匹配,信号会在两端之间来回反射,在波形上叠加振铃。

振铃如果幅度够大,可能在采样沿附近产生一个毛刺。从设备看到这个毛刺,可能把它当作一个额外的时钟脉冲,导致数据移位。

什么时候需要做阻抗匹配?

  • 走线长度远小于信号上升沿对应的传播长度时(比如走线5cm,上升沿1ns对应空间长度约15cm),反射影响小,可以不做。

  • 走线长度和上升沿空间长度可比时,反射就不可忽略。

SPI在10MHz以上,上升沿通常在1~3ns。15cm/ns对应上升沿空间长度15~45mm。如果SPI走线超过5cm,反射问题就要考虑了。

怎么做:源端串联电阻

最简单有效的方法:在驱动端(SCK和MOSI的发送端)各串联一个22Ω~100Ω的小电阻。

这个电阻的作用是吸收反射能量。信号从驱动端发出,经过串联电阻到达走线。如果远端有反射回来,反射能量到达源端时会被这个电阻消耗掉,不会再次反射。

电阻怎么取值?

典型走线特性阻抗约50~80Ω(取决于线宽和距地平面距离)。MCU输出阻抗通常十几到几十Ω。串联电阻加上MCU输出阻抗应该接近走线特性阻抗。

  • 如果MCU输出阻抗约20Ω,走线特性阻抗约50Ω,串30Ω。

  • 不确定的时候,用33Ω或47Ω作为起始值,测眼图看效果调整。

注意:串联电阻放在驱动端,紧贴驱动芯片引脚。不要放在接收端,也不要在走线中间。

四、第三板斧:串扰抑制

串扰是什么?

SPI通常有4根信号线:SCK、MOSI、MISO、CS。它们并排走线时,一根线上的高速跳变会通过寄生电容和互感耦合到旁边的线上。

SCK是频率最高的信号,每个时钟周期翻转两次。它对MOSI、MISO和CS的串扰是最强的。如果CS被SCK串扰出一个毛刺,从设备就可能误触发。

串扰抑制三板斧

第一斧:拉大间距

SPI信号线之间的间距,至少为线宽的2~3倍。如果线宽10mil,间距至少20~30mil。比普通信号线的间距大得多。

第二斧:地线隔离

在SCK和MOSI之间、MOSI和MISO之间,插入一根接地走线。这根地线两端打过孔到地平面,有效吸收电场耦合。地线隔离能减少60%~80%的串扰。

如果空间充裕,在SPI总线两侧各放一根地线,效果更好。

第三斧:避免长距离并行

如果SPI走线必须穿越整块板子,不要让四根线并排从头走到尾。SCK和MOSI可以走在不同层,或者在不同区域换层分散走。长距离并行是串扰的重灾区。

五、测量与验证:别用万用表,用示波器

SPI信号质量不能用万用表量。万用表只能告诉你电压平均值对不对,看不到振铃、看不到时序偏移、看不到串扰毛刺。

正确工具:示波器,带宽至少100MHz,最好200MHz以上。

探头选择:x10探头,配合接地弹簧针。

x1探头输入电容大,接到信号线上直接改变信号特性。x10探头输入电容小,对信号影响小。接地弹簧针把探头的接地回路缩到最短,避免地线夹子的长引线引入振铃——你测出来的振铃是探头引入的,不是真实信号,排查方向就被误导了。

看什么

  • 先看SCK波形,有没有振铃、过冲、上升沿是否陡峭。

  • 再看MOSI和SCK的时序关系,用双通道同时看,确认数据在采样沿之前已经稳定。

  • 如果示波器支持眼图功能,直接开眼图看眼宽和眼高。眼图分析的具体方法,老张在面试题专栏的第7篇详细写过,需要的话可以翻过去对照看。

六、翻车实录:10MHz SPI的“偶发误码”

早年老张画过一块数据采集板,MCU通过SPI以10MHz读取外部ADC。样板回来测试,大部分时间正常,但每几万次读取会出一个错误数据。降速到5MHz就完全正常。

用示波器看SCK波形,发现上升沿有一小段振铃,幅度约0.8V。这个振铃在SCK的半个周期后刚好落在ADC的采样窗口附近,如果振铃的毛刺正好被ADC当成时钟沿,数据就多移了一位。

查Layout,SCK走线8cm长,源端没串阻尼电阻。在MCU的SCK引脚处串了一个33Ω电阻,再测波形,振铃消失。10MHz下再也没出过误码。

教训SPI上了10MHz,走线超过5cm,老老实实在源端串阻尼电阻。一颗几分钱的电阻,能省你几天的调试时间。

七、SPI Layout检查清单

等长检查

  • SCK和MOSI长度差是否在允许范围内?

  • SCK和MISO长度差是否在允许范围内?

  • 过孔数量是否计入长度计算?

阻抗匹配检查

  • 走线长度超过5cm且速率10MHz以上时,是否在驱动端串联了阻尼电阻?

  • 阻尼电阻是否紧贴驱动芯片引脚?

串扰抑制检查

  • SPI信号线间距是否达到2~3倍线宽?

  • 是否用地线隔离了SCK和MOSI/MISO?

  • 是否避免了四根线长距离并行?

测量验证检查

  • 是否用示波器看过SCK波形,确认无严重振铃?

  • 是否用双通道看过SCK和MOSI的时序关系?

  • 测量时是否用了x10探头和接地弹簧针?

速率-长度参考表

SPI速率最大走线长度差建议串阻是否需要地线隔离
<5MHz10mm可不加建议
5~15MHz5mm33~47Ω建议
15~30MHz2mm22~33Ω强烈建议
>30MHz1mm22~33Ω必须

八、本篇总结

高速SPI走线三板斧:

  1. 等长控制:SCK、MOSI、MISO走线长度尽量一致。10MHz以下差5mm,20MHz差2mm,30MHz以上差1mm以内。

  2. 阻抗匹配:走线超过5cm就在驱动端串22~100Ω电阻,吸收反射振铃。

  3. 串扰抑制:线间距拉大到2~3倍线宽,地线隔离SCK,避免长距离并行。

下篇预告:《DC-DC Layout核心:输入回路面积最小化,远离模拟区》——讲解开关电源Layout的黄金法则。

有用的话,收藏一下。下次画SPI走线时翻出检查清单逐条对照。评论区说说你的SPI最高跑过多少MHz,出过什么奇怪问题,老张帮你分析。

http://www.cnnetsun.cn/news/2929220.html

相关文章:

  • 终极指南:如何使用Type-Fest一键统一项目命名风格
  • 在openEuler 20.03 SP3的FT2000+上编译内核后启动失败?别慌,手把手带你对比config文件找差异
  • IAR for Arm编译报错别慌!手把手教你搞定License失效问题(附新旧版本补丁路径)
  • IBM数据工程认证:2023云原生入门实战指南
  • SHAP与LIME实战:让AI模型可解释、可审计、可交付
  • 【Linux企业级应用】LVS+Keepalived高可用003篇
  • Chromatic深度技术剖析:构建现代Chromium/V8应用通用修改器的架构演进与实践
  • 避坑指南:S32K3开发中PEMicro驱动安装的那些‘坑’与正确姿势
  • 避开这些坑!在Proteus8中用51单片机做串口双机通信仿真,我踩过的雷都总结在这里了
  • 终极数据库可视化工具:用ChartDB的DBML支持3分钟完成专业数据库设计
  • Proteus仿真MPX4115压力传感器时,ADC0832读数总不对?可能是这几个细节没做好
  • 从实验室到产线:手把手教你安全操作TEOS(附MSDS解读与应急处理清单)
  • DLSS Swapper完全指南:NVIDIA显卡性能优化的终极解决方案
  • JOML采样技术全解析:Uniform、Poisson与Stratified Sampling应用对比
  • 超越官方文档:WAsP Turbine Generators 12 自定义风机库的深度使用技巧与文件格式解析
  • CAN总线调试实战:用示波器抓取并分析位填充与错误帧波形(附实测图)
  • Python进阶核心:__slots__、描述符、生成器与__mro__实战解析
  • 字节序(Endianness)的理解和字符串截取逻辑
  • 两阶段目标语音提取技术:基于相对线索的语音分离与分类
  • 融合感官信息的序列推荐系统ASEGR框架解析
  • XUnity.AutoTranslator:打破语言壁垒的Unity游戏自动翻译终极指南
  • iPhone Safari全屏浏览避坑指南:为什么你的‘添加到主屏幕’后还是显示地址栏?
  • Claude 3.5 Sonnet隐式工具调用机制解析
  • 数据科学真实世界生存指南:漂移诊断、特征管理与业务可解释性
  • 用Python+QGIS处理Landsat影像,5分钟搞定全国7类生态系统分布图
  • DBeaver vs pgAdmin vs Beekeeper:手把手教你根据不同场景选对PostgreSQL客户端
  • ArcGIS 10.x 用户必看:彻底解决ArcMap闪退打不开的保姆级指南(从注册表清理到驱动更新)
  • 神经符号AI:打开可信AI的“黑箱”,赋能产业未来
  • AD5761R菊花链调试笔记:SPI时序、LDAC用法与数据错位问题排查
  • 手机Bootloader开发避坑指南:高通ABL中那些影响启动的关键配置与调试技巧