22 - SPI IO

🎯 课程目标

1. SPI接口概述

SPI(Serial Peripheral Interface)是一种同步串行通信协议,广泛用于MCU与外设之间的短距高速通信。

1.1 SPI四线制信号

信号方向功能GPIO配置
SCLK主→从时钟输出(主机)/输入(从机)
MOSI主→从主出从入数据输出(主机)/输入(从机)
MISO从→主主入从出数据输入(主机)/输出(从机)
CS主→从片选(低有效)输出(主机)

2. SPI IO电路设计

每条SPI信号线使用GPIO单元,但需要额外的时序控制和模式配置。

2.1 SPI主机IO配置

* SPI Master IO配置
*
* SCLK: 输出模式, 推挽驱动, 4-8mA
* MOSI: 输出模式, 推挽驱动, 4-8mA
* MISO: 输入模式, 施密特触发
* CS[0..N]: 输出模式, 推挽驱动, 4mA
*
* 时钟频率: 1-50MHz (标准SPI)
*           50-200MHz (高速SPI)

* SPI时钟生成器
* 从APB时钟分频得到SCLK
* f_sclk = f_apb / (2 × (prescaler + 1))

* SPI数据移位寄存器
* 发送: 并行数据 → 移位寄存器 → MOSI (MSB/LSB first)
* 接收: MISO → 移位寄存器 → 并行数据

2.2 SPI从机IO配置

* SPI Slave IO配置
*
* SCLK: 输入模式, 施密特触发
* MOSI: 输入模式, 施密特触发
* MISO: 输出模式, 推挽驱动, 三态(当CS无效时)
* CS:   输入模式, 施密特触发, 低有效

* 从机关键设计:
* 1. CS无效时MISO必须进入高阻态
* 2. 需要快速响应CS下降沿(开始通信)
* 3. SCLK输入需要抗毛刺滤波

3. SPI模式与时序

SPI有4种工作模式(CPOL×CPHA),决定了时钟极性和采样边沿:

模式CPOLCPHA空闲SCLK采样边沿
000上升沿
101下降沿
210下降沿
311上升沿

4. SPICE仿真:SPI时序验证

* 22-spi-timing.sp
* SPI Mode 0 时序验证仿真

Vddio vddio 0 3.3
Vdd vdd 0 1.0

* SPI时钟 (10MHz, Mode 0: CPOL=0, CPHA=0)
Vsclk sclk 0 pulse 0 3.3 0 2n 2n 48n 100n

* 片选
Vcs cs 0 pwl 0 3.3 10n 3.3 10.02n 0 810n 0 810.02n 3.3

* MOSI数据 (0xA5 = 10100101 MSB first)
Vmosi mosi 0 pwl 0 0 10n 0 10.02n 3.3 110n 3.3 110.02n 0
+ 210n 0 210.02n 3.3 310n 3.3 310.02n 0
+ 410n 0 410.02n 0 510n 0 510.02n 3.3
+ 610n 3.3 610.02n 0 710n 0 710.02n 3.3

* MOSI输入接收器(施密特触发器)
Mp_s1 a mosi vddio vddio pch W=4u L=0.35u
Mp_s2 mosi_sch a vddio vddio pch W=8u L=0.35u
Mp_s3 a mosi_sch vddio vddio pch W=2u L=0.35u
Mn_s1 b mosi 0 0 nch W=4u L=0.35u
Mn_s2 mosi_sch b 0 0 nch W=4u L=0.35u
Mn_s3 b mosi_sch 0 0 nch W=2u L=0.35u

* SCLK输入接收器
Mp_s4 c sclk vddio vddio pch W=4u L=0.35u
Mp_s5 sclk_sch c vddio vddio pch W=8u L=0.35u
Mp_s6 c sclk_sch vddio vddio pch W=2u L=0.35u
Mn_s4 d sclk 0 0 nch W=4u L=0.35u
Mn_s5 sclk_sch d 0 0 nch W=4u L=0.35u
Mn_s6 d sclk_sch 0 0 nch W=2u L=0.35u

* MISO输出驱动
Vmisodata miso_data 0 pwl 0 0 10n 0 10.02n 3.3
Mp_miso miso miso_gate vddio vddio pch W=200u L=0.35u
Mn_miso miso miso_gate 0 0 nch W=80u L=0.35u
Mp_mg miso_gate miso_data cs_b vddio vddio pch W=16u L=0.35u
Mn_mg miso_gate miso_data cs 0 0 nch W=8u L=0.35u
Mp_csb cs_b cs vddio vddio pch W=4u L=0.35u
Mn_csb cs_b cs 0 0 nch W=2u L=0.35u

Cload_miso miso 0 10p

.tran 0.5n 900n
.measure tran tsetup FIND V(mosi_sch) WHEN V(sclk_sch)=1.65 RISE=1
.measure tran miso_trise TRIG V(miso_data) VAL=1.65 RISE=1 TARG V(miso) VAL=1.65 RISE=1
.print tran V(sclk) V(cs) V(mosi) V(mosi_sch) V(miso)
.end
✅ 仿真验证结果

SPI时序仿真结果:

5. 多从机SPI设计

SPI通过多个CS线支持多从机,但每个从机需要独立的CS信号:

6. 练习

📝 练习1:SPI时钟频率设计

SPI主机APB时钟为100MHz。设计分频器生成10MHz、20MHz、50MHz的SCLK。写出分频比设置。

查看答案

f_sclk = f_apb / (2 × (prescaler + 1))

10MHz: prescaler = 100/(2×10) - 1 = 4

20MHz: prescaler = 100/(2×20) - 1 = 1.5 → 取2, 实际16.7MHz

50MHz: prescaler = 100/(2×50) - 1 = 0 → 实际50MHz

7. 关键要点总结

🔑 本章核心要点
  1. SPI接口使用4个GPIO(SCLK/MOSI/MISO/CS),主从机方向相反
  2. 4种SPI模式由CPOL和CPHA决定,需要主机从机匹配
  3. 从机MISO在CS无效时必须高阻,避免总线冲突
  4. 施密特触发器用于SCLK和MOSI输入抗噪声
  5. 多从机通过多CS线管理,需要充足的CS间隔时间

🏆 成就解锁:SPI工程师

完成本课学习,你已经掌握了SPI接口IO的设计方法!

✅ 已掌握 SPI四线IO ✅ 已掌握 时序设计 ✅ 已掌握 主从配置 ✅ 已掌握 多从机管理

5. QSPI(四线SPI)设计

QSPI是SPI的扩展,使用4条数据线并行传输,速率提升4倍:

模式数据线等效速率应用
标准SPI1(MOSI)常规外设
Dual SPI2(IO0/IO1)双倍速率Flash
Quad SPI4(IO0-IO3)高速Flash
Octal SPI8(IO0-IO7)超高速存储

5.1 QSPI IO配置

QSPI的数据线需要支持方向切换(命令阶段输入,数据阶段输出):

6. SPI的EMI与信号完整性

高速SPI(>25MHz)可能产生EMI问题:

EMI缓解措施

7. SPI噪声抗扰度设计

SPI接口在工业环境中面临严重的噪声干扰,需要提高抗扰度。

7.1 噪声源与影响

噪声源影响缓解方法
电源纹波时钟抖动独立LDO供电
地弹数据误码星型接地
串扰时钟/数据耦合屏蔽走线
EMI辐射干扰降低压摆率
ESD器件损伤TVS保护

7.2 工业级SPI设计要点

附录:设计参数速查表

参数符号典型值单位
IO电压(3.3V)VDDIO3.0-3.6V
IO电压(1.8V)VDDIO1.62-1.98V
核心电压VDD0.9-1.2V
ESD二极管VfVf0.6-0.8V
GGNMOS Vt1Vt16-10V
GGNMOS VhVh3-5V
GGNMOS It2It28-15mA/μm
SCR VhVh1-2V
SCR It2It250-80mA/μm
RC钳位时间常数τ0.5-2μs
施密特Vt+Vt+2.0V
施密特Vt-Vt-1.3V
焊盘电容Cpad2-5pF
焊线电感Lwire1-5nH
CML驱动电流Itail4-16mA
差分阻抗Zdiff85-100Ω
HBM 2kV峰值电流Ipeak1.33A
HBM 4kV峰值电流Ipeak2.67A
CDM 500V峰值电流Ipeak5-15A
LVTTL VIH(min)VIH2.0V
LVTTL VIL(max)VIL0.8V
📋 关键公式速查
📖 推荐参考资料
  1. Amerasekera & Duvvury, ESD in Silicon Integrated Circuits, Wiley
  2. Dabral & Maloney, Basic ESD and I/O Design, Wiley
  3. Razavi, Design of Analog CMOS Integrated Circuits, McGraw-Hill
  4. Li Yuan, High Speed SerDes Design, Springer
  5. JEDEC JS-001: HBM ESD Test Standard
  6. JEDEC JS-002: CDM ESD Test Standard
  7. PCI Express Base Specification, PCI-SIG
  8. USB 2.0/3.0 Specification, USB-IF

8. SPI的协议扩展

SPI协议虽然简单,但在实际应用中有多种扩展:

8.1 Dual/Quad/Octal SPI详解

传统SPI每时钟周期传输1 bit,通过增加数据线可以成倍提升吞吐率:

标准SPI (1-bit):
SCLK:  _|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_
MOSI:  D7  D6  D5  D4  D3  D2  D1  D0
→ 8个SCLK周期传输1字节

Dual SPI (2-bit):
SCLK:  _|‾|_|‾|_|‾|_|‾|_
IO0:   D7  D5  D3  D1
IO1:   D6  D4  D2  D0
→ 4个SCLK周期传输1字节

Quad SPI (4-bit):
SCLK:  _|‾|_|‾|_
IO0:   D7  D3
IO1:   D6  D2
IO2:   D5  D1
IO3:   D4  D0
→ 2个SCLK周期传输1字节

Octal SPI (8-bit):
SCLK:  _|‾|_
IO0-7: D7-D0
→ 1个SCLK周期传输1字节

8.2 SPI NAND/NOR Flash接口

SPI Flash是QSPI最常见的应用,支持高速读写: