Flash 只能将比特从 1 改写为 0,无法从 0 改回 1

一、Flash 的最小存储单元:浮栅晶体管

Flash 每一个 bit 都对应一个浮栅 MOS 晶体管(Floating Gate Transistor),核心结构是在控制极和沟道之间,加了一层被二氧化硅绝缘层完全包裹的「浮栅」。

  • 浮栅被绝缘层包裹,电子进去后很难跑出来,因此掉电后电荷也能长期保存,这就是 Flash 非易失性的来源。
  • 数据的 0 和 1,由浮栅中存储的电子数量 决定:
    • 浮栅里电子少 → 管子导通阈值低 → 加读取电压时管子导通 → 读出为 1
    • 浮栅里电子多 → 管子导通阈值高 → 加读取电压时管子不导通 → 读出为 0

二、两个基本操作的物理过程

1. 擦除操作:把所有位变成 1

擦除的本质是把浮栅里的电子全部移出去

  • 实现方式:在衬底加高压,通过量子隧穿效应,让浮栅里的电子穿过绝缘层,回到衬底。
  • 结果:浮栅电子变少,所有单元都回到 "导通" 状态,也就是全 1。
  • 关键限制:这个高压电场是按整块(扇区 / 页 / 块)施加的,无法精准作用到单个字节或单个位上,否则会干扰相邻单元。因此擦除只能按扇区 / 块进行,不能单字节擦除。
2. 编程(写入)操作:把 1 改成 0

写入的本质是往浮栅里注入电子

  • 实现方式:在控制极加高压,让沟道里的热电子穿过绝缘层,注入到浮栅中并被困住。
  • 结果:浮栅电子变多,对应单元变成 "不导通" 状态,也就是 0。
  • 特点:可以通过地址译码,单独选中某个字节 / 半字 / 字进行注入,只改变目标位,不影响其他位。

三、为什么不能直接把 0 改回 1?

要把 0 变回 1,就必须把浮栅里已经注入的电子移走。但:

  1. 移走电子需要反向高压电场,也就是「擦除」这个动作本身;
  2. 现有 Flash 的电路设计中,擦除的高压只能覆盖整个擦除块,无法精确到单个位 / 字节 ------ 如果强行给单个位加反向高压,会把周围相邻的存储单元也一起擦除,造成数据损坏。

简单说:

写入只能 "加电子"(1→0),不能 "减电子"(0→1);想减电子只能整块擦除。


四、通俗类比

你可以把 Flash 想象成一块刷了白漆的黑板

  • 擦除 = 把整块黑板重新刷白(全 1),只能整块刷,不能只刷一个字;
  • 写入 = 用黑笔在白黑板上写字(把对应位置写成 0),可以一个字一个字写;
  • 你没法用黑笔把 "黑点" 变回 "白色",想改只能把整块黑板重新刷白再重写。
相关推荐
DaTou大头3 小时前
STM32第六篇
单片机·嵌入式·电路基础
Brilliantwxx5 小时前
【STM32】 SPI阻塞式通信与HAL源码(串口读ID实战)
开发语言·stm32·单片机·嵌入式硬件·ecmascript
朝发如雪6 小时前
快速掌握单片机基础(4)(ds18b20)
单片机
kkkkkkkkkk_Z7 小时前
单片机|学习日记:单片机底层架构与寄存器操作全解析
linux·笔记·单片机·学习·51单片机
LCG元7 小时前
STM32F103 双ADC交错采样实战:DUALMOD寄存器拆解、DMA位宽陷阱与1.71MSPS有效采样率实测
stm32·单片机·嵌入式硬件
朝发如雪7 小时前
快速掌握单片机基础(5)(ARM基本概念)
单片机·arm
星栖与芯16 小时前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
朝发如雪1 天前
快速掌握单片机基础(1)(嵌入式基本概念)
单片机
szxinmai主板定制专家1 天前
【嵌入式实战】RK3588+GMSL多路相机采集方案|SerDes长距离低延时视频流落地教程
人工智能·单片机·机器人·边缘计算·zynq