一、Flash 的最小存储单元:浮栅晶体管
Flash 每一个 bit 都对应一个浮栅 MOS 晶体管(Floating Gate Transistor),核心结构是在控制极和沟道之间,加了一层被二氧化硅绝缘层完全包裹的「浮栅」。
- 浮栅被绝缘层包裹,电子进去后很难跑出来,因此掉电后电荷也能长期保存,这就是 Flash 非易失性的来源。
- 数据的 0 和 1,由浮栅中存储的电子数量 决定:
- 浮栅里电子少 → 管子导通阈值低 → 加读取电压时管子导通 → 读出为 1
- 浮栅里电子多 → 管子导通阈值高 → 加读取电压时管子不导通 → 读出为 0
二、两个基本操作的物理过程
1. 擦除操作:把所有位变成 1
擦除的本质是把浮栅里的电子全部移出去。
- 实现方式:在衬底加高压,通过量子隧穿效应,让浮栅里的电子穿过绝缘层,回到衬底。
- 结果:浮栅电子变少,所有单元都回到 "导通" 状态,也就是全 1。
- 关键限制:这个高压电场是按整块(扇区 / 页 / 块)施加的,无法精准作用到单个字节或单个位上,否则会干扰相邻单元。因此擦除只能按扇区 / 块进行,不能单字节擦除。
2. 编程(写入)操作:把 1 改成 0
写入的本质是往浮栅里注入电子。
- 实现方式:在控制极加高压,让沟道里的热电子穿过绝缘层,注入到浮栅中并被困住。
- 结果:浮栅电子变多,对应单元变成 "不导通" 状态,也就是 0。
- 特点:可以通过地址译码,单独选中某个字节 / 半字 / 字进行注入,只改变目标位,不影响其他位。
三、为什么不能直接把 0 改回 1?
要把 0 变回 1,就必须把浮栅里已经注入的电子移走。但:
- 移走电子需要反向高压电场,也就是「擦除」这个动作本身;
- 现有 Flash 的电路设计中,擦除的高压只能覆盖整个擦除块,无法精确到单个位 / 字节 ------ 如果强行给单个位加反向高压,会把周围相邻的存储单元也一起擦除,造成数据损坏。
简单说:
写入只能 "加电子"(1→0),不能 "减电子"(0→1);想减电子只能整块擦除。
四、通俗类比
你可以把 Flash 想象成一块刷了白漆的黑板:
- 擦除 = 把整块黑板重新刷白(全 1),只能整块刷,不能只刷一个字;
- 写入 = 用黑笔在白黑板上写字(把对应位置写成 0),可以一个字一个字写;
- 你没法用黑笔把 "黑点" 变回 "白色",想改只能把整块黑板重新刷白再重写。