4. 上电启动与最小系统验证

最小系统验证的目标不是“板子能亮”,而是确认 SoC 在脱离操作系统、脱离应用固件的条件下,仍能按 i.MX 芯片规定的硬件约束完成一次可复现的启动。i.MX6/8/9 系列的启动链路高度依赖上电时序、复位释放顺序、参考时钟稳定以及 BOOT_MODE/GPIO 启动配置的采样结果。任何一项不满足,Boot ROM 都会在串口日志中给出可判读的失败信号,而不是随机死机。

一、上电时序与复位释放

i.MX 芯片通常要求多路电源按固定顺序建立,典型顺序为 VDD_SNVS(常电域)→ VDD_HIGH(DDR/IO 域)→ VDD_ARM/VDD_SOC(内核域)→ VDD_DRAM 等。以 i.MX8M Mini 为例,数据手册要求 VDD_SNVS_0V8 先于 VDD_ARM 建立,且各域之间的时间差需控制在毫秒级。若 VDD_ARM 先于 VDD_SNVS 上电,内部 POR 电路可能无法正确复位,表现为上电后串口无任何输出。

复位信号 POR_B 必须在上电稳定后保持足够长的低电平时间(典型 ≥ 1ms),并在释放时与 32.768kHz 或 24MHz 参考时钟的稳定建立保持时序关系。实际调试中,建议用示波器同时抓取 VDD_SNVS、VDD_ARM、POR_B 和 24MHz 时钟四路信号,确认 POR_B 释放沿位于所有电源和时钟稳定之后。若使用外部复位芯片,需注意其复位阈值和延迟是否与 i.MX 的 POR 要求匹配。

二、参考时钟与启动模式采样

i.MX 的 Boot ROM 在 POR_B 释放后,会先锁定内部 RC 振荡器,再等待外部参考时钟(通常为 24MHz 晶振或外部时钟输入)稳定。若使用晶振,需确认负载电容与晶振规格匹配;若使用外部有源时钟,需确认电平标准(通常为 1.8V 或 3.3V)与芯片 XTALI 引脚兼容。时钟未稳定时,Boot ROM 不会进入启动模式采样阶段。

启动模式由 BOOT_MODE[1:0] 引脚在 POR_B 释放瞬间的电平决定。i.MX8M 系列典型配置为:00 表示内部 Boot(从 eFUSE 或 QSPI 启动),01 表示串行下载模式(Serial Download),10 表示内部 Boot(从 SD/eMMC 启动),11 保留。这些引脚通常通过电阻上拉/下拉配置,调试阶段建议预留跳线或测试点,便于切换启动介质。注意:BOOT_MODE 引脚仅在 POR_B 释放时被采样一次,运行中改变不会生效。

i.MX 上电启动最小系统验证链路 电源时序 VDD_SNVS (0.8V) ↓ VDD_HIGH (1.8V/3.3V) ↓ VDD_ARM / VDD_SOC 复位释放 POR_B 低电平 ≥ 1ms 所有电源稳定后释放 与参考时钟建立时序 示波器四路同抓 参考时钟 24MHz 晶振/有源时钟 负载电容匹配 电平标准 1.8V/3.3V 稳定后 Boot ROM 采样 启动模式采样 BOOT_MODE[1:0] 引脚 POR_B 释放瞬间锁存 00/10: 内部 Boot 01: Serial Download 11: 保留 Boot ROM 执行 初始化内部 RAM → 读取启动介质 → 加载 IVT/Boot Data → 校验 → 跳转 失败时通过 UART 输出错误码(如 0x00、0x01、0x02…) 串口日志判读(UART1,115200-8N1) 正常:Boot ROM 版本 → DRAM 初始化 → 启动介质识别 异常:无输出 → 电源/时钟/复位问题 异常:HAB 错误 → 签名/密钥/eFUSE 问题 异常:MMC/SD 超时 → 介质/引脚/供电问题 最小系统验证通过判据 ✓ 串口输出 Boot ROM 版本信息 ✓ DRAM 初始化成功(无校准失败) ✓ 启动介质被正确识别 ✓ 成功加载并跳转到目标固件 失败时回溯检查电源/复位/时钟/启动模式配置

三、串口日志与Boot ROM行为确认

i.MX 的 Boot ROM 在启动过程中会通过 UART1(默认引脚通常为 UART1_TXD/RXD)输出诊断信息,波特率固定为 115200-8N1。上电后若串口无任何输出,应优先检查:UART 引脚是否被复用为其他功能、电平转换是否正常、串口线序是否正确。若输出乱码,通常是参考时钟频率偏差过大或波特率不匹配。

Boot ROM 的正常输出通常包含:ROM 版本号、DRAM 初始化结果、启动介质识别信息、IVT 加载地址等。若启动失败,会输出十六进制错误码。例如 i.MX8M 系列中,0x00 表示启动介质未找到,0x01 表示 IVT 校验失败,0x02 表示 HAB 认证失败。这些错误码是定位问题的第一手依据,应结合参考手册的 ROM 错误码表逐项排查。

在 Serial Download 模式下,Boot ROM 会等待主机通过 USB 或 UART 发送固件。此时可使用 NXP 的 uuu(Universal Update Utility)工具进行连接测试:

uuu -lsusb
# 预期输出:USB device found, VID:PID = 1fc9:013e (i.MX8M Serial Download)
uuu -b emmc_all flash.bin
# 将 flash.bin 写入 eMMC,验证 Boot ROM 的 USB 下载通道正常

若 uuu -lsusb 无法识别设备,需检查 USB_OTG1 的 ID 引脚电平、VBUS 供电以及 BOOT_MODE 是否确实处于 01 状态。注意:Serial Download 模式下,Boot ROM 不会主动初始化 DDR,因此下载的固件必须包含完整的 DRAM 初始化代码(通常由 Flashloader 或 SPL 提供)。

四、最小系统验证的实操闭环

建议按以下顺序完成一次完整验证,每步均以串口日志或示波器波形作为判据:

  1. 静态检查:确认 BOOT_MODE 跳线、电源跳线、晶振负载电容与原理图一致。
  2. 上电波形抓取:示波器四通道分别接 VDD_SNVS、VDD_ARM、POR_B、24MHz,确认时序满足数据手册要求。
  3. 串口连接:USB-TTL 转接板 TX/RX 交叉连接,GND 共地,波特率 115200。
  4. 上电观察:记录串口完整输出,对照 ROM 错误码表判断启动阶段。
  5. 切换启动介质:从 SD 卡启动切换到 eMMC 启动,确认 BOOT_MODE 采样有效。
  6. Serial Download 验证:切换至 01 模式,用 uuu 工具连接并下载一次固件,确认 USB 通道正常。
调试阶段建议在 BOOT_MODE 引脚和 POR_B 上预留测试点,并将 UART1 引出到标准排针。若板载 eMMC 与 SD 卡共用同一控制器,需注意启动优先级由 eFUSE 或 BOOT_MODE 决定,避免因介质冲突导致启动失败。
切勿在未确认电源时序的情况下反复上电。若 VDD_SNVS 缺失而 VDD_ARM 正常,芯片可能进入不确定状态,长期操作可能损坏内部 POR 电路。首次上电建议使用限流电源,观察电流是否在预期范围内(典型 i.MX8M Mini 最小系统空载约 200~400mA)。

完成上述验证后,最小系统即具备可复现的启动能力,后续的 U-Boot 移植、内核启动和量产烧录才有可靠的硬件基础。若任一步骤失败,应回到对应的电源、复位、时钟或启动模式环节,而不是直接修改软件配置。