在嵌入式系统中,主要有这几类非易失性存储设备(断电不丢数据):
| 特性 | NOR Flash | NAND Flash | eMMC | SD卡 | SPI Flash | EEPROM |
|---|---|---|---|---|---|---|
| XIP支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ⚠️ 部分支持 | ❌ 不支持 |
| 访问方式 | 随机 | 块(页) | 块 | 块 | 随机/块 | 随机 |
| 典型容量 | 1MB-256MB | 128MB-1TB | 4GB-512GB | 1GB-1TB | 1KB-128MB | 1KB-1MB |
| 价格/容量 | 昂贵 | 便宜 | 中等 | 便宜 | 中等 | 昂贵 |
| 接口 | 并行 | 原始NAND | MMC | SDIO | SPI | I²C/SPI |
| 是否需要 坏块管理 | 不需要 | 需要 | 内部处理 | 内部处理 | 不需要 | 不需要 |
| 擦除单位 | 块/扇区 | 块(页) | 块 | 块 | 扇区 | 字节 |
| 主要用途 | 启动/代码 | 数据存储 | 系统存储 | 可移动存储 | 小数据/配置 | 配置数据 |
1. NOR Flash(贵族,支持XIP)
特点:
-
随机访问:可以像 RAM 一样直接读取任意地址
-
支持 XIP :代码可以直接在NOR上运行,无需先拷贝到RAM
-
可靠性高:寿命长,稳定性好
-
价格贵:比 NAND 贵很多
-
容量小:通常几MB到几十MB
物理接口:
-
并行接口:有很多数据线(如16位、32位),速度快
-
在 i.MX 上通常通过 EIM(外部接口模块) 连接
典型用途:
-
启动设备:存储 bootloader(如 U-Boot)
-
关键固件:存储必须可靠、快速启动的代码
-
工业设备:对可靠性要求高的场合
比喻 :像一个图书馆的书架,你可以直接走到任意书架前拿书(直接读取任意地址)。
2. NAND Flash(平民,大容量)
特点:
-
串行访问:必须按"块"读写(如4KB一块)
-
不支持 XIP :代码必须先拷贝到RAM才能执行
-
容量大:几百MB到几百GB
-
价格便宜:单位容量成本低
-
需要坏块管理:有坏块,需要特殊管理
-
需要ECC:需要纠错码保障数据正确
物理接口:
-
并行或串行:有原始NAND接口(很多控制线)
-
在 i.MX 上通过 GPMI(通用NAND接口) 连接
典型用途:
-
大容量存储:文件系统、用户数据
-
消费电子产品:手机、平板、数码相机
-
替代硬盘:SSD固态硬盘的核心就是NAND
比喻 :像一盒盒密封的巧克力,你必须打开整个盒子(读一个块),不能只拿一颗(读一个字节)。
3. eMMC(智能NAND)
特点:
-
NAND + 控制器:内部集成了NAND芯片和管理控制器
-
简化设计:对主机来说就像访问SD卡一样简单
-
标准接口:MMC接口标准
-
无需坏块管理:控制器内部处理了所有复杂问题
典型用途:
-
智能手机:主要存储设备
-
平板电脑:系统存储
-
嵌入式系统:简化设计的首选大容量存储
4. SD/TF卡(可移动存储)
特点:
-
可插拔:方便更换
-
标准接口:SDIO接口
-
容量范围广:从几MB到几TB
-
速度分类:有Class 2/4/6/10,UHS-I/II等速度等级
与eMMC的关系:
-
类似原理:都是基于NAND Flash
-
eMMC是焊死的 ,SD卡是可插拔的
-
eMMC通常更可靠(工业级)
典型用途:
-
相机存储:照片、视频
-
开发板启动:嵌入式开发常用启动方式
-
扩展存储:为设备增加存储空间
5. SPI Flash(简单接口)
特点:
-
串行接口:只需要4根线(CLK, MOSI, MISO, CS)
-
小容量:通常几KB到几十MB
-
接口简单:占用引脚少
-
速度较慢:串行传输
物理接口:
-
SPI总线:串行外围接口
-
多个SPI设备可以共享总线(通过片选CS区分)
典型用途:
-
存储配置参数:网络设备的MAC地址、校准数据
-
小型固件:简单设备的程序存储
-
替代EEPROM:需要较大容量时
6. EEPROM(可字节擦写)
特点:
-
字节级擦写:可以单独修改一个字节
-
寿命有限:通常10万-100万次擦写
-
容量很小:通常几KB到几百KB
-
接口多样:I²C、SPI等
与Flash的区别:
-
Flash按块擦除(如4KB一块)
-
EEPROM按字节擦除
典型用途:
-
配置存储:需要频繁修改的小数据
-
校准数据:传感器校准参数
-
设备信息:序列号、生产日期等