<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>NAND on 豆腐的小站</title>
        <link>https://esswz.top/tags/nand/</link>
        <description>Recent content in NAND on 豆腐的小站</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Example Person</copyright>
        <lastBuildDate>Wed, 04 Nov 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://esswz.top/tags/nand/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>SPI NAND 的 tCLQV：图解下降沿输出、上升沿采样与读时序</title>
        <link>https://esswz.top/p/spi-nand-tclqv/</link>
        <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
        
        <guid>https://esswz.top/p/spi-nand-tclqv/</guid>
        <description>&lt;p&gt;读 SPI NAND 时，一个很容易混淆的问题是：&lt;strong&gt;为什么手册说下降沿输出数据，而主控又在上升沿采样？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里涉及两个不同的动作：发送端&lt;strong&gt;更新输出&lt;/strong&gt;，接收端&lt;strong&gt;采样锁存&lt;/strong&gt;。对于本文讨论的常见 SDR、Mode 0 / Mode 3 读数据阶段，NAND 在下降沿触发输出更新，主控通常在随后的上升沿采样。&lt;code&gt;tCLQV&lt;/code&gt; 描述下降沿到新数据有效之间的延迟。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本文使用 Etron EM73D044VCS-H 手册中的参数作为示例，并明确标出计算假设。配图是重新绘制的教学示意，不是示波器实测波形。具体芯片、控制器和 DDR / DTR 模式，应查对应手册。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;1-谁提供时钟谁输出数据谁采样&#34;&gt;1. 谁提供时钟，谁输出数据，谁采样？
&lt;/h2&gt;&lt;p&gt;先分清信号的方向。以标准单线 SPI 为例：&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;信号&lt;/th&gt;
          &lt;th&gt;方向&lt;/th&gt;
          &lt;th&gt;作用&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;SCLK&lt;/td&gt;
          &lt;td&gt;主控 → NAND&lt;/td&gt;
          &lt;td&gt;提供传输节拍&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;CS#&lt;/td&gt;
          &lt;td&gt;主控 → NAND&lt;/td&gt;
          &lt;td&gt;选中芯片，界定命令事务&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;MOSI / SI&lt;/td&gt;
          &lt;td&gt;主控 → NAND&lt;/td&gt;
          &lt;td&gt;发送命令、地址或写入数据&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;MISO / SO&lt;/td&gt;
          &lt;td&gt;NAND → 主控&lt;/td&gt;
          &lt;td&gt;返回读数据或状态&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&#34;https://esswz.top/p/spi-nand-tclqv/01-signal-roles.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 1：主控提供节拍，NAND 更新输出，主控采样读数据&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图 1：本文聚焦读数据阶段。Quad 读会并行使用多根 IO，每根都要满足相应时序要求。可&lt;a class=&#34;link&#34; href=&#34;01-signal-roles.svg&#34; &gt;打开原图&lt;/a&gt;放大查看。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;“输出更新”指发送端把下一位数据送到引脚；“采样”指接收端在一个选定时刻读取引脚，并将电平锁存下来。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;阶段&lt;/th&gt;
          &lt;th&gt;发送端&lt;/th&gt;
          &lt;th&gt;接收端&lt;/th&gt;
          &lt;th&gt;常见 Mode 0 / 3 的边沿关系&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;发送命令、地址&lt;/td&gt;
          &lt;td&gt;主控&lt;/td&gt;
          &lt;td&gt;NAND&lt;/td&gt;
          &lt;td&gt;主控在下降沿更新，NAND 在上升沿锁存；传输首位需按模式提前准备&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;读取数据&lt;/td&gt;
          &lt;td&gt;NAND&lt;/td&gt;
          &lt;td&gt;主控&lt;/td&gt;
          &lt;td&gt;NAND 在下降沿触发输出更新，主控通常在随后上升沿采样&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;使用&lt;strong&gt;硬件 SPI&lt;/strong&gt;时，软件配置模式、频率、传输长度并提交数据；控制器内部的分频器、移位逻辑和接收逻辑负责生成与执行时序。CPU 通常无需为每个 bit 手动翻转时钟。&lt;/p&gt;
&lt;h2 id=&#34;2-tclqv-到底表示哪一段时间&#34;&gt;2. tCLQV 到底表示哪一段时间？
&lt;/h2&gt;&lt;p&gt;常见符号是 &lt;strong&gt;&lt;code&gt;tCLQV&lt;/code&gt;&lt;/strong&gt;，英文为 &lt;em&gt;Clock Low to Output Valid&lt;/em&gt;。可以按 &lt;code&gt;CL → QV&lt;/code&gt; 来理解：从时钟下降沿，到输出数据有效。若看到 &lt;code&gt;tQLCV&lt;/code&gt;，先核对字母顺序和该手册的参数说明。&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;两个参数一起看，会更清楚：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;参数&lt;/th&gt;
          &lt;th&gt;说明&lt;/th&gt;
          &lt;th&gt;如何使用&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;tCLQV(max)&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;下降沿后，新数据最迟多久有效&lt;/td&gt;
          &lt;td&gt;判断采样是否太早&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;tCLQX(min)&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;下降沿后，旧数据至少保持多久&lt;/td&gt;
          &lt;td&gt;配合下一次下降沿，确定本拍数据最早可能失效的时刻&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;本文参考颗粒规定 &lt;code&gt;tCLQV(max)=7 ns&lt;/code&gt;、&lt;code&gt;tCLQX(min)=2 ns&lt;/code&gt;，对应温度 −40～85 ℃、VCC 2.7～3.6 V、负载 30 pF。&lt;strong&gt;这不是所有 SPI NAND 的通用数值。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;21-放大-50-mhz-的一拍读数据&#34;&gt;2.1 放大 50 MHz 的一拍读数据
&lt;/h3&gt;&lt;p&gt;假设时钟为 50 MHz、占空比 50%，周期就是 20 ns。以下把读数据阶段某次下降沿记作 0 ns，暂时忽略走线延迟。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://esswz.top/p/spi-nand-tclqv/02-one-beat.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 2：下降沿 0 ns，新数据最迟 7 ns 有效，10 ns 上升沿采样&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图 2：按规格保证边界绘制，而不是假定每次实际延迟都恰好为 7 ns。可&lt;a class=&#34;link&#34; href=&#34;02-one-beat.svg&#34; &gt;打开原图&lt;/a&gt;放大查看。&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;时刻&lt;/th&gt;
          &lt;th&gt;发生什么&lt;/th&gt;
          &lt;th&gt;如何理解&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;0 ns&lt;/td&gt;
          &lt;td&gt;SCLK 下降沿&lt;/td&gt;
          &lt;td&gt;NAND 开始响应这次输出更新&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0～2 ns&lt;/td&gt;
          &lt;td&gt;旧数据仍有保持保证&lt;/td&gt;
          &lt;td&gt;不能立刻把引脚电平当作新数据&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2～7 ns&lt;/td&gt;
          &lt;td&gt;规格不保证属于旧数据还是新数据&lt;/td&gt;
          &lt;td&gt;是有效性不确定区，并非电平必须一直跳变&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;最迟 7 ns&lt;/td&gt;
          &lt;td&gt;本拍新数据有效&lt;/td&gt;
          &lt;td&gt;实际延迟可以小于 7 ns&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;10 ns&lt;/td&gt;
          &lt;td&gt;随后上升沿，主控采样&lt;/td&gt;
          &lt;td&gt;相对最晚有效时刻还有 3 ns，仍需扣除主控建立时间等预算&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;20 ns&lt;/td&gt;
          &lt;td&gt;下一次下降沿&lt;/td&gt;
          &lt;td&gt;开始更新下一拍，本拍数据仍有最小保持保证&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;22 ns&lt;/td&gt;
          &lt;td&gt;本拍的保证有效区到达右边界&lt;/td&gt;
          &lt;td&gt;之后不再保证仍是本拍数据&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;不确定区不等于持续翻转。&lt;/strong&gt; 如果相邻两拍都是 1，引脚甚至可能没有明显跳变，时序约束仍然存在。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;22-采样前后都需要数据稳定&#34;&gt;2.2 采样前后都需要数据稳定
&lt;/h3&gt;&lt;p&gt;主控的接收器还有两个要求：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;建立时间 &lt;code&gt;tSU,RX&lt;/code&gt;&lt;/strong&gt;：采样前，数据需要已经稳定多久。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;保持时间 &lt;code&gt;tH,RX&lt;/code&gt;&lt;/strong&gt;：采样后，数据还需要继续稳定多久。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以“数据刚好在采样时刻变有效”通常仍不够。真正应寻找的是：&lt;strong&gt;能够容纳建立时间和保持时间的采样窗口。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-为什么选择下降沿更新能在上升沿采样吗&#34;&gt;3. 为什么选择下降沿更新？能在上升沿采样吗？
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;可以，在 Mode 0 / 3 中，上升沿正是通常的采样边沿。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将更新与采样安排在不同边沿，是为了给数据传播和稳定留时间。若发送端刚在某个边沿触发更新，接收端就在同一时刻采样，新数据可能尚未到达，读到的仍可能是上一拍。&lt;/p&gt;
&lt;h3 id=&#34;31-cpol-和-cpha-分别管什么&#34;&gt;3.1 CPOL 和 CPHA 分别管什么？
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPOL&lt;/strong&gt;：时钟空闲时是高电平还是低电平。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CPHA&lt;/strong&gt;：在第一个边沿还是第二个边沿采样。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两个配置组合成四种模式：&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;模式&lt;/th&gt;
          &lt;th&gt;CPOL&lt;/th&gt;
          &lt;th&gt;CPHA&lt;/th&gt;
          &lt;th&gt;空闲电平&lt;/th&gt;
          &lt;th&gt;更新输出&lt;/th&gt;
          &lt;th&gt;采样输入&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Mode 0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;低&lt;/td&gt;
          &lt;td&gt;下降沿*&lt;/td&gt;
          &lt;td&gt;上升沿&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Mode 1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;低&lt;/td&gt;
          &lt;td&gt;上升沿&lt;/td&gt;
          &lt;td&gt;下降沿&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Mode 2&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;高&lt;/td&gt;
          &lt;td&gt;上升沿*&lt;/td&gt;
          &lt;td&gt;下降沿&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Mode 3&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;高&lt;/td&gt;
          &lt;td&gt;下降沿&lt;/td&gt;
          &lt;td&gt;上升沿&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;* CPHA=0 时，传输首位必须在第一个采样边沿前准备好。图 2 放大的是已有时钟运行的读数据阶段，不是 CS# 刚拉低时的第一个边沿。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://esswz.top/p/spi-nand-tclqv/03-spi-modes.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 3：Mode 0 与 Mode 3 的空闲电平、首个边沿和采样边沿&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图 3：Mode 0 和 Mode 3 都在上升沿采样，但传输起点不同；此图暂不展开电气传播延迟。可&lt;a class=&#34;link&#34; href=&#34;03-spi-modes.svg&#34; &gt;打开原图&lt;/a&gt;放大查看。&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;32-能交换两个边沿的职责吗&#34;&gt;3.2 能交换两个边沿的职责吗？
&lt;/h3&gt;&lt;p&gt;“上升沿更新、下降沿采样”在 SPI 中也存在，对应 Mode 1 / 2。但必须&lt;strong&gt;主控与 NAND 双方都支持&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;例如本文参考颗粒支持 Mode 0 / 3。仅把主控的 CPHA 改掉，不会改变 NAND 支持的模式。通信双方若没有遵循同一套时序约定，就可能读取错误。&lt;/p&gt;
&lt;h2 id=&#34;4-把一拍时序放回完整的-nand-读操作&#34;&gt;4. 把一拍时序放回完整的 NAND 读操作
&lt;/h2&gt;&lt;p&gt;常见缓存读取流程分为三步：发起内部页读、等待就绪、通过 SPI 读取 Cache。下图用参考颗粒的命令举例：&lt;sup id=&#34;fnref1:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://esswz.top/p/spi-nand-tclqv/04-read-operation.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 4：页读到 Cache、等待就绪、读取 Cache 的操作流程&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图 4：流程段不按实际时间比例；轮询可重复多次，各命令事务的 CS# 边界按手册处理。可&lt;a class=&#34;link&#34; href=&#34;04-read-operation.svg&#34; &gt;打开原图&lt;/a&gt;放大查看。&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Page Read，13h&lt;/strong&gt;：提交行地址，让芯片把目标页从存储阵列读入 Cache。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Get Feature，0Fh&lt;/strong&gt;：读取状态，等待内部操作结束，并按手册检查相关状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Read Cache，0Bh&lt;/strong&gt;：提交列地址和规定的 Dummy，再读取缓存数据。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;示例颗粒的 0Bh 命令后跟 16-bit 列地址和一个 Dummy byte，再输出数据；其他芯片、指令或模式可能不同。&lt;/p&gt;
&lt;h3 id=&#34;41-trdummy-与-tclqv-不能混为一谈&#34;&gt;4.1 tR、Dummy 与 tCLQV 不能混为一谈
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;概念&lt;/th&gt;
          &lt;th&gt;约束哪个阶段&lt;/th&gt;
          &lt;th&gt;常见单位&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;tR&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;芯片内部把一页从阵列读到 Cache&lt;/td&gt;
          &lt;td&gt;µs&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Dummy cycles&lt;/td&gt;
          &lt;td&gt;读命令规定的、有效数据开始前的等待时钟&lt;/td&gt;
          &lt;td&gt;周期数&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;tCLQV&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;数据输出期间，每拍下降沿到新数据有效&lt;/td&gt;
          &lt;td&gt;ns&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;增加前导 Dummy 并不会自动扩大后续每一拍的采样窗口。&lt;/strong&gt; 如果每一拍都因频率太高而采样过早，应检查数据阶段的时钟频率和采样位置。&lt;/p&gt;
&lt;h2 id=&#34;5-为什么-50-mhz-正常100-mhz-可能读错&#34;&gt;5. 为什么 50 MHz 正常，100 MHz 可能读错？
&lt;/h2&gt;&lt;p&gt;50% 占空比下，50 MHz 的半周期是 10 ns，100 MHz 的半周期只有 5 ns。若 &lt;code&gt;tCLQV(max)=7 ns&lt;/code&gt;，100 MHz 的默认上升沿可能早于新数据有效。&lt;/p&gt;
&lt;p&gt;这说明&lt;strong&gt;这个采样位置无法覆盖最坏情况&lt;/strong&gt;，并不等于 NAND 本身的最大频率只能到约 71 MHz。&lt;/p&gt;
&lt;h3 id=&#34;51-用一个简化模型算清楚&#34;&gt;5.1 用一个简化模型算清楚
&lt;/h3&gt;&lt;p&gt;以下以本拍下降沿为 0，忽略走线延迟、时钟偏斜和抖动：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;量&lt;/th&gt;
          &lt;th&gt;计算方式&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;周期 &lt;code&gt;T&lt;/code&gt;，单位 ns&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;T = 1000 / f(MHz)&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;采样时刻&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;t_sample = T / 2 + δ&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;最早允许采样&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;tCLQV(max) + tSU,RX&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;最晚允许采样&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;T + tCLQX(min) − tH,RX&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;δ&lt;/code&gt; 是相对随后上升沿的采样延后。采样时刻应落在上述两个边界之间；实际设计还需留出额外裕量。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;tSU,RX&lt;/code&gt;、&lt;code&gt;tH,RX&lt;/code&gt; 是&lt;strong&gt;主控接收器&lt;/strong&gt;的要求。NAND 手册中的输入建立、保持时间，例如 &lt;code&gt;tDVCH&lt;/code&gt;、&lt;code&gt;tCHDX&lt;/code&gt;，约束的是 NAND 接收命令或写数据，不能直接拿来当作主控读数据的要求。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;52-三个采样场景放在一起比较&#34;&gt;5.2 三个采样场景放在一起比较
&lt;/h3&gt;&lt;p&gt;取 &lt;code&gt;tCLQV(max)=7 ns&lt;/code&gt;、&lt;code&gt;tCLQX(min)=2 ns&lt;/code&gt;，并&lt;strong&gt;假设&lt;/strong&gt;主控建立时间为 1 ns、保持时间为 0.5 ns：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://esswz.top/p/spi-nand-tclqv/05-sampling-comparison.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 5：50 MHz 默认采样、100 MHz 默认采样和延后采样的窗口对比&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;图 5：三行使用相同时间比例。深绿色条是已经扣除主控建立、保持要求的可采样区间。可&lt;a class=&#34;link&#34; href=&#34;05-sampling-comparison.svg&#34; &gt;打开原图&lt;/a&gt;放大查看。&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;场景&lt;/th&gt;
          &lt;th&gt;周期 T&lt;/th&gt;
          &lt;th&gt;采样时刻&lt;/th&gt;
          &lt;th&gt;允许采样区间&lt;/th&gt;
          &lt;th&gt;结论&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;50 MHz，默认上升沿&lt;/td&gt;
          &lt;td&gt;20 ns&lt;/td&gt;
          &lt;td&gt;10 ns&lt;/td&gt;
          &lt;td&gt;8～21.5 ns&lt;/td&gt;
          &lt;td&gt;落在窗口内，最小剩余裕量 2 ns&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;100 MHz，默认上升沿&lt;/td&gt;
          &lt;td&gt;10 ns&lt;/td&gt;
          &lt;td&gt;5 ns&lt;/td&gt;
          &lt;td&gt;8～11.5 ns&lt;/td&gt;
          &lt;td&gt;采样过早，建立侧还差 3 ns&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;100 MHz，延后 4 ns&lt;/td&gt;
          &lt;td&gt;10 ns&lt;/td&gt;
          &lt;td&gt;9 ns&lt;/td&gt;
          &lt;td&gt;8～11.5 ns&lt;/td&gt;
          &lt;td&gt;落在窗口内，最小剩余裕量 1 ns&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;有些控制器支持接收采样时钟移相。例如 ST 的 QUADSPI 应用文档介绍了 SDR 采样移位功能。具体能延后多少、相对哪个边沿、适用哪些模式，需要查对应主控手册。&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;这也解释了“芯片支持 104 MHz”与“最坏输出延迟为 7 ns”为什么可以同时成立：系统还需要在正确的数据窗口内采样，不能只检查标称最大频率。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;采样也不是越晚越好。&lt;/strong&gt; 在上面的 100 MHz 示例中，若采样移到 14 ns，保持侧会超出窗口 2.5 ns，已无法保证锁存本拍数据。&lt;/p&gt;
&lt;h2 id=&#34;6-测试和调试时按什么顺序检查&#34;&gt;6. 测试和调试时，按什么顺序检查？
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;确认模式和指令。&lt;/strong&gt; 核对 Mode、SDR / DDR、x1 / x4、Dummy 配置；先确保协议阶段正确。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;收集两端参数。&lt;/strong&gt; NAND 侧关注 &lt;code&gt;tCLQV(max)&lt;/code&gt;、&lt;code&gt;tCLQX(min)&lt;/code&gt;；主控侧关注接收建立、保持和采样移位能力。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核对电气条件。&lt;/strong&gt; 温度、电压、负载、驱动能力、板级传播和时钟抖动都会影响实际裕量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;看有翻转的数据波形。&lt;/strong&gt; 可使用已有测试数据中的 &lt;code&gt;0xAA&lt;/code&gt; / &lt;code&gt;0x55&lt;/code&gt; 等模式。在 NAND 引脚附近观察 SCLK 与输出数据，采用手册规定的测量阈值，考虑探头负载和通道间时差。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;扫描可用窗口。&lt;/strong&gt; 先低频确认数据，再扫描频率或控制器支持的采样延迟；寻找连续正确区间，选择中间位置，并在目标电压、温度和负载下复核。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;一次读取成功，并不能证明所有条件下都满足时序；而一个采样位置失败，也不等于 NAND 阵列中的存储数据一定损坏。&lt;/p&gt;
&lt;h2 id=&#34;7-一个贴近工作的练习&#34;&gt;7. 一个贴近工作的练习
&lt;/h2&gt;&lt;p&gt;已知：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SPI 时钟 100 MHz，占空比 50%。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tCLQV(max)=7 ns&lt;/code&gt;，&lt;code&gt;tCLQX(min)=2 ns&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;主控建立时间 1 ns，保持时间 0.5 ns。&lt;/li&gt;
&lt;li&gt;暂时忽略板级延迟和抖动。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;问题：把主控采样放在下降沿后 9 ns，是否满足这个简化模型？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;参考答案：周期为 10 ns，允许采样区间为 &lt;code&gt;[7+1, 10+2−0.5]&lt;/code&gt;，即 &lt;strong&gt;8～11.5 ns&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;9 ns 落在其中，建立侧剩余 1 ns、保持侧剩余 2.5 ns，因此最小剩余裕量为 1 ns。它相当于比随后 5 ns 的上升沿延后 4 ns。&lt;/p&gt;
&lt;p&gt;能否在真实硬件上采用这个设置，还取决于控制器支持的采样位置与实际板级时序。&lt;/p&gt;
&lt;p&gt;理解这些参数时，先抓住一个先后关系：&lt;strong&gt;发送端触发更新，等数据有效，接收端再在窗口内采样。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料
&lt;/h2&gt;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.analog.com/en/resources/analog-dialogue/articles/introduction-to-spi-interface.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Analog Devices：Introduction to SPI Interface&lt;/a&gt;。SPI 信号方向、数据移出与采样的基本概念。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://etron.com/wp-content/uploads/2024/05/EM73D044VCS-SPI-NAND-Flash_Rev-1.1.pdf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Etron EM73D044VCS-H SPI NAND Flash Datasheet，Rev 1.1&lt;/a&gt;。第 12 页 SPI 模式；第 19～20 页页读和读缓存；第 35～36 页 AC 参数与输出时序。本文 7 ns / 2 ns 只作为该手册条件下的规格示例。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref1:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://onlinedocs.microchip.com/oxy/GUID-76938A18-C47D-4351-9D02-463E8A957829-en-US-8/GUID-D8B41778-0B24-41AB-AB85-5F5130FB7D87.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Microchip：SPI Transfer Modes，表 31-3&lt;/a&gt;。CPOL、CPHA 与前后边沿的对应关系。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.st.com.cn/resource/en/application_note/an4760-introduction-to-quadspi-interface-for-stm32-mcus-and-mpus-stmicroelectronics.pdf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;STMicroelectronics：AN4760，Introduction to Quad-SPI&lt;/a&gt;。采样移位及相关功能；具体设置请查目标主控参考手册。&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
        </item>
        
    </channel>
</rss>
