4、ROM与Flash结构:Mask ROM、PROM、EPROM、EEPROM、NAND Flash与NOR Flash的区别

好,咱们今天聊聊存储单元里最让人头疼的一类——ROM和Flash。说实话,我刚入行那会儿,光是把Mask ROM和PROM搞清楚就花了不少时间。你想想看,网表里一堆莫名其妙的存储节点,到底是只读的还是可擦写的?这直接决定了你后续的逆向策略。

我个人习惯把这类器件分成两大类:真正的一次性写入可以反复折腾的。下面咱们一个一个过。

4.1 Mask ROM:出厂即定型

Mask ROM,说白了就是“刻死的”。芯片制造时,光刻掩模版直接把数据写进去了。你拿到芯片,里面是什么就是什么,改不了。

核心特征:

  • 存储单元通常用单管MOS,有/无连接表示0/1
  • 面积最小,成本最低
  • 适合大批量、固化的代码(比如键盘的键位映射)

我在逆向一款老式游戏机芯片时遇到过Mask ROM。当时看到存储阵列里全是规整的MOS管,但没有任何编程管脚,我就知道——这玩意儿只能读,别想写。嗯,这里要注意:Mask ROM在网表里通常表现为纯组合逻辑阵列,没有控制信号线。

4.2 PROM:一次编程,终生使用

PROM(可编程只读存储器)比Mask ROM灵活一点。用户可以自己写一次,但写完了就改不了。为什么?因为它的存储单元里有个熔丝或者反熔丝

我曾经拆过一颗军用级PROM,里面用的是镍铬熔丝。编程时通个大电流,熔丝烧断,就代表“1”了。你想想看,这要是逆向时不小心把电源接反了……嗯,后果你懂的。

避坑指南:我曾经在逆向PROM时,误把编程电压当成正常读电压,结果熔丝全烧了。后来我学乖了:先查datasheet,确认读电压范围。

4.3 EPROM:紫外线擦除,电写入

EPROM(可擦除可编程只读存储器)是个里程碑。它用浮栅MOS管存电荷,紫外线照一下,电荷全跑光,芯片就清空了。

存储单元结构:

位线
  |
  漏极
  |
  控制栅 ---- 字线
  |
  浮栅 (存电荷)
  |
  源极
  |
  地线

我个人习惯在网表里找EPROM的标识:芯片顶部有个石英窗口。如果没有窗口,那大概率是OTP(一次编程)版本。OTP其实就是没窗口的EPROM,封装时省了石英,便宜但写不了第二次。

4.4 EEPROM:电可擦,字节级操作

EEPROM(电可擦除可编程只读存储器)比EPROM方便多了。不用紫外线,直接用电就能擦。而且它能按字节擦写,这在嵌入式系统里非常实用。

它的存储单元用了隧道氧化层,电压一高,电子就穿过去。我逆向过一颗汽车ECU里的EEPROM,里面存了各种标定参数。当时我盯着网表看了半天,发现它的控制逻辑比EPROM复杂得多——有专门的擦写状态机。

类型 擦除方式 写入方式 字节操作 典型应用
EEPROM 电擦除 电写入 支持 配置参数、校准数据
EPROM 紫外线 电写入 不支持 固件、Bootloader

4.5 NAND Flash vs NOR Flash:两大阵营

好,终于到了重头戏。NAND和NOR,虽然都叫Flash,但结构完全不同。

4.5.1 NOR Flash:随机访问,代码执行

NOR Flash的存储单元是并联的。每个单元都能直接寻址,所以你可以像读RAM一样读它。这意味着:代码可以直接在NOR Flash里执行(XIP,eXecute In Place)。

我在逆向一款路由器固件时,发现它用的就是NOR Flash。网表里能看到完整的地址译码器,每个存储单元都有独立的字线。读速度很快,但写速度慢——因为擦除必须按块来。

个人经验:NOR Flash的网表特征很明显——地址线多,数据线宽,控制信号里有“读使能”和“写使能”。如果你看到存储阵列旁边有复杂的译码器,八成是NOR。

4.5.2 NAND Flash:串行访问,高密度

NAND Flash的存储单元是串联的。一个串里几十个单元串在一起,像一串珠子。这样面积小,密度高,但访问方式变了——你不能随机读某个字节,必须按页读。

为什么会这样?因为串联结构决定了:你要读某个单元,必须先让其他单元导通。说白了,就是串行访问

我逆向过一块SSD里的NAND Flash,网表里全是页缓冲器块擦除控制器。它的存储阵列看起来像网格,但每个“串”的源极和漏极是共享的。

NAND串结构(简化):
位线
  |
  选择管 (上)
  |
  单元63
  |
  单元62
  |
  ...
  |
  单元0
  |
  选择管 (下)
  |
  源线

4.6 核心区别总结

我整理了一张表,方便你对照:

特性 NOR Flash NAND Flash
单元连接 并联 串联
读取方式 随机访问 页读取
写入速度
擦除粒度 块(64KB~128KB) 块(128KB~512KB)
密度
典型应用 代码存储、XIP 大容量数据、文件系统

4.7 逆向识别技巧

最后,分享几个我在网表里识别这些存储器的经验:

  • 看控制信号:如果有“擦除”和“编程”控制线,大概率是Flash;如果只有“读”信号,可能是Mask ROM或PROM。
  • 看存储单元结构:单管+浮栅是Flash;单管+熔丝是PROM;单管+无浮栅是Mask ROM。
  • 看地址译码器:NOR Flash有完整译码器;NAND Flash只有行译码和页缓冲。
  • 看擦写次数:EEPROM通常有10万次寿命,NAND Flash有1万~10万次,NOR Flash有1万~10万次。网表里如果有“磨损均衡”逻辑,那肯定是NAND Flash。

一句话总结:Mask ROM是死数据,PROM是一次性,EPROM是紫外线,EEPROM是电擦除,NOR是随机读,NAND是串行读。逆向时,先看控制信号,再看单元结构,最后看译码器——基本不会翻车。

ROM与Flash分类体系 非易失性存储器 ROM(只读存储器) Flash(闪存) Mask ROM PROM EPROM/EEPROM NOR Flash NAND Flash ROM特征 • 数据固化,不可修改(Mask ROM) • 一次编程(PROM) • 紫外线/电擦除(EPROM/EEPROM) Flash特征 • 电擦除,块级操作 • NOR:随机访问,XIP执行 • NAND:串行访问,高密度 逆向识别:看控制信号 → 看单元结构 → 看译码器

我的建议:逆向时别急着看存储单元细节。先找控制信号——读使能、写使能、擦除使能。这些信号能帮你快速定位存储类型。我曾经靠这个技巧,半小时就搞定了别人一天的工作量。

专注资料整理