DDR 相关问题排查指南


一般DDR相关问题,主要的表现为死机,重启,通常需要配合串口打印一起进行分析,这里列举常见的DDR 问题的排查思路。

    • 怎么确认是不是DDR问题?

1.   查看串口log

    • 如果串口log是在loader中的DDR初始化部分报错的话一定是DDR问题。
    • 查看loaderDDR初始化部分log中的DDR容量行列bank及颗粒类型位宽信息是否正确,如果信息错误可能引起DDR问题
    • 如果串口log是kernel 部分系统中的panic log的话,可以多尝试几次看多次panic的地址是否一致,如果不一致的话有可能是DDR问题,也可能是电源问题。

2.  看显示是否正常,如果显示异常是DDR问题的概率比较大。 

3.   做排查试验: 

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


    • 引起DDR问题的几个主要原因

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

2.  信号质量问题

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

3.   颗粒问题

    • 白牌颗粒,由于没经过测试甚至一些可能是原厂测试淘汰下来的颗粒良率上无法保证。
    •  一些特殊渠道的颗粒,可能存在驱动强度偏弱等问题。
    •  hynix 个别型号LPDDR3颗粒存在bug,不能够enable write odt
    •  hynix 4Gb C die DDR3,如H5TQ4G63CFR 在早期平台上会导致颗粒位宽识别异常,需要打补丁解决。

    • 解决DDR问题的一些方法:

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

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

    • 如果有"rd addr 0x... = 0x..."的报错基本上是焊接问题。在DDR初始化完成之后会往将所有地址线扫描一遍,将物理地址写入对应的地址中再读出比较,如果不一致将结果打印出来。例如:log"rd addr0x40000000 = 0x0“ 表示原来地址0x40000000 写入的值是”0x40000000“但是读出来的却是”0“。这表明cpu看到的地址bit30 可能短路到地。而这个bit30 具体对应到DDR地址线上的哪个bit可以查看我们TRMinterconnect那一章 ddrconf的配置表查询到。
    •  如果报”16bit error!!!“”W FF != R“的话表明DDR基本的读写都是错误的。这种情况焊接问题概率比较大。
    •  打印"unknow device"说明颗粒基本的读写都不对,无法探测到dram类型。此时应该检查焊接问题。
    •  对于个别容量不是2n次幂的颗粒,如768MB,1.5GB,3GB 等特殊颗粒有些版本的代码可能没做好兼容工作,如果有异常的话可以联系DDR相关工程师分析。
    • 兼容性问题,更新到相应版本的loader解决该问题。
    • 对于DDR loader中报错的问题,大部分会是焊接问题,可以尝试使用ddr测试工具焊接专项选择对应容量的测试项测试分析

2.   DDR容量行列bank及颗粒类型位宽信息错误, 特别是Die Bus-Width比实际的小会引起死机

3.   死机问题分析:

    • 若死机时显示不正常,花屏情况可能是DDR变频的过程中死机了导致DDR处于不可访问状态,这时候可以定频试试。或者可能是电源问题导致DDR控制器逻辑异常。
    •   重影的话,之前遇到类似的情况是由于板子参考层不完整触发的Elpidamirakingston DDR3死机问题。可尝试提高VCC_DDR电压到1.6V或者将颗粒的dll bypass掉解决。
    • 若显示正常,只能说明DDR 在vop读取内容是可以工作,不能完全排除DDR问题。

4.  排查是否是电源问题电源部分可以按照如下三个思路进行:固定cpu/gpu到一个较低的频率,适当提高arm/logic电压看看是否有改善。有改善的话可能是电源问题;审核layout看是否电源上存在问题; 测量电源纹波是否存在问题。

5. 排查是否是信号质量问题 

    • 降低DDR频率看看是否有明显改善,有改善的话很可能就是信号质量问题。
    •  让硬件同事审核layoutgerber文件,检查走线是否合理,参考层是否完整。
    •  适当加强减弱驱强度/odt强度 看是否有改善。
    •  改变RZQ的阻值看看是否有改善。遇到过个别samsung 220balllpddr3 需要将RZQ改小或者去掉驱动强度才能够恢复正常。
    •  可通过修改各个信号线的de-skew来前后移动采样点,看看信号margin多大。

6. 白牌颗粒的处理:

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

以上是关于在rk平台的一些DDR的问题总结,在其他平台也有参考意义。

 

版权所有丨如未注明,均为原创,转载请注明转自:https://whonee.net/ddr-error-debug-guide.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注