1、如何看懂 DDR 打印信息
DDR 打印信息包括 loader 中的打印和
kernel 中的打印,loader 中打印的解析如下:
DDR
version 1.05 20170712// DDR 初始化代码的版本信息,用于核对版本。从这行开始,已经进入 DDR初始化代码
In
SRX // 有SRX,说明是热重启;没有SRX,说明是冷开机。有的
芯片没加这个功能,一直都是没有SRX的
Channel a: DDR3 400MHz // 下面都是DDR容量的详细信息,具体解析可以看"如何查看DDR的容量"章节
Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Die Bus-Width=16 Size=1024MB
Channel b: DDR3 400MHz
Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Die Bus-Width=16 Size=1024MB
memory OK // DDR自测的结果,第一个Memroy OK是Channel a的自测结果
Memory OK // 是Channel b的自测结果。有报错,说明焊接有问题;没报错,说明当前自测没问题,整个 DDR是否能稳定工作,还得看后续阶段的运行结果。
OUT // 这行打印之后,就退出了DDR初始化代码
如下是 kernel 3.0 和 kernel 3.10 中打印的 DDR 信息:
[ 0.528564] DDR DEBUG: version 1.00 20150126 //版本信息
[ 0.528690] DDR DEBUG: Channel a: //DDR容量详细信息
[ 0.528701] DDR DEBUG: DDR3
device
[ 0.528716] DDR DEBUG: Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Total
Capability=1024MB
[ 0.528727] DDR DEBUG: Channel b:
[ 0.528736] DDR DEBUG: DDR3 Device
[ 0.528750] DDR DEBUG: Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Total
Capability=1024MB
//后面还有其他DDR打印信息,可以不用管,是写DDR驱动人员用的
//DDR DEBUG的字样打印结束,就是kernel中DDR初始化完成了
kernel 3.10 还会有如下打印,是 DDR 变频
模块的输出信息
[ 1.473637] ddrfreq: verion 1.2 20140526 //DDR变频模块版本
[ 1.473653] ddrfreq: normal 396MHz
video_1080p 240MHz video_4k 396MHz
dualview 396MHz idle 0MHz suspend 200MHz reboot 396MHz //DDR各个场景对应的频率,是从 dts表格中读取出来的
[ 1.473661] ddrfreq: auto-freq=1 //负载变频功能是否开启,1表示开启,0表示关闭
[ 1.473667] ddrfreq: auto-freq-table[0] 240MHz //负载变频的频率表格
[ 1.473673] ddrfreq: auto-freq-table[1] 324MHz
[ 1.473678] ddrfreq: auto-freq-table[2] 396MHz
[ 1.473683] ddrfreq: auto-freq-table[3] 528MHz
//如果在这段打印过程中系统卡死了,很可能是DDR变频有问题
2、如何将我们给的 DDR bin 合成成完整可用的 loader
1. 将 DDR bin 放在 U-Boot 工程的 rk\rkbin\bin\对应目录下
2. 删除原有的 DDR bin 文件
3. 将新的 DDR bin 改名为删除掉的名字
4. 编译 U-Boot(详见《Rockchip-Developer-
GUIde-
Uboot-nextdev.pdf》),就会生成对应的loader 文件
==5. 根据 DDR bin 打印的
串口信息,确认 loader 已经更新正确==
各平台 DDR bin 对应目录整理如下:
芯片平台 | 路径 |
RK1808 | rk\rkbin\bin\rk1x\rk1808_ddr_XXXMHz_vX.XX.bin |
RK3036 | rk\rkbin\bin\rk30\rk3036_ddr3_XXXMHz_vX.XX.bin |
RK3126、RK3126B、RK3126C | rk\rkbin\bin\rk31\rk3126_ddr3_300MHz_vX.XX.bin |
RK3128 | rk\rkbin\bin\rk31\rk3128_ddr_300MHz_vX.XX.bin |
RK3288 | rk\rkbin\bin\rk32\rk3288_ddr_400MHz_vX.XX.bin |
RK322X | rk\rkbin\bin\rk32\rk322x_ddr_300MHz_vX.XX.bin |
RK3308 | rk\rkbin\bin\rk33\rk3308_ddr_XXXMHz_UARTX_mX_vX.XX.bin |
PX30 | rk\rkbin\bin\rk33\px30_ddr_333MHz_vX.XX.bin |
RK3326 | rk\rkbin\bin\rk33\rk3326_ddr_333MHz_vX.XX.bin |
rk3368 | rk\rkbin\bin\rk33\rk3368_ddr_600MHz_vX.XX.bin |
RK322xh | rk\rkbin\bin\rk33\rk322xh_ddr_333MHz_vX.XX.bin |
RK3328 | rk\rkbin\bin\rk33\rk3328_ddr_333MHz_vX.XX.bin |
RK3399 | rk\rkbin\bin\rk33\rk3399 ddr XXXMHz vX.XX.bin |
Note 1:具体用哪个频率由 rk\rkbin\RKBOOT\RK3036_ECHOMINIALL.ini 或 RK3036MINIALL.ini 文件中指定。其中 RK3036_ECHOMINIALL.ini 是 ECHO 产品使用的,其他产品都使用RK3036MINIALL.ini。至于哪个是 ECHO 产品,请联系产品部的人。
Note 2:具体用哪个频率由 rk\rkbin\RKBOOT\RK3399MINIALL.ini 文件中指定
Note 3:不在这个表格中的芯片,就是不支持从 U-Boot 中生成 loader。
3、如何修改 U-Boot 中的 DDR 频率
目前这个功能只有 RK322x 支持,修改方法是,修改 kernel-3.10 代码中的arch/
arm/boot/dts/rk322x.dtsi
dram: dram {
compatible = "rockchip,rk322x-dram";
status = "okay";
dram_freq = <786000000>;
rockchip,dram_timing = <&dram_timing>;
};
修改其中的,dram_freq 就可以了,这里单位是 Hz,频率可以随便选择。
U-Boot 会去解析这个 dts,然后读取这个频率,变频到对应频率。
更多详细内容请下载附件查看