NAND 干扰机制与数据保持
编制日期 2026-10-14 | 版本号 Rev 1.0
存储技术探讨系列 · 第二篇 | 上一篇:《NAND 存储单元与 3D NAND 技术探讨》| 面向 XTX 存储芯片从业人员的内部技术参考
上一篇把 SLC/MLC/TLC/QLC 与 3D 堆叠讲清楚了:单元怎么存、怎么读、为什么层数越堆越高。本篇只讨论一件更靠近失效的事——单元为什么会出错。
具体拆成三问:一是错从哪来,把编程干扰、读干扰、单元间耦合、数据保持、擦写磨损五个物理来源逐个剖到因果链;二是错怎么累积,为什么单次看不见的影响会在成千上万次操作之后集中爆发;三是系统在哪兜住,从 ECC、Read Retry、Read Reclaim 到巡检刷新,各自的拦截位置与失效边界。
本篇不讨论 FTL 算法实现、不讨论具体产品选型,也不给任何厂商的保证值。涉及数字一律给量级与工程口径,标「典型」的地方请按对应数据手册与实测复核。
结论:NAND 的错误不是「意外的坏块」,而是共享字线/位线这一结构决定的必然副产品——每次操作都不可能只作用于一个单元,偏差被干扰、磨损、环境三条渠道持续注入 Vt 分布,然后由 ECC、读重试、读回收、巡检四道防线一层层拦截;一旦失效速度超过纠正与搬移速度,就表现为不可纠正误码。把预算做在「抑制注入」和「及时搬移」两侧,比把希望全押在 ECC 上可靠得多。
本篇与上一篇的分工
| 维度 | 上一篇《存储单元与 3D NAND》 | 本篇《干扰机制与数据保持》 |
|---|---|---|
| 讨论对象 | 单个单元的存储原理与工艺结构 | 大量单元在共享电极下的相互影响 |
| 核心物理量 | 阈值电压的状态数与读窗 | 阈值电压随操作次数、时间、温度的漂移 |
| 时间尺度 | 结构代际(年) | 单次操作到整盘寿命(微秒到数年) |
| 典型问题 | SLC 还是 TLC、平面还是 3D | 数据还能放多久、还能读多少次 |
| 失效观 | 结构决定了容量与成本 | 使用方式决定了错误曲线的斜率 |
| 对应岗位 | 选型、产品定义 | 可靠性、固件、测试、失效分析 |
两篇是同一个坐标系的两条坐标轴:上一篇给出「这个盘子先天能有多好」,本篇给出「后天用了多久之后还剩多少」。做规格书时两篇要一起看,只看任一篇都会得出偏乐观的结论。
1. 干扰是 NAND 的固有属性
NAND 的一切错误来源,都可以追溯到同一个结构事实:单元不是独立器件,它同时挂在一条字线和一条位线上,任何一次操作都必然把电压施加到一批「不是目标」的单元上。这不是制造缺陷,而是密度换来的代价。
1.1 字线与位线:单元为什么甩不掉邻居
NAND 阵列的组织方式决定了「独立寻址一个单元」这件事从物理上做不到。若干个单元串联成一条 string(串),串的上端接位线(BL)、下端通过选择管接源线;同一层的所有单元栅极连成一条字线(WL),一条字线横向贯通同一个块(或子块)里的所有串。
于是每一次操作都是一次「批量动作」:
- 编程:被选中的 WL 拿到逐步抬升的编程脉冲 Vprog,同一条 WL 上不想被写的单元要靠位线电压把它们「禁止」掉;而为了让被选中那条串的沟道真正建立电位,这条串上其余 WL 必须抬到通过电压 Vpass 把它们的沟道打通。
- 读取:被选中的 WL 拿到读参考电压 Vref,同一串上其余 WL 一律抬到 Vpass 充当导通开关,也就是说读一页等于把同块(同子块)上几十到上百条未被选中的字线全部加一遍 Vpass。
- 擦除:以块为单位整块加高压,块内所有单元一起经历。
数量上有个体感很有用:一条 WL 上挂的单元数量是数千到上万量级(随块大小、是否划分为子块而变),一条串上的单元数量是几十量级(大致等于堆叠层数或更早时期的串长度)。也就是说,一次「写一个页」的动作,至少会影响同一条串上几十个单元的沟道电位,以及同一条 WL 上数千个单元的栅极电位。想只折腾一个目标单元,物理上办不到。
| 电极 | 共享范围 | 操作时被施加的电压 | 非目标单元的状态 |
|---|---|---|---|
| 字线 WL | 同一块(或子块)内的所有串 | 选中者:Vprog/Vref;未选中者:Vpass | 全部在承受非零栅压 |
| 位线 BL | 同一条串上的所有单元 | 编程时:0 V 或禁止电压中的一种 | 沟道电位被整串决定 |
| 源线 SL | 整个块甚至更多 | 通常接地或抬到较高电位 | 参与构成擦除/读取偏置 |
| 衬底 / 体 | 整个阵列 | 擦除时整块高压 | 一行都逃不掉 |
这个表格里最值得记住的一行是「未选中者:Vpass」。NAND 里绝大部分的错误,都不是发生在「你想操作的那些单元」身上,而是发生在「你被迫带上它们的那些单元」身上。
1.2 五类退化现象的坐标系
工程上把 NAND 的可靠性问题习惯拆成五类。它们经常被混在一起说,但触发条件完全不同,混淆后最容易出现的误判是「反正是老了,算了」。先把坐标立起来:
| 现象 | 触发动作 | 主要受力对象 | Vt 的走向 | 是否可逆 |
|---|---|---|---|---|
| 编程干扰 Program Disturb | 对同块其它页编程 | 同一 WL 上未被选中的单元 | 缓慢升高(被软编程) | 擦除后可复原 |
| 读干扰 Read Disturb | 反复读同一块内的某一页 | 同块未被读的那些页 | 缓慢升高(累积软编程) | 擦除后可复原 |
| 单元间耦合 Cell-to-Cell | 邻居被写入之后 | 已写入单元的相邻单元 | 升高或展宽,取决于邻居写入先后 | 擦除后可复原 |
| 数据保持 Retention | 什么都不做,只流逝时间 | 所有已写入单元 | 整体向低 Vt 方向漂移并展宽 | 不可复原,需靠搬移保住数据 |
| 擦写磨损 Endurance | 反复擦除与编程 | 整块的隧穿氧化层 | 先加剧泄漏、后导致 Vt 卡死 | 不可逆的硬件损耗 |
区分它们的关键提问方式很简单:如果没有任何操作、只放时间,会不会坏?会 —— 那是保持;不会 —— 那一定是某次操作注入的,再追问「谁在被操作」。第二层提问是擦掉重写能不能恢复正常:能恢复的是干扰类,恢复不了的是磨损类。
五类机制的角色分工
| 环节 | 贡献形式 | 工程上的可控程度 |
|---|---|---|
| 编程干扰 | 给 Vt 分布加一个随写字数增长的偏移量 | 中:电压方案与写顺序可优化,颗粒厂已内置大部分对策 |
| 读干扰 | 给「长期只读」的冷数据加风险 | 高:完全靠系统的读计数与搬移策略解决 |
| 单元间耦合 | 在写入瞬间直接改变已写好邻居的 Vt | 高:写顺序与预补偿由系统端主导 |
| 数据保持 | 随时间单调劣化,与温度强相关 | 低:只能预测并提前搬移,无法阻止 |
| 擦写磨损 | 抬高前四项的斜率 | 中:靠磨损均衡把总量摊开 |
注意最后一行:磨损本身不一定直接产生错误,它的主要害处是把前面四项的劣化速度整体抬高。所以在 TLC/QLC 上,同样一个读热点在盘的前期和末期,造成的读干扰后果完全不是一个数量级。
1.3 干扰到误码的五段因果链
本篇后面所有章节都套用同一条五段链。碰到任何现象,按这个顺序问一遍,基本能定位:
- 谁施加了电压:哪一次操作(编程/读/擦)、选中了哪条 WL/BL、邻居因此拿到什么电压。
- 单元内部发生了什么:是隧穿注入、是热电子注入、是陷阱辅助泄漏(SILC),还是纯粹的电势串扰。
- Vt 怎么变:整个分布平移、单边拖尾、还是整体展宽;方向是变高还是变低。
- 读出怎么错:分布相对读参考电压越过判读门限的那一部分比例,就是原始误码率 RBER。
- 系统怎么补:是靠 ECC 直接纠正,还是必须靠 Read Retry 换一组 Vref 重读,还是必须 Read Reclaim 搬移重写。
| 链条环节 | 本篇对应章节 | 常见误判 |
|---|---|---|
| 谁施加了电压 | 第 2~4 章 | 以为只有写才会伤单元,忽略读操作 |
| 单元内部发生了什么 | 第 5~6 章 | 把保持错误直接当成坏块 |
| Vt 怎么变 | 第 3、5 章 | 只用「平均漂移」描述,忽略分布展宽 |
| 读出怎么错 | 第 7、9 章 | 把读窗口偏移当成数据已经丢失 |
| 系统怎么补 | 第 8 章 | 认为 ECC 能兜住一切,不做搬移预算 |
最后提醒一句:这条链是单向的。系统侧的动作(第 5 段)只能「读出已经发生的 Vt 变化之后去补」,它不能反向消除前四段。ECC 纠正了这一次读出,不代表下一次读出还能纠回来 —— 这是后面第 8、9 章反复要讲的边界。
2. 编程干扰 Program Disturb
编程时被「顺手带上」的那些单元,虽然拿到了远低于 Vprog 的电压,但因为这个电压被施加了几万次、几十万次,累积起来足以把它们的阈值电压推过判读门限。
2.1 编程时到底有几类单元在受力
把一次编程操作的偏置列全,会发现「未被选中」远不是一个统一的状态:
| 单元类别 | 所在位置 | 栅极电压 | 沟道/位线状态 | 受到的影响 |
|---|---|---|---|---|
| 被编程单元 | 选中 WL × 选中 BL(值为 0) | Vprog 阶梯脉冲 | 接地,压差最大 | 发生隧穿,Vt 被推到目标态 |
| 被禁止编程单元 | 选中 WL × 禁止 BL | 同样是 Vprog | 被抬到禁止电压(自升压) | 压差被压缩,但仍有一点点弱编程 |
| 同 WL 的旁观单元 | 选中 WL × 其它串 | 同样是 Vprog | 沟道浮空或被抬升 | 靠沟道自升压降低压差 |
| 同串的其它 WL 单元 | 未选中 WL × 被选中串 | Vpass | 沟道电位由整串决定 | 承受 Vpass 反复应力,缓慢右移 |
| 完全旁观单元 | 未选中 WL × 未选中串 | Vpass | 基本无压差 | 受影响最小,但不是零 |
关键点在于:给一条 WL 加 Vprog 时,这条 WL 上是所有单元都拿到 Vprog,而不是只有目标那个。颗粒只能靠位线(或准确的说,靠让串的沟道电位浮起来)让不想写的单元「压差变小」来抑制写入,压差不可能被压到零。这就是「编程干扰」四个字的物理起点。
禁止编程是怎么实现的
不想写的那些串,位线被抬到一个禁止电压,串 Select 管关闭或沟道被预充到某个电位,之后随 WL 升压,沟道通过寄生电容被「自升压」耦合抬上去。沟道电位越高,栅压与沟道的压差越小,隧穿电流指数级衰减,写入就被有效禁止了。这个机制称为 self-boost / 自升压。它的副作用也很清楚:自升压不到位的地方(比如靠近源端选择管那几条 WL,电位更容易通过沟道漏走)恰恰是编程干扰最严重的重灾区。
因为它在单次操作里的量几乎测不出来。一次应力造成的 Vt 位移只是读窗宽度里极小的一段,怎么读都读得对。真正让它变得致命的是重复次数:同一个块被写几百上千次的过程中,同一批旁观单元会被反复压几百上千次。
2.2 四种典型形态
| 形态 | 发生位置 | 机理一句话 | 典型规律 |
|---|---|---|---|
| Vpass 软编程 (Pass Disturb) | 未选中 WL 上、位于被选中串的单元 | 每次写入都要被抬一次 Vpass,弱的隧穿一点点注入 | 与本块被写的页数成正比 |
| 自升压不足导致的弱编程 (Program Disturb) | 选中 WL 上、自升压最差的几条 WL 附近 | 沟道电位没抬到位,栅沟压差偏大 | 位置高度集中,靠近源端选择管 |
| 邻近串的耦合位移 | 相邻 BL 上同期操作的单元 | 相邻位线之间的寄生耦合改变沟道电位 | 与同时编程的页数、图案相关 |
| 擦除态拖尾 | 整块尚未写入的区域 | 被反复回写的擦除态单元尾部向高 Vt 移动 | 表现为擦除态分支变宽 |
四种形态里,第一种的量最大、也最均匀;第四种最容易在出厂测试时被放过,因为它不改变擦除态的中心,只是把右边那条尾巴拉长。第三种属于工程上最难建模的一类,因为它取决于写入图案,而图案取决于上层的数据流。
2.3 颗粒层面的压制手段
| 手段 | 做法 | 收益 | 代价 |
|---|---|---|---|
| 双电平 Vpass | 近邻 WL 用较低的 Vpass_R,远处 WL 用较高的 Vpass | 直接降低近邻单元的累积应力 | 时序与控制复杂度上升 |
| 优化自升压 | 调整预充沟道的时序与位线电压方案 | 把弱编程压到可忽略 | 对选择管漏电敏感 |
| 减小 Vpass 幅度 | 在保证沟道导通的前提下压低 Vpass | 指数级降低隧穿电流 | 读/写裕量变小,温漂更敏感 |
| 写入顺序重排 | 让近页先写、远页后写,减少回踩 | 削弱耦合与多次应力 | 由上层策略决定,颗粒只能建议 |
| 减小单次编程步长 | ISPP 步长更小、校验更密 | 写入分布更紧,留出更多读窗 | tPROG 变长 |
这几项里,「近邻 WL 用更低的 Vpass」是收益最直观的一项:真正需要压低應力的其实只是离选中 WL 最近的几条,把它们单独拉低一级、其余 WL 保持高压以保证沟道导通,整体应力立刻下降。代价只是多几组解码路径与控制时序。
「数据不动就不会坏」这种说法在编程干扰这里就不成立:数据不动,但同一个块里其它页在写 —— 只要在同一块里有人在写,你的那一页就一直在陪着领 Vpass 应力。静态数据不等于零应力,只是应力来源从「自己被访问」变成了「邻居被访问」。
章节收尾留一句话:编程干扰之所以被控制得比较好,是因为它的电压方案完全在颗粒厂手里,几十代产品迭代已经把它压得很低。相比之下,读干扰完全没有这层保护 —— 读多少次、集中在哪几个块,完全是上层系统的行为,没有任何硬件机制替你管。这就是下一篇要讲的内容。
3. 读干扰 Read Disturb
读同样要给整条串上的字线加通过电压。读一个页,等于把同一物理块里几十到上百条未被选中的字线挨个抬一遍 Vpass —— 这与编程干扰里那段软编程效应是同一个物理过程,只是触发动作从「写」换成了「读」。
这句话在 NOR 上大致成立,在 NAND 上不成立。读的时候被选中的字线只拿到很低的读参考电压,但同一条串上其余所有字线一律要抬到通过电压去充当导通开关。对那些没有被读的单元来说,栅极与沟道之间存在一个反复施加的电场,电子会顺着隧穿一点点注入存储层。
读一两次当然没事,问题是读热点:目录项、索引节点、被反复扫描的数据集,可能在几天之内被读几十万次,而同一个物理块里的所有页跟着承受同样多次的通过电压应力。这就是读干扰,它真实存在、可以复现,并且不擦除就不会消失。
3.1 读一个页,全块陪跑
把一次读操作的偏置清单列全,再和编程做一次对照:
| 单元位置 | 读操作时的栅极电压 | 受力性质 | 与编程的区别 |
|---|---|---|---|
| 被读的那一页(选中字线) | 读参考电压 Vref,幅度很低 | 基本无应力 | 编程时这里拿到的是高压脉冲,情况正好相反 |
| 同一条串上未被选中的字线 | 通过电压 Vpass | 每次读都被抬一次,典型的软编程应力 | 与编程时完全相同 |
| 选中字线上没有被读的那几位 | 同样是 Vref | 几乎无应力 | 编程时它们要承受自升压不足的风险 |
| 其它串上的单元 | 取决于是否被抬到 Vpass | 次要影响 | 量级明显更小 |
结论有点反直觉:一次读操作真正施加应力的,恰恰是那些没被读、但挂在同一条串上的单元。所以读热点的风险并不落在被反复读取的那一页上,而是落在同一个物理块里的那些长期冷数据页身上。
这个结论在失效现场非常有用。用户报「A 文件打不开」,出问题的往往不是 A 文件所在的那一页,而是 A 所在物理块里某个长年没人写的邻居页被读崩了。把它擦掉重写一次如果能恢复,就可以基本确定是读干扰而不是硬件损伤 —— 这是现场最快的一条判断线。
3.2 读次数与 Vt 漂移的累积关系
读干扰随累计读次数的演化大致分三段:
| 阶段 | 同块累计读次数量级 | Vt 位移占读窗的比例 | 外部表现 |
|---|---|---|---|
| 前期 | 1 到 10⁴ | 远小于百分之五 | 完全看不出来,读出与写入一致 |
| 中期 | 10⁴ 到 10⁵ | 百分之五到百分之十五 | 边缘位开始越界,原始误码率缓慢抬升,纠错记录变多 |
| 后期 | 10⁵ 以上 | 接近或超过百分之二十 | 单页误码数逼近纠错能力上限,必须重读或搬移 |
这张表给的是近年工程上的经验量级,不是任何产品的保证值。它随三件事强烈变化:一是几何尺寸与堆叠结构,越先进、读窗越窄,同样的绝对位移占比越高;二是单元类型,多比特单元的读窗只有单比特单元的几分之一;三是这个块已经写了多少次,磨损会把所有机制的斜率一起抬高。同一个系统在不同的寿命阶段,同一个读热度造成的后果可以差出一两个数量级。
这条曲线还有一个容易被忽略的特点:它不是线性的。接近判读门限时,多一点点位移就会让越界的比特数快速增加,因为决定误码率的是分布越过门限的那块尾部面积,而不是分布中心离门限还有多远。所以处置动作不能等原始误码率明显上升再做,必须在逼近门限之前就把数据搬走。
3.3 读热点与计数量级
颗粒自己不会限制读次数,计数与管理完全落在系统头上。先看清热点长什么样:
| 热点来源 | 典型形态 | 为什么不容易被发现 | 对策 |
|---|---|---|---|
| 文件系统元数据 | 目录项、分配表、日志超级块 | 上层访问的文件各不相同,底层却总是同一个块 | 元数据常驻缓存,或对元数据区单独做静态搬移 |
| 只读映像 | 系统分区、固件分区、预置数据集 | 长期不写,也就长期没人替它检查和搬家 | 周期性巡检,把读计数纳入巡检触发条件 |
| 后台校验与全盘扫描 | 备份软件核对、杀毒扫描、体检工具 | 短时间内的读次数可能是平时的几百倍 | 限制后台扫描带宽,或改成抽样校验 |
| 数据库索引 | 树的上层节点,每次查询都要走一遍 | 物理位置集中、访问频率极高 | 留在缓存里,避免每次都落到闪存上读 |
读计数必须以物理块为粒度,而不是以逻辑页或文件为粒度。上层看到的是「这个文件被打开了一万次」,颗粒关心的是「同一个物理块在这一万次里被读了八千次」。两者之间隔着映射表,只在上层计数会完全漏掉真实热点。
另一个常见分歧是阈值取多少。颗粒规格书通常会给出同一个物理块允许的读干扰上限,典型在十万次级;企业实践里更常见的做法是取这个值的若干分之一作为读回收触发线,留出足够裕量,让搬移动作在纠错机制尚有余力的时候就完成。这条线具体怎么定,见第 8 章。
4. 单元间耦合干扰 Cell-to-Cell Interference
这一类干扰与有没有在操作关系不大,它关心的是「邻居最后写到哪儿了」。邻居的电荷通过寄生电容改变目标单元的有效栅压,读出来的阈值电压因此被整体抬走或拉回一段。
4.1 寄生电容从哪里来
浮栅是一小撮被绝缘层完全包围的导体;电荷俘获层虽是绝缘体,其被俘获的电荷同样构成一个「存储节点」,可以用同样的电容模型来近似。它与周围所有导体之间都存在电容:与控制栅之间、与沟道之间、与相邻单元的浮栅之间。最后一项就是这段要讲的耦合电容。
核心的物理关系只有一句话:
dVt(目标)约等于 k × dVt(邻居) 其中 k = 耦合电容 / 浮栅看到的总电容
k 是耦合系数,典型在百分之几到百分之十几的量级。它只由几何结构决定:单元挨得越近、浮栅面积越大、控制栅的耦合被邻居分走的份额越多,k 就越大。这也是为什么随着尺寸缩小与堆叠层数上升,耦合一直是可靠性的重点关注项 —— 结构在做小,读窗也在变窄,两边的裕量同时被吃掉。
| 电容项 | 两端导体 | 设计意图 | 对耦合的影响 |
|---|---|---|---|
| 控制栅耦合电容 | 控制栅 与 浮栅 | 希望越大越好,读写效率高 | 越大则 k 越小,是有利的那一端 |
| 沟道耦合电容 | 沟道 与 浮栅 | 读写必经的电势通道 | 同样摊薄 k |
| 相邻浮栅的耦合电容 | 邻居浮栅 与 目标浮栅 | 毫无用处,纯寄生项 | 直接决定干扰强度 |
| 相邻字线耦合 | 邻居字线 与 目标浮栅 | 寄生项 | 字线间距越小越强 |
最后一行提醒了一件容易被漏掉的事:干扰源不止左右邻居,还包括同一条串上纵向相邻的字线。进入三维堆叠之后,干扰源从平面上的四邻扩展成「相邻层加同层横向邻居」,建模复杂度明显上升,这也是为什么先进代次上耦合问题更依赖实测标定而不是解析计算。
4.2 邻居写完前后,Vt 怎么挪
位移方向完全取决于邻居最终停在哪一档。把整个过程拆成三步:
- 目标先写:此时邻居多半还处在擦除态,目标单元按这个环境条件被校验到目标 Vt。
- 邻居再写:邻居被推到较高 Vt,意味着它的浮栅电位被明显改变。
- 目标被带动:通过耦合电容,目标浮栅的电位被邻居拖着走一段,等效于它的控制栅效率发生了变化,读出时需要的栅压随之改变,表现就是这个单元的 Vt 挪动了。
记住一条就够:挂在同一条字线上的单元,写在不同时刻,彼此的判读条件就不一样。至于往哪个方向挪,取决于电荷被注入或抽走的方向,不必死记,工程上真正要的是「可预测」这三个字。
| 邻居最终状态分布 | 目标单元的位移 | 对读出意味着什么 | 工程关注度 |
|---|---|---|---|
| 全部还在擦除态 | 位移最小,基本停在校验时的位置 | 判读最从容 | 低 |
| 状态随机混合 | 位移居中但分散,带来额外的分布展宽 | 读窗从两边被挤占 | 中 |
| 全部推到最高态 | 位移最大,整条分布被推过去 | 最容易越过相邻状态的判读门限 | 高 |
第三行是最麻烦的情形。如果所有邻居都被写到了最高态(某些极端数据图案),整页的阈值电压会被一起推高;而在多比特单元上,相邻两个状态之间的窗口本来就只有很小的余量,整条分布平移就足以让原本稳稳落在窗口中间的位全部贴到边界上。
这也解释了为什么耦合干扰很难用一个「最坏情况下的固定补偿值」一次性对付掉:邻居的组合由数据决定,是随机的。要么在系统侧按写入顺序预先修正,要么把它当成随机误差留给纠错机制去兜,二者选一。
4.3 编程顺序与预补偿
| 手段 | 原理 | 生效层级 | 局限 |
|---|---|---|---|
| 按字线顺序写 | 让所有单元在同样的邻居条件下被写,消除先后差异 | 系统写入策略 | 要求严格依序写入,对随机写不友好 |
| 写入时预先畸变 | 写前半桶数据时先少写一点,等邻居写完后自然被抬到位 | 颗粒内部时序 | 只能补偿已知且确定的邻居组合 |
| 读参考电压补偿 | 读的时候根据已知的邻居状态挪动参考电压 | 颗粒固件 | 得先知道邻居状态,代价是多读一次 |
| 比特交错 + 扰码 | 把相邻单元的数据打散,并降低极端图案出现的概率 | 系统数据处理 | 是缓释而不是消除 |
顺序写在可靠性上的收益,经常被拿去和标称指标对比,然后被认为不重要。它真正的价值在于把耦合误差从随机误差变成了可预测的系统误差:随机误差只能靠纠错台阶硬扛,系统误差可以被预先补偿掉。换句话说,顺序写不仅提高可靠性,还大幅减少对纠错预算的消耗。
读心的收尾:单元间耦合不改变任何单元内部的电荷,它改变的是读出时的电势条件。因此它和编程干扰、读干扰一样,擦除重写之后就会消失。判断是不是耦合问题的方法也很直白 —— 擦掉重写之后电荷恢复正常了吗?恢复了,那就不是硬件损伤,而是可以靠写入顺序从容安排的问题。