-存储专题)
资料整理方向结合 公开资料中的常见讲法并用 Micron、Winbond、SD Association 等厂商/标准资料校正关键概念。本文适合硬件开发工程师面试前复习重点放在分类、接口协议、器件特性、选型逻辑和常见问答。1. 一句话总览硬件里的“存储”可以按两条主线理解按是否掉电保存易失性存储 RAM非易失性存储 ROM / EEPROM / Flash / FRAM / MRAM 等。按系统位置和用途片内 SRAM / Cache、外部 DDR 运行内存、启动 Flash、参数存储 EEPROM / FRAM、大容量数据存储 NAND / eMMC / UFS / SD 卡 / SSD。面试中不要只背“RAM 掉电丢失、ROM 掉电不丢失”还要说明用在哪里为什么选它接口是什么读写/擦除粒度是什么是否需要 ECC、坏块管理、磨损均衡对启动、成本、容量、可靠性的影响。2. 存储器分类2.1 按掉电是否保存类型是否掉电保存常见器件典型用途易失性存储否SRAM、DRAM、SDRAM、DDR、LPDDR程序运行、缓存、帧缓存、堆栈非易失性存储是ROM、OTP、EEPROM、NOR Flash、NAND Flash、eMMC、UFS、FRAM、MRAM启动代码、固件、参数、文件系统、日志2.2 按访问方式类型说明例子随机访问可以按地址较灵活访问适合代码执行或内存映射SRAM、DRAM、NOR Flash页/块访问通常按页读写、按块擦除适合大容量数据NAND Flash串行访问/命令访问通过命令帧、地址、数据阶段访问SPI Flash、I2C EEPROM、SD 卡托管块设备内部带控制器主机看到的是逻辑块地址eMMC、UFS、SD 卡、SSD2.3 按系统层级层级速度容量成本例子CPU 寄存器最高最小最高通用寄存器、特殊功能寄存器Cache很高小高L1/L2/L3 Cache通常为 SRAM片内 SRAM高小到中较高MCU 内部 SRAM外部 DRAM/DDR中高中到大中DDR3/DDR4/LPDDR非易失 Flash中低中到大低到中NOR、NAND、eMMC、UFS外部大容量存储较低到中大低SD 卡、SSD、U 盘3. 常见存储类型3.1 SRAM特点静态随机存取存储器不需要周期性刷新。速度快常用于 Cache、MCU 片内 RAM、FIFO、DMA 缓冲。容量较小单位面积成本高掉电数据丢失。面试表达SRAM 速度快、不需要刷新适合做片内运行内存、缓存和实时数据缓冲缺点是面积大、成本高、容量通常不大掉电后数据丢失。3.2 DRAM / SDRAM / DDR / LPDDR特点DRAM 用电容存储电荷需要刷新。SDRAM 是同步 DRAM读写和系统时钟同步。DDR 在时钟上升沿和下降沿都传输数据。LPDDR 偏低功耗常见于移动设备、嵌入式 Linux 产品。硬件关注点数据线位宽x8 / x16 / x32。地址线、Bank、行列地址复用。时钟、DQS、阻抗匹配、走线等长、端接。初始化时序、刷新周期、频率裕量。面试表达DDR 主要作为系统运行内存容量大、带宽高但设计复杂需要控制器初始化、刷新管理和严格的 PCB 时序设计。3.3 ROM / PROM / EPROM / EEPROM / OTP类型特点常见用途Mask ROM出厂时固化后续不可改大批量固定程序PROM一次可编程固定配置OTPOne-Time Programmable一次烧录芯片 ID、密钥、校准值EPROM可紫外擦除较老早期设备EEPROM电擦写字节/页级更新参数、校准值、设备地址EEPROM 面试重点掉电保存容量小擦写寿命有限常见接口为 I2C / SPI适合低频更新的配置参数不适合频繁日志。3.4 Flash 总览Flash 本质上属于可电擦写的非易失性存储常见分为NOR Flash适合代码存储、启动、XIP。NAND Flash适合大容量数据、文件系统、日志。SPI NOR / QSPI NOR / Octal SPI NOR常见启动 Flash。SPI NAND / Raw NAND外部 NAND需要 ECC / 坏块管理。Managed NAND内部集成控制器如 eMMC、UFS、SD NAND、SD 卡、SSD。4. NOR Flash4.1 典型使用场景BootloaderMCU 外部程序存储SoC 启动镜像BIOS / 固件小容量配置数据支持 XIP 的代码执行场景。4.2 特点维度NOR Flash访问方式随机读取能力强代码执行可支持 XIP容量通常小于 NAND成本单位容量成本高可靠性较高坏块问题少写入/擦除擦除较慢通常扇区/块擦除接口并行 NOR、SPI NOR、QSPI NOR、Octal SPI NOR4.3 常见操作Read读数据Page Program页编程常见页大小如 256 ByteSector Erase扇区擦除常见 4 KBBlock Erase块擦除常见 32 KB / 64 KBChip Erase整片擦除Write Enable写/擦前通常要先置位写使能Status Register查询 WIP/WEL、保护位等状态。4.4 面试表达我用 NOR Flash 主要是做启动和固件存储比如 SPI NOR / QSPI NOR 存 Bootloader 或 MCU 外部程序。NOR 的优势是随机读取快、可靠性高、可以支持 XIP缺点是容量相对小、单位容量成本高、擦写速度和大容量存储能力不如 NAND。5. NAND Flash5.1 典型使用场景Linux 文件系统系统镜像日志、图片、音视频大容量数据缓存U 盘、SD 卡、eMMC、UFS、SSD 的底层存储介质。5.2 特点维度NAND Flash访问方式页读写、块擦除容量大成本单位容量低写入/擦除适合连续大数据写入可靠性有坏块、位翻转需要管理必要机制ECC、坏块管理、磨损均衡、垃圾回收接口Raw NAND、SPI NAND、ONFI、Toggle、eMMC、UFS、SD5.3 SLC / MLC / TLC / QLC类型每单元存储 bit寿命/可靠性容量/成本应用SLC1最高容量低、成本高工业、车载、关键数据MLC2中中消费电子、嵌入式TLC3较低容量大、成本低手机、SSD、存储卡QLC4更低容量更大、成本更低大容量读多写少场景5.4 Raw NAND 与 Managed NAND类型主机需要做什么例子Raw NAND主机/驱动负责 ECC、坏块管理、磨损均衡、文件系统适配并行 NAND、SPI NANDManaged NAND芯片内部控制器负责大部分 Flash 管理主机按块设备访问eMMC、UFS、SD 卡、SSD5.5 面试表达NAND Flash 更适合大容量数据存储例如文件系统、日志和系统镜像。它的优势是容量大、成本低、写入和擦除效率高缺点是不能像 NOR 一样直接随机执行代码存在坏块和位翻转通常需要 ECC、坏块管理、磨损均衡和文件系统配合。6. NOR Flash 和 NAND Flash 对比对比项NOR FlashNAND Flash主要定位代码存储、启动大容量数据存储读取方式随机读能力强页/块方式更典型是否适合 XIP适合通常不适合容量小到中大单位容量成本高低写入速度一般较好擦除速度相对慢较快坏块少通常不强调常见需要管理ECC简单场景可不需要强 ECC通常需要典型接口SPI/QSPI/OSPI、并行 NORRaw NAND、SPI NAND、ONFI、eMMC、UFS典型应用Bootloader、BIOS、固件文件系统、日志、图片、音视频、SSD最常用总结NOR 偏“启动和代码”NAND 偏“大容量数据”。NOR 适合直接读代码NAND 适合低成本大容量存储。7. 常见存储接口与协议7.1 I2C EEPROM / I2C FRAM特点两线接口SCL、SDA地址简单硬件资源占用少速率相对较低适合存设备参数、序列号、校准值EEPROM 写入有页写和写周期等待FRAM 写入更快、寿命更高。面试点I2C EEPROM 适合少量参数保存不适合高频写日志如果参数频繁更新可以考虑 FRAM 或做磨损均衡。7.2 SPI NOR信号CSCLKMOSI / MISOWP / HOLD或复用为 IO2 / IO3。特点引脚少、驱动简单常见于 MCU 外挂 Flash支持标准 SPI、Dual SPI、Quad SPIQSPI 可提高读取带宽常用于 XIP 或代码搬运到 RAM。7.3 QSPI / OSPI / xSPI接口数据线特点SPI1 bit简单速度较低Dual SPI2 bit速度提升QSPI4 bit常见 MCU/SoC 启动 FlashOctal SPI / OSPI8 bit更高吞吐部分支持 DTRxSPI标准化高速串行 Flash 接口方向面向高性能 NOR / PSRAM 等面试点QSPI 不是一种新的存储介质而是 SPI Flash 的一种高速访问接口。它通过 4 根 IO 线并行传输数据常用于外部 NOR Flash 启动和 XIP。7.4 并行 NOR / 并行 NAND并行 NOR地址线、数据线较多可类似内存总线访问早期嵌入式系统常见PCB 引脚资源占用大。并行 NAND以命令、地址、数据方式访问常见信号包括 CLE、ALE、CE、RE、WE、R/B主控需要 NAND 控制器、ECC、坏块管理支持。7.5 SD / SDIO / TF 卡SD 卡模式支持 SD 模式和 SPI 模式SD 模式常见 1-bit / 4-bit 数据线SPI 模式接线简单但性能和功能受限TF 卡即 microSD更多是物理尺寸差异。SDIOSDIO 更偏外设扩展协议常用于 Wi-Fi、蓝牙、GPS 等模块不等同于普通 SD 存储卡但电气和总线思想相近。7.6 eMMC定义eMMC NAND Flash 控制器 标准 MMC 接口 标准封装。特点主机不直接管理 NAND 物理细节内部控制器处理 ECC、坏块管理、磨损均衡接口一般为 CLK、CMD、DAT0-DAT7常见于嵌入式 Linux、网关、工业板卡、消费电子。面试表达eMMC 本质上是托管 NAND。相比 Raw NAND它降低了软件和硬件开发难度相比 SD 卡它是板载焊接器件可靠性和一致性通常更适合量产产品。7.7 UFS特点Universal Flash Storage相比 eMMCUFS 更接近高速串行全双工架构带宽高、命令队列能力强常用于手机、车载、高性能嵌入式设备。面试点eMMC 更像传统并行 MMC 总线的嵌入式存储UFS 更像高速串行存储性能和并发能力更强但成本、设计复杂度也更高。7.8 SATA / PCIe NVMe / USB接口常见设备特点SATASATA SSD、硬盘成熟吞吐中等PCIe NVMe高速 SSD低延迟、高带宽USB MSCU 盘、移动存储即插即用协议栈复杂8. 文件系统与 Flash 管理8.1 为什么 Flash 需要特殊文件系统Flash 的几个特性决定了它不能完全像普通 RAM 一样用擦除前才能重新写擦除粒度大于写入粒度擦写寿命有限NAND 有坏块掉电可能导致写入中断。8.2 常见文件系统/管理层名称常见场景FAT/exFATSD 卡、U 盘跨平台LittleFSMCU 小型 Flash掉电保护较好JFFS2Raw Flash较老的嵌入式 Linux 场景YAFFS2NAND FlashUBIFS UBIRaw NAND 较常见UBI 管理坏块和磨损ext4eMMC、UFS、SSD 等块设备8.3 ECC、坏块管理、磨损均衡ECC用于发现并纠正 bit errorNAND 通常必须考虑可以由 NAND 控制器、eMMC/UFS 内部控制器或软件实现。坏块管理NAND 出厂可能已有坏块使用中也可能产生新坏块系统需要识别、跳过、替换坏块。磨损均衡避免频繁擦写同一物理块延长 Flash 寿命托管 NAND 内部通常自带Raw NAND 需要主机侧处理。9. 硬件设计关注点9.1 原理图关注电源电压是否匹配1.8 V / 3.3 VIO 电平是否兼容上拉/下拉、WP/HOLD/RESET 管脚状态启动模式绑带与 BootROM 支持片选数量和地址冲突是否需要电源时序控制是否需要写保护、防误擦保护。9.2 PCB 关注SPI/QSPI 走线尽量短高速 DDR、UFS、PCIe 需要阻抗控制和等长时钟线注意串扰和参考地BGA 封装关注扇出、过孔、焊盘可靠性存储器靠近主控尤其是 DDR 和高速 Flash注意 ESD、热设计和量产可测试性。9.3 软件/调试关注JEDEC ID / 设备 ID 是否读对读写擦命令是否匹配页大小、扇区大小、块大小是否配置正确写前是否执行 Write Enable擦写后是否轮询 WIP/Busy地址模式是 3 Byte 还是 4 ByteQSPI dummy cycle 是否配置正确NAND ECC 强度是否满足文件系统是否支持掉电保护。10. 面试常用问题与参考回答Q1你用过哪些存储类型回答模板我用过片内 SRAM、外部 DDR、I2C EEPROM、SPI NOR Flash、NAND/eMMC、SD 卡等。SRAM 主要用于运行时变量和 DMA 缓冲DDR 用作系统运行内存EEPROM 保存设备参数和校准值SPI NOR 常用于 Bootloader 或固件存储eMMC/SD 卡用于文件系统、日志和大容量数据。Q2RAM 和 ROM 区别RAM 是易失性存储掉电数据丢失主要用于程序运行ROM 或更广义的 NVM 是非易失性存储掉电保存主要用于存放程序、固件、配置和数据。工程上还要区分 SRAM、DRAM、EEPROM、Flash 等具体类型。Q3SRAM 和 DRAM 区别SRAM 不需要刷新速度快、成本高、容量小常用于 Cache 和片内 RAM。DRAM 需要刷新容量大、单位成本低常用于系统主存如 DDR/LPDDR。Q4EEPROM 和 Flash 区别EEPROM 通常支持较小粒度的擦写适合少量参数频繁但低速地更新Flash 容量更大通常按页写、按块或扇区擦适合固件和数据存储。EEPROM 常见 I2C/SPI 接口Flash 常见 SPI/QSPI、NAND、eMMC 等接口。Q5NOR Flash 和 NAND Flash 区别NOR 适合代码存储和启动随机读能力强可支持 XIP可靠性较高但容量小、成本高。NAND 适合大容量数据存储容量大、成本低、写擦效率高但存在坏块和位错误需要 ECC、坏块管理和磨损均衡。Q6什么是 XIPXIP 是 Execute In Place指 CPU 可以直接从非易失存储器中取指执行代码不必先整体搬运到 RAM。NOR Flash尤其是并行 NOR 或 QSPI NOR常用于 XIP。NAND 通常不适合 XIP。Q7为什么 NAND 需要 ECCNAND 存储密度高容易出现 bit error并且随着擦写次数增加错误概率会上升。ECC 用来检测并纠正错误位保证数据可靠性。Raw NAND 通常需要主控或软件提供 ECCeMMC/UFS 内部控制器通常已集成。Q8什么是坏块管理NAND Flash 可能出厂就有坏块使用中也会产生新坏块。坏块管理就是识别坏块、记录坏块、避免写入坏块并使用备用块替换保证上层看到的逻辑地址连续可靠。Q9什么是磨损均衡Flash 擦写寿命有限如果一直擦写同一块会很快损坏。磨损均衡通过把写入分散到不同物理块让各块擦写次数更均匀从而延长寿命。Q10eMMC 和 NAND Flash 有什么关系eMMC 底层通常是 NAND Flash但它内部集成了控制器对外提供标准 MMC 接口。主机不用直接处理 NAND 的 ECC、坏块和磨损均衡。可以理解为 eMMC 是“托管 NAND”。Q11eMMC 和 SD 卡区别二者都可以基于 NAND并且协议有历史关联。eMMC 是板载焊接器件适合量产嵌入式产品SD/TF 卡是可插拔存储适合扩展、升级包、日志导出。eMMC 的一致性和可靠性通常更好SD 卡更方便更换。Q12eMMC 和 UFS 区别eMMC 是基于 MMC 思路的嵌入式存储接口相对传统UFS 使用高速串行链路支持更高吞吐和更好的并发能力。UFS 性能更强但成本和硬件设计复杂度更高。Q13SPI、QSPI、OSPI 区别SPI 通常单线输入输出QSPI 使用 4 根 IO 线提高吞吐OSPI 使用 8 根 IO 线部分器件还支持 DTR。它们更多是接口宽度和时序能力的差异不代表存储介质本身不同。Q14Flash 为什么写之前要擦除Flash 编程通常只能把某些 bit 从擦除态改为编程态不能随意把 bit 改回去。要恢复到擦除态必须执行擦除操作而擦除粒度通常是扇区或块。Q15SPI Flash 写入为什么要分页SPI NOR 通常有页编程限制比如一页 256 Byte。跨页写入时需要拆成多次 Page Program否则可能回卷或写入失败。写入前还要 Write Enable并在写入后轮询 Busy 状态。Q16存储器选型看哪些参数我会看容量、接口、带宽、读写延迟、擦写寿命、数据保持时间、工作温度、电压、封装、成本、供货周期、启动支持、ECC/坏块管理需求、文件系统支持和量产烧录方式。Q17Bootloader 一般放在哪里小型 MCU 或 SoC 常把 Bootloader 放在片内 Flash 或外部 SPI/QSPI NOR。复杂 Linux 系统也可能从 NOR、NAND、eMMC、SD 卡、UFS 启动具体取决于芯片 BootROM 支持的启动源和产品可靠性要求。Q18参数保存用 EEPROM、Flash 还是 FRAM如果参数少、更新不频繁用 EEPROM 或 Flash 都可以如果更新频繁FRAM 更合适因为写入快、寿命高。用 Flash 保存参数时要考虑擦除粒度、掉电保护和磨损均衡。Q19为什么日志不要随便写到同一个 Flash 扇区Flash 擦写寿命有限频繁写同一扇区会导致局部磨损。日志系统应该循环写、分区写或者使用带磨损均衡的文件系统/块设备。Q20为什么有的系统同时用 NOR 和 NAND/eMMCNOR 用来放启动代码保证启动可靠、读取简单NAND/eMMC 用来放大容量系统镜像和用户数据。这样可以兼顾可靠启动和低成本大容量存储。Q21什么是 MTDMTD 是 Linux 中面向 Memory Technology Device 的子系统常用于管理 Raw Flash如 NOR、NAND。它和普通块设备不同会暴露擦除块、坏块等 Flash 特性。Q22UBI/UBIFS 是做什么的UBI 是 Raw NAND 上的管理层负责坏块管理、磨损均衡等UBIFS 是运行在 UBI 之上的文件系统。它们常用于 Linux 直接使用 Raw NAND 的场景。Q23如何排查 SPI Flash 读写失败先读 JEDEC ID 确认通信正常再检查 SPI 模式、频率、CS 时序、电源电压、WP/HOLD 状态。写入问题重点看是否 Write Enable、是否等待 Busy 结束、是否跨页处理、地址模式和擦除粒度是否正确。Q24如何排查 eMMC 不识别先检查电源、时钟、CMD/DAT 上拉、电压切换和复位时序再看主控是否支持该 eMMC 版本和总线模式。软件上看初始化命令响应、分区配置、EXT_CSD、总线宽度和时钟切换。Q25如何讲一个完整的存储选型案例回答模板在某项目中系统需要可靠启动和保存日志。我选择 QSPI NOR 存 Bootloader因为 BootROM 支持 QSPI 启动NOR 随机读快、可靠性高同时选择 eMMC 存 Linux 文件系统和日志因为容量大、成本合适内部控制器能处理 ECC、坏块和磨损均衡。硬件上重点检查 1.8/3.3 V 电平、QSPI 线长和 eMMC CMD/DAT 上拉软件上重点验证启动时序、分区、文件系统和掉电恢复。11. 高频对比表11.1 EEPROM / NOR / NAND / eMMC / SD 卡项目EEPROMNOR FlashRaw NANDeMMCSD/TF 卡容量小小到中大大大掉电保存是是是是是典型接口I2C/SPISPI/QSPI/并行并行/SPI/ONFIMMCSD/SPI适合用途参数启动/固件文件系统/数据系统/数据可插拔数据是否需主机管坏块否通常否是否否是否适合 XIP否是否否否开发难度低中高中中11.2 Raw NAND / eMMC / UFS项目Raw NANDeMMCUFS控制器位置主机侧芯片内部芯片内部主机复杂度高中中高性能取决于主控和算法中高成本低中高典型应用成本敏感嵌入式工控、网关、消费电子手机、车载、高性能设备12. 面试回答结构建议回答存储问题时建议按这个顺序先分类易失/非易失RAM/ROM/Flash。再说用途运行内存、启动、参数、大容量数据。讲接口I2C、SPI/QSPI、SDIO、eMMC、UFS、DDR。讲关键机制ECC、坏块、磨损均衡、XIP、文件系统。结合项目我在哪个项目里为什么这么选。通用表达存储选型不是只看容量还要看启动方式、接口资源、带宽、擦写寿命、数据可靠性、掉电保护、成本和量产维护。比如启动代码优先选 NOR系统和数据优先考虑 eMMC/UFS/SD 或 NAND少量参数可以用 EEPROM/FRAM。13. 可直接背诵的精简版13.1 用过的存储类型我用过 SRAM、DDR、EEPROM、SPI NOR Flash、NAND/eMMC、SD 卡等。SRAM/DDR 主要用于运行时数据和系统内存EEPROM 用于保存少量参数NOR Flash 常用于 Bootloader、固件和启动代码NAND/eMMC/SD 卡用于文件系统、日志和大容量数据。13.2 NOR 和 NAND 的场合与特性NOR Flash 我一般用于启动和固件存储比如 MCU 外部 SPI NOR 或 SoC 的 QSPI NOR 启动。它的特点是随机读取好、可靠性高、可支持 XIP但容量相对小、单位容量成本高。NAND Flash 我一般用于大容量数据比如 Linux 文件系统、系统镜像、日志和用户数据。它容量大、成本低、写擦效率高但有坏块和 bit error需要 ECC、坏块管理和磨损均衡。14. 参考资料以下资料用于交叉整理和校正概念正文未逐字摘录Micron, NOR NAND Flash GuideMicron, Choosing the right NANDMicron, Bad Block Management in NAND Flash MemoryWinbond, QSPI NOR - Code Storage FlashWinbond, W25Q64PW DatasheetSD Association, Simplified SpecificationsAnalog Devices, Interfacing an SD Card Through SPICSDN, 嵌入式开发之 Nand-Flash 和 Nor-Flash 的区别CSDN, 第3章存储接口 SDIO / eMMC / QSPICSDN, NVM, PROM, OTP, eFuse 傻傻分不清楚CSDN, 嵌入式系统中的 EEPROM 和 FRAMCSDN/openvela, 嵌入式软件工程师面试题及答案抖音, 存储芯片设计相关短视频条目