背景:两种架构的内存哲学
STM32F429(Cortex-M4)是 MCU 架构,片内 SRAM 即主运行内存,无 MMU,不跑虚拟内存。i.MX6ULL(Cortex-A7)是 MPU 架构,跑 Linux 需要大容量外挂 DRAM,片内 RAM 仅作辅助。理解这一分层差异,是理解两者内存映射关系的核心。
片内快速 RAM 对应
特性 | STM32F429 (Cortex-M4) | i.MX6ULL (Cortex-A7) |
类型 | 片内 SRAM | 片内 OCRAM |
容量 | 256 KB | 128 KB |
Cache | 无独立 L2 | 32 KB L1 I/D + 128 KB L2 |
i.MX6ULL 的 OCRAM
OCRAM(On-Chip RAM,128 KB) 功能上最接近 STM32 的 SRAM。启动阶段由 Boot ROM 占用(栈、MMU 表等),启动完成后整块可自由使用。典型用途:
- 中断处理的低延迟缓冲
- DMA buffer(延迟敏感场景)
- Boot 阶段临时栈/堆
但与 STM32 不同,OCRAM 不是主运行内存,程序和数据的主战场在外挂 DDR。
外挂大容量 DRAM 对应
STM32F429 支持通过 FMC 外挂 SDRAM,i.MX6ULL 通过 MMDC 外挂 DDR3/DDR3L。两者在架构上是同一层级——都是扩展主运行内存,但技术代次不同。
特性 | STM32F429 外挂 SDRAM | i.MX6ULL 外挂 DDR3/DDR3L |
DRAM 类型 | SDR SDRAM / LPSDR | DDR3 / DDR3L / LPDDR2 |
总线宽度 | 16/32-bit(FMC 接口) | 16-bit |
典型容量 | 8 ~ 32 MB | 256 MB ~ 1 GB |
带宽 | ~100 MHz SDR | 400 MHz DDR(等效 800 MT/s) |
控制器 | FMC(Flexible Memory Controller) | MMDC(Multi-Mode DDR Controller) |
技术演进关系
STM32F429 的 FMC 只支持到 SDR SDRAM(单倍速率),不支持 DDR 系列。DDR3 是双倍速率第三代,带宽和容量高一个数量级。演进路径:
SDR → DDR → DDR2 → DDR3 → DDR4 → DDR5
容量说明
STM32F429 常见外挂 SDRAM 芯片(如 IS42S16400J)规格为 1M × 16bit × 4bank,实际容量 = 1M × 16 × 4 = 8 MB(64 Mbit)。"1M" 是芯片的寻址深度,不是实际可用容量。
完整内存体系映射
层级 | STM32F429 | |
片内快速 RAM | SRAM(256 KB) | OCRAM(128 KB) |
主运行内存 | 外挂 SDRAM(8 ~ 32 MB) | 外挂 DDR3L(256 MB ~ 1 GB) |
代码存储 | 片内 Flash(2 MB) | 外挂 NAND / eMMC |
Flash / 非易失存储对比
STM32F429 拥有片内 Flash,i.MX6ULL 没有片内 Flash,所有非易失存储均为外挂。这是 MCU 与 MPU 在存储架构上的又一根本差异。
直接对比
特性 | STM32F429 | i.MX6ULL |
片内 Flash | 2 MB(可选 512 KB / 1 MB) | 无(仅 96 KB Boot ROM,不可写) |
XIP 支持 | 片内 Flash 直接 XIP | 仅 NOR Flash / QSPI 可 XIP(不常用) |
主存储介质 | 片内 Flash 即主存储 | 外挂 NAND Flash 或 eMMC |
外挂 Flash 接口 | FMC(并行 NOR)、SPI | GPMI(Raw NAND,BCH40 ECC)、uSDHC(eMMC/SD)、QSPI、并行 NOR |
典型容量 | 片内 2 MB + 可选外挂 SPI Flash | 256 MB ~ 1 GB NAND 或 4 ~ 8 GB eMMC |
文件系统 | 裸机直接读写 / FatFS(SD 卡) | UBIFS(NAND)/ ext4(eMMC)/ SquashFS |
关键差异解析
1. 片内 vs 全外挂
STM32F429 的片内 Flash 存放固件代码,CPU 上电后直接从
0x08000000 开始执行(XIP,Execute-In-Place)。i.MX6ULL 没有片内可写 Flash,启动流程完全不同:Boot ROM → 从外部介质加载 U-Boot 到 DDR → 加载 Linux 内核到 DDR → 运行。2. NAND Flash vs eMMC 选择
i.MX6ULL 支持两条主要存储路线:
- eMMC:内置控制器处理 ECC、坏块和磨损均衡,对软件透明,可直接用 ext4。典型容量 4 ~ 8 GB。开发更简单,成本略高。
3. STM32F429 外挂 Flash 扩展
STM32F429 本身不支持 QSPI(F4 系列中仅 STM32F446/F469 支持)。外挂 Flash 选项:
- SPI NOR Flash:通过普通 SPI 挂载(如 W25Q256),不可直接内存映射
- 并行 NOR Flash:通过 FMC 挂载,可 XIP 但占用大量引脚
- SD 卡:通过 SDIO 挂载,用于数据存储
启动流程对比
阶段 | STM32F429 | i.MX6ULL |
上电 | 从片内 Flash XIP 执行 | Boot ROM 执行(片内 96 KB ROM) |
加载 | 无需加载,直接运行 | Boot ROM 从 NAND/eMMC/SD 加载 U-Boot 到 DDR |
运行 | 在 Flash 或 SRAM 中执行 | U-Boot 加载 Linux 内核到 DDR,全部在 DDR 中运行 |
启动时间 | 毫秒级 | 秒级(含 Linux 启动) |
完整存储体系映射(含 Flash)
层级 | STM32F429 | i.MX6ULL |
片内快速 RAM | SRAM(256 KB) | OCRAM(128 KB) |
主运行内存 | 外挂 SDRAM(8 ~ 32 MB) | 外挂 DDR3L(256 MB ~ 1 GB) |
片内 Flash | 2 MB(XIP 执行) | 无(仅 96 KB Boot ROM) |
主非易失存储 | 片内 Flash + 可选 SPI Flash / SD | 外挂 NAND(256 MB~1 GB)或 eMMC(4~8 GB) |
启动方式 | 片内 Flash XIP | Boot ROM → U-Boot → Linux(全部加载到 DDR) |
面试要点
核心差异一句话: Cortex-M 用片内 SRAM + FMC 挂低速 SDRAM 即可满足裸机/RTOS 需求;Cortex-A 跑 Linux 必须用高带宽 DDR,通过 MMU 做虚拟内存管理,片内 OCRAM 仅作为启动和低延迟场景的辅助。
回答时注意三个层次:
- 片内 RAM 对应:SRAM ↔ OCRAM,容量和角色不同
- 外挂 DRAM 对应:SDRAM ↔ DDR3,同一层级但技术代次不同
- 架构根因:MCU 无 MMU,MPU 有 MMU + 虚拟内存,决定了内存体系的规模和复杂度







