4. 初始化与训练流程:Exynos 内存控制器上电必修课

好,咱们进入正题。内存初始化,说白了就是让 CPU 和 DDR 颗粒「对上话」。这个过程要是没搞好,轻则性能拉胯,重则系统直接黑屏。我在 Exynos 平台上折腾过不少次,每次看到串口打印出 Training Pass,心里才踏实。

Exynos 的内存初始化,不是简单的「写寄存器-读数据」就完事了。它有一套完整的训练流程。我习惯把它分成两大块:硬件自动训练软件微调。硬件负责粗调,软件负责精调。你想想看,DDR5 的速率都跑到 6400 MT/s 了,一个时钟周期才 156ps,不靠训练根本没法保证信号质量。

4.1 上电与复位序列

先说说最基础的。DDR 颗粒上电后,需要等待电源稳定。Exynos 的 PMIC 会按照特定时序拉高 VDD1、VDD2 和 VDDQ。我建议你仔细看芯片手册里的上电斜率要求,别图省事一股脑全拉起来。

复位信号 RESET_n 要保持低电平至少 200us。然后释放复位,再等 500us 才能开始配置。这个时间窗口,我见过有人用 GPIO 模拟,结果时序不达标,颗粒死活不响应。

关键点: Exynos 的 DDR PHY 在复位释放后,会自动进入初始化状态机。你只需要确保时钟稳定,剩下的硬件会帮你走完 CKE 使能、ODT 配置这些步骤。

4.2 DDR PHY 训练:信号质量的基石

PHY 训练,说白了就是让发送端和接收端对齐。Exynos 的 PHY 支持多种训练模式,我重点讲三个:

  • DQS 门控训练 (DQS Gating):找到读 DQS 的有效窗口。DQS 信号在总线上有延迟,必须精确找到它的边沿。我遇到过一块板子,因为走线不等长,DQS 门控训练总是失败,最后发现是 PCB 上的一根过孔打歪了。
  • 读写延迟训练 (WL/RL Training):确定 Write Latency 和 Read Latency。这个值跟频率、温度都有关。Exynos 的控制器会发送特定的训练序列,然后根据返回结果调整延迟。
  • 数据眼训练 (Data Eye Training):这是最耗时的步骤。PHY 会扫描每个 DQ 的采样点,找到眼图中心。我习惯把扫描步长设为 1/64 UI,精度够用,速度也快。
我的经验: 在量产测试中,我会把 PHY 训练的结果保存下来。如果某片芯片的训练结果跟 Golden Sample 偏差超过 10%,基本可以判定是 PCB 焊接问题。

4.3 ZQ 校准:阻抗匹配的艺术

ZQ 校准,就是调整 DDR 颗粒的输出驱动强度。Exynos 的 DDR PHY 内部有一个参考电阻(通常是 240Ω),通过比较外部 ZQ 电阻的阻值,来校准内部阻抗。

校准过程分两步:

  1. 长校准 (ZQCL):上电后必须做一次。耗时约 512 个时钟周期。校准完成后,驱动强度误差可以控制在 ±5% 以内。
  2. 短校准 (ZQCS):在运行过程中定期做。耗时约 64 个时钟周期。用来补偿温度和电压变化。

我曾经在高温老化测试中发现,ZQ 校准后的阻抗值会漂移。后来加了温度补偿算法,才把误码率降下来。嗯,这里要注意,ZQ 校准期间不能访问内存,否则会出问题。

避坑指南: 我曾经因为 ZQ 电阻的 PCB 走线太长,导致校准结果不准。建议 ZQ 电阻离 DDR 颗粒越近越好,走线长度控制在 5mm 以内。

4.4 Vref 训练:找到最佳判决电平

Vref 是 DDR 接收端的参考电压。Exynos 支持 Vref 的逐级微调。训练的目标是找到能让数据采样误码率最低的那个电压点。

具体做法是:

  • 控制器发送特定的数据模式(比如 PRBS 或 0xAA/0x55)。
  • PHY 在接收端改变 Vref 值,从 0.5*VDDQ 开始,上下扫描。
  • 记录每个 Vref 下的误码率,选择误码率最低的那个点。

我建议 Vref 的步长设为 10mV。太粗了找不到最佳点,太细了训练时间太长。DDR5 的 Vref 训练更复杂,分 VrefDQ 和 VrefCA,但原理是一样的。

4.5 读写平衡:消除数据通道的偏差

读写平衡,就是调整每个 DQ 通道的延迟,让它们对齐。Exynos 的 DDR PHY 支持 Per-Bit Deskew,也就是每个 bit 独立调整。

训练过程是这样的:

  1. 控制器发送一个已知的数据模式。
  2. PHY 逐个调整每个 DQ 的延迟,直到所有 DQ 的采样点对齐。
  3. 调整范围通常是 ±1 个时钟周期,步长 1/32 UI。

我遇到过一块板子,读写平衡训练总是报错。排查了半天,发现是某个 DQ 的 PCB 走线长了 200mil。调整了 PHY 的延迟补偿值后,问题解决。所以说,PCB 设计阶段就要考虑等长,别指望 PHY 能帮你兜底。

4.6 训练流程总结

整个初始化流程,我习惯按这个顺序走:

步骤 内容 耗时(参考)
1 上电与复位 ~1ms
2 ZQ 长校准 ~512 时钟周期
3 DQS 门控训练 ~10us
4 读写延迟训练 ~5us
5 Vref 训练 ~20us
6 数据眼训练 ~100us
7 读写平衡 ~10us

总耗时大概在 150us 左右。如果某个步骤失败,Exynos 的控制器会重试。重试 3 次还不行,就报 Training Fail。我建议你在调试阶段把每个步骤的日志都打出来,方便定位问题。

最后说一句: 内存初始化不是一锤子买卖。温度变了、电压变了,训练结果也会变。所以量产设备里,我通常会保留一个后台任务,定期做 ZQ 短校准和 Vref 微调。这样才能保证长期运行的稳定性。

好了,这一章就到这里。下一章咱们聊聊 Exynos 的 QoS 机制,怎么给不同 IP 分配带宽,保证实时性。

专注资料整理