硬件接口与引脚定义

说白了,QSPI Flash 跟主控沟通,全靠六个引脚。别小看这六根线,哪一根出问题,系统都起不来。我个人习惯把它们分成三组:数据组、控制组、时钟组。这样看原理图时思路更清楚。

六个信号,一个都不能少

先快速扫一眼每个引脚是干什么的。下面这张表,我建议你存一份,画原理图时对照着看。

信号 方向 功能简述 注意要点
CS 主控 → Flash 片选,低电平有效 必须加弱上拉,防止浮空误触发
CLK 主控 → Flash 串行时钟 走线要短,远离干扰源
SI 主控 → Flash 数据输入(命令/地址/数据) 与 SO 差分对等长走线
SO Flash → 主控 数据输出(读取数据) 唯一从 Flash 输出的信号,注意驱动力
WP 主控 → Flash 写保护,低电平有效 不用时接高电平,别悬空
HOLD 主控 → Flash 保持,低电平暂停传输 不用时上拉,否则意外挂起总线

核心原则:六个引脚中,CS、CLK、SI、SO 是必需的基本通信线。WP 和 HOLD 属于功能控制引脚,很多低成本设计会省略,但我强烈建议你保留——万一后期要加写保护或调试呢?

逐个拆解引脚细节

下面我把每个信号掰开揉碎讲一讲。这些经验都是真金白银换来的,你听听看。

CS — 片选信号

CS 是整个通信的"开关"。它拉低,Flash 才响应;它拉高,Flash 睡觉。你想想看,如果 CS 上有毛刺,Flash 就会频繁被唤醒,不仅耗电,还可能误操作。

我在项目中遇到过一次,CS 走线太长,耦合了隔壁的开关噪声,导致 Flash 时不时被选中,写入数据时好时坏。后来加了 10kΩ 上拉电阻,问题就消失了。所以我建议:CS 一定要加弱上拉,并且走线远离电源开关管和大电流回路。

CLK — 时钟信号

时钟是同步通信的"心跳"。QSPI 模式下,CLK 频率通常跑在 50MHz~120MHz 之间。频率越高,信号完整性越敏感。

我个人习惯是把 CLK 走内层,上下都有地平面 shielding。如果实在要走表层,那就两侧包地,并打一圈地过孔。不要跟其他信号并行走长距离,串扰会让你抓狂。

SI 与 SO — 数据输入/输出

这两个是一对。SI 负责从主控向 Flash 发命令和数据,SO 负责从 Flash 向主控回传数据。在 QSPI 模式下,它们还会跟其他引脚配合,实现四线全双工。

布线时,我建议 SI 和 SO 做等长处理,误差控制在 ±100mil 以内。尤其是高速模式下,不等长会导致数据窗口偏移,误码率飙升。

WP — 写保护

WP 拉低后,Flash 的状态寄存器和保护区域被硬件锁定,谁也改不了。这个功能在固件防篡改场景下特别有用。

我曾经见过一个产品,WP 引脚直接悬空,结果静电测试时 Flash 内容被意外擦除。嗯,从那以后我养成了习惯:WP 不用就接高电平,别留着隐患。

HOLD — 保持信号

HOLD 拉低时,Flash 暂停当前操作,CLK 和 SI 上的输入被忽略。这个功能在多主控共享总线时很有用。

但实话实说,大部分单主控系统根本用不上 HOLD。如果不用,记得拉高。悬空的话,一旦耦合到噪声,Flash 就会莫名其妙"罢工",你查驱动查半天也找不到原因。

设计小技巧:WP 和 HOLD 可以共用一颗 4.7kΩ 上拉电阻接到 VCC,省一个电阻位。但前提是 Flash 的 VCC 和主控的 I/O 电压一致,否则要加电平转换。

QSPI Flash 接口信号拓扑 MCU / SoC 主控 QSPI Flash 从设备 CLK SI SO 数据组 CS WP HOLD 控制组 关键点:CS 需上拉 | CLK 包地走 | SI/SO 等长 | WP/HOLD 不可悬空

PCB 布局注意事项

信号讲完了,咱们说说怎么摆、怎么走。布局要是出了问题,原理图再对也救不了。

走线长度匹配

QSPI 跑高速时,六根线的长度差不能太大。尤其是 CLK 和四根数据线(SI、SO、以及 Quad 模式下的 IO2、IO3),等长是基本功。

我建议把 CLK 作为基准,其他信号线跟它做等长,误差控制在 ±100mil 以内。DDR 模式要求更严,最好控制在 ±50mil。

阻抗控制

单端阻抗控制在 50Ω ±10%,这个目标很常见。如果 PCB 厂家支持,跟厂家确认叠层和线宽。4 层板的话,顶层走信号、第二层做完整地平面,阻抗比较容易满足。

信号隔离与间距

CLK 跟其他信号的间距,我建议至少 3 倍线宽(3W 原则)。实在空间不够,也要 2W 以上,并加地线隔离。CLK 是高频开关信号,容性耦合和感性耦合都很强,离得近的数据线会被串扰污染。

电源与地平面

Flash 的 VCC 引脚旁边必须放一颗 0.1μF 去耦电容,位置尽量靠近 Flash,走线尽量短。地平面要完整,不要在 Flash 下方分割地铜。信号线跨越地缝,阻抗就会突变,反射噪声就来了。

布局位置

Flash 离主控越近越好。我个人习惯把 Flash 放在主控同一侧,距离控制在 1500mil 以内。太远了,信号衰减加上反射,时序预算就不够了。

严重警告:不要为了布线方便,把 CLK 和 CS 从 Flash 两侧绕大圈。走线绕远会导致时序偏差,高速下直接导致初始化失败。如果必须绕,记得做蛇形等长补偿,并用 SI 工具仿真一下。

避坑指南

  • 我曾经在一个 2 层板项目里,把 WP 和 HOLD 都悬空了。结果静电枪一打,Flash 死锁,系统无法启动。从那以后,所有不用引脚我都接上拉,再也不省这颗电阻了。
  • CS 的 RC 滤波:如果 CS 线上有毛刺,可以在主控输出端串联 22Ω 电阻,并在 Flash 端对地加 10pF 电容,构成低通滤波。时间常数控制在 5ns 以内,不影响正常时序。
  • CLK 串联电阻:在 CLK 路径上靠近主控端串一颗 22Ω~33Ω 电阻,可以抑制过冲和振铃。我一般用 27Ω,效果不错。
  • 多层板优先:如果成本允许,用 4 层板比 2 层板好太多。完整的电源和地平面,信号质量天差地别。

小经验:打样回来先测 CLK 波形,看上升沿有没有过冲、有没有台阶。如果波形干净,其他信号大概率没问题。如果 CLK 都抖得厉害,先查电源去耦和走线阻抗,别急着调软件。