Skip to main content

DDR 问题排查手册

:::info 文档信息

文档标识:RK-PC-YF-041 · 发布版本:V1.0.1 · 发布日期:2021-02-25 · 页数:7 · 语言:中文

原始文档:Rockchip_Trouble_Shooting_DDR_CN.pdf

:::

章节大纲​

  • DDR 问题排查手册(P1)
    • 怎么确认是不是 DDR 问题(P4)
    • 引起 DDR 问题的几个主要原因(P4)
    • 解决 DDR 问题的一些手段(P4)

在线预览​

若预览无法显示,请直接下载 PDF 后用本地阅读器打开。


1. 怎么确认是不是 DDR 问题​

  1. 查看串口 log

  2. 如果串口 log 是在 loader 中的 DDR 初始化部分报错的话一定是 DDR 问题。2. 查看 loader 中 DDR 初始化部分 log 中的 DDR 容量行列 bank 及颗粒类型位宽信息是否正确。如果信息错误可能引起 DDR 问题。3. 如果串口 log 是系统中的 panic log 的话,可以多尝试几次看多次 panic 的地址是否一致,如果一致的话基本不可能是 DDR 问题,如果不一致的话有可能是 DDR 问题,也可能是电源问题。2. 看显示是否正常。如果显示异常是 DDR 问题的概率比较大。

  3. 做排查试验:

  4. arm gpu 降频,定频适当抬压,如果有效果的话就不是 DDR 问题。基本上能确认是电源问题。2. 关闭 DDR 变频功能,有效果则 DDR 变频导致的问题概率比较大。3. 降低 DDR 频率到稳妥频率(如 200M),如果有效果那很大概率是 DDR 信号质量有问题。

2. 引起 DDR 问题的几个主要原因​

  1. 电源问题:

  2. layout 上电容不够,电容摆放位置离芯片太远,电容分布不合理2. 电源 feedback 回路没按要求从末端引回到 PMU/DC-DC 端3. 敷铜有没有按照 RK 的 layout 规则处理导致电源路径太窄4. LQFP 封装的芯片正下方的 GND 需要堆锡保证良好接地,否则会影响芯片内部电源质量以及散热。2. 信号质量问题

  3. 不等长的走线。RK 大部分平台是不带各种 eye training 的,不等长的走线会直接牺牲 DDR 的setup/hold time。2. 过窄的线间距。过窄的线间距将会导致严重的串扰问题。3. T 型拓扑结构分支不等长。不等长的分支会恶化信号边沿,使边沿非单调。4. 信号参考层回路上的不完整。在敷铜时,间隙设置过大导致过孔直接隔断参考层,会导致信号质量下降引起兼容性问题。3. 颗粒问题

  4. 白牌颗粒,由于没经过测试甚至一些可能是原厂测试淘汰下来的颗粒,良率上无法保证。2. 一些特殊渠道的颗粒,可能存在驱动强度偏弱等问题。3. hynix 4Gb C die DDR3,如 H5TQ4G63CFR ,kernel 3.10 早期代码需要打补丁才能用。(后期修复了,判断标准是:只要进入 kernel 能正常就是 fix 过的,否则就需要补丁)。

3. 解决 DDR 问题的一些手段​

解决 DDR 问题总的办法就是找规律,尝试是否能找到死机的规律,如都在某个频率下死机,休眠唤醒死机的是否是和休眠时间多久有关等。尝试各种方法如定频,尝试不同频率,抬压,改驱动强度等逐个排查可能性缩小问题范围。

  1. 对于在 DDR 初始化中报错的问题

  2. 如果有"rd addr 0x... = 0x..."的报错基本上是焊接问题。焊接问题可以用“Rockchip 平台 DDR 测试工具”直接找到问题点。2. 如果报”16bit error!!!“,”W FF != R“的话表明 DDR 基本的读写都是错误的。这种情况焊接问题概率比较大。3. 打印"unknow device"说明颗粒基本的读写都不对,无法探测到 dram 类型。此时应该检查焊接问题。4. 对于个别容量不是 2 的 n 次幂的颗粒,如 768MB,1.5GB,3GB 等特殊颗粒有些版本的代码可能没做好兼容工作,可以更新到最新 loader,如果还有异常的话可以联系 DDR 相关工程师分析。5. 对于 DDR loader 中报错的问题,大部分会是焊接问题,可以尝试使用 ddr 测试工具焊接专项选择对应容量的测试项测试分析。2. 查看 loader 中 DDR 初始化部分 log 中的 DDR 容量行列 bank 及颗粒类型位宽信息是否正确。如果信息错误可能引起 DDR 问题。

如下图第一行为 DDR 版本号,第 3 行 DDR 频率,第 4 行 DDR 类型,第五行从左到右分别为系统的位宽数,列数,bank 数,行数,片选数,颗粒的位宽数和总容量。第 7 行“OUT"打印出来后表面DDR 初始化成功并退出,再下面就是 usbplug 或者 miniloader 打印的 log。这中间 Die Bus-Width 比实际的大不会有问题,但是比实际的小会引起死机。

  1. 看显示是否正常。

当系统死机时虽然 cpu 停下来了,但是 vop 依然会重复着从 DDR 中取数据并显示在屏幕上。所以死机时可以直接观察显示的情况来初步判断 DDR 这时候的状态。

  1. 如果显示正常的话,说明这时候 DDR 的是能够正常访问的,但是并不能说明死机和 DDR 无关。

  2. 如果显示异常。

如下图,我们称为“花屏”,有可能是 DDR 变频的过程中死机了导致 DDR 处于不可访问状态,这时候可以定频试试。或者可能是电源问题导致 DDR 控制器逻辑异常。如下图,我们称为“重影”,之前遇到类似的情况是由于板子参考层不完整,导致 DDR3异常。可尝试提高 VCC_DDR 电压到 1.6V 或者将颗粒的 dll bypass 掉解决。

  1. 排查是否是电源问题

  2. 固定 cpu/gpu 到一个较低的频率,适当提高 arm/logic 电压看看是否有改善。有改善的话可能是电源问题。2. 审核 layout 看是否电源上存在问题。3. 测量电源纹波是否存在问题。5. 排查是否信号质量问题

  3. 降低 DDR 频率看看是否有明显改善,有改善的话很可能就是信号质量问题。2. 让硬件同事审核 layout 和 gerber 文件,检查走线是否合理,参考层是否完整。3. 适当加强减弱驱强度/odt 强度,看是否有改善。4. 改变 RZQ 的阻值看看是否有改善。遇到过个别 220ball 的 lpddr3 需要将 RZQ 改小或者去掉才能够恢复正常。6. 对于白牌颗粒

对于白牌颗粒,如果排查过电源,信号质量等都没问题的情况下只能怀疑可能是存储单元有问题,可以尝试现有遇到过的白牌颗粒的处理方法。

  1. 尝试关闭 pd_idle,sr_idle 看看是否有效果。2. 对于一些死机时屏幕有“重影”的颗粒可以尝试 bypass DRAM DLL 看是否有效果。3. 一些存储单元有问题的颗粒可以通过 DDR 测试工具测试出来,目前遇到的比较多的是 DDR测试工具 March 专项能测出来的概率比较大。需要注意的是 DDR 测试工具仅仅是作为一个辅助工具,测试工具测试 pass 并不代表颗粒或者板子稳定性一定没问题。