3. SPI接口的工作原理与电源需求
3.1 SPI协议核心要点
SPI,英语全称是Serial Peripheral Interface。说白了就是一根时钟线带着几根数据线,在主设备与从设备之间交换数据。我刚开始接触那会儿,觉得它比I²C简单多了——没有地址帧,没有应答,纯靠时钟边沿往外推数据。
一个标准的SPI接口,至少有四条线:
- SCK(时钟):由主设备产生,决定数据搬移的节奏。
- MOSI(主出从入):主设备发送,从设备接收。
- MISO(主入从出):从设备发送,主设备接收。
- SS(片选):低电平有效,主设备选中哪个从设备,哪个才跟主设备通信。
你想想看,如果只有一个从设备,SS甚至可以接地,让它一直使能。但实际项目里多半是多设备共享总线,片选就很重要。
3.2 时钟极性与相位——让人头疼的四个模式
SPI的时钟模式由两个参数决定:CPOL(时钟极性)和CPHA(时钟相位)。CPOL决定空闲时时钟是高电平还是低电平,CPHA决定数据是在时钟的上升沿还是下降沿被采样。
| 模式 | CPOL | CPHA | 空闲时钟电平 | 采样沿 |
|---|---|---|---|---|
| 模式0 | 0 | 0 | 低电平 | 上升沿 |
| 模式1 | 0 | 1 | 低电平 | 下降沿 |
| 模式2 | 1 | 0 | 高电平 | 下降沿 |
| 模式3 | 1 | 1 | 高电平 | 上升沿 |
我在一个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供电设计的关键点
- 去耦电容就近摆放:SPI电源引脚旁边放一个0.1µF陶瓷电容,尽可能靠近引脚焊盘,回路面积最小。
- 并联多个不同容值:0.1µF + 0.01µF + 4.7µF,覆盖从低频到高频的阻抗峰值。
- 供电回路与信号回路分离:SPI信号的地尽量不跟大电流回路共用同一段GND。
- 片选信号不能忽略:SS翻转引起的瞬态电流不比时钟小,也要在SS引脚的供电区域保证低阻抗。
- 仿真验证:先做PDN阻抗仿真,看看是否存在谐振尖峰,尤其关注SPI时钟频率及其倍频。
我经历过的惨痛教训:一个四器件SPI总线,挂了一个Flash、一个ADC、一个DAC。因为共用了同一个LDO输出,而LDO在8MHz附近有输出阻抗尖峰,导致Flash写入校验错误。后来给每个器件加了一颗4.7µF钽电容和一颗0.1µF MLCC,才把噪声压下去。
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的速度一上去,供电就不再是“换个电容就行”的小事了。