DDR频率配置简要说明
1. 适用目的
本文档用于指导客户完成两件事:
1. 在 U-Boot 中配置 DDR 频率;
2. 在系统启动后确认 DDR 频率是否真正生效。
本文档尽量不依赖具体芯片平台,适合作为客户侧通用操作指引。
2. 需要关注的配置项
在 U-Boot 的 DDR 配置中,通常需要关注以下三个宏:
• CONFIG_SYS_MPLL_FREQ:DDR 所使用的 PLL 源频率;
• CONFIG_SYS_MEM_FREQ:系统期望的 DDR 工作频率;
• CONFIG_:具体 DDR 颗粒参数表使用的频率,如CONFIG_X2600M_DDR2_MEM_FREQ(以下均以此示例参数进行介绍)
• 注意:CONFIG_
对于单颗 DDR 的项目,建议按以下原则配置:
• CONFIG_SYS_MEM_FREQ 与 CONFIG_X2600M_DDR2_MEM_FREQ 保持一致;
• CONFIG_SYS_MPLL_FREQ 应为目标 DDR 频率的整数倍;
• 同时还需满足平台代码允许的分频范围(1-16)。
可简单理解为:
示例:
此时:
这是常见的合法配置方式。
3. 在哪里修改 U-Boot 配置
3.1 板级配置头文件
通常位于:
这里一般配置:
• CONFIG_SYS_MPLL_FREQ
• CONFIG_SYS_MEM_FREQ
示例:
3.2 DDR 颗粒配置头文件
通常位于:
这里一般配置具体颗粒频率,例如:
建议将其与 CONFIG_SYS_MEM_FREQ 保持一致。
4. 推荐操作步骤
步骤 1:确定目标 DDR 频率
例如希望 DDR 运行在 320MHz。
步骤 2:修改板级头文件
在 u-boot/include/configs/ 中设置:
步骤 3:修改 DDR 颗粒头文件
在 u-boot/include/configs/ 中设置,对于没有定义颗粒频率的,只需修改CONFIG_SYS_MEM_FREQ即可
步骤 4:清理并重新编译 U-Boot
修改 DDR 配置后,建议清理 U-Boot 中间产物再重新编译,避免旧参数残留导致配置未生效。
5. 如何确认 DDR 频率是否生效
仅修改头文件并不代表 DDR 频率一定已经生效,最终应以运行时结果为准。
方法 1:查看启动串口日志
很多平台在启动时会打印时钟信息,例如:
其中:
• ddr = 320000000
表示当前 DDR 时钟频率约为 320MHz。
方法 2:通过 clk 调试接口确认
先挂载 debugfs:
再读取 DDR 时钟:
示例输出:
表示当前 DDR 实际运行频率为 320MHz。
6. 如何判断是否真正成功
如果以下两项一致:
1. 串口打印中的 ddr = xxx
2. cat /mnt/clk/gate_ddr/clk_rate 的输出值
则可认为当前 DDR 频率已经真正生效。
例如:
• 串口打印:ddr = 320000000
• clk_rate 输出:320000000
则说明 DDR 当前实际工作在 320MHz。
7. FAQ
Q1:最终看哪个频率才算生效?
答: 以运行时结果为准,即:
• 串口日志中的 DDR 频率打印;
• clk_rate 接口读出的 DDR 时钟值。
Q2:为什么改了头文件,运行结果还是旧值?
答: 常见原因有:
• U-Boot 中间产物未清理;
• DDR 参数文件未重新生成;
• CONFIG_SYS_MEM_FREQ 与 CONFIG_ 未保持一致;
• CONFIG_SYS_MPLL_FREQ 不是目标频率的整数倍。
Q3:客户配置 DDR 频率时最简单的原则是什么?
答: 直接按以下原则处理即可:
• 目标频率先确定;
• CONFIG_SYS_MEM_FREQ = 目标频率;
• CONFIG_;
• CONFIG_SYS_MPLL_FREQ = 目标频率 × 整数倍。
8. 常用命令汇总
挂载调试接口:
读取 DDR 时钟:
9. 结论
DDR 频率配置建议按以下方式处理:
• 在 u-boot/include/configs/ 中配置:
• CONFIG_SYS_MPLL_FREQ
• CONFIG_SYS_MEM_FREQ
• 在 u-boot/include/configs/ 中配置:
• CONFIG_
• 保证 CONFIG_SYS_MPLL_FREQ 是目标 DDR 频率的整数倍;
• 保证 CONFIG_SYS_MEM_FREQ 与颗粒配置频率一致;
• 启动后通过串口日志和 clk_rate 接口确认是否真正生效。
