3. i.MX 9硬件平台解析

i.MX 9系列(如i.MX 93、i.MX 95)在嵌入式Linux产品中通常以“核心板+底板”的形态落地。核心板把SoC、DDR、eMMC、PMIC和必要时钟集成在一块小尺寸PCB上,底板则承载以太网PHY、USB、CAN、显示、音频、调试串口等产品化接口。理解两者之间的接口边界,是硬件选型、原理图评审和Bring-up排障的基础。

核心板与底板的接口划分

核心板对外一般通过高密度板对板连接器引出三类信号:电源、低速控制与高速差分。以i.MX 93核心板为例,典型引出包括:

  • 电源类:VIN(通常5V或3.7V锂电)、VDD_3V3、VDD_1V8、VDD_SNVS(常电域)以及GND。
  • 低速控制:I2C、SPI、UART、GPIO、PWM、SAI(音频)、JTAG/SWD。
  • 高速差分:USB2.0 D+/D-、以太网RGMII/RMII、MIPI-DSI/CSI、PCIe(i.MX 95)。

底板设计时最容易出问题的是电源域归属和复位/启动引脚。核心板通常已把SoC的NVCC_xxx电源域按1.8V或3.3V固定,底板若把某个IO bank误接到不同电压,会导致该bank永久损坏或电平不匹配。评审时应逐bank核对核心板规格书中的IO电压表。

电源域与上电时序

i.MX 9内部划分为多个电源域:VDD_ARM、VDD_SOC、VDD_GPU(部分型号)、NVCC_1V8、NVCC_3V3、VDD_SNVS、VDD_USB、VDD_MIPI等。PMIC(如PCA9451、PCA9452)按预设时序输出各路电压。上电顺序通常为:VDD_SNVS → VDD_1V8 → VDD_3V3 → VDD_ARM/SOC → DDR → 外设。若时序错误,SoC可能无法从内部ROM启动。

调试建议:用示波器同时抓取VDD_SNVS、VDD_1V8、VDD_ARM和RESET_B,确认RESET_B在VDD_ARM稳定后才释放。若RESET_B过早释放,SoC会锁死在ROM阶段,串口无任何输出。

时钟树结构

i.MX 9的时钟源主要有24MHz晶振(XTALI)、32.768kHz RTC晶振,以及部分型号的音频晶振。24MHz经PLL生成ARM、DDR、总线、外设时钟。关键时钟路径包括:

  • ARM PLL → A55/A7核心频率(如1.7GHz)。
  • DDR PLL → DDR控制器,决定DDR速率(如LPDDR4X 3733MT/s)。
  • SYS PLL → AXI/AHB总线、USB、以太网。
  • AUDIO PLL → SAI、SPDIF,保证音频采样率精确。

设备树中通过assigned-clocks和assigned-clock-rates配置关键时钟。例如把ENET的RGMII参考时钟设为125MHz,若配置错误,PHY会link不上或丢包。

DDR选型要点

i.MX 93支持LPDDR4/LPDDR4X和DDR4/LPDDR4,i.MX 95支持LPDDR5。选型时需关注:

参数典型值影响
容量1GB/2GB/4GB决定Linux可用内存
位宽16bit/32bit带宽与PCB层数
速率3200/3733MT/s需与SoC DDR PLL匹配
电压1.1V/1.05VLPDDR4X更省电

DDR初始化依赖SoC内部DDR PHY固件和ddr_init参数。NXP提供DDR Tool生成寄存器序列,核心板厂商通常已固化。底板若更换DDR颗粒,必须重新跑DDR压力测试(如memtester、stress-ng --vm)。

启动模式配置

i.MX 9通过BOOT_MODE[1:0]和GPIO引脚决定启动介质。常见模式:

  • 内部Fuse启动:从eMMC/SD启动,量产默认。
  • 串行下载:USB/SDP模式,用于工厂烧录。
  • SD卡启动:开发阶段常用,便于切换镜像。

启动介质选择还涉及BOOT_CFG引脚,例如SD1 vs SD2、eMMC vs QSPI。底板需把这些引脚通过电阻上拉/下拉到确定电平,避免浮空导致启动失败。

i.MX 9 核心板与底板接口及启动链路 核心板 (SoM) i.MX 93 / 95 SoC A55 + M33 / NPU / GPU PMIC PCA9451/9452 DDR LPDDR4X/5 eMMC 8/16/32GB 24MHz XTAL + 32.768kHz 板对板连接器 电源 / 低速IO / 高速差分 BOOT_CFG 电阻网络 SD/eMMC/QSPI/USB-SDP 底板 (Carrier Board) 以太网 PHY RGMII / RMII USB Type-C Device / Host CAN / RS485 工业接口 MIPI-DSI 显示 / 触摸 SD 卡座 启动/存储 调试串口 UART + JTAG 电源输入 / 复位按键 5V DC / RESET_B 启动模式拨码/电阻 BOOT_MODE[1:0] 电源/IO/差分 启动配置

Bring-up检查清单

拿到核心板+底板后,建议按以下顺序验证:

  1. 测量各路电源电压和上电时序,确认RESET_B释放时机。
  2. 用示波器看24MHz晶振是否起振,频率偏差应在±50ppm内。
  3. 短接BOOT_MODE到SD卡启动,插入已烧录的SD卡,观察串口是否输出U-Boot SPL日志。
  4. 进入U-Boot后执行mmc list、md 0x80000000验证DDR读写。
  5. 启动Linux后执行cat /proc/cpuinfo、free -h、dmesg | grep -i ddr确认频率和容量。
若串口无输出,先确认调试串口电平(1.8V vs 3.3V)和波特率(通常115200)。i.MX 9的UART1默认可能映射到不同引脚,需核对设备树pinctrl。

核心板与底板的接口设计、电源域划分、时钟树配置、DDR选型和启动模式设置,共同决定了i.MX 9平台能否稳定启动并发挥性能。实际项目中,建议把上述检查项固化为硬件Bring-up checklist,每块新底板都按同一流程验证,可显著缩短调试周期。