STM32N6 无内置 Flash,eMMC 启动是其核心启动方式之一(属于 Flash Boot),核心逻辑是通过 BootROM 识别启动源、配置 SDMMC 接口与 eMMC 设备通信,最终加载 FSBL(第一阶段引导程序)。配置关键在于 “封装匹配 + OTP 参数配置 + SDMMC/eMMC 时序协同”,以下是分步实操指南。
资料获取:STM32N6如何配置EMMC启动
1. 核心前提:封装与 eMMC 启动兼容性
并非所有 STM32N6 封装都支持 eMMC 启动,需先确认硬件封装,避免无效配置:
| 封装型号 | SDMMC 接口数量 | eMMC 启动支持情况 | 备注 |
|---|---|---|---|
| STM32N6xxX0(264Pin) | 2 个(SDMMC1/2) | 支持 | 可选择 SDMMC1/2 启动 |
| STM32N6xxL0(223Pin) | 2 个(SDMMC1/2) | 支持 | 可选择 SDMMC1/2 启动 |
| STM32N6xxB0(198Pin) | 1 个(SDMMC1) | 支持 | 仅支持 SDMMC1 启动 |
| STM32N6xxI0(178Pin) | 1 个(SDMMC1) | 支持 | 仅支持 SDMMC1 启动 |
| STM32N6xxA0(169Pin) | 无 | 不支持 | 无 SDMMC 接口 |
| STM32N6xxZ0(142Pin) | 无 | 不支持 | 无 SDMMC 接口 |
关键提醒:仅具备 SDMMC1/2 接口的封装可配置 eMMC 启动,需提前核对硬件型号。
2. 硬件核心配置:3 大关键步骤
2.1 Boot Mode 引脚设置(Flash Boot 模式)
eMMC 启动属于 Flash Boot,需通过 Boot0/Boot1 引脚设置启动模式:
- 配置要求:Boot0 = 1(高电平),Boot1 = 0(低电平)
- 作用:上电后 BootROM 识别为 Flash Boot,进入 eMMC/SD 卡等 Flash 设备启动流程
2.2 OTP 参数配置(核心关键)
STM32N6 通过 OTP(一次性可编程)寄存器固化启动配置,需重点配置 2 个关键 OTP 字:
(1)Flash Boot Source 配置(OTP11,BOOTROM_CONFIG_2)
通过flash_boot_source[8:5]位指定 eMMC 对应的 SDMMC 接口,配置值如下:
| 配置值 | 对应启动源 | SDMMC 接口 | 适用场景 |
|---|---|---|---|
| 2 | eMMC | SDMMC1 | 仅支持 SDMMC1 的封装(如 B0/I0) |
| 8 | eMMC | SDMMC2 | 支持 SDMMC2 的封装(如 X0/L0) |
(2)HSLV 高速低压模式配置(OTP124,HCONF1)
当 VDDIO4/5 供电为 1.8V 时(SDMMC1 对应 VDDIO4,SDMMC2 对应 VDDIO5),需使能 HSLV 模式:
- 配置位:HSLV_VDDIO4(位 14)→ 对应 SDMMC1;HSLV_VDDIO5(位 13)→ 对应 SDMMC2
- 配置值:1 = 使能 HSLV 模式,适配 1.8V 低压高速传输;0 = 禁用(默认 3.3V)
2.3 电源与 I/O 配置
- 供电要求:VDDIO4(SDMMC1)、VDDIO5(SDMMC2)需与 eMMC 供电电压一致(1.8V 或 3.3V)
- I/O 引脚配置:SDMMC 启动时仅使用 1 根数据线(D0),引脚及 AF 功能如下:
| SDMMC 接口 | CK 引脚 | CMD 引脚 | D0 引脚 | AF 功能 |
|---|---|---|---|---|
| SDMMC1 | PC12 | PH2 | PC8 | AF10 |
| SDMMC2 | PC2 | PC3 | PC4 | AF11 |
注意:引脚需正确配置 AF 功能,且 VDDIO 供电电压需与 HSLV 配置匹配,否则会导致通信失败。
3. SDMMC 与 eMMC 设备配置
3.1 SDMMC 接口默认配置(BootROM 自动初始化)
BootROM 会自动配置 SDMMC 接口参数,无需软件干预,关键参数如下:
- 总线宽度:1 位(仅使用 D0 引脚)
- 传输模式:SDR(单倍数据率),不支持 DDR 和 HS200 模式
- 时钟频率:SDMMC_CK = 16MHz(由 64MHz 内核时钟分频得到)
- 电源控制:自动上电(PWRCTRL = 0x3),时钟始终使能(PWRSAV = 0x0)
3.2 eMMC 设备配置(需匹配 BootROM 时序)
eMMC 设备需按以下要求配置寄存器(EXT_CSD 寄存器),确保与 BootROM 时序兼容:
| eMMC 寄存器 | 位域 / 配置项 | 配置值 | 作用 |
|---|---|---|---|
| EXT_CSD[179] | BOOT_ACK | 1 | 引导过程中发送确认应答(ACK) |
| EXT_CSD[179] | BOOT_PARTITION_ENABLE | 0x1/0x2 | 使能引导分区 1/2 |
| EXT_CSD[177] | BOOT_MODE | 0x0 | 单倍数据率(SDR)+ 向后兼容时序 |
| EXT_CSD[177] | BOOT_BUS_WIDTH | 0x0 | 引导模式下 1 位总线(匹配 SDMMC) |
| EXT_CSD[226] | BOOT_SIZE_MULT | 按需配置 | 引导分区大小 = 128KB × 配置值 |
3.3 时序要求(必须遵守)
- eMMC 应答时间:收到 CMD0(参数 0xF0F0F0F0)后,需在 50ms 内给出 ACK 应答(010)
- 数据传输时间:CMD 线拉低 1 秒内,开始发送第一个引导数据
- 传输模式:仅支持 SDR,数据输出和采样均在 CLK 上升沿完成
4. 启动流程与验证
4.1 完整启动流程
- 上电复位:BootROM 执行,读取 Boot0/Boot1 引脚,识别为 Flash Boot
- OTP 读取:获取 flash_boot_source 和 HSLV 配置,确定 SDMMC 接口
- SDMMC 初始化:BootROM 配置 SDMMC 接口参数(1 位总线、16MHz 时钟)
- eMMC 通信:发送 CMD0 命令,等待 eMMC 应答,读取引导分区数据
- 加载 FSBL:从 eMMC 引导分区加载 FSBL,执行后续启动流程
4.2 配置验证步骤
- 烧录 FSBL:将编译好的 FSBL 烧录到 eMMC 的引导分区(需匹配配置的 BOOT_PARTITION)
- 上电测试:设置 Boot0=1、Boot1=0,上电后观察是否成功加载 FSBL
- 故障排查:若启动失败,优先检查 OTP 配置、VDDIO 电压、SDMMC 引脚 AF 功能、eMMC 时序参数
STM32N6 eMMC 启动配置的核心是 “三层匹配”:封装与 SDMMC 接口匹配、OTP 参数与供电匹配、SDMMC 与 eMMC 时序匹配。只要按步骤完成 Boot 引脚设置、OTP 配置、eMMC 寄存器配置,即可实现稳定启动。
1074