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 模拟,结果时序不达标,颗粒死活不响应。
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,精度够用,速度也快。
4.3 ZQ 校准:阻抗匹配的艺术
ZQ 校准,就是调整 DDR 颗粒的输出驱动强度。Exynos 的 DDR PHY 内部有一个参考电阻(通常是 240Ω),通过比较外部 ZQ 电阻的阻值,来校准内部阻抗。
校准过程分两步:
- 长校准 (ZQCL):上电后必须做一次。耗时约 512 个时钟周期。校准完成后,驱动强度误差可以控制在 ±5% 以内。
- 短校准 (ZQCS):在运行过程中定期做。耗时约 64 个时钟周期。用来补偿温度和电压变化。
我曾经在高温老化测试中发现,ZQ 校准后的阻抗值会漂移。后来加了温度补偿算法,才把误码率降下来。嗯,这里要注意,ZQ 校准期间不能访问内存,否则会出问题。
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 独立调整。
训练过程是这样的:
- 控制器发送一个已知的数据模式。
- PHY 逐个调整每个 DQ 的延迟,直到所有 DQ 的采样点对齐。
- 调整范围通常是 ±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。我建议你在调试阶段把每个步骤的日志都打出来,方便定位问题。
好了,这一章就到这里。下一章咱们聊聊 Exynos 的 QoS 机制,怎么给不同 IP 分配带宽,保证实时性。