2. Flash物理特性
车载MCU中广泛使用的NOR Flash和NAND Flash,其底层物理单元均为浮栅晶体管(Floating Gate Transistor)。理解编程(Program)、擦除(Erase)和读操作(Read)的物理机制,是设计可靠Flash驱动与磨损均衡算法的基石。本章深入剖析这三类操作的原理,并重点阐述写操作对电压和时序的严苛要求。
2.1 浮栅晶体管基础结构
Flash存储单元的核心是浮栅晶体管,它在传统MOSFET的控制栅(Control Gate)与沟道之间增加了一层由多晶硅构成的浮栅(Floating Gate),该浮栅被绝缘层(SiO₂)完全包裹,能够长期存储电荷。
关键物理特性:浮栅中存储的电子数量决定了晶体管的阈值电压(Vth),从而区分“0”和“1”两种存储状态。无电子(或少量电子)为擦除态(通常为“1”),有大量电子为编程态(通常为“0”)。
2.2 编程(Program)原理
编程操作的本质是向浮栅注入高能电子,使阈值电压升高,单元进入“0”状态。车载Flash普遍采用沟道热电子注入(CHEI, Channel Hot Electron Injection)机制。
2.2.1 编程物理过程
- 沟道开启:在控制栅施加高电压(Vpp,通常为8~10V),在漏极施加中等电压(Vd,约4~6V),源极接地。晶体管导通,形成从源极到漏极的沟道电流。
- 热电子产生:电子在漏极附近的高电场区(夹断区)被加速,获得足够动能,成为“热电子”。
- 注入浮栅:控制栅的高电压在浮栅上感应出正电势,吸引热电子穿越氧化层势垒(约3.2eV),注入浮栅。
- 阈值升高:浮栅中积累的负电荷抵消控制栅电场,使晶体管阈值电压(Vth)从约1V升高至5~7V。
车载设计要点:编程操作是逐字节(Byte)或逐字(Word)进行的,但实际物理写入以Page为单位(通常256B~2KB)。驱动层必须提供Page缓冲机制,避免部分编程导致数据损坏。
2.3 擦除(Erase)原理
擦除操作将浮栅中的电子拉回衬底,使阈值电压降低,单元恢复“1”状态。车载Flash主要使用Fowler-Nordheim(FN)隧穿效应,以降低功耗和衬底损伤。
2.3.1 擦除物理过程
- 强电场建立:在控制栅施加负高压(Vneg,通常-8~-10V),或在衬底(P-well)施加正高压(Vpp,约8~10V),源极和漏极浮空(Floating)。
- FN隧穿:浮栅与沟道之间形成强电场(>10MV/cm),电子直接隧穿通过氧化层势垒,进入衬底。
- 阈值恢复:浮栅电子被移除,Vth恢复至低电平(约1~2V),单元回到“1”状态。
关键约束:擦除操作必须以Sector(扇区)或Block(块)为单位进行,最小擦除单元通常为4KB~128KB。擦除时间远长于编程时间(典型值:擦除100ms~1s vs 编程10μs~200μs)。频繁擦除会加速氧化层退化,限制Flash寿命(通常1万~10万次)。
2.4 读操作原理
读操作不改变浮栅电荷,仅通过检测单元导通电流来判别状态。车载Flash读操作通常采用电流检测(Current Sensing)方式。
2.4.1 读操作流程
| 步骤 | 操作 | 电压条件 | 检测结果 |
|---|---|---|---|
| 1 | 施加读电压 | 控制栅:Vread(约4~5V) 漏极:Vd_read(约1V) 源极:GND |
— |
| 2 | 检测沟道电流 | — | 若Vth < Vread → 单元导通 → 大电流 → “1” 若Vth > Vread → 单元截止 → 小电流 → “0” |
| 3 | 锁存输出 | — | Sense Amplifier将电流差转换为逻辑电平 |
读干扰(Read Disturb)风险:长时间对同一单元反复施加读电压,可能导致少量热电子注入浮栅,造成软编程(Soft Program)错误。车载驱动需实现读计数监控,在超过阈值后触发数据刷新(Data Refresh)。
2.5 写操作对电压和时序的要求
编程和擦除统称为“写操作”,其对电压精度和时序控制极为敏感。不满足要求将导致写入失败、数据保持力下降甚至永久性损伤。
2.5.1 电压要求
| 参数 | 编程(Program) | 擦除(Erase) | 说明 |
|---|---|---|---|
| 控制栅电压(Vcg) | +8V ~ +10V | -8V ~ -10V 或 衬底+8V | 精度需在±5%以内,纹波<100mV |
| 漏极电压(Vd) | +4V ~ +6V | 浮空(Floating) | 编程时提供热电子能量 |
| 源极电压(Vs) | GND | 浮空(Floating) | — |
| 衬底电压(Vsub) | GND | +8V ~ +10V(P-well) | 擦除时形成FN隧穿电场 |
| 电压上升/下降斜率 | < 1V/μs | < 0.5V/μs | 过快的斜率会诱发击穿 |
2.5.2 时序要求
- 编程脉冲宽度:典型值 1μs ~ 10μs,采用“编程-验证”迭代算法(Program & Verify),每次脉冲后读取验证,直至编程成功或达到最大重试次数(通常25次)。
- 擦除脉冲宽度:典型值 1ms ~ 10ms,同样采用“擦除-验证”迭代,避免过度擦除(Over-erase)导致单元耗尽。
- 电压建立时间(Settling Time):电荷泵(Charge Pump)从启动到输出稳定需 5μs ~ 20μs,在此期间禁止执行写操作。
- 操作间隔(Recovery Time):连续编程/擦除之间需等待至少 1μs,让氧化层电场弛豫,减少累积应力。
2.6 操作对比总结
| 特性 | 读(Read) | 编程(Program) | 擦除(Erase) |
|---|---|---|---|
| 物理机制 | 电流检测 | 沟道热电子注入(CHEI) | Fowler-Nordheim隧穿(FN) |
| 操作单元 | Byte / Word | Byte / Word(物理Page) | Sector / Block |
| 典型时间 | 50~100ns | 10~200μs | 100ms~1s |
| 电压应力 | 低(~5V) | 高(8~10V) | 高(8~10V,负压) |
| 对寿命影响 | 极小(读干扰可忽略) | 中等(氧化层局部损伤) | 最大(氧化层全局退化) |
| 错误模式 | 读干扰、位翻转 | 编程失败、过编程 | 擦除失败、过擦除 |
车载驱动设计启示:
- 编程和擦除必须使用闭环验证(Program/Erase & Verify),不能依赖开环定时。
- 电压建立时间和操作间隔必须在驱动层通过状态机严格管理,避免电荷泵过载。
- 磨损均衡算法需优先考虑擦除次数,因为擦除是寿命瓶颈。
- 读操作需监控累积读次数,触发数据刷新以防止读干扰累积错误。