1. 存储器基础回顾:RAM、ROM、Flash、EEPROM的区别与选型

做单片机开发这么多年,我见过太多因为存储器选型不当导致的“灵异故障”。说白了,存储器就是单片机的“记忆体”——程序放哪、数据存哪、掉电后还能不能留住,全看它。这一章咱们先把四种主流存储器的底细摸清楚。

1.1 存储器的基本分类

从使用场景分,存储器就两大阵营:易失性和非易失性。掉电丢数据的叫易失性,掉电还能记住的叫非易失性。你想想看,程序代码肯定要非易失的,不然每次上电都成“失忆症”了。

核心判断标准:

  • 掉电后数据是否保留 → 决定用 RAM 还是 ROM/Flash/EEPROM
  • 写入次数要求 → 决定用 Flash 还是 EEPROM
  • 写入速度要求 → 决定用 SRAM 还是 DRAM

1.2 RAM:运行时的工作台

RAM(Random Access Memory)是单片机运行时临时放变量、堆栈的地方。速度快,但掉电就丢。我习惯把 RAM 比作工程师的工作台——东西摆上面用着顺手,但下班断电全清空。

RAM 又分两种:

类型 速度 容量 功耗 典型应用
SRAM 极快(ns级) 小(KB~MB) 较高 CPU缓存、小容量MCU
DRAM 较快(几十ns) 大(MB~GB) 需刷新 大容量嵌入式系统

我在项目中遇到过用 SRAM 做数据采集缓冲区的案例。当时选了片 256KB 的 SRAM,读写时序没调好,数据老丢。后来发现是片选信号建立时间不够——嗯,这种坑踩过一次就记住了。

选型小技巧: 单片机内部 RAM 不够用时,外扩 SRAM 比 DRAM 好使。DRAM 需要刷新控制器,对实时性要求高的场合容易出问题。

1.3 ROM:只读的“硬编码”

ROM(Read-Only Memory)是最早的非易失存储器。出厂时写死,用户改不了。现在单片机里基本见不到纯 ROM 了,但概念得懂——它是 Flash 和 EEPROM 的老祖宗。

ROM 的变种有 PROM(可编程一次)、EPROM(紫外线擦除)、OTPROM(一次性可编程)。OTP 在低成本消费电子里偶尔还能见到,比如遥控器芯片。

注意: OTP 芯片一旦写错,直接报废。我有个同事曾经把 OTP 的校验位算反了,5000 片全废——从那以后他写 OTP 程序都要仿真三遍。

1.4 Flash:现代单片机的“程序仓库”

Flash 是目前单片机的主流非易失存储器。NOR Flash 和 NAND Flash 是两大分支。单片机里几乎全是 NOR Flash——它支持随机读取,可以直接执行代码(XIP,eXecute In Place)。

Flash 的特点:

  • 块擦除:不能按字节擦,必须按扇区(通常 4KB 或 64KB)整块擦
  • 擦写寿命:一般 1万~10万次
  • 写入速度:比 EEPROM 快,但比 RAM 慢得多

我个人习惯把 Flash 当“硬盘”用——存程序、存固件、存配置参数。但要注意,频繁改写的参数别放 Flash 里,寿命扛不住。

避坑指南: 我曾经在一个数据采集项目里把日志直接写 Flash,每天写几千次。三个月后 Flash 坏了,整机返厂。后来改成先写 RAM 再批量刷 Flash,问题解决。

1.5 EEPROM:按字节改写的“便签本”

EEPROM(Electrically Erasable Programmable Read-Only Memory)可以按字节擦写,寿命比 Flash 长(通常 10万~100万次)。适合存那些需要频繁修改的小量数据——比如设备校准参数、用户设置、运行次数。

EEPROM 的缺点:容量小(一般几 KB 到几十 KB)、写入慢(ms 级)。

特性 Flash EEPROM
擦写单位 扇区(4KB~64KB) 字节
擦写寿命 1万~10万次 10万~100万次
写入速度 快(μs级) 慢(ms级)
典型容量 MB~GB KB~几十KB
典型用途 程序代码、固件 配置参数、校准值

选型建议: 需要频繁改少量数据 → EEPROM;需要存大量程序 → Flash。别用 Flash 模拟 EEPROM,除非你做好了磨损均衡和坏块管理。

1.6 四种存储器的关系与选型逻辑

下面这张图把四种存储器的关系理清楚了。我每次做方案选型都会在脑子里过一遍这个逻辑。

存储器选型决策树 需要哪种存储器? 易失性(掉电丢失) 非易失性(掉电保留) SRAM(高速缓存) DRAM(大容量) Flash(程序存储) EEPROM(参数存储) NOR Flash NAND Flash 选型口诀: 程序代码 → NOR Flash(可XIP执行) 频繁改参数 → EEPROM(字节擦写、寿命长) 临时变量/堆栈 → SRAM(速度快、无需刷新)

1.7 实际选型中的几个坑

讲完理论,说点实战经验。选型时这几个问题我几乎每次都会被问到:

  1. Flash 和 EEPROM 能互相替代吗? 不能。Flash 擦写单位大,频繁改数据会快速磨损。EEPROM 容量小,存不了程序。
  2. 为什么有些单片机内部既有 Flash 又有 EEPROM? 分工不同。Flash 跑程序,EEPROM 存配置。有些芯片用 Flash 模拟 EEPROM,但需要软件做磨损均衡。
  3. SRAM 和 DRAM 怎么选? 小容量(<1MB)选 SRAM,简单可靠。大容量选 DRAM,但得配刷新控制器。

重要提醒: 选型时一定要看数据手册的“擦写寿命”和“数据保持时间”两个参数。我曾经选了一款标称 10 万次擦写的 Flash,结果在高温环境下 3 万次就挂了——环境温度会加速老化,这个很多人忽略。

1.8 本章小结

四种存储器各司其职:RAM 管运行、Flash 管程序、EEPROM 管参数、ROM 已成历史。选型时抓住三个核心:掉电保持、擦写粒度、寿命次数。搞清楚了这些,后面排查存储器故障时才能快速定位问题。

嗯,这一章就到这里。记住:存储器选型错了,后面调试再牛也救不回来。