一、SCA 是什么:一分钟看懂

想象一条单向单车道的高速公路(传统 NAND 接口):货车(数据)要过,客车(命令/地址)也要过,全挤在 DQ[7:0] 这 8 根线上轮流走。车道限速提得再高(IO 速度提升),客车还是得一辆辆排队过——车流中客车占比太高,数据”有效运力”就上不去。落到真实芯片上就是:NAND IO 速度一提再提,命令/地址传输时间却没能同步缩短,IO 效率反而被拖垮,成了存储性能的瓶颈。

SCA(Separate Command Address,命令地址分离)就是在旁边加修一条专用辅道(CA[1:0] 两根线):客车全走辅道,主道只跑货车。

传统 NAND 接口 vs SCA 接口

这样多通道(way-interleaving)工作时:A 芯片在主道卸货的同时,B、C、D 芯片的”报单”已经在辅道上办完了——命令传输时间被”藏”进了数据传输时间里,总时间开销明显缩短。

一句话:SCA 把控制面(命令/地址)和数据面(页数据)彻底分开,控制面走 CA 总线,数据面仍走 DQ/DQS。新一代 NAND 产品陆续开始支持 SCA,以提升 IO 效率。

要特别注意:SCA 是接口协议模式,不是另一套读、写、擦命令集。读、编程、擦除仍遵循 NAND 原有操作规则,只是命令/地址的”投递方式”变了。主机(控制器/PHY)和 NAND 必须始终处于同一种接口模式,否则通信必然失败。

二、硬件怎么接:老引脚换新身份

SCA 不新增引脚,全部靠旧引脚改头换面:

传统模式引脚 SCA 模式身份 变化要点
CE#(片选) CA_CE# 只管 CA 总线的开关,不再直接控制 DQ 总线
WE#(写使能) CA_CLK CA 总线时钟,默认电平从高变低(大坑,见 §3.4)
ALE(地址锁存,仅输入) CA[0] 变为双向信号
CLE(命令锁存,仅输入) CA[1] 变为双向信号

SCA 模式使能后的总线术语约定:

  • CA Bus = CA[1:0] + CA_CLK(控制面,跑命令/地址包)

  • DQ Bus = DQ[7:0] + DQS_t/DQS_c + RE_t/RE_c(数据面,只跑页数据和状态返回)

最大的观念变化:传统模式里一个 CE# 统管数据、选通、控制所有信号;SCA 模式下 CA_CE# 只负责使能/禁用挂在它下面的 LUN 的 CA 总线,DQ 总线的开关改由 CA 总线上发的”包”(SCE/SCP/SCT 等)遥控(见第五节)。理解这一点,SCA 就懂了一半。

三、进入与退出 SCA 模式

3.1 两种使能方式

方式 操作 特点
SCA 引脚硬接(推荐方式) 上电时 SCA 引脚接 VccQ = SCA 模式;接 Vss 或悬空 = 传统模式 兼容性最好;同一封装上多个 SCA 球必须全部同样接法;想退出只能断电改接法再上电
Set Feature 软切 传统模式下发 EFh / FA 02h / P3[7]=1 灵活;要求同一 channel 上所有 target(CE#)同时切换;建议所有训练完成后再切;切换完成后不可再用传统命令访问该通道

Set Feature(FA 02h)寄存器相关位速查:

名称 说明
P3[7] SCA enable 0=禁用(默认),1=使能。可被 SCA-RESET、第 1 个 FFh、FDh 复位(FDh 仅适用于单 LUN 的 CA_CE)。若 SCA 已由引脚使能,此位必须保持 0
P4[1] SCA_DQMIRR DQ 镜像:0=禁用(默认),1=使能。仅在引脚使能 SCA 的场合使用(软切 SCA 时镜像配置方式与传统模式相同)

禁止混用:引脚已经拉高使能 SCA 的通道,P3[7] 必须保持 0,不要”双保险”。

3.2 Set Feature 软切的完整时序

下图为传统模式通过 Set Feature 切换到 SCA 的完整过程:

传统模式通过 Set Feature 切换到 SCA 的完整时序

关键点:

  1. 传统模式下对目标 channel 的每一个 CEEFh + 02h + P1~P4(P3[7]=1);
  2. 写完后满足 tWPST/tWPSTH → tWB → tFEAT(图中间的长等待段),NAND 内部完成切换;
  3. tFEAT 结束后 NAND 已进入 SCA 模式:WE_n 引脚身份变为 CA_CLK,且必须在第一次拉低 CA_CE# 之前至少 tWLCEL_CA(100ns)先把 CA_CLK 驱动为低;
  4. 切换完成后,不能再用传统格式发命令(包括用传统 EEh 回读 Feature 验证——这是新手最常犯的错误)。

3.3 退出 SCA:SCA-RESET

软切进入的 SCA,用 SCA-RESET 退出(NAND 处于 ready 状态时接受);同样要求同 channel 所有 CE 一起退出。

SCA-RESET 时序
  • 格式:CA[1:0] 上发复位包头(10 10),DQ[7:0] 上同时发 99h。

  • 拿不准芯片现在什么模式:发一次 SCA-RESET——本来是传统模式就纹丝不动;是 SCA 模式就响应并退回传统模式。相当于”强制回默认”。

  • 转回传统模式后,WE_n/CA_CLK 要等 tWB 之后才能拉高。

3.4 上电时序大坑:CA_CLK 极性

  • WE# 默认电平,但 SCA 的 CA_CLK 默认电平——身份变了,默认电平也反了。

  • 因此上电进入 SCA 后,必须先把 CA_CLK 初始化为低,再拉低 CA_CE#

    • Case 1:CA_CLK 上电即是低——无需动作;

    • Case 2:CA_CLK 上电为高——必须在第一次拉低 CA_CE# 之前至少 tWLCEL_CA(100ns)先把 CA_CLK 驱动为低。

上电时 CA_CLK 与 CA_CE# 的时序(Case 1 / Case 2)

两种上电路径(对应图中 Case 1 / Case 2):

  • SCA 引脚先于 VCC/VCCQ 爬升(要求 SCA 高电平、VCC 有效后保持 100us(min));

  • SCA 引脚与 VCC/VCCQ 一起爬升(此情形要求拉高 SCA 引脚时 CA_CE# 必须保持高)。

上电后 Vcc/VccQ 均有效起,CA_CE# 需保持高 tV2CE ≥ 200ns 才允许拉低。

3.5 DQ 镜像模式

  • 使能后 NAND 逻辑上把 DQ[0]~DQ[7] 反着解(DQ0 当 DQ7、DQ1 当 DQ6……),PCB 布线交叉时无需飞线。

  • 引脚使能 SCA 时用 FA 02h P4[1]=1 配置;单 LUN 的 CA_CE 可用 EFh 或 D5h 设置,多 LUN 的 CA_CE 只能用 EFh

  • 不要为了”试试”随意打开镜像——会造成”状态正常、读数据全错”的假象。

四、CA 总线怎么说话:一切都是”包”

CA 总线上不叫”发命令”,叫发包(Packet)

4.1 包结构:6 个时钟周期一个包

每个 CA 输入包 = 4 位包头(Header)+ 8 位包体(Body),共 6 个 CA_CLK 周期:前 2 个周期传包头(声明包类型),后 4 个周期传 8 位内容(命令码或地址)。

两根线并行分摊,CA[0] 走偶数位、CA[1] 走奇数位

  • CA[0]:Bit[0]、Bit[2]、Bit[4]、Bit[6]

  • CA[1]:Bit[1]、Bit[3]、Bit[5]、Bit[7]

命令输入周期(以命令包为例,包头 10 00,注意 CA_CLK 默认低电平、CA_CE# 提前 tCELCLK 拉低):

命令输入周期(包头 10 00)

地址输入周期(包头 01 00,结构完全相同,只是包体换成地址字节):

地址输入周期(包头 01 00)

NAND 侧只支持 1-cycle header。字节之间 CA_CE# 必须保持低。

4.2 包头编码速查表

包头(2 周期,CA[1]CA[0]) 含义
00 00 数据输出
00 10 数据输入
01 00 地址输入
10 00 命令输入
10 10 SCA-RESET
10 11 NTO(Non-Target-ODT)
11 01 SCE(Select Chip Enable)
11 10 SCP(Select Chip Pause)
11 11 SCT(Select Chip Terminate)
其余编码 Reserved

4.3 命令指针复位:包发到一半想反悔

CA_CE# 拉高(保持 tCEH2=30ns)即可:正在传的包作废,该 CA_CE# 下所有 LUN 的命令指针归零,从下一个包头重发即可。这是”软取消”任意进行中 CA 包的万能手段,也是复位流程里的规定动作(见 §8.2)。

命令指针复位序列

4.4 一个完整例子:SCA 下的 Set Feature

Set Feature(EFh)序列 = 命令包(1000 + EFh)→ 地址包(0100 + FAh)→ 4 个数据包(P1~P4,0010 + 数据字节)。注意图中的接续标记(1、2)表示同一序列的换行,CA_CE# 全程保持低:

SCA 下的 Set Feature 序列

4.5 CA 读回:NAND 怎么”回话”

状态、Feature 寄存器等少量数据可从 CA 总线读回。CA 输出包结构如下:

CA 输出包结构

流程(结合上图):

  1. 主机发数据输出包头00 00),NAND 进入 CA 输出模式;
  2. 主机在 tCLKCAZ 内**松手(Hi-Z)**CA[1:0];
  3. NAND 在 tCLKCAD 后接管总线,先驱动 “00b” 前导码;
  4. tW2R_CA 之后主机翻转 CA_CLK 逐位读出:CA[1] 出数据、CA[0] 是选通信号
  5. 读满一个字节后把 CA_CE# 拉高,NAND 在 tCECAZ 内 Hi-Z,主机即可继续发下一个包头。

两个要点:

  • 每读一个字节都要重新发一次输出包头。Get Feature(EEh)读 4 字节寄存器 = 4 轮”包头 + 读字节”,只发一次读取头、指望连读 4 字节,结果必然是全零或格式错误。

  • Get Feature / Get Feature by LUN 序列期间不允许状态读、不允许 LUN 交织

SCA 下 Get Feature 的完整时序(EEh → FA 地址 → 逐字节读回 P1~P4):

SCA 下 Get Feature 的完整时序

78h(Read Status Enhanced)支持 78h + 4 地址 + CA 输出包 + DOUT 及其重复组合。

五、遥控 DQ 总线的四个包:SCE/SCP/SCT/NTO

SCA 把 DQ 总线变成”遥控的”——CA_CE# 不再直接控制 DQ,改由这四个包调度。用餐厅打比方:

类比 作用 关键细节
SCE(Select Chip Enable) “3 号桌,开始上菜!” 启动/恢复指定 LUN 的数据突发 包体带 LUN[2:0] 地址;DIR 位保留为 0;每次 SCE 后(若使能)都有 DQ warmup 周期
SCP(Select Chip Pause) “3 号桌先停一下” 暂停突发,之后可 SCE 恢复 数据速率 >800MT/s 时必须用 SCP 停突发(信号完整性原因),不允许直接停 RE_n 或 DQS 翻转;恢复后需 warmup
SCT(Select Chip Terminate) “3 号桌这单取消” 彻底终止突发 终止后不可恢复;要终止”已暂停”的突发,必须先 SCE 恢复再 SCT
NTO(Non-Target ODT) 空闲服务员去过道站好维持秩序 让不传数据的 LUN 在 DQ 总线挂出端接电阻,改善信号完整性 见 §5.4

5.1 SCE:启动数据突发

包体 = LUN[2:0] 目标地址。注意 SCE 与 RE_n 的时序关系(tSCRES/tSCR):RE_n 有效后至少 10ns 才能发完 SCE,SCE 包结束后至少 50ns RE_n 才允许拉低开始读。

SCE 包结构

5.2 SCP:暂停(高速时唯一合法的暂停方式)

速率超过 800MT/s 后,不允许靠”停RE_n/DQS 翻转”来暂停突发,必须发 SCP;之后用 SCE 恢复,恢复后需要 warmup 周期。低速场景虽然可以停时钟,但建议统一用 SCP,流程更一致。

5.3 SCT:终止(不可恢复)

SCT 包结构
  • 终止后该突发不可恢复,只能重新发起;

  • 要终止一个已 SCP 暂停的突发,必须先 SCE 恢复、再 SCT

  • SCT/SCP 包最后 CA_CLK 下降沿后,DQ/DQS/DBI 在 tSCZ(≤50ns)内进 Hi-Z。

5.4 NTO:让”围观群众”帮忙端接

多 LUN/多 Package 共享 DQ 总线时,正在传输的 LUN 信号质量会被未端接的”围观”负载拖累。NTO 包让不传数据的 LUN 挂出 ODT 端接电阻,明显改善高速信号完整性。

NTO 包结构(包体字段:EN=使能/禁用、DIR=输入/输出方向、M[1:0]=作用范围、LUN[3:0]=单 LUN 地址):

NTO 包结构

M[1:0] 编码:

M[1:0] 含义
00b 该 CA_CE# 下所有已配置为提供非目标 ODT 的 LUN 全体响应(LUN 地址位被忽略)
01b 仅 LUN[3:0] 选中的单个 LUN 响应
10b / 11b 保留

用法一:全体模式。要让 Package 1/2/3 同时开非目标 ODT,发 NTO 时把它们的 CA_CE# 全部拉低即可,一条包搞定多片。注意 NTO 包把 SCE/SCT “包夹”在中间,保证整个数据突发期间 ODT 恒定:

NTO 全体模式:一条包给多个 Package 开非目标 ODT

用法二:单 LUN 粒度。先 M=00b 给 CA_CE1# 全体开,再 M=01b + L[3:0]=1h 只给 CA_CE0# 的 LUN1 开——实现细粒度阻抗管理:

NTO 单 LUN 粒度用法

NTO 动作延迟:使能/禁用均在最后 CA_CLK 下降沿后 60ns 内(tNODT_ON / tNODT_OFF)。

六、数据突发:输入与输出

6.1 数据输入(主机 → NAND)

SCE 包启动、SCT 包收尾,DQS 在 SCE 规定的时序(tSCD/tSCDQSS)后开始翻转,中间是纯粹的 NV-DDR3 数据流,前导码 tWPRE2 ≥ 25ns:

数据输入突发序列

6.2 数据输出(NAND → 主机)

SCE 启动后,RE_t/RE_c 按 tSCRES/tSCR 时序开始翻转,NAND 经 tDQSRE 输出 DQS,数据随 DQS 流出,SCT 收尾后总线在 tSCZ 内回 Hi-Z,RE 前导码 tRPRE2 ≥ 30ns:

数据输出突发序列

要点:页面数据始终走 DQ/DQS 数据面,SCA 只把命令/地址搬到了 CA;不要因为”CA 能读回状态”就试图在 CA 上读页数据。

七、命令分两类:交织是 SCA 的灵魂

命令按是否占用 DQ 总线分两类:

DQ 相关命令(占用数据总线):

  • 从 cache/page 寄存器读、向 cache/page 寄存器写

  • 列地址修改命令(Change Read Column 等)

  • 编程、擦除、阵列读

  • DCC 训练(18h)、读训练(62h)、写训练(63h/64h)

非 DQ 相关命令(不占数据总线,随时可发):

  • 读状态类:70h、78h、73h、75h、77h、72h等

  • Set/Get Feature:EFh/EEh、LUN 版 D5h/D4h

  • Read ID:90h

核心规矩

  • 一个 LUN 上有 DQ 相关命令正在执行 / 排队等突发 / 突发被 SCP 暂停时,不许再给它发 DQ 相关命令

  • 非 DQ 相关命令随时可发,哪怕该 LUN 正忙;

  • 例外限制:会改变 DQ 总线输入/输出选项的 Set Feature(如 warmup、ODT 设置),不许发给正在进行 DQ 总线操作或正在提供 ODT 的 LUN。

这条规矩成就了 SCA 的精髓:LUN0 在 DQ 总线上猛传数据的同时,可以随意给 LUN1、LUN2 发命令——控制流和数据流彻底解耦。

❌ 错误示范:LUN0 数据突发还没结束,又给 LUN0 发下一条 DQ 相关命令(下图中 LUN0 的第二条 DQ 命令落在 LUN0 Data Burst 期间,非法):

错误的 LUN 交织示例

✅ 正确示范:LUN0 突发期间给 LUN1 发 DQ 相关命令并 SCE 启动 LUN1 的突发;突发期间穿插非 DQ 命令(读状态、Get Feature by LUN 等):

正确的 LUN 交织示例

另外注意:主机要把命令集按原子序列发送,中途插入破坏命令集的命令会被视为非法命令序列。传统模式”任意时刻插一条状态命令”的习惯不能照搬到 SCA。

八、三条最容易踩的铁律

8.1 读数据前必须先”改列地址”

LUN 级 / plane 级阵列读(如 00h-30h)在 tR 结束后,必须先发 06h-E0h 或 05h-E0h(Change Read Column Enhanced / Change Read Column),再发 SCE 启动数据输出。

  • 不许省略,也不许拿 00h 凑数替代;

  • CE# 级阵列读(Read Parameter Page、Read UID)只能用 05h-E0h(不能用 Enhanced 版);

  • DCC 训练(18h)、读/写训练序列不受此限制;

  • cache read 期间禁用 05h-E0h

  • 发了 Change Read Column 却没把数据取完的,必须补一个 SCT 终止当前页突发,否则下一页数据作废

正确序列(00h → 地址 → 30h → 等 tR → 06h-E0h/05h-E0h → SCE → 数据输出 → SCT):

正确的数据输出序列

8.2 复位前先”灭火”

发 FFh(整体复位)或 FAh(按 LUN 复位)之前:

  1. 若该 CA_CE# 上有 LUN 正在数据输出(RE 翻转中)或数据输入(DQS 翻转中),必须先发 SCT 终止突发;
  2. 复位命令前必须先做一次命令指针复位(把 CA_CE# 拉高一下,见 §4.3),确保芯片从包头边界开始接受复位命令。

FAh 的独特优势:可以只复位某个 LUN 而不打断同一 CA_CE# 下其他 LUN 的数据突发——前提是该 LUN 没在为正在突发的 LUN 提供非目标 ODT,或其 ODT 不受复位影响。

8.3 编程流程变了:12h + SCE/SCT + 78h 选 LUN

  • 地址输入后必须发 12h 命令包(SCA 专属节奏;tADL 从 12h 之后才开始计算);

  • 数据突发用 SCE 启动、SCT 收尾。即使 80h/85h/81h 不带任何数据,也要补 SCE+SCT

  • 多 LUN 交织编程时,切去别的 LUN 干活后,回到当前 LUN 必须先发 78h 选回该 LUN,且 78h 要放在 11h/1Ah/10h 之前(也可放在 SCE/SCT 之前);

  • 85h(copy back)交织编程前必须先发 Read Status Enhanced(78h)。

SCA SLC 编程标准序列(DAh → 80h → 地址 → 12h → SCE → 数据输入 → SCT → 10h → tPROG):

SCA SLC 编程标准序列

其他常用序列:

  • TLC 多平面无 dummy busy:80h+PlaneA地址 → 12h → SCE → 数据 → SCT → 11h → 80h+PlaneB地址 → 12h → SCE → 数据 → SCT → 10h(或 1Ah+cache 版本);

  • 换行地址(Change Row Address)版:第二段用 85h 接不同 BLK 地址;

  • LUN 交织:LUN X 数据输入中(或 SCP 暂停后)穿插 78h+LUN Y 操作,回 LUN X 时 78h 选回 → 数据输入 → SCT → 10h/11h

九、电气与时序速查

9.1 AC/DC 电平

类别 参数 规格
CA 输入 VIH.CA(AC) / (DC) ≥ 0.8 × VccQ / ≥ 0.7 × VccQ
CA 输入 VIL.CA(AC) / (DC) ≤ 0.2 × VccQ / ≤ 0.3 × VccQ
CA 输出 VOH.CA(DC) / VOL.CA(DC) ≥ 0.7 × VccQ / ≤ 0.3 × VccQ

说明:

  • 输入电平规格适用于 CA[1:0]、CA_CLK、CA_CE#,以及被驱动(非悬空)状态下的 SCA 信号;

  • CA[1:0] 名义输出驱动强度 50Ω,不支持 ZQ 校准

  • CA[1:0]、CA_CLK、CA_CE# 不端接(unterminated)运行;

  • 所有 AC 时序测量以 0.5 × VccQ 交叉点为基准。

9.2 关键 AC 时序(节选常用项)

符号 含义 数值
tCELCLK CA_CE# 建立 → CA_CLK 边沿 ≥ 20ns
tCLKLCE CA_CLK 保持 → CA_CE# 边沿 ≥ 20ns
tCACI / tCACO CA_CLK 输入/输出周期 ≥ 8ns(最快 125MHz)
tCACS / tCACH CA 对 CA_CLK 的建立/保持(@1V/ns 摆率) ≥ 1.2ns / ≥ 1.2ns
tCEH2 CA_CE# 最小高脉冲 ≥ 30ns
tDIPW_CA CA 最小输入脉宽 0.33 × tCACI
tCLKCA CA_CLK → CA 输出延迟 ≤ 30ns
tCECAZ CA_CE# 拉高 → CA 进 Hi-Z ≤ 30ns
tW2R_CA 输出包头最后 CA_CLK → 首个读出 CA_CLK ≥ 20ns
tR2W_CA 最后读出 CA_CLK 下降沿 → 下一个包头起始 CA_CLK 上升沿 ≥ tCACOPST + tCEH2 + tCELCLK
tSCRES RE_n 有效 → SCE 包最后 CA_CLK 低 ≥ 10ns
tSCR SCE 包最后 CA_CLK 边沿 → RE_n 拉低 ≥ 50ns
tSCDQSS DQS 拉高 → SCE 包最后 CA_CLK 低 ≥ 10ns
tSCD SCE 包最后 CA_CLK 低 → DQS 拉低 ≥ 50ns
tSCZ SCT/SCP 包最后 CA_CLK 下降沿 → DQ/DQS/DBI 进 Hi-Z ≤ 50ns
tNODT_ON/OFF NTO 包最后 CA_CLK 下降沿 → ODT 开/关 ≤ 60ns
tWLCEL_CA 使能 SCA 后 CA_CLK 拉低 → 首个 CE# 拉低 ≥ 100ns
tV2CE Vcc/VccQ 有效后 CA_CE# 保持高的时间 ≥ 200ns
tWPRE2 / tRPRE2 DQS / RE_n 前导码 ≥ 25ns / ≥ 30ns
tWPST_CA / tRPST_CA DQS / RE_n 后导码对 CA_CLK ≥ 6.5ns / ≥ tDQSRE+0.5×tRC
tWPSTH_CA / tRPSTH_CA 最后 CA_CLK 边沿 → DQS / RE_n 后导码保持 ≥ 50ns / ≥ 50ns
tDQSRE RE_n → DQS 输出延迟 ≤ 25ns

十、ODT 配置速查

SCA 模式下的 ODT 阻值通过 Feature 地址配置:

NV-DDR3:Feature F5h

  • P1[7:4]:数据输入时 DQ/DQS 的 Rtt & ODT

  • P2[3:0]:数据输出时 DQ/DQS 的 Rtt & ODT

  • P2[7:4]:RE_n 的 Rtt & ODT

  • 档位:0001=150Ω、0010=100Ω、0011=75Ω、0100=50Ω、0101=37.5Ω、0110=30Ω、0111=25Ω、0000=禁用

NV-LPDDR4:Feature 22h

  • P2[7:4]:DQ/DQS 输入 LTT ODT

  • P3[7:4]:RE 输入 LTT ODT

  • P4[3:0]:DQ/DQS 输出 LTT ODT

  • 档位:0001=300Ω、0010=150Ω、0011=100Ω、0100=75Ω、0101=60Ω、0110=50Ω、0111=42.9Ω、1000=37.5Ω、0000=禁用(默认)

十一、上手与调试建议

11.1 推荐的上手顺序

  1. 先单 CE、单 LUN、低速:把 Set Feature 切换、SCA 70h 状态读、单页 erase → program → read 跑通,再扩展到多 LUN 和交织;
  2. 切换后立即用 SCA 格式的 70h 验证:每个返回字节应为 E0h60h(Ready);返回全 00h 不是 Ready——通常意味着 CA 包格式错、PHY/控制器模式没切、通道/CE 选错,或读回路径(DQS 方向、采样)有问题;
  3. 状态验证不过,坚决不碰读写擦70h 全零还继续发数据面命令,后面一定卡在”等数据有效”之类的下游超时,掩盖真正的根因;
  4. 单页成功后再扩展 multi-plane、copyback、多 CE、高速训练和 NTO/ODT 调优。

11.2 切换验证”门禁”流程

1
2
3
4
5
6
7
Feature Set 成功(每个 CE 都发到 EFh/02h/P3=80h)?
└─ 否:保持传统模式,打印失败原因,停止 SCA 测试
└─ 是:满足 tFEAT/tCSD 后切主机侧为 SCA

SCA 70h 对全部 CE 均 Ready(E0h/60h)?
└─ 否:禁止读写擦分支,保留波形和日志
└─ 是:允许单 erase → program → read 最小验证

11.3 波形检查清单

抓 SCA 波形至少包含:CA[1:0]CA_CLKCA_CE#、目标 CE#、DQ[7:0]DQSR/B#,以及 channel 标识。逐项确认:

检查点 正常现象 异常含义
目标通道 波形是要测的 channel 抓错通道会把别处的训练误判为切换失败
Set Feature 命令 传统阶段出现 EFh 02h 没找到说明代码没走到切换路径
Feature 数据 P3=80h(P3[7]=1) P3=00h 不会由 Feature 进入 SCA;注意序列里的 80h 是 P3 数据,不是 Program Setup 命令
等待时间 Feature 写结束至首个 SCA 命令满足 tFEAT/tCSD 过早发 CA 包,NAND 还没切完
CA_CLK 初始化 首个 CA_CE# 拉低前 CA_CLK 已为低(tWLCEL_CA) 上电后 CA_CLK 还是高就拉 CE,必挂
首个 SCA 命令 SCA 格式的 70h CA 包 传统格式 70h 无法验证已切换的 NAND
状态返回 DQ/DQS 有效返回 E0h/60h 全零且无有效 DQS:查 CA 时序、PHY 模式、读回方向

11.4 切换调试中最常见的八个错误

  1. 把 P3 写成 00h 却期望进入 SCA(P3[7]=1 才是软切);
  2. NAND 已切 SCA,主机还发传统格式命令(包括用传统 EEh 回读验证);
  3. 只切了 PHY 或只切了控制器,两侧格式不一致;
  4. 同一 channel 只切换了部分 CE(必须全部同时切);
  5. 对引脚硬接使能 SCA 的通道发传统 FFh/EFh/EEh
  6. 把 Feature 序列里的 80h(P3 数据)误读成 Program Setup 80h 命令;
  7. 70h 读回全零仍继续读写擦(全零 ≠ Ready);
  8. 只会加长固定延时——先量时序,多数”切换失败”其实是 CA 包格式或读回路径问题。

一句话总结

SCA = 把”报单”和”运货”分成两条道:CA 两根线传命令/地址并遥控数据通道,DQ 八根线专心跑数据。用 SCE/SCP/SCT 三个包遥控数据突发的启停、用 NTO 包管理总线阻抗,换来多 LUN 并行调度的更高通道利用率。

代价是要遵守一批新规矩:包格式(4 位包头 + 8 位包体、奇偶分线)、上电 CA_CLK 先拉低、读数据前先改列地址、复位前先 SCT 灭火、编程新增 12h cmd、切 LUN 用 78h、高速下停突发必须 SCP……