芯参谋(31):SPI NOR Flash 电路设计指南

适用范围

  • 本文针对**串行 NOR Flash(SPI NOR)**的硬件电路设计,覆盖 512 Kb ~ 2 Gb 常见容量段,接口为 1 / 2 / 4 线 SPI。
  • 适用对象:MCU / SoC / FPGA 的启动存储(Boot ROM)、XIP 代码执行、字库与图片资源、参数与日志区。
  • 内容包含:选型对比、封装引脚、电气参数、模式与速率、电源与低功耗、典型电路(内联原理图)、Layout、可靠性、生产、排查与检查清单。
  • 不包含:文件系统实现、FTL 算法、具体厂商寄存器全表。寄存器与时序一律以目标型号 datasheet 为准。

本系列其他文档

文档 器件类型 关注重点
SPI NOR 电路设计指南 本文 串行 NOR Flash Quad/QPI 提速、dummy cycles、XIP、DPD 低功耗
SPI NAND 电路设计指南 串行 NAND Flash 页/块管理、片内 ECC、坏块表、主机 FTL
并行NAND (PPI NAND) 电路设计指南 8/16 位并行 NAND 宽总线时序、ECC 引擎、40+ 引脚 Layout
eMMC 电路设计指南 eMMC 5.0/5.1 HS200/HS400、1.8 V VCCQ、DS 选通与等长
SD NAND 电路设计指南 贴片式 SD NAND SPI/SDIO 双模式、无休眠指令、VCC 负载开关断电
NAND MCP 电路设计指南 多芯片合封存储 多 die 与多 CE、双电源轨、HDI 扇出
并行NOR (PPI NOR) 电路设计指南 并行 NOR Flash 异步读时序、XIP、等待周期、总线扩展
PSRAM 电路设计指南 伪静态 RAM OPI/HyperBus、刷新与延迟周期、XIP 与帧缓存
DDR2 电路设计指南 DDR2 SDRAM SSTL_18、T 分支拓扑、VTT 端接、ODT
DDR3 电路设计指南 DDR3 / DDR3L Fly-by 拓扑、write leveling、动态 ODT
DDR4 电路设计指南 DDR4 SDRAM POD12、bank group、DBI、2D 训练
DDR5 电路设计指南 DDR5 SDRAM 双子通道、On-DIMM PMIC、DFE、同帧 ECC
EEPROM 电路设计指南 EEPROM I²C/SPI 接口、上拉电阻与总线电容、页写与写保护

如何在五者之间快速决策

需要随机读 / 片内执行(XIP)/ 免坏块管理 → SPI NOR。需要 128 MB 以上且成本敏感 → SPI NAND 或 SD NAND。需要跑操作系统 + 大容量 → eMMC。SPI NOR 的短板是写速度慢、每 MB 成本最高 ;长板是接口最简单、随机读最快、无坏块。

1 · 器件基础

1.1 定位与选型对比

对比项 SPI NOR SPI NAND 并行 NAND eMMC SD NAND
常见容量 512 Kb ~ 2 Gb (64 KB ~ 256 MB) 1 Gb ~ 8 Gb (128 MB ~ 1 GB) 1 Gb ~ 64 Gb 4 GB ~ 512 GB 128 MB ~ 8 GB
接口 SPI 1/2/4 线 SPI 1/4 线 8/16 位并口 MMC 1/4/8 位 SPI / SDIO 1/4 位
引脚数 8 8 40 ~ 63 153 / 169 BGA 8 (LGA)
随机读 优字节级寻址 无页载入延迟 差 页载入 25 ~ 100 µs 差 页载入 25 ~ 60 µs 中 控制器缓存 中 控制器缓存
顺序读速度 6 ~ 104 MB/s 10 ~ 40 MB/s 20 ~ 200 MB/s 100 ~ 400 MB/s 5 ~ 25 MB/s
写速度 0.1 ~ 0.5 MB/s 1 ~ 5 MB/s 5 ~ 40 MB/s 20 ~ 200 MB/s 2 ~ 10 MB/s
最小擦除单位 4 KB 扇区 128 KB 块 128 ~ 512 KB 块 控制器管理 控制器管理
XIP 片内执行 支持 不支持 不支持 不支持 不支持
坏块管理 无需出厂全好块 主机负责 含出厂坏块表 主机 FTL 器件内部 器件内部
ECC 不需要 (部分型号内建) 片内 ECC + 主机校验 主机 ECC 引擎 内部 内部
单位成本 最高 /MB 中低 最低 /GB 低 /GB 中
典型用途 启动代码、XIP、字库、参数 中大容量代码 + 数据 大容量数据 OS + 大容量 贴片替代 TF 卡

SPI NOR 的两个不可替代优势

① 随机读 / XIP :NOR 阵列可按字节随机寻址,配合主控 QSPI 控制器的 memory-mapped 模式,代码可直接从 Flash 取指执行,无需先搬到 RAM,能显著省 RAM 与启动时间。

② 无坏块、无需 FTL:出厂全好块,软件模型简单(擦除 → 编程 → 读),是 Bootloader 的首选载体。

常见型号与厂商
厂商 典型系列 电压 备注
Winbond 华邦 W25Q / W25X 系列(W25Q64、W25Q128、W25Q256) 3.3 V / 1.8 V(W25Q..JW) 市占最高,生态最好,QE 多在 SR21
GigaDevice 兆易创新 GD25Q / GD25LQ / GD25WQ 3.3 / 1.8 / 宽压 与 W25Q 高度 pin-to-pin 兼容
Macronix 旺宏 (MXIC) MX25L (3 V) / MX25U (1.8 V) / MX25R (超低功耗) 3.3 / 1.8 / 宽压 QE 常在 SR16,与华邦不同
ISSI IS25LP (3 V) / IS25WP (1.8 V) 3.3 / 1.8 QE 常在 SR16
Micron 美光 MT25Q / N25Q 3.3 / 1.8 无独立 QE 位,用增强型易失配置寄存器
Infineon / Cypress S25FL / S25FS 3.3 / 1.8 QE 常在 CR11,扇区结构可配置
Boya 博雅 BY25Q 3.3 / 宽压 国产替代,多兼容 W25Q
XTX 芯天下 XT25F 3.3 / 1.8 / 宽压 国产替代,多兼容 W25Q
Puya 普冉 PY25Q 3.3 / 宽压 国产替代,小容量性价比高
Fudan Micro 复旦微 FM25Q / FM25W 3.3 / 宽压 国产替代

"Pin-to-pin 兼容"不等于"寄存器兼容"

多数厂商在 SOP-8 / WSON-8 上引脚一致,但QE 位位置、dummy cycle 默认值、SFDP 内容、4 字节地址进入方式、软复位支持、块保护位定义 经常不同。做二供替代时必须逐条比对,并在软件里用 0x9F 读到的 JEDEC ID 分支处理。

1.2 封装与引脚定义

SOP-8 / WSON-8 / USON-8 引脚定义(顶视图)SPI NOR FlashSOP-8 / WSON-8 顶视XTX XT25F 系列(2.7~3.6 V)Pin 11 CS#2 DO / IO13 WP# / IO24 GND8 VCC7 HOLD# / RESET# / IO36 CLK (SCK)5 DI / IO0

图 1-1 八脚 SPI NOR 通用引脚定义(顶视,Pin 1 在左上)

建库必读:引脚定义各厂商不完全一致

上图是绝大多数 八脚 SPI NOR 的排布,但不能当成通用定义直接建库 。实际差异至少包括:

· 第 7 脚可能是 HOLD#、RESET#、HOLD#/RESET# 复用,也可能是纯 IO3;

· 部分 1.8 V 或大容量型号第 7 脚定义为 RESET# 且低电平会直接复位 ,若沿用 HOLD# 的处理方式会导致莫名复位;

· 少数型号存在 NC 或 VPP 等特殊脚;BGA-24 的球脚定义与八脚封装完全不同 。

规则:每一个新型号都必须逐脚核对目标 datasheet 的 Pin Configuration 章节,并在原理图库里标注型号与文档版本号。

引脚功能表(八脚封装)
脚位 Standard 名称 Quad 复用 方向 说明与设计要求
1 CS#(/CS、CE#) --- 输入 片选,低有效。必须 10 kΩ 上拉到 VCC,保证上电与主控 IO 未初始化期间不被误选中
2 DO(SO、MISO) IO1 输出 → 双向 数据输出;Dual/Quad 下变为双向 IO1
3 WP#(/WP) IO2 输入 → 双向 硬件写保护,低有效(配合 SRP/SRL 位)。建议 4.7 ~ 10 kΩ 上拉或由 GPIO 控制
4 GND(VSS) --- 电源 地,短粗走线直连地平面
5 DI(SI、MOSI) IO0 输入 → 双向 数据输入;Dual/Quad 下变为双向 IO0
6 CLK(SCK、SCLK) --- 输入 串行时钟。不上拉,串 33 Ω(与其余信号线取值一致)
7 HOLD# 或 RESET# IO3 输入 → 双向 暂停传输 / 硬件复位(按型号确认)。建议 4.7 ~ 10 kΩ 上拉或由 GPIO 控制
8 VCC(VDD) --- 电源 电源,0.1 µF 紧靠此脚 + 4.7 ~ 10 µF bulk

Quad 模式的代价:写保护与 HOLD 功能一起消失

一旦启用 Quad / QPI,第 3 脚与第 7 脚被复用为 IO2 / IO3 数据线,WP# 硬件写保护与 HOLD# 暂停功能同时失效 。因此:

· 若产品必须保留硬件写保护,只能用 Standard / Dual 模式,或改用软件保护(BP 块保护位 + SRL 状态寄存器锁定 + 个别扇区永久锁定) ;

· 若第 7 脚是 RESET#,启用 Quad 后硬件复位能力也随之消失 ,只能依赖软复位 0x66 + 0x99 或整机断电;

· 上述两点在 Bootloader 设计时必须提前决策,不要等到量产阶段再改。

常见封装
封装 本体尺寸 脚距 特点与适用
SOP-8 150 mil 约 3.9 × 4.9 mm 1.27 mm 最常用,手焊/返修友好,样机首选
SOP-8 208 mil 约 5.3 × 5.2 mm 1.27 mm 老型号大容量常用,面积大
WSON-8 6 × 5 6.0 × 5.0 mm 1.27 mm 薄型无引线,底部有散热/接地焊盘,面积省
WSON-8 8 × 6 8.0 × 6.0 mm 1.27 mm 大容量常见,同样带底部焊盘
USON-8 / XSON-8 约 4.0 × 3.0 mm(部分 2 × 3 mm) 0.8 mm 超小型,1.8 V 与穿戴产品常用,需精细 SMT
BGA-24 (TFBGA) 约 8.0 × 6.0 mm 球距 1.0 mm 256 Mb 以上大容量常见,球脚定义与八脚封装完全不同
DFN-8 / SOT-23-8 因厂商而异 --- 小容量特殊型号,需单独核对

WSON / USON 底部焊盘

底部大焊盘的处理各厂商标注不同:多数标为可接地或悬空 ,少数明确要求必须接 GND ,也有标为 NC 且不允许接地 的。做封装库前必查手册;不确定时优先接地并打 2 ~ 4 个过孔,同时确认手册未禁止。

1.3 关键电气参数

参数 典型范围 说明
VCC --- 3.3 V 系 2.7 ~ 3.6 V 最主流,与 3.3 V 主控直连
VCC --- 1.8 V 系 1.65 ~ 2.0 V 低功耗/高速型号,需 1.8 V IO 主控
VCC --- 宽压系 1.65 ~ 3.6 V 兼容性最好,选型优先(如 W25Q..JW、MX25R、XT25F..B)
VIH / VIL ≥ 0.7 × VCC / ≤ 0.3 × VCC 部分型号为 0.65 / 0.35 × VCC,以手册为准
最高时钟 50 / 80 / 104 / 133 / 166 MHz 速率档位;低压档常有降额(如 1.8 V 下限频)
读电流 ICC(read) 15 ~ 25 mA @ 104 MHz Quad 低频/单线时明显更低
编程 / 擦除电流 20 ~ 35 mA 峰值可更高,bulk 电容必须留足
待机电流 ISB 10 ~ 50 µA CS# 高、时钟停止
Deep Power-Down 1 ~ 15 µA 执行 0xB9 后;超低功耗型号可 < 1 µA
页大小 256 B 编程的最大连续单位,不可跨页
扇区 / 块 4 KB / 32 KB、64 KB 最小擦除单位为 4 KB 扇区
页编程时间 0.4 ~ 3 ms(typ 0.7 ms) 256 B 满页
扇区擦除 (4 KB) 30 ~ 100 ms(typ 50 ms) 最坏值差异大,超时判定要按 max
块擦除 (32/64 KB) 150 ~ 500 ms(typ 200 ms) ---
整片擦除 20 ~ 200 s(按容量) 量产烧录尽量避免
擦写耐久 100 000 次 / 扇区 参数区必须做磨损均衡
数据保持 20 年 @ 常温 高温显著缩短
tVSL(上电到首指令) ≥ 200 µs 量级 VCC 达 VCC(min) 后必须等待
tRES1 / tRES2(DPD 唤醒) 3 ~ 100 µs 量级 唤醒到可接受指令 / 可读的恢复时间
工作温度 -40 ~ 85 / 105 / 125 °C 车规与工业级注意速率降额

标称擦除时间(4KB 扇区 30--100 ms typ 50 ms、64KB 块 150--500 ms、整片 20--200 s)为代表性范围;超时判据须以目标料号 datasheet 的 max 为准(XT25Q512F:4KB 扇区擦除 max 2.5 s、64KB 块擦除 max 6 s、整片擦除 max 300 s),二者不可混淆。

2 · 接口与工作模式

2.1 六种模式对比

模式 占用引脚 线宽记法 命令-地址-数据 典型读命令 需 QE 关键说明
Standard SPI CS#、CLK、DI、DO(4 线) 1-1-1 0x03 Read 0x0B Fast Read 否 兼容性最好;0x03 通常限 33 ~ 50 MHz,提速须用 0x0B
Dual SPI + IO0/IO1 双向 1-1-2(0x3B) 1-2-2(0xBB) 0x3B / 0xBB 否 数据段 2 线;不占用 WP#/HOLD#,保留写保护,是折中方案
Quad SPI CS#、CLK、IO0 ~ IO3(6 线) 1-1-4(0x6B) 1-4-4(0xEB) 0x6B / 0xEB 是 命令仍 1 线;WP#/HOLD# 变数据线,硬件保护失效
QPI 同 Quad(6 线) 4-4-4 0x38 进入 0xFF 退出 是 命令/地址/数据全 4 线,命令开销从 8 clk 降到 2 clk;进入后指令编码变化,须记得退出
DTR / DDR 同 Quad(6 线) 1-4-4D / 4-4-4D 0xED / 0xEE(按型号) 是 时钟双沿传输,同频率吞吐翻倍;对等长、阻抗、dummy 配置最敏感,非必要不用
Octal SPI / OPI CS#、CLK、IO0 ~ IO7(10 线) + DQS、RESET# 1-8-8 8-8-8(OPI) 按型号,见 SFDP 是 数据段 8 线,166 MHz 约 166 MB/s、DTR @ 200 MHz 可达 400 MB/s;需 SOP-16 / BGA-24 封装且主控带 OSPI 控制器,命令集与 Quad 不兼容,详见 4.3

各读取模式指令帧结构与时钟周期数0x03 Read×1×1×164 clk0x0B Fast Read×1×1dummy×172 clk0x3B Dual Out×1×1dummy×256 clk0x6B Quad Out×1×1dummy×448 clk0xEB Quad I/O×1×4dum×428 clk0xEB QPI×4dum×422 clk命令 CMD地址 ADDR空周期 Dummy数据 DATA

图 2-1 六种读命令帧结构对比(数据段按"读 4 字节"折算,条内数字为该段总线宽度)

怎么读这张图

横向长度 = 完成一次"读 4 字节"所需的总时钟周期数 ,越短越快。可以看出:

· 0x03 → 0x0B 增加了 8 个 dummy 周期,但换来了成倍的最高频率上限,净收益为正;

· 从 0x6B(1-1-4)到 0xEB(1-4-4),地址段也走 4 线,48 clk 降到 28 clk,小块随机读提升最明显 ;

· QPI(4-4-4)把命令段从 8 clk 压到 2 clk,对大量小包随机读 / XIP 取指 收益最大,对长顺序读几乎没有区别;

· 数据量越大,命令+地址+dummy 的固定开销占比越小,所以顺序长读时各模式差距趋近于纯线宽比。

2.2 速率与吞吐计算

时钟频率 ×1 Standard ×2 Dual ×4 Quad / QPI ×4 DTR(双沿)
50 MHz 50 Mbps / 6.3 MB/s 100 Mbps / 12.5 MB/s 200 Mbps / 25 MB/s 400 Mbps / 50 MB/s
80 MHz 80 Mbps / 10 MB/s 160 Mbps / 20 MB/s 320 Mbps / 40 MB/s 640 Mbps / 80 MB/s
104 MHz 104 Mbps / 13 MB/s 208 Mbps / 26 MB/s 416 Mbps / 52 MB/s 832 Mbps / 104 MB/s
133 MHz 133 Mbps / 16.6 MB/s 266 Mbps / 33 MB/s 532 Mbps / 66.5 MB/s 1064 Mbps / 133 MB/s
166 MHz 166 Mbps / 20.8 MB/s 332 Mbps / 41.5 MB/s 664 Mbps / 83 MB/s 1328 Mbps / 166 MB/s
吞吐计算示例
复制代码
// 理论峰值(只看数据段)
Quad @ 104 MHz : 104 MHz × 4 bit = 416 Mbps ; 416 / 8 = 52 MB/s
Quad @ 133 MHz : 133 MHz × 4 bit = 532 Mbps ; 532 / 8 = 66.5 MB/s
DTR Quad @ 104 MHz : 104 × 4 × 2 = 832 Mbps ; 832 / 8 = 104 MB/s

// 实际有效吞吐(含命令/地址/dummy 开销),0xEB Quad I/O @ 104 MHz
帧开销 = 命令 8 clk + 地址 6 clk + M/dummy 6 clk = 20 clk
一个时钟 = 1 / 104 MHz = 9.6 ns

读 4 字节   : 数据 8 clk  → 共 28 clk  = 269 ns → 4 B / 269 ns   ≈ 14.9 MB/s
读 256 字节 : 数据 512 clk → 共 532 clk = 5.12 µs → 256 B / 5.12 µs ≈ 50 MB/s
读 4 KB     : 数据 8192 clk → 共 8212 clk = 79 µs → 4096 B / 79 µs ≈ 51.8 MB/s

别用峰值带宽做系统预算

如上所示,同样是 104 MHz Quad,4 字节随机读只有约 15 MB/s,256 字节起才接近 50 MB/s。XIP 取指多为小突发,实际取指带宽远低于峰值------这也是主控 QSPI 控制器普遍带 Cache、以及 QPI(把命令开销从 8 clk 压到 2 clk)在 XIP 场景更有价值的原因。此外还要扣除主控 QSPI 控制器自身的 CS# 建立/保持与总线仲裁开销。

2.3 模式切换流程

复制代码
/* ---------- 阶段 1:上电与识别(必须在低速下完成,建议 ≤ 20 MHz) ---------- */
1. VCC 上升到 VCC(min),等待 tVSL(≥ 200 µs)        // CS# 由 10k 上拉保持高
2. (可选) 发 0xAB 唤醒                              // 防止器件停留在 Deep Power-Down
3. 0x9F 读 JEDEC ID → 得到 制造商ID + 器件ID(2B)     // 校验型号,分支处理
4. 0x05 读 SR1,确认 WIP(bit0) = 0                   // 器件空闲
5. (推荐) 0x5A 读 SFDP,取容量/擦除粒度/dummy 配置   // 做通用驱动的正确姿势

/* ---------- 阶段 2:使能 Quad(QE 位) ---------- */
6. 读 QE 所在寄存器          // Winbond/GD 多为 0x35 读 SR2,MXIC/ISSI 多为 0x05 读 SR1
7. 若 QE = 0 :
     0x06                    // 写使能 WREN,置 WEL=1
     0x31 <SR2 | 0x02>       // 写 SR2,置位 SR2[1]=QE(Winbond/GD 典型)
                             // 或 0x01 <SR1 | 0x40> 置 SR1[6](MXIC/ISSI 典型)
                             // 或 0x01 <SR1><SR2> 两字节一起写(部分型号只支持这种)
     0x05 轮询直到 WIP = 0    // 写状态寄存器也需要时间(约 10~50 ms)
8. 回读确认 QE = 1           // 不回读=埋雷

/* ---------- 阶段 3:配置 dummy cycles 并提速 ---------- */
9. 按目标频率设置 dummy cycles                       // 部分型号写配置寄存器,部分型号固定值
10. 提高 SCK 到目标频率
11. 用 0x6B(1-1-4)或 0xEB(1-4-4)读;先读一段已知内容校验

/* ---------- 阶段 4(可选):进入 / 退出 QPI ---------- */
12. 0x38 进入 QPI            // 之后所有命令都是 4 线,指令时序变化
13. 0xFF 退出 QPI            // 复位/重启前务必退出,否则再上来读不到 ID

/* ---------- 阶段 5(>128 Mb 器件):4 字节地址 ---------- */
14. 0xB7 进入 4 字节地址模式   // 容量 > 16 MB 必须,否则只能访问低 16 MB
15. 0xE9 退出 4 字节地址模式
    // 也可用带 4 字节地址的专用命令(0x13/0x0C/0x6C/0xEC)避免模式切换

QE 位:不同厂商位置不同,抄错就是"Quad 全 0xFF"

使用 Quad / QPI 前必须置位状态寄存器中的 QE(Quad Enable)位 ,否则 IO2 / IO3 仍是 WP# / HOLD#,芯片不会驱动这两根线,读回来就是乱码或全 0xFF。常见位置:

厂商 / 系列 QE 位位置 写入命令
Winbond W25Q(多数) SR21(S9) 0x31 写 SR2,或 0x01 写两字节
GigaDevice GD25Q(多数) SR21 0x31 / 0x01
Macronix MX25L / MX25U(多数) SR16 0x01 写 SR1
ISSI IS25LP / IS25WP SR16 0x01
Infineon / Cypress S25FL CR11(配置寄存器) 0x01 写 SR1+CR1
Micron MT25Q 无独立 QE 位 增强型易失配置寄存器 0x61 / 0x65
XTX / BY / PY / FM(多数) 多为 SR21 0x31 / 0x01,仍需逐型号核对

另注意 QE 位可能是非易失(掉电保持) 的,写一次即长期有效;也有型号提供易失版本。软件应先读后判断再写,避免每次上电都做一次擦写、无谓消耗状态寄存器寿命。

关键命令速览
命令 名称 说明
0x9F Read JEDEC ID 返回制造商 ID + 器件 ID(2 B);上电自检必做
0x5A Read SFDP 读串行 Flash 可发现参数表,通用驱动的基础
0x06 / 0x04 Write Enable / Disable 每次编程、擦除、写状态寄存器前都要先发 0x06(置 WEL)
0x05 / 0x35 Read Status Reg1 / Reg2 SR1 bit0 = WIP(忙),bit1 = WEL;SR2 常含 QE
0x01 / 0x31 Write Status Reg 写 SR1 / SR2(含 QE、BP、SRP/SRL)
0x03 Read Data 低速读,无 dummy,通常限 33 ~ 50 MHz
0x0B Fast Read 带 8 dummy 周期,可跑到器件最高频率
0x3B / 0xBB Dual Output / Dual I/O 数据 2 线 / 地址+数据 2 线
0x6B / 0xEB Quad Output / Quad I/O 数据 4 线 / 地址+数据 4 线;需 QE=1
0x02 Page Program 页编程,≤ 256 B 且不可跨页边界
0x32 Quad Page Program 4 线页编程;需 QE=1,提速有限(受编程时间限制)
0x20 Sector Erase 擦除 4 KB 扇区,30 ~ 100 ms
0x52 / 0xD8 Block Erase 擦除 32 KB / 64 KB 块,150 ~ 500 ms
0xC7 / 0x60 Chip Erase 整片擦除,20 ~ 200 s
0x38 / 0xFF Enter / Exit QPI 进入 / 退出 4-4-4 模式
0xB7 / 0xE9 Enter / Exit 4-Byte Address > 128 Mb 器件访问全空间必需
0xB9 Deep Power-Down 进入超低功耗,电流降到 µA 级
0xAB Release Power-Down / Read ID 唤醒;也可返回 8 bit 器件 ID
0x66 + 0x99 Enable Reset + Reset 软复位(两条连发);部分型号需先使能
0x75 / 0x7A Erase/Program Suspend / Resume 擦除期间插入读操作,改善 XIP 实时性

CS# 时序:两个高频踩坑点

① 整条指令期间 CS# 必须保持低电平 。命令字节、地址、dummy、数据必须在同一次 CS# 拉低内连续完成;CS# 一旦拉高,指令立即被丢弃或提前结束(读操作会截断,写操作可能根本不生效)。

② 轮询状态寄存器时不要反复拉高 CS# 。正确做法是CS# 拉低 → 发 0x05 → 持续给时钟连续读同一个状态字节 → 直到 WIP=0 → 才拉高 CS#。反复"拉低-发 0x05-拉高"不但效率低,而且在某些型号/某些时序余量不足的板子上会出现读到过期状态、误判擦除完成、进而写入错误数据的问题。

③ 另外注意 CS# 拉高后到下次拉低之间的最小间隔 tSHSL(典型 20 ~ 50 ns),高速下由主控 QSPI 控制器参数保证。

3 · 电源设计

3.1 供电要求与去耦

项目 要求 理由
电压档位 3.3 V(2.7 ~ 3.6)/1.8 V(1.65 ~ 2.0)/宽压(1.65 ~ 3.6) 必须与主控 IO 电平一致
纹波 < 50 mVpp 编程/擦除对 VCC 敏感
高频去耦 0.1 µF X7R 0402/0603,紧靠 VCC 脚,走线 ≤ 2 mm 抑制开关噪声、供给瞬态电流
Bulk 电容 4.7 ~ 10 µF X5R/X7R 0603/0805,距器件 ≤ 10 mm 编程/擦除电流阶跃时稳压
磁珠 / 滤波电感 禁止串联 编程瞬态电流在磁珠上产生压降,导致 VCC 跌落、编程失败或数据损坏
RC 滤波 禁止在 VCC 串电阻 同上,且会拖慢上电斜坡
GND 短粗直连地平面,就近打过孔 降低回流路径电感
供电来源 与主控 IO 电源同一路 避免上电顺序倒挂导致 IO 倒灌

最常见的电源类问题:偶发写失败 / 数据翻转

症状是"平时都好,偶尔某个扇区写坏"。八成原因是缺 bulk 电容或串了磁珠:擦除瞬间电流从待机几十 µA 跳到 30 mA,若 VCC 跌破 VCC(min),器件内部高压泵中断,该扇区状态不确定。定位方法:示波器 AC 耦合、20 MHz 带宽限制,探头贴 VCC 与 GND 脚(不要用长地线),触发擦除并抓 VCC 跌落幅度。

3.2 上电 / 掉电时序

上电时序(VCC 斜坡 → tVSL → 首条命令)VCCCS#SCK / 命令上电期间 CS# 由 10k 上拉为高首条命令(如 0x9F 读 ID)单调上升,禁止台阶tVSL(VCC 稳定 → 首条命令)

图 3-1 上电时序:VCC 斜坡、tVSL 等待与首条命令

上电要求
  • VCC 单调上升,中途不得有台阶或回落。上升过程中若跌回 VCC(min) 以下再爬升,器件内部上电复位电路可能未正确触发,表现为读 ID 失败或状态寄存器异常。
  • 上升时间 tVR 需在手册范围内(常见 1 µs ~ 10 ms/V)。上升过慢(例如经大电阻或慢启动 LDO)同样可能导致内部复位不完整。
  • VCC 到 VCC(min) 后必须等待 tVSL(≥ 200 µs 量级)才允许拉低 CS#。软件里体现为"上电后先 delay,再发第一条命令"。
  • CS# 在整个上电过程中必须保持高------这正是 CS# 必须 10 kΩ 上拉到 VCC 的原因:主控 IO 在复位期间通常是高阻,没有上拉时 CS# 电平不确定,可能被误判为选中,从而把上电噪声当成指令执行。
  • 主控 IO 电源与 Flash VCC 必须同时上电或 Flash 先上电。若主控 IO 先上电而 Flash VCC 未上,电流会通过 Flash 的 IO 端 ESD 二极管倒灌进 VCC,造成器件半上电、锁死或漏电。
掉电与重新上电
  • 擦除 / 编程期间禁止掉电。掉电会使该页或扇区数据处于不确定状态(既不是旧值也不是新值),且不会有任何错误标志。
  • 重新上电前,VCC 必须降到手册规定的门槛以下并保持 tPUW(典型 1 ~ 10 ms)。"快速掉电再上电"是欠压复位不干净的典型场景,会导致器件停在异常模式(例如仍处于 QPI 或连续读模式)而读不到 ID。
  • 若系统存在频繁热插拔或掉电重启,建议:外部欠压检测(或主控 BOR)+ 断电前主动完成收尾 + 上电后先发软复位(0x66+0x99)或 0xFF 再读 ID。

3.3 低功耗与 Deep Power-Down

功耗状态与转换指令上电 / 复位工作 Active15 ~ 35 mA待机 Standby10 ~ 50 µADeep Power-Down1 ~ 15 µACS# 拉高发新指令0xB90xAB唤醒:0xAB + 3 dummy byte + tRES

图 3-2 功耗状态机:待机、Deep Power-Down 与唤醒

SPI NOR 相对 SD NAND 的低功耗优势

SPI NOR 自带 Deep Power-Down 指令 0xB9 ,一条命令就能把电流从待机的 10 ~ 50 µA 压到 1 ~ 15 µA (超低功耗型号如 MX25R 可到 < 1 µA),且无需任何额外硬件 。而 SD NAND / eMMC 这类带内部控制器的器件通常没有等效休眠指令,空闲电流下不去,必须靠外部 VCC 负载开关物理断电才能省电------多一颗器件、多一路 GPIO、还要处理 IO 倒灌与上电重新初始化。做电池产品时这是选 SPI NOR 的一个实质理由。

DPD 使用要点
  • 进入 :CS# 拉低 → 发 0xB9 → CS# 拉高 → 等待 tDP(典型 3 µs)后电流才降下来。进入前必须确认 WIP = 0 ,编程/擦除进行中发 0xB9 会被忽略。
  • 唤醒 :CS# 拉低 → 发 0xAB → 再发 3 个 dummy byte → CS# 拉高 → 等待 tRES1 / tRES2(µs 级,常见 3 ~ 30 µs,部分型号可达 100 µs 量级)后才可接受下一条指令。只发 0xAB 不给 dummy byte,或不等 tRES 就发下一条命令,是"唤醒不了 / 唤醒后第一条命令失败"的典型原因。
  • DPD 期间除 0xAB 外所有指令都被忽略 。软件里必须自己记住"当前处于 DPD"这个状态;上电流程建议无条件先发一次 0xAB 再读 ID,避免上一次异常复位遗留在 DPD 里。
  • 若系统要求整机静态电流 < 1 µA,而所选型号 DPD 电流为 10 µA 量级,才需要上 VCC 负载开关。
低功耗方案对比
方案 静态电流 硬件成本 唤醒/恢复代价 适用场景
常供电 + 待机(CS# 高、停时钟) 10 ~ 50 µA 零 无 市电供电、常规产品
**常供电 + DPD(0xB9)**推荐 1 ~ 15 µA 零(纯软件) 0xAB + tRES,µs 级 电池产品首选
选超低功耗型号 + DPD < 1 µA 零(选型溢价) 同上 纽扣电池、长待机
高边负载开关切断 VCC < 1 µA(含开关漏电) +1 颗负载开关 + 1 路 GPIO 重新上电 + tVSL + 重新初始化(含 QE、4 字节地址等全部易失设置) 要求极致静态电流
PMOS + GPIO 自搭开关 < 1 µA +PMOS+2 电阻 同上,另需注意栅极上拉与开关摆率 成本敏感且必须断电
LDO EN 控制 取决于 LDO 关断电流 复用已有 LDO 同上 已有独立 LDO 供 Flash

若采用 VCC 断电方案,切电前必须处理 IO

断开 VCC 之前,必须把 CS#、CLK、DI 全部置为低电平或高阻 ,并断开上拉电阻的供电(上拉必须接在被开关后的 VCC 上,而不是主 3.3 V)。否则主控输出的高电平会通过 Flash IO 脚的 ESD 二极管倒灌到已断电的 VCC 网络,实测漏电可达 50 ~ 500 µA,等于白做断电。另外,断电会丢失所有易失设置(QE 若为易失版本、4 字节地址模式、连续读模式、dummy 配置),恢复后必须重新走一遍初始化流程。

4 · 典型应用电路

4.1 标准 SPI 四信号接法

标准 SPI(1-1-1)最小系统接法VCC (3.3 V 或 1.8 V)主控 MCUSPIx_NSSSPIx_SCKSPIx_MOSISPIx_MISOSPI NOR FlashXT25F64F 系列1 CS#6 CLK5 DI (IO0)2 DO (IO1)3 WP# / IO27 HOLD# / IO333R33R33R33R四根信号线均串 33 Ω(可选)10k10k10k8 VCC0.1µF4.7µF10k10k4 GND

图 4-1 标准 SPI(1-1-1)四信号最小系统接法

图 4-1 设计说明

  • CS# 上拉 10 kΩ 到 VCC 是硬性要求 ,且必须接在与 Flash 同一路的 VCC 上。上拉点应放在串阻之后、靠近 Flash 一侧。
  • DI / DO(IO0 / IO1)建议 10 kΩ 上拉:这两根是双向数据线,命令/地址周期或 CS# 拉高导致 DO 变高阻时可能浮空,弱上拉可避免误锁存;若主控与器件在空闲期会主动驱动,可留焊盘不贴。
  • WP# / IO2、HOLD# / IO3 各用 10 kΩ 上拉到 VCC (不用其功能时)。若需要软件控制写保护,改为主控 GPIO 直连并保留上拉,保证主控复位期间仍为高(不写保护、不 HOLD)。切勿悬空 ------悬空脚易被噪声拉低,表现为莫名的传输停顿(HOLD#)、写失败(WP#)或直接复位(若该脚是 RESET#)。标准 SPI 接法下这两根只上拉、不接主控,所以图中没有串阻位 ;一旦改由主控驱动(即图 4-2 的 Quad 接法,此时它们是 IO2 / IO3),就与其余信号线同样各串 33 Ω。
  • 四根信号线(CS#、CLK、DI、DO)一律串 33 Ω ,每条一只,不允许只串其中一部分 。串阻放在源端、紧靠驱动侧输出脚:CS#、CLK、DI 由主控驱动,电阻靠近 主控 ;DO 由 Flash 驱动,电阻靠近 Flash 。作用是抑制过冲与 EMI,为可选端接 ------低速或走线很短时可省掉,但 Layout 仍要四根全部预留焊盘,避免改板时补不进去。
  • SCK 不加上拉也不加下拉。加上拉会在时钟边沿引入额外容性负载与不对称过冲;SPI 空闲电平由主控模式(Mode 0 / Mode 3)决定,不需要外部器件维持。
  • 去耦:0.1 µF 紧靠第 8 脚(走线 ≤ 2 mm),4.7 ~ 10 µF bulk 就近放置。两只电容的另一端都必须显式接地并就近打过孔。
  • 此接法保留了 WP# 硬件写保护与 HOLD# 功能,是 Bootloader / 参数区 / 对可靠性要求高的场合的推荐接法。

4.2 Quad SPI 六信号接法

Quad SPI(1-4-4 / 4-4-4)六信号接法VCC (3.3 V 或 1.8 V)主控 QSPI 控制器QSPI_NCSQSPI_CLKQSPI_IO0QSPI_IO1QSPI_IO2QSPI_IO3SPI NOR FlashXT25F64F 系列 · Quad / QPI1 CS#6 CLK5 IO0 / DI2 IO1 / DO3 IO2 / WP#7 IO3 / HOLD#33R33R33R33R33R33R六根信号线均串 33 Ω(可选)等长六根串阻取值一致,均靠驱动端放置10k4.7k4.7k4.7k4.7k上拉到 VCC:CS# 10k,IO0~IO3 4.7k8 VCC0.1µF4.7µF4 GND

图 4-2 Quad SPI(1-4-4 / 4-4-4)六信号接法

图 4-2 设计说明

  • IO0 ~ IO3 全部建议 4.7 kΩ 上拉 (图中已画出,CS# 用 10 kΩ)。Quad 下这四根是高速双向数据线,上拉取值的逻辑是在保证边沿速度的前提下尽量强,以压住浮空与干扰 :4.7 kΩ 对 133 MHz QSPI(单线负载 15 pF 量级)的边沿影响仍在余量内,是本指南的统一推荐值;不要用 47 kΩ 一类过弱的上拉 ,长走线或多负载场景下抗干扰能力明显不足。在 QE 尚未置位的上电初期,IO2 / IO3 仍是 WP# / HOLD# ,此时若高阻会有风险。若主控 QSPI 在空闲期会主动驱动这几脚,也可留焊盘不贴,但仅在充分验证后使用;电池供电、对漏电敏感的场景可放宽到 10 kΩ,默认建议贴 4.7 kΩ。
  • 上拉点必须放在串阻之后(靠近 Flash 一侧)。若接在串阻的主控侧,上拉电流要穿过串阻,会与器件侧形成分压,空闲电平被拉不到 VCC。
  • 六根信号线(CS#、CLK、IO0 ~ IO3)一律各串一只 33 Ω (图中已画出,共 6 只,标为 33R),取值一致、不留例外。IO0 ~ IO3 在 Quad 下与 CS# / CLK 一样都是高频信号,只给其中一部分配串阻会造成组内的边沿速率不一致,反而把 skew 拉大------这是本图最常见的画错方式。
  • 串阻为可选端接,但六根要留就全留、要省就全省 。低速或走线很短时可贴 0 Ω,Layout 仍建议六根全部预留焊盘 ,避免改板时补不进去。放置位置遵循「靠近驱动端」:CS#、CLK 由主控驱动,靠主控放;IO0 ~ IO3 是双向线,读周期由 Flash 驱动,若走线较长(> 50 mm)或速率 ≥ 104 MHz,建议靠近 Flash 一侧放置,对回读方向的反射抑制更直接。
  • 贴装值按实测调整,不要靠猜 :33 Ω 是默认起点;若眼图过冲仍超标,优先降低主控 IO 驱动强度(slew rate / drive strength 寄存器),其次才调整串阻(可下调到 22 Ω)。若边沿过缓、眼宽不足,则反过来把串阻降到 10 ~ 22 Ω 或改贴 0 Ω。
  • CLK 与 IO0 ~ IO3 五根线必须等长:104 MHz 以下 ±1.27 mm 即可;133 MHz 建议 ±1.0 mm;166 MHz 或 DTR 模式建议 ±0.6 mm。等长的基准是 CLK。
  • CS# 不参与等长约束(它不是逐周期采样的信号),但仍应与 CLK 长度接近,避免建立/保持余量被吃掉。
  • 本接法失去 WP# 硬件写保护与 HOLD#(或 RESET#)功能 ,需要写保护时改用状态寄存器的 BP / SRL 位,需要复位时用 0x66 + 0x99 软复位。
  • 软件上必须先完成 QE 置位 才能使用 0x6B / 0xEB;初始化阶段(读 ID、读 SFDP、写 QE)仍走 Standard SPI 低速路径。

4.3 Octal SPI(8 线 / OPI)接法

Quad(4 线)在 133 MHz 下约 66 MB/s,已接近其架构上限。当 XIP 片上取指 、大字库 / UI 资源加载 、快速开机 等场景要求更高吞吐时,需要把数据总线从 4 位拓宽到 8 位,即 Octal SPI(常写作 OPI 或 8-8-8):

模式 时钟 有效速率 折算吞吐 相对 Quad
Quad SDR 133 MHz 4 bit × 133 MHz ≈ 66 MB/s 基准
Octal SDR 133 MHz 8 bit × 133 MHz ≈ 133 MB/s 2.0 ×
Octal SDR 166 MHz 8 bit × 166 MHz ≈ 166 MB/s 2.5 ×
Octal DTR(双沿) 200 MHz 8 bit × 2 × 200 MHz ≈ 400 MB/s 6.0 ×

8 线不是 Quad 的简单扩展,三个硬前提缺一不可

① 主控必须带 OSPI / XSPI / Octal 控制器。 普通 QSPI 外设想不出 8 位数据总线,靠 GPIO 软件模拟完全跑不到这个速率。② Flash 必须是多引脚封装。 8 个引脚的 SOP-8 / WSON-8 封装最多只能做 Quad(VCC、GND、CS#、CLK 之后只剩 4 根 IO),8 线数据总线至少需要 SOP-16(300 mil)或 BGA-24(6×8 mm) 。③ 命令集与 Quad 不兼容。 8 线模式有独立的操作码与使能位,不是把 QE 置起来就能用,必须读 SFDP 确认支持哪一组命令(常见有两组:一组兼容 SPI 生态、一组兼容 HyperBus 生态),且上电默认一定是 1 线模式。

Octal SPI(1-8-8 / 8-8-8)十信号接法VCC(Octal 器件多为 1.8 V,3.3 V 档见型号表)主控 OSPI 控制器OSPI_NCSOSPI_CLKOSPI_IO0OSPI_IO1OSPI_IO2OSPI_IO3OSPI_IO4OSPI_IO5OSPI_IO6OSPI_IO7OSPI_DQSRESET# 另用 GPIO 驱动Octal SPI NOR FlashXT25F256BSFIGT · SOP-16 300mil1 CS#6 SCLK5 IO0 / SI2 IO1 / SO3 IO2 / WP#9 IO310 IO411 IO512 IO613 IO714 DQS7 RESET#8 VCC | 4 GND33R33R33R33R33R33R33R33R33R33R33R十一根信号线均串 33 Ω(可选)等长(10 根)10k4.7k4.7k4.7k上拉到 VCC:CS# 10k,IO0~IO7 与 DQS 各 4.7k(共 9 只)IO1~IO6 上拉同 IO08 VCC0.1µF4.7µF4 GNDCS#、CLK、IO0 ~ IO7 与 DQS 共十一根线全部串 33 Ω,取值一致、不留例外;均为可选端接,靠驱动端放置。引脚编号为通用示意,务必按所选型号 datasheet 核对。

图 4-3 Octal SPI(1-8-8 / 8-8-8)十信号接法。引脚编号为 Octal SOP-16 的通用示意,不同厂商 / 型号顺序不统一,建库前必须逐型号核对 datasheet。

图 4-3 设计说明

  • IO0 ~ IO7 与 DQS 共 9 根全部 4.7 kΩ 上拉 (CS# 用 10 kΩ)。上电初期器件仍在 1 线模式,未用到的高位 IO(IO4~IO7)可能处于高阻或默认功能,上拉可避免浮空。上拉点必须在串阻之后的器件侧 ,否则上拉电流穿过串阻会形成分压,空闲电平拉不到 VCC。漏电核算 :9 只 4.7 kΩ 全部为低时理论最大 3.3 V ÷ 4.7 kΩ × 9 ≈ 6.3 mA,实际数据线绝大多数时间为高,常态远小于此值;电池供电场景可放宽到 10 kΩ,不建议用 47 kΩ------8 线并行走线下过弱的上拉会让空闲电平易受串扰。
  • 十一根信号线(CS#、CLK、IO0 ~ IO7、DQS)一律各串一只 33 Ω (图中已画出,共 11 只,标为 33R),取值一致、不留例外。八线设计里最容易出的问题是「只给 CS# / CLK 配串阻、数据线裸奔」:数据线在 8 线并行下相互串扰更强,组内边沿速率不一致会直接吃掉 DTR 本来就紧的建立/保持窗口。全串之后 RC 延迟是成组增加的,等长组一起补偿即可;只串一部分反而是组内 skew 的来源。
  • 串阻为可选端接,但十一根要留就全留、要省就全省 。166 MHz SDR 以下、走线 < 30 mm 时可贴 0 Ω;Layout 建议十一根全部预留焊盘 ------BGA-24 扇出空间紧张,后期想补焊盘几乎没有余地。放置位置:CS#、CLK 靠主控;IO0 ~ IO7 与 DQS 是双向线,读周期由 Flash 驱动,建议靠近 Flash 一侧放置,对回读方向的反射抑制更直接。
  • 贴装值按实测调整 :33 Ω 是默认起点。若眼图过冲超标,优先 降低主控 IO 驱动强度(slew rate / drive strength 寄存器),其次下调串阻到 22 Ω;若边沿过缓、眼宽不足(8 线 DTR @ 200 MHz 尤其容易),反过来把串阻降到 10 ~ 22 Ω 或改贴 0 Ω,并复核走线阻抗是否控制在 50 Ω ±10%。DQS 尤其敏感:它决定采样窗口位置,调 DQS 串阻后必须重新确认主控侧的读训练结果。
  • 等长组扩大到 10 根 (CLK + IO0~IO7 + DQS),这是 8 线设计最容易低估的地方:Quad 只需绕 5 根,Octal 要绕 10 根,BGA-24 封装下扇出空间紧张,通常至少需要 4 层板 。公差建议:133 MHz SDR ±0.5 mm;166 MHz SDR ±0.4 mm;DTR @ 200 MHz ±0.25 mm,且必须做阻抗控制(单端 50 Ω ±10%)。
  • DQS 的处理要单独确认 :DQS 是数据选通,主控用它来采样数据,其长度与数据线的关系取决于主控 OSPI 控制器的要求 ------有的要求 DQS 与数据线严格等长,有的要求 DQS 略长(约 0.1 ~ 0.5 mm)以保证采样窗口居中。**这一条必须查主控手册,不能照抄 Quad 的经验。**SDR 低速模式下 DQS 可不用,此时该脚建议 4.7 kΩ 上拉或按 datasheet 处理,不要浮空。
  • RESET# 建议由主控 GPIO 驱动 并加 10 kΩ 上拉。8 线 + XIP 场景下,一旦通信异常,主控可能失去对整个总线的控制,硬件 RESET# 是最后的恢复手段 (软件复位 0x66 + 0x99 在总线已乱时未必能发出去)。不用 RESET# 时不要浮空,直接上拉到 VCC。
  • 8 条数据线必须同组同层走线,禁止跨电源分割、禁止在其中某几条上绕远路补偿长度而把组内 skew 拉大。换层次数全组保持一致,每次换层配一对回流地过孔。
  • 软件初始化顺序不可跳步 :上电默认 1 线 → 读 JEDEC ID → 读 SFDP 确认该器件支持哪一组 8 线命令 → 按 SFDP 指示配置对应使能位(不是 Quad 的 QE)与 dummy cycles → 切 8 线并低速验证 → 逐档提频。dummy 在 8 线 DTR 下比 Quad 更敏感,宁多勿少。

4.4 XTX 8 线(Octal / OPI)器件选型

下表为 XTX 产品库中可用于 Octal 8 线设计的型号,按封装与电压档归类。状态列请重点关注------部分型号仍在 CS / UD 阶段,量产项目须先确认转 MP 进度。

封装 型号 容量 电压 状态 说明
SOP-16 300 mil 推荐 XT25F256BSFIGT XT25F256BSFIGU 256 Mb 2.7~3.6 V MP 3.3 V 系统首选,引脚可见、易焊接易飞线,适合工控与调试阶段
SOP-16 300 mil 推荐 XT25W512BSFIGA 512 Mb 1.65~3.6 V MP 宽压,可同时兼容 1.8 V / 3.3 V 系统
SOP-16 300 mil 推荐 XT25Q512FSFIGA 512 Mb 1.7~2.0 V MP 1.8 V 系统主力,512 Mb 大容量
SOP-16 300 mil 推荐 XT55Q1GFSFIGA 1 Gb 1.7~2.0 V CS 容量上限型号,量产前须确认转 MP 进度
BGA-24 6×8 mm XT25Q512FBGIGA 512 Mb 1.7~2.0 V CS 面积最小,需 4 层板 + 完整扇出;必须 X-Ray 检焊
BGA-24 6×8 mm XT55Q1GFBGIGA 1 Gb 1.7~2.0 V UD 在研,不建议新项目选用
BGA-24 6×8 mm XT55Q2GFBGIGA 2 Gb 1.7~2.0 V SS 送样阶段,仅可用于预研

封装与位宽强相关,别按容量选型

SOP-8 / WSON-8 / DFN-8 这类 8 引脚封装无论容量多大,都只能做到 Quad(4 线) 。选型时判断依据不是容量,而是封装引脚数 :只有 SOP-16(300 mil)与 BGA-24(6×8 mm) 才具备 IO4 ~ IO7,能真正跑 8 线。反过来,如果主控只有 QSPI 外设,选 SOP-16 器件也只会浪费 IO4~IO7,此时应回到 4.2 的 Quad 方案。

4.5 1 路 SPI 访问多个 SPI 设备

一颗主控的 QSPI 控制器只有一组 SCK / IO0~IO3,但板子上往往不止一片 SPI 器件。共享总线 + 独立片选是最基本的做法,可一旦片数变多,就会牵出四个连锁问题:主控 CS# 不够用、未被选中的器件把总线电容堆高、不同器件的电压域和模式不一致、换片瞬间两片同时抢总线。这一节把这四件事逐个拆开,给出可直接照着画的原理图与取值。

这一节的适用范围

默认主控是一颗 QSPI 控制器、从设备是同一电压域、同类型的 SPI NOR。若总线上还混了传感器、SPI NAND、不同电压的器件,请额外看 4.5.6;因为混合总线会引入这一节没有的约束。

4.5.1 什么时候需要在一路 SPI 上挂多片

先确认你真的需要多片。多片带来的 Layout 复杂度、时序风险和调试成本,往往比「换一颗更大容量的单片」要贵。

场景 为什么不能只用一片 对硬件设计的实际要求
容量不够 单片密度到顶(如 128 Mb 已是该系列上限),而 BOM 又不想换接口 两片地址空间在软件层拼接;硬件上只要求都能被独立选通
A / B 双备份 OTA 升级失败必须能回滚,正在运行的那片不能被擦写 两片完全对等;CS# 必须真正独立,绝不能用译码器把两片并成一片
代码与数据分离 XIP 运行时若同一片在擦写,读会被长时间阻塞 代码片放 XIP 区只读,数据片承担频繁擦写;两片可同容量
混合外设共用 上电早期只有一路 SPI 可用,传感器、扩展 IO 也要挂上来 见 4.5.6:频率取最小值、模式要逐次切换、注意非标准从设备
成本 / 供货 两片小容量比一片大容量便宜,或大容量料号交期太长 纯成本决策,但要先算清 4.5.8 的负载预算,别到 PCB 阶段才降频

能避就避的一种情况

如果只是为了容量,优先换成更大容量的单片,或换成 Octal / 更高密度的系列 。多片方案会永久占用主控 GPIO、增加 Layout 难度,并且把总线速率拉下来(见 4.5.8)。多片真正的价值在于隔离------备份、读写分离、电压域隔离,而不是单纯堆容量。

4.5.2 四种拓扑:先定「片选从哪来,总线要不要隔离」

所有多设备方案,本质上只回答两个问题:片选信号怎么产生 ,以及共享总线要不要被切开。这两个问题的组合给出下面四种拓扑。

1 路 SPI 挂多个设备的四种拓扑:差别只在「片选怎么来,总线要不要隔离」A 独立 CS#(GPIO 直驱)MCU直驱(无额外器件)SPI NOR #1SPI NOR #2SPI NOR #3共享总线 SCK / IO0~IO3CS# 各一根占用主控 IO:总线 4 + 每片 1 根 CS#适合片数:2 ~ 4(再多就吃不消)主要代价:片数线性吃掉 GPIOB 译码器扩展(3 → 8)MCU74LVC1383 根地址线 → 8 个 CS#SPI NOR #1SPI NOR #2SPI NOR #3共享总线 SCK / IO0~IO3片选来源占用主控 IO:总线 4 + 地址 3 + 使能 1适合片数:5 ~ 8(级联可更多)主要代价:多一颗逻辑,CS# 多 5.8 ns 延迟C 移位寄存器扩展MCU74HC5953 根 SPI → 8 位并行 CS#SPI NOR #1SPI NOR #2SPI NOR #3共享总线 SCK / IO0~IO3片选来源占用主控 IO:总线 4 + 595 的 3 根适合片数:8 ~ 24(可多级串联)主要代价:切换要重写寄存器,不适合频繁换片D 总线开关 / 电平转换隔离MCU总线开关把总线切成 2 ~ 4 段SPI NOR #1SPI NOR #2SPI NOR #3共享总线 SCK / IO0~IO3片选来源占用主控 IO:总线 4 + 选择 1 ~ 2适合片数:分 2 ~ 4 组,组内各自扩展主要代价:Ron + 带宽上限,且要隔离才划算

图 4-4 1 路 SPI 挂多个设备的四种拓扑。SCK / IO0~IO3 始终是共享总线,四种方案的差别在于片选的产生方式与总线是否被隔离。

拓扑 占用主控 IO 适合片数 切换开销 什么时候该选它
A 独立 CS# 直驱 总线 4 + 每片 1 根 CS# 2 ~ 4 零(GPIO 直接翻转) 默认方案。片数少、切换频繁时无可替代
B 译码器扩展 总线 4 + 地址 3 + 使能 1 5 ~ 8(级联更多) 低(写一次 GPIO 端口) 片数 5 片以上,且切换频繁、要求纳秒级响应
C 移位寄存器扩展 总线 4 + 595 的 3 根 8 ~ 24(可多级串联) 高(要串行移位 8~24 bit) 片数极多、但切换不频繁(选中后连续大块读写)
D 总线开关 / 电平转换隔离 总线 4 + 选择 1 ~ 2 分 2 ~ 4 组 低 电压域不同、有器件会拖死总线、或某组要单独断电

选型口诀

  • 4 片以内 → 直接 A,别为了省 GPIO 上译码器,得不偿失。
  • 5 ~ 8 片 → B,3 根地址线换 8 个片选,切换还是 GPIO 级速度。
  • 8 片以上、切换少 → C ;8 片以上、切换频繁 → B 级联(两片 138 用使能脚分层)。
  • 只要电压域不同 → 必须 D,这与片数无关,是硬约束。
4.5.3 拓扑 A:独立 CS# 直驱的接线规则

两片时几乎没有代价,四片时就要开始算账了。下图是两片的接法,挂 N 片同理------再增加 N−2 个 CS# 与对应的 Flash 即可。

VCC (3.3 V)MCU / SoCFlash U1SCK / IO0~IO3 共享Flash U2SCK / IO0~IO3 共享RpuCS0 选通 U1(独立,上拉)CS1 选通 U2(独立,上拉)SCK / IO0~IO3 共享总线主控 QSPI 控制器

图 4-6 74LVC138 译码器扩展 CS#:主控用 3 根地址线 + 1 根使能换 8 路低有效片选,SCK / IO0~IO3 仍是唯一的一条共享总线。

器件 功能 输出极性 供电范围 关键参数 适用
74LVC138A 3 → 8 译码 低有效 1.65 ~ 3.6 V tpd ≤ 5.8 ns @ 3.3 V;输入可耐 5.5 V 首选,输出极性天然就是 CS#
74LVC139 双 2 → 4 译码 低有效 1.65 ~ 3.6 V 与 138 同系列 需要两组彼此独立的 4 选 1 时
74HC154 4 → 16 译码 低有效 2 ~ 6 V 速度低于 LVC 系列 片数到 16 且总线速率不高时
74HC595 串入并出 8 位 高有效 2 ~ 6 V 需 3 根控制线,切换要移位 片数极多、切换不频繁(见下文警告)

上电 / 复位期间译码器会误选通

主控 GPIO 在上电到初始化完成之前处于高阻或未定义状态,138 的 A / B / C 输入电平不确定,输出可能是任意一个 Y 为低------也就是某片 Flash 被意外选中,总线上的第一条指令会误打进去。如果这个窗口里 SCK 有杂散跳变,甚至可能触发误擦写。

**解法:用 G1(高有效使能)门控。**G1 用一路带下拉的 GPIO 驱动,上电默认为低 → 138 全部输出为高 → 所有片都不选通;等地址线 GPIO 配置完成、电平稳定之后再拉高 G1。G2A# / G2B# 直接接地常开。代价只是一根 GPIO 和一个下拉电阻。

译码器的时序代价不是零

74LVC138A 在 3.3 V 下的最大传播延迟是 5.8 ns (TI 数据手册)。而 133 MHz 的时钟周期只有 7.5 ns------这个延迟占了整整 77% 的周期,必须计入 CS# 相对 SCK 的建立 / 保持预算(见 4.5.7)。如果预算算不过来,就把总线降到 104 MHz 或更低,或者改用 GPIO 直驱 CS#(拓扑 A)。

另外,138 的 VCC 必须与主控 GPIO 同一电压域;若不同域,需要先做电平转换,那又多一级延迟。

C 挂到几十片:移位寄存器扩展

用 74HC595 之类把片选「串」出去,3 根线(SDI / SCLK / LATCH)理论上可以扩到任意多位,多级串联即可。它的代价是切换片选要串行移 8 ~ 24 bit,因此只适合「选中之后连续大块读写、不常换片」的应用。

74HC595 的输出是高有效,直接接 CS# 会出事

CS# 是低有效 ,而 595 的并行输出是高有效。直接连上的后果是「选中的那片反而不通,其余七片全被选通」------八片同时驱动 MISO,总线直接打死。必须做下面两件事之一:

  • 硬件反相:595 输出后串一级 74LVC04 / 74HC04 反相器(推荐,行为确定)。
  • 软件取反 + OE# 门控 :发送数据前按位取反,同时把 595 的 OE# 用上拉拉高,使上电期间输出为高阻,各 CS# 靠自己的上拉保持高电平(不选通);初始化完成后再拉低 OE#。注意软件取反在复位窗口内仍然不可靠,能加反相器就加。
4.5.5 布线拓扑:星型分支 vs 链式 Fly-by

原理图连对了,Layout 还能把它毁掉。同一段总线有两种走法,差别在于分支点放在哪。

同一段总线,两种走法:分支点在哪,决定了 Stub 和反射在哪A 星型分支(推荐)分支点尽量靠近主控,各支线等长;每个分支末端只挂一个负载MCUQSPI主干SPI NOR #1SPI NOR #2SPI NOR #3Stub 等长 L每段只带1 个负载6 ~ 8 pFB 链式 / Fly-by(谨慎使用)主干依次穿过各器件焊盘,省走线面积,但负载沿线累加、阻抗反复跳变MCUQSPISPI NOR #1短线(Stub)SPI NOR #2短线(Stub)SPI NOR #3短线(Stub)负载沿线累加每段走线都带前级全部负载注意:SPI NOR 不支持协议级「移位菊链」(那是 JTAG / LED 驱动的方式)。这里的「链式」只指 PCB 走线方式,各片仍必须各有独立 CS#。

图 4-7 多设备布线拓扑。星型分支各支线等长、每个分支只带一个负载;链式 Fly-by 主干依次穿过各器件焊盘,负载沿线累加。

对比项 A 星型分支 B 链式 / Fly-by
走线长度 较长,需要更多布线面积 较短,主干一条穿过去
各片负载分布 每个分支末端只挂 1 个负载 每段走线都带着前级全部负载
阻抗连续性 分支点处一次突变 每个器件焊盘处都突变一次
等长难度 各支线等长即可,主控需有余量 天然先后到达,各片时序本就不一致
适用 133 MHz 及以下的绝大多数场合 板面积紧张、频率 ≤ 50 MHz、片数 ≥ 3

Layout 硬规则

  • 分支点尽量靠近主控 ,主干越短越好;Stub(从分支点到器件焊盘的支线)建议 ≤ 5 mm,超过后反射会明显吃掉眼图裕量。
  • 各支线等长:SCK 与 IO0 ~ IO3 按 4.2 的等长组约束;不同片之间的支线长度也尽量一致,避免「第一片能跑 133 MHz、第四片只能跑 80 MHz」。
  • 总线下方地平面必须完整,不允许被电源分割槽切断;换层处 200 mil 内要有回流地孔。
  • 各片去耦电容紧贴各自 VCC,回流路径最短。

SPI NOR 不支持协议级「移位菊链」

JTAG、LED 驱动芯片(如 74HC595 级联)那类器件把 SDO 接到下一级 SDI、数据逐级往下传,这叫协议级菊链。SPI NOR Flash 没有这个模式 ------每片都必须各自收到完整的命令 + 地址,因此每片必须有独立的 CS# 。本文档里说的「链式 / Fly-by」仅指 PCB 走线方式,与协议无关,不要混为一谈。

4.5.6 拓扑 D:混合电压域与总线隔离

只要总线上有一个器件与主控不同电压域(比如 1.8 V 主控挂 3.3 V Flash),或者混了非存储类从设备,就必须引入隔离 / 转换。这一步加错了器件,比不加还糟。

混合电压域共享总线:转换器放总干线上,还是每个分支各放一套?A 转换器放在共享总干线上(推荐)一次转换,所有器件共用;器件少、成本低MCU1.8 V 域SN74AXC4T245DIR 控制型(或 TXU0304)3.3 V 域SPI NORCS# 各一根SPI NANDCS# 各一根传感器CS# 各一根总线只转换一次;分支上都是同电压、同模式器件时最优B 每个分支各放一套(需要隔离时才划算)器件多、成本高,但各组可以彻底断开MCU1.8 V 域AXC4T245 / 总线开关SPI NOR3.3 V该组可单独断电 / 单独隔离AXC4T245 / 总线开关SPI NAND3.3 V该组可单独断电 / 单独隔离AXC4T245 / 总线开关传感器1.8 V该组可单独断电 / 单独隔离某个器件会拉死总线、或电压域不同、或需要单独断电时,才值得这样拆多设备 + 高速 QSPI 场景,这两类电平转换器不要用TXB0104 / TXS0108E(自动方向型)① 数据率上限约 60 Mbps,133 MHz QSPI 直接超② 内部靠 one-shot 边沿加速,外部禁止加上拉 / 电容BSS138 之类的 MOS 管方案开漏结构 + 上拉,典型只有 1 Mbps 量级,只适合 I²C 类低速信号,不能进 QSPI 总线

图 4-8 混合电压域共享总线的两种接法:转换器放在共享总干线上(一次转换,器件共用),或每个分支各放一套(可单独隔离 / 断电)。

器件 类型 速率能力 能否用于多设备 QSPI 总线
SN74AXC4T245 DIR 控制型电平转换 ~380 Mbps 级 推荐,4 位 / 方向可控,适合 SCK + CS# + 双向 IO
SN74AVC4T245 DIR 控制型电平转换 ~380 Mbps 级 推荐,同上
TXU0304 固定方向电平转换 100 Mbps @ 1.8↔3.3 V 可用,注意是单向,双向 IO 要两片或改选型
TXB0104 / TXS0108E 自动方向型 约 60 Mbps(TI 官方口径) 禁止,见下方红框
BSS138 等 MOS 管方案 开漏 + 上拉 ~1 Mbps 量级 禁止,只适合 I²C 类低速信号

自动方向型电平转换器(TXB / TXS)为什么不能用

  • 带宽不够:这类器件内部靠 one-shot 边沿加速器工作,数据率上限约 60 Mbps(TI 官方在 E2E 论坛的答复口径),而 133 MHz QSPI 已经远超。器件手册标称的 100 Mbps 是理想 push-pull、轻载条件下的值,多设备总线上根本达不到。
  • 外部禁止加上拉和电容 :这是更致命的一条。TXB / TXS 的输入转换速率有要求,外部上拉会与之冲突;而 SPI NOR 的 CS#、IO 线恰恰都需要上拉(见 4.5.3)。两个要求直接打架,怎么调都不对。

结论:QSPI 总线上的电平转换,一律用 DIR 控制型 (AXC / AVC 系列)或固定方向型(TXU 系列)。

混合器件类型时的三条约束

  • 总线频率取所有器件中的最小值:挂了一片最高 50 MHz 的传感器,整条总线就只能跑 50 MHz,Flash 也得跟着降。
  • 模式要逐次切换 :不同器件可能用不同的 CPOL / CPHA,甚至有的只支持 Standard SPI 不支持 Quad。每次换器件都要重配控制器模式,且切换必须在 CS# 为高期间进行。
  • 小心不规范的从设备 :少数传感器 / 扩展芯片在 CS# 拉高后并不立即释放 MISO ,甚至在 CS# 无效期间仍驱动输出。这类器件与 SPI NOR 共享总线时会直接打架,必须用总线开关或三态缓冲器物理隔离(图 4-8 的 B 方案),软件上怎么躲都躲不掉。

每个从设备的总线释放行为,务必在器件 datasheet 里确认「CS# 无效 → 输出进入高阻」这条,再决定是否共享。

4.5.7 换片时序:总线争用是多设备的头号杀手

多设备独有的失效模式,全发生在换片的那一瞬间:前一片还没放开 MISO,后一片就开始驱动,两片输出对打。

换片的瞬间最危险:前一片还没放开 MISO,后一片就抢着驱动场景一 安全的换片(前片彻底释放后,后片才驱动)CS#0CS#1SCKIO1 (MISO)高阻tDIS≤ 7 ns,前片释放 MISO 所需tSHSL ≥ 10 ns(读)/ 50 ns(写)间隔充足,不会撞车场景二 CS# 重叠导致的争用(两片同时驱动 MISO)CS#0CS#1SCKIO1 (MISO)争用窗口两片对打电平被拉偏 / 读到错误数据 / 长期可能损坏输出级软件必须保证:任意时刻只有一个 CS# 有效,且两片切换之间插入 ≥ tSHSL 的间隔。用 GPIO 模拟 CS# 时,硬件自动插入的 tSHSL 不再生效,这一段要自己写。

图 4-9 CS# 切换时序。上:两片之间留足间隔,前片释放 MISO 后后片才驱动;下:CS# 重叠,两片同时驱动 MISO,产生争用窗口。

下表给出典型 SPI NOR 的 CS# 相关时序参数。不同厂商、不同型号的差别非常大(例如 CS# 高电平时间,Winbond W25Q 只要 10 ns,Microchip SST25 却要求 50 ~ 100 ns),所以这里的数字只能用来建立量级概念,设计时必须查自己那颗料的数据手册。

参数 含义 W25Q128JV(Rev. D) SST25 系列(25 / 50 MHz)
tSLCH(tCSS) CS# 有效相对 SCK 的建立时间 5 ns(min) 10 / 5 ns(min)
tCHSH CS# 有效相对 SCK 的保持时间 3 ns(min) 10 / 5 ns(min)
tSHCH CS# 无效相对 SCK 的建立时间 3 ns(min) 10 / 5 ns(min)
tCHSL CS# 无效相对 SCK 的保持时间 5 ns(min) 10 / 5 ns(min)
tSHSL1 CS# 取消选择时间(读之后) 10 ns(min) ---
tSHSL2 CS# 取消选择时间(擦 / 写之后) 50 ns(min) ---
tCPH CS# 高电平持续时间 --- 100 / 50 ns(min)
tSHQZ(tDIS) 输出禁止时间(CS# 变高 → 输出高阻) 7 ns(max) 15 / 8 ns(max)
tCLQV SCK 变低到输出有效 6 ns(max) 15 / 8 ns(max)

用 GPIO 模拟 CS# 时,硬件不再帮你插间隔

主控的硬件 QSPI 外设会在两次片选之间自动插入 tSHSL ,这是换片安全的根本保障。但当片数超过硬件 CS# 数量、改用 GPIO 软件模拟 CS# 时,这个自动插入就没了------软件连续翻转两个 GPIO 的间隔可能只有几纳秒,直接踩进争用窗口。

必须做的三件事:

  • 在驱动层显式实现「拉高 CS#A → 延时 → 拉低 CS#B」,延时按 max(tSHSL, tDIS) 再留一倍余量取值。
  • 擦 / 写之后换片要等更久:tSHSL2 = 50 ns,是读之后(10 ns)的 5 倍。用同一个延时值覆盖两种场景最容易翻车。
  • 如果用了译码器(4.5.4),还要把译码器的 tpd 也算进这个间隔。

调试手法:先低速逐一验 ID,再提速

  1. 把总线降到 1 ~ 5 MHz、强制 Standard SPI(1-1-1)模式。
  2. 依次拉低每一个 CS#,读 JEDEC ID(0x9F)。每次应当只读到一片的 ID;如果两片同时回答,说明 CS# 译码有误或上拉接错。
  3. 确认 CS# 映射无误后,再逐片切 Quad、逐步升频;每升一档都做一次全片读校验。
  4. 用示波器同时抓 CS#A、CS#B、IO1 三条线,重点看换片瞬间 IO1 上有没有出现「两个电平打架」的中间台阶。
4.5.8 负载预算:挂到第几片开始吃力

这是多设备方案最容易被跳过、也最容易在量产时爆雷的一步。核心事实是:未被选中的器件,其引脚电容依然挂在总线上。片数越多,总线越重,边沿越缓,最终时序不再被保证。

挂到第几片开始吃力:把电容算出来,而不是凭感觉一根 IO 线上的电容是怎么堆起来的(器件 IO 引脚取 8 pF、主控 8 pF、走线按 1 pF/cm 估)21 pF1 片33 pF2 片45 pF3 片57 pF4 片30 pFdatasheet 标定条件主控引脚各片 IO 引脚PCB 走线上升时间 vs 133 MHz 的时钟周期tr ≈ 2.2 × R × CL,R 取驱动器内阻 + 33 Ω 串阻 ≈ 48 Ω010203040506002468总线负载 CL(pF)tr(ns)133 MHz 周期 7.5 ns建议上限 tr ≈ 3 ns(40% 周期)2.2 ns1 片3.5 ns2 片4.8 ns3 片6.0 ns4 片2 片起 tr 就超过建议值:先降频试,别硬跑 133 MHz以上为估算:tr 用一阶 RC 近似,未计封装寄生与过孔;最终以实测眼图 / 波形为准。

图 4-10 多设备负载电容预算。左:1 ~ 4 片时一根 IO 线上电容的构成,30 pF 是 datasheet AC 参数的标定条件;右:上升时间随负载增长,与 133 MHz 周期(7.5 ns)对比。

先明确两个来自 datasheet 的基准值:

  • 器件引脚电容 :以 ISSI IS25LP128F 为例,CIN(CE#、SCK)典型 6 pF ,CIN/OUT(IO0 ~ IO3)典型 8 pF。Microchip、芯天下(XTX)等厂家的同类器件也基本是 6 pF / 8 pF 这个量级。
  • datasheet 的测试条件 :W25Q128JV、IS25LP128F 等器件的 AC 参数都是在 CL = 30 pF 下标定的。超过这个值,手册里的时序参数不再被保证------不是说一定不工作,而是出了问题厂家不认。
片数 主控引脚 各片 IO 引脚 PCB 走线(按 1 pF/cm) 总线 CL 合计 估算 tr 建议
1 片 8 pF 8 pF 约 5 pF 约 21 pF 约 2.2 ns 可跑满 133 MHz
2 片 8 pF 16 pF 约 9 pF 约 33 pF 约 3.5 ns 已超标定条件,建议实测
3 片 8 pF 24 pF 约 13 pF 约 45 pF 约 4.8 ns 建议降到 80 MHz 以下
4 片 8 pF 32 pF 约 17 pF 约 57 pF 约 6.0 ns 建议 50 ~ 80 MHz,或改方案

tr 是怎么估出来的

用一阶 RC 近似:tr ≈ 2.2 × R × CL ,其中 R 取驱动器内阻加串阻,约 15 Ω + 33 Ω = 48 Ω 。经验上 tr 不应超过时钟周期的 40%,对应 133 MHz(周期 7.5 ns)就是 3 ns 。这个模型没有计封装寄生和过孔,只用于快速判断量级,最终以实测波形 / 眼图为准。

算不过来时的降额手段(按优先级)

  1. 缩短走线、减少过孔:最有效且零成本。走线电容按 1 pF/cm 估,省 5 cm 就省 5 pF。
  2. 降频:133 → 104 → 80 → 50 MHz。这是最直接的换裕量方式,代价只有性能。
  3. 放大或精简上拉:各片 4.7 kΩ 改成 10 kΩ,或只在总线末端保留一组(见 4.5.3)。
  4. 减小串阻:33 Ω → 22 Ω,但要重新确认过冲仍在允许范围内,别把反射问题引回来。
  5. 用总线开关把总线切成两组(图 4-8 的 B 方案):任一时刻只有一组挂在总线上,负载直接减半。这是超过 4 片时最有效的办法。
  6. 换个思路:容量问题就换更大容量单片;非要 4 片以上,评估主控是否带第二组 QSPI(双总线各挂两片)。
4.5.9 多设备原理图设计检查清单

画完原理图、投板之前,逐条对照打勾。前面几节的所有结论都收敛在这张表里。

# 检查项 合格标准
1 片选是否真正独立 每片一个独立 CS#;不允许多片共用 CS#(除非是厂商明确支持的多 die 合封)
2 CS# 上拉 每个 CS# 有上拉,阻值 10 ~ 100 kΩ,不照搬 IO 线的 4.7 kΩ
3 SCK 下拉 SCK 有一组 100 kΩ 下拉,保证主控高阻期间 SCK 停在低电平
4 IO 上拉的并联效应 已按片数核算并联阻值与灌电流;4 片时不建议每片 4.7 kΩ
5 串阻位置 SCK / IO0~IO3 的 33 Ω 只在主控侧串一次;各 CS# 各串一次
6 去耦电容 每片独立 100 nF 紧贴 VCC,入口另有 1 ~ 10 μF 体电容
7 电压域 所有器件与主控同域;不同域时已加 DIR 控制型转换器(非 TXB / TXS)
8 译码器使能门控(若用) G1 有下拉,上电默认全部不选通;初始化完成后才放开
9 译码器时序预算(若用) tpd 已计入 CS# 建立 / 保持;余量不足则降频
10 移位寄存器极性(若用) 595 输出已反相;OE# 有上拉保证上电期间高阻
11 换片间隔 软件层已实现 CS# 切换延时,且擦写后取 50 ns 而非读后的 10 ns
12 负载预算 已估算总线 CL;超过 30 pF 时有实测数据或已降频
13 总线频率 取所有从设备中的最小值;混合模式器件时已安排逐次切换
14 非标准从设备 已确认每个从设备在 CS# 无效时确实释放 MISO;否则已做物理隔离
15 WP# / HOLD# 不用时固定接高或接低,不允许浮空
16 Layout 拓扑 星型分支、Stub ≤ 5 mm、地平面完整、换层有回流地孔
17 调试预案 已规划低速逐一读 ID 的验证步骤;示波器能同时抓到两路 CS# 与 IO1

一句话总结

多设备设计里,原理图连接反而是最简单的部分。真正决定成败的是三件容易被跳过的事:上拉的并联效应(4.5.3)、换片时的总线争用(4.5.7)、以及随片数线性增长的负载预算(4.5.8)。这三件事画原理图时都看不见,却会在调试和量产阶段准时出现。

后续章节请下载「芯参谋」查看

......(篇幅原因, 还有18章· 详见芯参谋→方案设计)

当前分享仅开放前 5 章正文。详细资料请在芯参谋客户端中打开完整文档。

打开路径:🔧解决方案&应用市场分析 -> 原理方案设计 -> SPI_NOR_Flash_电路设计指南

📥 下载芯参谋客户端(免费查看)

相关推荐
゛凌乱的记忆づ3 小时前
50元从零到成品:一套AI辅助的嵌入式实战入门教程——ADC采集篇
stm32·单片机·嵌入式硬件
程序员JerrySUN3 小时前
Jetson边缘嵌入式实战课程第四讲:用 Yocto 定制 Jetson 系统,从开发走向产品化
arm开发·人工智能·安全·计算机视觉·目标跟踪
csg11074 小时前
上电没反应、运行中死机、现场“抽风”——单片机控制板异常排查六步法
单片机·嵌入式硬件
小程序设计4 小时前
基于单片机的恒温水箱设计
单片机·嵌入式硬件
小程序设计4 小时前
基于单片机的大棚温湿度自动监控系统
单片机·嵌入式硬件
学习FPGA的电气小兴兴5 小时前
基于FPGA的CORDIC旋转模式实现sin和cos运算_采用EGo1板卡上板验证【FPGA数字信号处理第5讲】
fpga开发·信号处理·数字信号处理·verilog·cordic·ego1·fpga设计入门与提高
XiHongShi20167 小时前
STM32F407 CRC-循环冗余校验例程,建议保存学习
stm32·单片机
lhbweilai8 小时前
结合手册调试各个功能的寄存器+最后通过寄存器编写SPI的初始化和读写函数
stm32·单片机
小程序设计11 小时前
本科毕设避坑|大数据 / 单片机物联网 / 网络工程 / PLC / 机械设计选题与落地心得
java·hive·hadoop·单片机