嵌入式系统中的非易失性存储设备

在嵌入式系统中,主要有这几类非易失性存储设备(断电不丢数据):

特性 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按字节擦除

典型用途

  • 配置存储:需要频繁修改的小数据

  • 校准数据:传感器校准参数

  • 设备信息:序列号、生产日期等

相关推荐
别掩2 小时前
光耦选型指南
单片机·嵌入式硬件
历程里程碑2 小时前
Linux 1 指令(1)入门:6大基础指令详解
linux·运维·服务器·c语言·开发语言·数据结构·c++
egoist20232 小时前
[linux仓库]线程池[线程·玖]
linux·运维·服务器·线程池
kaoa00010 小时前
Linux入门攻坚——62、memcached使用入门
linux·运维·memcached
model200511 小时前
alibaba linux3 系统盘清理
linux·运维·服务器
WG_1711 小时前
Linux:动态库加载总结_进程间通信+进程池 + 进程IPC(27/28/29/30/31/32)
linux·运维·服务器
小赵还有头发11 小时前
安装 RealSense SDK (驱动层)
linux
Root_Hacker12 小时前
include文件包含个人笔记及c底层调试
android·linux·服务器·c语言·笔记·安全·php
微学AI13 小时前
内网穿透的应用-告别局域网束缚!MonkeyCode+cpolar 解锁 AI 编程新体验
linux·服务器·网络