3. SPI接口的工作原理与电源需求

3.1 SPI协议核心要点

SPI,英语全称是Serial Peripheral Interface。说白了就是一根时钟线带着几根数据线,在主设备与从设备之间交换数据。我刚开始接触那会儿,觉得它比I²C简单多了——没有地址帧,没有应答,纯靠时钟边沿往外推数据。

一个标准的SPI接口,至少有四条线:

  • SCK(时钟):由主设备产生,决定数据搬移的节奏。
  • MOSI(主出从入):主设备发送,从设备接收。
  • MISO(主入从出):从设备发送,主设备接收。
  • SS(片选):低电平有效,主设备选中哪个从设备,哪个才跟主设备通信。

你想想看,如果只有一个从设备,SS甚至可以接地,让它一直使能。但实际项目里多半是多设备共享总线,片选就很重要。

3.2 时钟极性与相位——让人头疼的四个模式

SPI的时钟模式由两个参数决定:CPOL(时钟极性)和CPHA(时钟相位)。CPOL决定空闲时时钟是高电平还是低电平,CPHA决定数据是在时钟的上升沿还是下降沿被采样。

模式CPOLCPHA空闲时钟电平采样沿
模式000低电平上升沿
模式101低电平下降沿
模式210高电平下降沿
模式311高电平上升沿

我在一个FPGA项目里踩过坑——从设备的datasheet只写了“兼容模式0”,我就写了模式0的时序,结果通信时好时坏。后来用示波器一看,从设备实际用的是模式2。嗯,从此我习惯先读设备手册里的时序图,绝不只看文字。

3.3 SPI通信的功耗特征——瞬时电流的“毛刺”

SPI的通信速度可以很高,从几MHz到上百MHz都有。高速翻转的SCK和并行的数据线,会在每个时钟边沿引起瞬态电流尖峰。

  • 输出缓冲器切换:MOSI和MISO上的电平变化,需要从VDD拉电流或向GND灌电流。
  • 片选信号边沿:SS从高变低或从低变高时,从设备内部可能开启/关闭大量电路,产生较大的瞬态电流。
  • 内部逻辑动作:SPI接收到的数据会立即进入移位寄存器,每一次移位都会引发一堆门电路翻转。

你可以把这些瞬态电流看作一串“尖峰脉冲”。频率就是SCK的频率,幅度取决于负载电容和内部功耗。我曾经测过一个2MHz SPI通信的电源纹波,结果在电压上看到了明显的3.3V跌落到3.0V的毛刺,幅度超过300mV。当时传输距离才3cm,板子布局已经很紧凑了。

核心观点:SPI的瞬态电流不是稳定直流,而是与时钟同步的周期性能量需求。PDN阻抗如果在这几个频率点过大,电压噪声就会超过芯片容忍范围。

3.4 为什么电源网络对SPI如此重要

很多工程师以为SPI是低速协议,电源随便放几个电容就行。我刚开始也这么想,直到一个现实案例教训了我。

那是一个带ADC的传感器模块,通过SPI输出数据。板子调试时发现,只要SPI时钟超过10MHz,读出数据就有误码。查了几天,最后用差分探头点在SPI接口的电源引脚上,看到VDD在每次时钟上升沿都会跌将近400mV。而该SPI从器件要求VDD不能低于3.0V(3.3V供电)。

为什么会跌这么多?因为PDN在10MHz附近的阻抗达到了2.5Ω,而瞬态电流大约150mA,压降就是375mV。加上直流IR drop,实际电压已经跌到2.85V以下了。

我的习惯:设计SPI供电时,至少要保证从DC到SPI时钟频率3倍的范围内,PDN目标阻抗低于(供电允许纹波)/(最大瞬态电流)。比如允许纹波50mV,最大瞬态电流200mA,那目标阻抗就是0.25Ω。

3.5 SPI供电设计的关键点

  1. 去耦电容就近摆放:SPI电源引脚旁边放一个0.1µF陶瓷电容,尽可能靠近引脚焊盘,回路面积最小。
  2. 并联多个不同容值:0.1µF + 0.01µF + 4.7µF,覆盖从低频到高频的阻抗峰值。
  3. 供电回路与信号回路分离:SPI信号的地尽量不跟大电流回路共用同一段GND。
  4. 片选信号不能忽略:SS翻转引起的瞬态电流不比时钟小,也要在SS引脚的供电区域保证低阻抗。
  5. 仿真验证:先做PDN阻抗仿真,看看是否存在谐振尖峰,尤其关注SPI时钟频率及其倍频。

我经历过的惨痛教训:一个四器件SPI总线,挂了一个Flash、一个ADC、一个DAC。因为共用了同一个LDO输出,而LDO在8MHz附近有输出阻抗尖峰,导致Flash写入校验错误。后来给每个器件加了一颗4.7µF钽电容和一颗0.1µF MLCC,才把噪声压下去。

SPI主从通信与PDN供电关系示意 SPI主设备 SPI从设备 SCK (时钟) MOSI (数据) MISO (数据) SS (片选) VDD 供电轨 GND 返回轨 C1 C2 PDN阻抗路径 Z_domain 决定瞬态压降 瞬态电流 (I_dd) × PDN阻抗 (Z_dd) ≈ 电压纹波 → 决定SPI通信是否可靠

3.6 从PDN角度看SPI的“敏感频率”

SPI的敏感频率并不是一个点,而是一个区间。比如:

  • 基频:SCK频率,比方说25MHz。
  • 二次谐波:50MHz。
  • 数据变化频率:如果数据不断翻转,能量还会散到更宽的频谱。

做PDN仿真时,需要重点关注这些频率点上的阻抗。如果你的PDN在25MHz处有一个谐振尖峰,阻抗飙到2Ω,那SPI通信大概率会出问题。

我个人习惯的做法:开一个目标阻抗曲线图,横轴从100kHz到SPI时钟频率的5倍,画一条0.2Ω的水平红线。仿真出来的Z_dd曲线只要全部低于这条红线,我就放心了。如果某个频段冒尖,就用不同容值的电容组合去“削峰”。

3.7 小结:打好SPI供电的底子

理解SPI的工作原理,才能判断它需要什么样的电源质量。时钟极性、相位、片选逻辑、数据速率——这些因素共同决定了瞬态电流的频谱。接下来我们再深入PDN阻抗仿真,你会看到仿真工具到底怎么帮我们定位这些风险点。

记住一句话:SPI的速度一上去,供电就不再是“换个电容就行”的小事了。