SCA 介绍与使用指南
一、SCA 是什么:一分钟看懂
想象一条单向单车道的高速公路(传统 NAND 接口):货车(数据)要过,客车(命令/地址)也要过,全挤在 DQ[7:0] 这 8 根线上轮流走。车道限速提得再高(IO 速度提升),客车还是得一辆辆排队过——车流中客车占比太高,数据”有效运力”就上不去。落到真实芯片上就是:NAND IO 速度一提再提,命令/地址传输时间却没能同步缩短,IO 效率反而被拖垮,成了存储性能的瓶颈。
SCA(Separate Command Address,命令地址分离)就是在旁边加修一条专用辅道(CA[1:0] 两根线):客车全走辅道,主道只跑货车。
这样多通道(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 的完整过程:
关键点:
- 在传统模式下对目标 channel 的每一个 CE 发
EFh + 02h + P1~P4(P3[7]=1); - 写完后满足
tWPST/tWPSTH → tWB → tFEAT(图中间的长等待段),NAND 内部完成切换; tFEAT结束后 NAND 已进入 SCA 模式:WE_n 引脚身份变为 CA_CLK,且必须在第一次拉低 CA_CE# 之前至少tWLCEL_CA(100ns)先把 CA_CLK 驱动为低;- 切换完成后,不能再用传统格式发命令(包括用传统
EEh回读 Feature 验证——这是新手最常犯的错误)。
3.3 退出 SCA:SCA-RESET
软切进入的 SCA,用 SCA-RESET 退出(NAND 处于 ready 状态时接受);同样要求同 channel 所有 CE 一起退出。
格式: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 驱动为低。
两种上电路径(对应图中 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 拉低):
地址输入周期(包头 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# 全程保持低:
4.5 CA 读回:NAND 怎么”回话”
状态、Feature 寄存器等少量数据可从 CA 总线读回。CA 输出包结构如下:
流程(结合上图):
- 主机发数据输出包头(
00 00),NAND 进入 CA 输出模式; - 主机在 tCLKCAZ 内**松手(Hi-Z)**CA[1:0];
- NAND 在 tCLKCAD 后接管总线,先驱动 “00b” 前导码;
- tW2R_CA 之后主机翻转 CA_CLK 逐位读出:CA[1] 出数据、CA[0] 是选通信号;
- 读满一个字节后把 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):
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 才允许拉低开始读。
5.2 SCP:暂停(高速时唯一合法的暂停方式)
速率超过 800MT/s 后,不允许靠”停RE_n/DQS 翻转”来暂停突发,必须发 SCP;之后用 SCE 恢复,恢复后需要 warmup 周期。低速场景虽然可以停时钟,但建议统一用 SCP,流程更一致。
5.3 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 地址):
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 恒定:
用法二:单 LUN 粒度。先 M=00b 给 CA_CE1# 全体开,再 M=01b + L[3:0]=1h 只给 CA_CE0# 的 LUN1 开——实现细粒度阻抗管理:
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 期间,非法):
✅ 正确示范:LUN0 突发期间给 LUN1 发 DQ 相关命令并 SCE 启动 LUN1 的突发;突发期间穿插非 DQ 命令(读状态、Get Feature by 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 复位)之前:
- 若该 CA_CE# 上有 LUN 正在数据输出(RE 翻转中)或数据输入(DQS 翻转中),必须先发 SCT 终止突发;
- 复位命令前必须先做一次命令指针复位(把 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):
其他常用序列:
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 推荐的上手顺序
- 先单 CE、单 LUN、低速:把 Set Feature 切换、SCA
70h状态读、单页 erase → program → read 跑通,再扩展到多 LUN 和交织; - 切换后立即用 SCA 格式的
70h验证:每个返回字节应为E0h或60h(Ready);返回全00h不是 Ready——通常意味着 CA 包格式错、PHY/控制器模式没切、通道/CE 选错,或读回路径(DQS 方向、采样)有问题; - 状态验证不过,坚决不碰读写擦:
70h全零还继续发数据面命令,后面一定卡在”等数据有效”之类的下游超时,掩盖真正的根因; - 单页成功后再扩展 multi-plane、copyback、多 CE、高速训练和 NTO/ODT 调优。
11.2 切换验证”门禁”流程
1 | Feature Set 成功(每个 CE 都发到 EFh/02h/P3=80h)? |
11.3 波形检查清单
抓 SCA 波形至少包含:CA[1:0]、CA_CLK、CA_CE#、目标 CE#、DQ[7:0]、DQS、R/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 切换调试中最常见的八个错误
- 把 P3 写成
00h却期望进入 SCA(P3[7]=1 才是软切); - NAND 已切 SCA,主机还发传统格式命令(包括用传统
EEh回读验证); - 只切了 PHY 或只切了控制器,两侧格式不一致;
- 同一 channel 只切换了部分 CE(必须全部同时切);
- 对引脚硬接使能 SCA 的通道发传统
FFh/EFh/EEh; - 把 Feature 序列里的
80h(P3 数据)误读成 Program Setup80h命令; 70h读回全零仍继续读写擦(全零 ≠ Ready);- 只会加长固定延时——先量时序,多数”切换失败”其实是 CA 包格式或读回路径问题。
一句话总结
SCA = 把”报单”和”运货”分成两条道:CA 两根线传命令/地址并遥控数据通道,DQ 八根线专心跑数据。用 SCE/SCP/SCT 三个包遥控数据突发的启停、用 NTO 包管理总线阻抗,换来多 LUN 并行调度的更高通道利用率。
代价是要遵守一批新规矩:包格式(4 位包头 + 8 位包体、奇偶分线)、上电 CA_CLK 先拉低、读数据前先改列地址、复位前先 SCT 灭火、编程新增 12h cmd、切 LUN 用 78h、高速下停突发必须 SCP……









