1. NVM 技术全景:从 NOR 到 MRAM,我们到底在用什么?
大家好,我是你们这趟 NVM 驱动之旅的向导。在开始写代码之前,咱们得先搞清楚一个最基本的问题:我们到底在和什么样的硬件打交道?
NVM,全称 Non-Volatile Memory,非易失性存储器。说白了,就是断电后数据不丢的存储介质。你手机里的照片、电脑里的文档、嵌入式设备里的固件,全得靠它。
但 NVM 不是一种东西,它是一个大家族。不同成员脾气秉性完全不同,驱动写法也天差地别。我见过不少工程师,拿着 NAND Flash 的驱动思路去调 NOR Flash,结果踩坑踩到怀疑人生。所以,这一章我们先画一张技术地图。
1.1 主流 NVM 技术对比:一张表说清差异
先上干货。我把市面上最常见的几种 NVM 技术拉了一张对比表。你写驱动时,最关心的无非就是:怎么读?怎么写?寿命多长?速度多快?
| 技术类型 | 存储单元 | 读速度 | 写速度 | 擦除方式 | 擦写寿命 | 典型容量 | 主要用途 |
|---|---|---|---|---|---|---|---|
| NOR Flash | 浮栅晶体管 | 快(随机访问) | 慢 | 块擦除(64KB~256KB) | 10万~100万次 | 1MB~512MB | 代码存储、XIP 执行 |
| NAND Flash | 浮栅晶体管 | 较快(页访问) | 快 | 块擦除(128KB~8MB) | 1千~10万次 | 1GB~1TB | 大容量数据存储 |
| EEPROM | 浮栅晶体管 | 快 | 慢(字节级) | 字节擦除 | 100万次 | 1KB~1MB | 参数存储、配置信息 |
| FRAM | 铁电晶体 | 快(类SRAM) | 快(类SRAM) | 无需擦除 | 1万亿次以上 | 4KB~16MB | 高速日志、计费数据 |
| MRAM | 磁隧道结 | 快(类SRAM) | 快 | 无需擦除 | 无限 | 1MB~256MB | 工业控制、航空电子 |
这张表我建议你收藏。每次选型或者写驱动前,扫一眼,心里就有底了。
1.2 逐个拆解:每种存储器的脾气
NOR Flash:代码的“家”
NOR Flash 最大的特点是支持随机访问。CPU 可以直接在上面执行代码,不需要先把代码拷贝到 RAM 里。这就是所谓的 XIP(eXecute In Place)。
我在一个工业控制器项目里用过 NOR Flash。当时客户要求系统上电后 100ms 内必须响应外部中断。如果用 NAND,得先加载 Bootloader 再搬运代码,时间根本不够。最后选了 NOR,直接 XIP,问题解决。
NAND Flash:大容量存储的王者
NAND 的存储密度高,成本低,所以 SSD、U 盘、手机存储全是它。但它的缺点也很明显:不能随机访问,只能以页为单位读写(典型页大小 4KB~16KB),以块为单位擦除。
而且,NAND 天生就有坏块。出厂时就有,使用过程中还会产生新的。所以驱动里必须实现坏块管理和ECC 纠错。
EEPROM:小而精的参数存储
EEPROM 可以按字节擦写,非常灵活。但容量小、速度慢。适合存一些配置参数、校准数据、设备序列号之类的。
我习惯用 EEPROM 存设备的 MAC 地址和产品序列号。因为这类数据一旦写入,几乎不再修改,但要求绝对可靠。EEPROM 的 100 万次擦写寿命,绰绰有余。
FRAM 与 MRAM:未来的方向
这两种技术都是非易失性 + 高速读写 + 无限寿命。FRAM 靠铁电晶体极化存储数据,MRAM 靠磁隧道结的磁阻效应。
FRAM 的写速度接近 SRAM,而且不需要擦除。我在一个需要频繁记录日志的电力仪表项目里用过 FRAM。以前用 EEPROM,每写一次要等 5ms,日志一多就卡死。换成 FRAM,写一次不到 100ns,完全无感。
MRAM 更贵,但抗辐射能力强,适合航天、军工等极端环境。
1.3 NVM 在嵌入式系统中的应用场景
说了这么多理论,咱们看看实际项目中怎么选。
- 固件存储:NOR Flash 是首选。因为要 XIP,要快速启动。容量 1MB~32MB 足够。
- 大容量数据:NAND Flash 或 eMMC(其实就是 NAND + 控制器)。存音视频、文件系统、数据库。
- 配置参数:EEPROM 或小容量 NOR。存 Wi-Fi 密码、设备 ID、校准系数。
- 高速日志:FRAM。频繁写入,要求不丢数据,寿命要长。
- 安全关键系统:MRAM。航空、医疗、汽车,要求极端可靠。
1.4 知识体系图:NVM 技术全景
下面这张图,是我自己画的技术全景图。它帮你理清不同 NVM 技术之间的关系,以及它们在嵌入式系统中的位置。
1.5 小结:驱动开发的起点
这一章我们走马观花看了一遍 NVM 家族。你可能会觉得信息量有点大。没关系,后面的章节我们会一个一个深入。
记住一句话:驱动是硬件的翻译官。你只有真正理解了硬件的脾气,才能写出高效、稳定的驱动。