SPI NAND 的 tCLQV:图解下降沿输出、上升沿采样与读时序

从主控与 NAND 的分工,到一拍数据的输出延迟、SPI 模式和采样窗口,用五张配图讲清楚 tCLQV。

读 SPI NAND 时,一个很容易混淆的问题是:为什么手册说下降沿输出数据,而主控又在上升沿采样?

这里涉及两个不同的动作:发送端更新输出,接收端采样锁存。对于本文讨论的常见 SDR、Mode 0 / Mode 3 读数据阶段,NAND 在下降沿触发输出更新,主控通常在随后的上升沿采样。tCLQV 描述下降沿到新数据有效之间的延迟。

本文使用 Etron EM73D044VCS-H 手册中的参数作为示例,并明确标出计算假设。配图是重新绘制的教学示意,不是示波器实测波形。具体芯片、控制器和 DDR / DTR 模式,应查对应手册。

1. 谁提供时钟,谁输出数据,谁采样?

先分清信号的方向。以标准单线 SPI 为例:1

信号 方向 作用
SCLK 主控 → NAND 提供传输节拍
CS# 主控 → NAND 选中芯片,界定命令事务
MOSI / SI 主控 → NAND 发送命令、地址或写入数据
MISO / SO NAND → 主控 返回读数据或状态

图 1:主控提供节拍,NAND 更新输出,主控采样读数据

图 1:本文聚焦读数据阶段。Quad 读会并行使用多根 IO,每根都要满足相应时序要求。可打开原图放大查看。

“输出更新”指发送端把下一位数据送到引脚;“采样”指接收端在一个选定时刻读取引脚,并将电平锁存下来。

阶段 发送端 接收端 常见 Mode 0 / 3 的边沿关系
发送命令、地址 主控 NAND 主控在下降沿更新,NAND 在上升沿锁存;传输首位需按模式提前准备
读取数据 NAND 主控 NAND 在下降沿触发输出更新,主控通常在随后上升沿采样

使用硬件 SPI时,软件配置模式、频率、传输长度并提交数据;控制器内部的分频器、移位逻辑和接收逻辑负责生成与执行时序。CPU 通常无需为每个 bit 手动翻转时钟。

2. tCLQV 到底表示哪一段时间?

常见符号是 tCLQV,英文为 Clock Low to Output Valid。可以按 CL → QV 来理解:从时钟下降沿,到输出数据有效。若看到 tQLCV,先核对字母顺序和该手册的参数说明。2

两个参数一起看,会更清楚:

参数 说明 如何使用
tCLQV(max) 下降沿后,新数据最迟多久有效 判断采样是否太早
tCLQX(min) 下降沿后,旧数据至少保持多久 配合下一次下降沿,确定本拍数据最早可能失效的时刻

本文参考颗粒规定 tCLQV(max)=7 ns、tCLQX(min)=2 ns,对应温度 −40~85 ℃、VCC 2.7~3.6 V、负载 30 pF。这不是所有 SPI NAND 的通用数值。

2.1 放大 50 MHz 的一拍读数据

假设时钟为 50 MHz、占空比 50%,周期就是 20 ns。以下把读数据阶段某次下降沿记作 0 ns,暂时忽略走线延迟。

图 2:下降沿 0 ns,新数据最迟 7 ns 有效,10 ns 上升沿采样

图 2:按规格保证边界绘制,而不是假定每次实际延迟都恰好为 7 ns。可打开原图放大查看。

时刻 发生什么 如何理解
0 ns SCLK 下降沿 NAND 开始响应这次输出更新
0~2 ns 旧数据仍有保持保证 不能立刻把引脚电平当作新数据
2~7 ns 规格不保证属于旧数据还是新数据 是有效性不确定区,并非电平必须一直跳变
最迟 7 ns 本拍新数据有效 实际延迟可以小于 7 ns
10 ns 随后上升沿,主控采样 相对最晚有效时刻还有 3 ns,仍需扣除主控建立时间等预算
20 ns 下一次下降沿 开始更新下一拍,本拍数据仍有最小保持保证
22 ns 本拍的保证有效区到达右边界 之后不再保证仍是本拍数据

不确定区不等于持续翻转。 如果相邻两拍都是 1,引脚甚至可能没有明显跳变,时序约束仍然存在。

2.2 采样前后都需要数据稳定

主控的接收器还有两个要求:

  • 建立时间 tSU,RX:采样前,数据需要已经稳定多久。
  • 保持时间 tH,RX:采样后,数据还需要继续稳定多久。

所以“数据刚好在采样时刻变有效”通常仍不够。真正应寻找的是:能够容纳建立时间和保持时间的采样窗口。

3. 为什么选择下降沿更新?能在上升沿采样吗?

可以,在 Mode 0 / 3 中,上升沿正是通常的采样边沿。

将更新与采样安排在不同边沿,是为了给数据传播和稳定留时间。若发送端刚在某个边沿触发更新,接收端就在同一时刻采样,新数据可能尚未到达,读到的仍可能是上一拍。

3.1 CPOL 和 CPHA 分别管什么?

  • CPOL:时钟空闲时是高电平还是低电平。
  • CPHA:在第一个边沿还是第二个边沿采样。

两个配置组合成四种模式:3

模式 CPOL CPHA 空闲电平 更新输出 采样输入
Mode 0 0 0 低 下降沿* 上升沿
Mode 1 0 1 低 上升沿 下降沿
Mode 2 1 0 高 上升沿* 下降沿
Mode 3 1 1 高 下降沿 上升沿

* CPHA=0 时,传输首位必须在第一个采样边沿前准备好。图 2 放大的是已有时钟运行的读数据阶段,不是 CS# 刚拉低时的第一个边沿。

图 3:Mode 0 与 Mode 3 的空闲电平、首个边沿和采样边沿

图 3:Mode 0 和 Mode 3 都在上升沿采样,但传输起点不同;此图暂不展开电气传播延迟。可打开原图放大查看。

3.2 能交换两个边沿的职责吗?

“上升沿更新、下降沿采样”在 SPI 中也存在,对应 Mode 1 / 2。但必须主控与 NAND 双方都支持。

例如本文参考颗粒支持 Mode 0 / 3。仅把主控的 CPHA 改掉,不会改变 NAND 支持的模式。通信双方若没有遵循同一套时序约定,就可能读取错误。

4. 把一拍时序放回完整的 NAND 读操作

常见缓存读取流程分为三步:发起内部页读、等待就绪、通过 SPI 读取 Cache。下图用参考颗粒的命令举例:2

图 4:页读到 Cache、等待就绪、读取 Cache 的操作流程

图 4:流程段不按实际时间比例;轮询可重复多次,各命令事务的 CS# 边界按手册处理。可打开原图放大查看。

  1. Page Read,13h:提交行地址,让芯片把目标页从存储阵列读入 Cache。
  2. Get Feature,0Fh:读取状态,等待内部操作结束,并按手册检查相关状态。
  3. Read Cache,0Bh:提交列地址和规定的 Dummy,再读取缓存数据。

示例颗粒的 0Bh 命令后跟 16-bit 列地址和一个 Dummy byte,再输出数据;其他芯片、指令或模式可能不同。

4.1 tR、Dummy 与 tCLQV 不能混为一谈

概念 约束哪个阶段 常见单位
tR 芯片内部把一页从阵列读到 Cache µs
Dummy cycles 读命令规定的、有效数据开始前的等待时钟 周期数
tCLQV 数据输出期间,每拍下降沿到新数据有效 ns

增加前导 Dummy 并不会自动扩大后续每一拍的采样窗口。 如果每一拍都因频率太高而采样过早,应检查数据阶段的时钟频率和采样位置。

5. 为什么 50 MHz 正常,100 MHz 可能读错?

50% 占空比下,50 MHz 的半周期是 10 ns,100 MHz 的半周期只有 5 ns。若 tCLQV(max)=7 ns,100 MHz 的默认上升沿可能早于新数据有效。

这说明这个采样位置无法覆盖最坏情况,并不等于 NAND 本身的最大频率只能到约 71 MHz。

5.1 用一个简化模型算清楚

以下以本拍下降沿为 0,忽略走线延迟、时钟偏斜和抖动:

量 计算方式
周期 T,单位 ns T = 1000 / f(MHz)
采样时刻 t_sample = T / 2 + δ
最早允许采样 tCLQV(max) + tSU,RX
最晚允许采样 T + tCLQX(min) − tH,RX

δ 是相对随后上升沿的采样延后。采样时刻应落在上述两个边界之间;实际设计还需留出额外裕量。

tSU,RX、tH,RX 是主控接收器的要求。NAND 手册中的输入建立、保持时间,例如 tDVCH、tCHDX,约束的是 NAND 接收命令或写数据,不能直接拿来当作主控读数据的要求。

5.2 三个采样场景放在一起比较

取 tCLQV(max)=7 ns、tCLQX(min)=2 ns,并假设主控建立时间为 1 ns、保持时间为 0.5 ns:

图 5:50 MHz 默认采样、100 MHz 默认采样和延后采样的窗口对比

图 5:三行使用相同时间比例。深绿色条是已经扣除主控建立、保持要求的可采样区间。可打开原图放大查看。

场景 周期 T 采样时刻 允许采样区间 结论
50 MHz,默认上升沿 20 ns 10 ns 8~21.5 ns 落在窗口内,最小剩余裕量 2 ns
100 MHz,默认上升沿 10 ns 5 ns 8~11.5 ns 采样过早,建立侧还差 3 ns
100 MHz,延后 4 ns 10 ns 9 ns 8~11.5 ns 落在窗口内,最小剩余裕量 1 ns

有些控制器支持接收采样时钟移相。例如 ST 的 QUADSPI 应用文档介绍了 SDR 采样移位功能。具体能延后多少、相对哪个边沿、适用哪些模式,需要查对应主控手册。4

这也解释了“芯片支持 104 MHz”与“最坏输出延迟为 7 ns”为什么可以同时成立:系统还需要在正确的数据窗口内采样,不能只检查标称最大频率。

采样也不是越晚越好。 在上面的 100 MHz 示例中,若采样移到 14 ns,保持侧会超出窗口 2.5 ns,已无法保证锁存本拍数据。

6. 测试和调试时,按什么顺序检查?

  1. 确认模式和指令。 核对 Mode、SDR / DDR、x1 / x4、Dummy 配置;先确保协议阶段正确。
  2. 收集两端参数。 NAND 侧关注 tCLQV(max)、tCLQX(min);主控侧关注接收建立、保持和采样移位能力。
  3. 核对电气条件。 温度、电压、负载、驱动能力、板级传播和时钟抖动都会影响实际裕量。
  4. 看有翻转的数据波形。 可使用已有测试数据中的 0xAA / 0x55 等模式。在 NAND 引脚附近观察 SCLK 与输出数据,采用手册规定的测量阈值,考虑探头负载和通道间时差。
  5. 扫描可用窗口。 先低频确认数据,再扫描频率或控制器支持的采样延迟;寻找连续正确区间,选择中间位置,并在目标电压、温度和负载下复核。

一次读取成功,并不能证明所有条件下都满足时序;而一个采样位置失败,也不等于 NAND 阵列中的存储数据一定损坏。

7. 一个贴近工作的练习

已知:

  • SPI 时钟 100 MHz,占空比 50%。
  • tCLQV(max)=7 ns,tCLQX(min)=2 ns。
  • 主控建立时间 1 ns,保持时间 0.5 ns。
  • 暂时忽略板级延迟和抖动。

问题:把主控采样放在下降沿后 9 ns,是否满足这个简化模型?

参考答案:周期为 10 ns,允许采样区间为 [7+1, 10+2−0.5],即 8~11.5 ns。

9 ns 落在其中,建立侧剩余 1 ns、保持侧剩余 2.5 ns,因此最小剩余裕量为 1 ns。它相当于比随后 5 ns 的上升沿延后 4 ns。

能否在真实硬件上采用这个设置,还取决于控制器支持的采样位置与实际板级时序。

理解这些参数时,先抓住一个先后关系:发送端触发更新,等数据有效,接收端再在窗口内采样。

参考资料


  1. Analog Devices:Introduction to SPI Interface。SPI 信号方向、数据移出与采样的基本概念。 ↩︎

  2. Etron EM73D044VCS-H SPI NAND Flash Datasheet,Rev 1.1。第 12 页 SPI 模式;第 19~20 页页读和读缓存;第 35~36 页 AC 参数与输出时序。本文 7 ns / 2 ns 只作为该手册条件下的规格示例。 ↩︎ ↩︎

  3. Microchip:SPI Transfer Modes,表 31-3。CPOL、CPHA 与前后边沿的对应关系。 ↩︎

  4. STMicroelectronics:AN4760,Introduction to Quad-SPI。采样移位及相关功能;具体设置请查目标主控参考手册。 ↩︎

使用 Hugo 构建
主题 Stack 由 Jimmy 设计