DDR 问题排查手册
文件标识:RK-PC-YF-041
发布版本:V1.0.1
日期:2021-02-25
文件密级:□绝密 □秘密 □内部资料 ■公开
免责声明
本文档按“现状”提供,瑞芯微电子股份有限公司(“本公司”,下同)不对本文档的任何陈述、信息和内容的准确性、可靠性、完整性、适销性、特定目的性和非侵权性提供任何明示或暗示的声明或保证。本文档仅作为使用指导的参考。
由于产品版本升级或其他原因,本文档将可能在未经任何通知的情况下,不定期进行更新或修改。
商标声明
“Rockchip”、“瑞芯微”、“瑞芯”均为本公司的注册商标,归本公司所有。
本文档可能提及的其他所有注册商标或商标,由其各自拥有者所有。
版权所有 © 2021 瑞芯微电子股份有限公司
超越合理使用范畴,非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
瑞芯微电子股份有限公司
Rockchip Electronics Co., Ltd.
地址: 福建省福州市铜盘路软件园A区18号
客户服务电话: +86-4007-700-590
客户服务传真: +86-591-83951833
客户服务邮箱: fae@rock-chips.com
前言
概述
提供 RK 平台 DDR 问题排查的一些方法和手段
产品版本
| 芯片名称 | 内核版本 |
|---|---|
| 所有芯片 | 所有内核版本 |
读者对象
本文档(本指南)主要适用于以下工程师:
技术支持工程师
软件开发工程师
修订记录
| 版本号 | 作者 | 修改日期 | 修改说明 |
|---|---|---|---|
| V1.0.0 | 汤云平 | 2019-12-01 | 初始版本 |
| V1.0.1 | 黄莹 | 2021-02-25 | 修改格式,更改文件名 |
目录
[TOC]
怎么确认是不是 DDR 问题
- 查看串口 log
- 如果串口 log 是在 loader 中的 DDR 初始化部分报错的话一定是 DDR 问题。
- 查看 loader 中 DDR 初始化部分 log 中的 DDR 容量行列 bank 及颗粒类型位宽信息是否正确。如果信息错误可能引起 DDR 问题。
- 如果串口 log 是系统中的 panic log 的话,可以多尝试几次看多次 panic 的地址是否一致,如果一致的话基本不可能是 DDR 问题,如果不一致的话有可能是 DDR 问题,也可能是电源问题。
- 看显示是否正常。如果显示异常是 DDR 问题的概率比较大。
- 做排查试验:
- arm gpu 降频,定频适当抬压,如果有效果的话就不是 DDR 问题。基本上能确认是电源问题。
- 关闭 DDR 变频功能,有效果则 DDR 变频导致的问题概率比较大。
- 降低 DDR 频率到稳妥频率(如 200M),如果有效果那很大概率是 DDR 信号质量有问题。
引起 DDR 问题的几个主要原因
- 电源问题:
- layout 上电容不够,电容摆放位置离芯片太远,电容分布不合理
- 电源 feedback 回路没按要求从末端引回到 PMU/DC-DC 端
- 敷铜有没有按照 RK 的 layout 规则处理导致电源路径太窄
- LQFP 封装的芯片正下方的 GND 需要堆锡保证良好接地,否则会影响芯片内部电源质量以及散热。
- 信号质量问题
- 不等长的走线。RK 大部分平台是不带各种 eye training 的, 不等长的走线会直接牺牲 DDR 的 setup/hold time。
- 过窄的线间距。过窄的线间距将会导致严重的串扰问题。
- T 型拓扑结构分支不等长。不等长的分支会恶化信号边沿,使边沿非单调。
- 信号参考层回路上的不完整。在敷铜时,间隙设置过大导致过孔直接隔断参考层,会导致信号质量下降引起兼容性问题。
- 颗粒问题
- 白牌颗粒,由于没经过测试甚至一些可能是原厂测试淘汰下来的颗粒,良率上无法保证。
- 一些特殊渠道的颗粒,可能存在驱动强度偏弱等问题。
- hynix 4Gb C die DDR3,如 H5TQ4G63CFR ,kernel 3.10 早期代码需要打补丁才能用。(后期修复了,判断标准是:只要进入 kernel 能正常就是 fix 过的,否则就需要补丁)。
解决 DDR 问题的一些手段
解决 DDR 问题总的办法就是找规律,尝试是否能找到死机的规律,如都在某个频率下死机,休眠唤醒死机的是否是和休眠时间多久有关等。尝试各种方法如定频,尝试不同频率,抬压,改驱动强度等逐个排查可能性缩小问题范围。
-
对于在 DDR 初始化中报错的问题
- 如果有"rd addr 0x... = 0x..."的报错基本上是焊接问题。焊接问题可以用“Rockchip 平台 DDR 测试工具”直接找到问题点。
- 如果报”16bit error!!!“,”W FF != R“的话表明 DDR 基本的读写都是错误的。这种情况焊接问题概率比较大。
- 打印"unknow device"说明颗粒基本的读写都不对,无法探测到 dram 类型。此时应该检查焊接问题。
- 对于个别容量不是 2 的 n 次幂的颗粒,如 768MB,1.5GB,3GB 等特殊颗粒有些版本的代码可能没做好兼容工作,可以更新到最新 loader,如果还有异常的话可以联系 DDR 相关工程师分析。
- 对于 DDR loader 中报错的问题,大部分会是焊接问题,可以尝试使用 ddr 测试工具焊接专项选择对应容量的测试项测试分析。
-
查看 loader 中 DDR 初始化部分 log 中的 DDR 容量行列 bank 及颗粒类型位宽信息是否正确。如果信息错误可能引起 DDR 问题。
如下图第一行为 DDR 版本号,第 3 行 DDR 频率,第 4 行 DDR 类型,第五行从左到右分别为系统的位宽数,列数,bank 数,行数,片选数,颗粒的位宽数和总容量。第 7 行“OUT"打印出来后表面 DDR 初始化成功并退出,再下面就是 usbplug 或者 miniloader 打印的 log。这中间 Die Bus-Width 比实际的大不会有问题,但是比实际的小会引起死机。

-
看显示是否正常。
当系统死机时虽然 cpu 停下来了,但是 vop 依然会重复着从 DDR 中取数据并显示在屏幕上。所以死机时可以直接观察显示的情况来初步判断 DDR 这时候的状态。
- 如果显示正常的话,说明这时候 DDR 的是能够正常访问的, 但是并不能说明死机和 DDR 无关。
- 如果显示异常。
- 如下图,我们称为“花屏”,有可能是 DDR 变频的过程中死机了导致 DDR 处于不可访问状态,这时候可以定频试试。或者可能是电源问题导致 DDR 控制器逻辑异常。

- 如下图,我们称为“重影”,之前遇到类似的情况是由于板子参考层不完整,导致 DDR3 异常。可尝试提高 VCC_DDR 电压到 1.6V 或者将颗粒的 dll bypass 掉解决。

- 如下图,我们称为“花屏”,有可能是 DDR 变频的过程中死机了导致 DDR 处于不可访问状态,这时候可以定频试试。或者可能是电源问题导致 DDR 控制器逻辑异常。
-
排查是否是电源问题
- 固定 cpu/gpu 到一个较低的频率,适当提高 arm/logic 电压看看是否有改善。有改善的话可能是电源问题。
- 审核 layout 看是否电源上存在问题。
- 测量电源纹波是否存在问题。
-
排查是否信号质量问题
- 降低 DDR 频率看看是否有明显改善,有改善的话很可能就是信号质量问题。
- 让硬件同事审核 layout 和 gerber 文件,检查走线是否合理,参考层是否完整。
- 适当加强减弱驱强度/odt 强度,看是否有改善。
- 改变 RZQ 的阻值看看是否有改善。遇到过个别 220ball 的 lpddr3 需要将 RZQ 改小或者去掉才能够恢复正常。
-
对于白牌颗粒
对于白牌颗粒,如果排查过电源,信号质量等都没问题的情况下只能怀疑可能是存储单元有问题,可以尝试现有遇到过的白牌颗粒的处理方法。
- 尝试关闭 pd_idle,sr_idle 看看是否有效果。
- 对于一些死机时屏幕有“重影”的颗粒可以尝试 bypass DRAM DLL 看是否有效果。
- 一些存储单元有问题的颗粒可以通过 DDR 测试工具测试出来, 目前遇到的比较多的是 DDR 测试工具 March 专项能测出来的概率比较大。 需要注意的是 DDR 测试工具仅仅是作为一个辅助工具,测试工具测试 pass 并不代表颗粒或者板子稳定性一定没问题。