1. Layerscape平台概览与Bring-up目标
NXP Layerscape 是一族面向网络、工业、边缘计算与存储场景的 64 位 Arm 处理器,覆盖从低功耗边缘节点到多核通信处理的不同档位。理解它的板级 Bring-up,不能只把它当作“一块能跑 Linux 的 ARM 板”,而要先看清它的典型架构:多个 Arm 核心通过 Coherent Interconnect 与系统缓存、DDR 控制器、外设总线相连,外部再挂载 SerDes 通道、以太网 MAC、PCIe 控制器、USB、QSPI、I2C、UART 等。Bring-up 的本质,就是按“供电与时钟 → 复位与启动介质 → DDR → 调试串口 → 启动链 → 关键外设”的顺序,把这条硬件与固件链路逐段打通,并让每一段都有可观测、可判断的结果。
以常见的 LS1046A、LS1028A、LX2160A 为例,它们的板级组成有共性也有差异。共性在于:SoC 需要多路电源(核心、DDR、SerDes、IO、PLL),需要参考时钟(通常 100MHz 差分或 25MHz 晶振),需要复位管理(PORESET_B、HRESET_B 等),需要启动介质(QSPI NOR、SD/eMMC、NAND 或通过 RCW 选择),需要调试串口(通常是 UART1 或 UART2),以及 DDR4/LPDDR4 内存。差异在于:LS1046A 更偏重 10G/1G 以太网与 PCIe Gen3,LS1028A 集成 TSN 交换与显示接口,LX2160A 则面向 100G 端口与更多 SerDes lane。Bring-up 时,这些差异会直接决定 RCW 配置、SerDes 协议映射和时钟树设置。
Bring-up 阶段通常可以划分为四个层次。第一层是“上电与最小系统”:确认电源轨时序、复位释放、参考时钟输出、JTAG 连通性,以及 SoC 是否进入可调试状态。第二层是“启动介质与 RCW”:通过 QSPI/SD 启动,验证 RCW 中的 PLL、DDR、SerDes、引脚复用配置是否与板卡实际连接一致。第三层是“DDR 与串口”:DDR 训练通过后,U-Boot 才能把代码搬到内存并打印完整启动日志;串口则是整个 Bring-up 过程中最重要的观测窗口。第四层是“外设与系统”:以太网、PCIe、USB、SATA、QSPI 启动、eMMC、温度与电源监控等逐个验证,最终进入 Linux 用户态。
调试目标不是“能启动”这么简单,而是建立可重复、可定位的验证闭环。具体来说,需要做到:上电后能稳定输出 U-Boot 日志;DDR 训练结果可读且误码率在可接受范围;RCW 与硬件连接一致;启动介质可切换;网络接口能完成 ping 与 iperf 基本测试;PCIe 能枚举到设备;温度、电压、时钟频率可读。若某一步失败,能通过串口日志、JTAG、示波器或寄存器读取定位到具体阶段,而不是盲目换板。
在实际操作中,建议先准备一份最小 Bring-up 检查表,把“可观测点”和“判断依据”写清楚。例如:上电后先测各路电源是否在时序窗口内建立,再测 PORESET_B 是否在时钟稳定后释放;接着用 JTAG 读取 SoC ID,确认扫描链连通;然后通过串口观察 RCW 是否被正确加载,若串口无输出,优先检查启动介质选择引脚、RCW 校验和、UART 引脚复用。DDR 阶段要重点看训练日志中的写电平与读门控结果,若训练失败,通常需要回查 DDR 参考时钟、VREF、ODT 和 PCB 走线。U-Boot 能进入命令行后,再依次验证网络、PCIe、USB 和存储。
从软件上下文看,Layerscape 的启动链通常由 RCW、BL2、BL31、U-Boot 和 Linux 组成。RCW 是芯片复位后最先读取的配置字,决定 PLL 频率、DDR 控制器参数、SerDes 协议和引脚复用;BL2 负责更完整的 DDR 初始化和加载 BL31;BL31 提供 PSCI 与安全监控;U-Boot 负责设备树、环境变量和内核引导。Bring-up 时,如果 RCW 配错,后续所有阶段都会受影响,因此它是最值得优先核对的对象。典型做法是:从 NXP 官方 LSDK 或参考板 RCW 出发,只修改与自家板卡相关的 PLL、DDR 和 SerDes 字段,并用 `printenv`、`bdinfo`、`md` 等命令确认内存映射和启动参数。